From f81d1471df30a7a0c873ef90e07b75c2395a5d32 Mon Sep 17 00:00:00 2001 From: Sheridan Sunier Date: Wed, 8 Jan 2025 14:40:55 -0800 Subject: [PATCH] feat(mwpw-162835): i think I might be done rebasing this branch --- commitlint.config.js | 2 +- dist/app.css | 4 ++++ dist/main.js | 5 ++++- dist/main.min.js | 4 ++++ dist/main.source.js | 2 +- package.json | 9 +++++++++ .../src/js/components/Consonant/Container/Container.jsx | 1 - wdio.local.conf.js | 1 + 8 files changed, 24 insertions(+), 4 deletions(-) diff --git a/commitlint.config.js b/commitlint.config.js index eebc7230..898c423b 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -5,7 +5,7 @@ module.exports = { rules: { 'jira-ticket-in-scope': ({scope}) => { const pattern = /^MWPW-\d+$/; - const hasValidTicket = pattern.test(scope || ''); + const hasValidTicket = pattern.test(scope.toUpperCase() || ''); return [ hasValidTicket, 'Scope must contain JIRA ticket (e.g., feat(MWPW-123): message)', diff --git a/dist/app.css b/dist/app.css index 733017a9..919ea238 100644 --- a/dist/app.css +++ b/dist/app.css @@ -12,6 +12,7 @@ <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD <<<<<<< HEAD * Chimera UI Libraries - Build 0.23.28 (1/6/2025, 16:49:34) ======= @@ -162,6 +163,9 @@ ======= * Chimera UI Libraries - Build 0.23.28 (1/7/2025, 15:01:29) >>>>>>> 683a289 (MWPW-155425: confirming the build is up to date) +======= + * Chimera UI Libraries - Build 0.23.28 (1/8/2025, 14:41:08) +>>>>>>> bddc1de (feat(mwpw-162835): husky) * */ .no-font{font-size:0;line-height:0}.margin-auto{margin-left:auto;margin-right:auto}.no-margin{margin:0}.full-width{width:100%;max-width:100%}.position-absolute-0{top:0;bottom:0;left:0;right:0}.hide-all{display:none}.hide-overflow{height:0;overflow:hidden;visibility:hidden}.no-border-no-outline{border:0;outline:0}.focused:focus{outline:0}@media only screen and (min-width:1200px){.focused:focus{outline:2px solid #1492e6}}.focus-pseudo-element{position:relative}.focus-pseudo-element:focus:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;margin:auto;border:2px solid #1473e6;z-index:1}.focus-shadow-round{position:relative}.focus-shadow-round:focus:after{border-radius:18px;content:"";display:block;position:absolute;left:0;right:0;bottom:0;top:0;margin:-2px;transition:box-shadow .13s ease-out,margin .13s ease-out;box-shadow:0 0 0 2px #1492e6}.focus-underline:focus{box-shadow:0 2px 0 0 #1492e6}.card-hover:hover{box-shadow:0 3px 6px 0 rgba(0,0,0,.16);transition:box-shadow .3s ease-in-out}.card-hover-header [class*=-header]{position:relative}.card-hover-header [class*=-header]:after{position:absolute;content:"";top:0;bottom:0;left:0;right:0;margin:auto;z-index:0;background-color:rgba(0,0,0,.35);opacity:0;transition:opacity .3s ease-in-out}.card-hover-header:hover [class*=-header]:after{opacity:1}.video-button-styles{display:block;position:absolute;width:40px;height:40px;right:24px;bottom:16px;font-size:0;line-height:0;background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg data-name='40' xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'%3E%3Cg data-name='Ellipse 20182' fill='%231473e6' stroke='%23fff' stroke-width='2'%3E%3Ccircle cx='20' cy='20' r='20' stroke='none'/%3E%3Ccircle cx='20' cy='20' r='19' fill='none'/%3E%3C/g%3E%3Cpath data-name='Path 356676' d='M15 10.833v18.333l13.333-9.167z' fill='%23fff'/%3E%3C/svg%3E") no-repeat 0 0;background-size:cover;z-index:1;cursor:pointer;transform-origin:50% 50%;transition:transform .3s ease-in-out}.video-button-styles:active,.video-button-styles:hover{transform:scale(1.1);background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg data-name='40' xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'%3E%3Cg data-name='Ellipse 20182' fill='%230059c2' stroke='%23fff' stroke-width='2'%3E%3Ccircle cx='20' cy='20' r='20' stroke='none'/%3E%3Ccircle cx='20' cy='20' r='19' fill='none'/%3E%3C/g%3E%3Cpath data-name='Path 356676' d='M15 10.833v18.333l13.333-9.167z' fill='%23fff'/%3E%3C/svg%3E") no-repeat 0 0;transition:transform .3s ease-in-out}.video-button-styles:focus{transform:scale(1.1);transition:transform .3s ease-in-out;outline:2px solid #1492e6}.hide{display:none!important}@keyframes circle{0%{transform:rotate(0deg)}70%,to{transform:rotate(1turn)}}@keyframes fade-in-up{0%{opacity:0;transform:translate3d(0,100%,0)}to{opacity:1;transform:none}}@keyframes carousel-fade-button{0%{opacity:0}to{opacity:1}}.consonant-Wrapper button{border:0;outline:0;cursor:pointer}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-content,.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-content{background:transparent linear-gradient(180deg,transparent,hsla(0,0%,100%,.5) 15%,hsla(0,0%,100%,.8) 40%,#fff) 0 0 no-repeat padding-box}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.half-height .consonant-Card-header:after,.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.half-height .consonant-Card-header:after{background:transparent linear-gradient(180deg,hsla(0,0%,100%,.01) 35%,hsla(0,0%,100%,.75) 60%,hsla(0,0%,100%,.85)) 0 0 no-repeat}.consonant-u-themeLight .consonant-CardsGrid .consonant-FiltersInfo-results,.consonant-u-themeLight .consonant-CardsGrid .consonant-FiltersInfo-title{color:#2c2c2c}.consonant-u-themeLight .consonant-CardsGrid .consonant-LeftFilters{border-color:#e1e1e1;background-color:#fff}.consonant-u-themeLight .consonant-CardsGrid .consonant-LeftFilters-deskTitle{color:inherit}.consonant-u-themeLight .consonant-CardsGrid .consonant-LeftFilters .consonant-Search-inputTitle{color:#4b4b4b}.consonant-u-themeLight .consonant-CardsGrid .consonant-LeftFilters .consonant-Search-input{background-color:#f5f5f5;color:#2c2c2c}.consonant-u-themeLight .consonant-CardsGrid .consonant-LeftFilters .consonant-ChosenFilter{color:#4b4b4b}.consonant-u-themeLight .consonant-CardsGrid .consonant-LeftFilters .consonant-LeftFilter-itemsItemName,.consonant-u-themeLight .consonant-CardsGrid .consonant-LeftFilters .consonant-LeftFilter-link{color:#2c2c2c}.consonant-u-themeLight .consonant-CardsGrid .consonant-LeftFilters .consonant-LeftFilter.is-opened .consonant-LeftFilter-link{color:#4b4b4b}.consonant-u-themeLight .consonant-CardsGrid .consonant-LeftFilters .consonant-LeftFilter-itemsItem:hover{background-color:#fff}.consonant-u-themeLight .consonant-CardsGrid .consonant-Pagination-btn,.consonant-u-themeLight .consonant-CardsGrid .consonant-Pagination-itemBtn,.consonant-u-themeLight .consonant-CardsGrid .consonant-Pagination-summary{color:#2c2c2c}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.three-fourths{border-color:#e1e1e1;background-color:#fff}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-inner{background-color:#fff}@media only screen and (min-width:1200px){.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-inner:focus:after{border-color:#0d66d0}}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-header{background-color:#e1e1e1}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-label{color:#4b4b4b}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-title{color:#2c2c2c}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-banner{color:#fff;background-color:#0d66d0}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-badge{color:#6e6e6e;border-color:#8e8e8e;background-color:#fff}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.one-half{border-color:#e1e1e1;background-color:#fff}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-inner{background-color:#fff}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-header{background-color:#e1e1e1}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-label{color:#4b4b4b}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-title{color:#2c2c2c}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-text{color:#6e6e6e}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-banner{color:#fff;background-color:#0d66d0}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-badge{color:#6e6e6e;border-color:#8e8e8e;background-color:#fff}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.text-card{border-color:#e1e1e1;background-color:#fff}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-header,.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-inner{background-color:#fff}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-label{color:#4b4b4b}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-title{color:#2c2c2c}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-text{color:#6e6e6e}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-banner{color:#fff;background-color:#0d66d0}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-badge{color:#6e6e6e;border-color:#8e8e8e;background-color:#fff}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.product{border-color:#e1e1e1;background-color:#fff}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.product .consonant-Card-inner{background-color:#fff}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.product .consonant-Card-title{color:#2c2c2c}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.product .consonant-Card-text{color:#6e6e6e}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.icon-card{border-color:#e1e1e1;background-color:#fff}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.icon-card .consonant-Card-header{filter:contrast(.5) saturate(1.5)}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.icon-card .consonant-Card-label,.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.icon-card .consonant-Card-title{color:#2c2c2c}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.double-wide{border-color:#e1e1e1;background-color:#fff}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-inner{background-color:#fff}@media only screen and (min-width:1200px){.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-inner:focus:after{border-color:#0d66d0}}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-title{color:#2c2c2c}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-text{color:#6e6e6e}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-label{color:#4b4b4b}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.full-card{border-color:#b3b3b3;background-color:#fff}@media only screen and (min-width:1200px){.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-inner:focus:after{border-color:#0d66d0}}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-inner:before{border-color:#fff;box-shadow:1px 1px 0 0 #fff}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-header{background-color:#e1e1e1}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-banner{color:#fff;background-color:#0d66d0}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-label{color:#fff}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-title{color:#cacaca}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-badge{color:#6e6e6e;border-color:#8e8e8e;background-color:#fff}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.half-height .consonant-Card-label,.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.half-height .consonant-Card-title{color:#fff}.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.half-height .consonant-Card-banner{color:#fff;background-color:#0d66d0}@media only screen and (min-width:1200px){.consonant-u-themeLight .consonant-CardsGrid .consonant-Card.half-height .consonant-Card:focus:after{border-color:#0d66d0}}.consonant-u-themeLight .consonant-CardsGrid .consonant-CardFooter--divider:last-child{border-color:#e1e1e1}.consonant-u-themeLight .consonant-BookmarkInfobit.is-active .consonant-BookmarkInfobit-ico{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 18'%3E%3Cpath stroke-width='1.5' stroke='%236e6e6e' fill='%236e6e6e' d='M13.6.6c-1.7.1-3.3 1-4.1 2.5C8.6 1.6 7.1.7 5.5.6c-2.8 0-5 2.2-5 5 0 4.7 9 10.8 9 10.8s9-6 9-10.8c0-2.7-2.1-5-4.9-5z'/%3E%3C/svg%3E")}.consonant-u-themeLight .consonant-BookmarkInfobit-ico{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 18'%3E%3Cpath stroke-width='1.5' fill='%23fff' stroke='%236e6e6e' d='M13.6.6c-1.7.1-3.3 1-4.1 2.5C8.6 1.6 7.1.7 5.5.6c-2.8 0-5 2.2-5 5 0 4.7 9 10.8 9 10.8s9-6 9-10.8c0-2.7-2.1-5-4.9-5z'/%3E%3C/svg%3E")}@media only screen and (min-width:1200px){.consonant-u-themeLight .consonant-BookmarkInfobit:focus{outline-color:#0d66d0}}.consonant-u-themeLight .consonant-Tooltip{color:#fff;background-color:#6e6e6e}.consonant-u-themeLight .consonant-Tooltip:after{background-color:#6e6e6e}.consonant-u-themeLight .consonant-BtnInfobit{border-color:#4b4b4b;background-color:#fff}.consonant-u-themeLight .consonant-BtnInfobit:not(.consonant-u-themeLight .consonant-BtnInfobit--cta) span{color:#4b4b4b}.consonant-u-themeLight .consonant-BtnInfobit:hover{border-color:#4b4b4b;background-color:#4b4b4b}.consonant-u-themeLight .consonant-BtnInfobit:hover:not(.consonant-u-themeLight .consonant-BtnInfobit--cta) span{color:#fff}.consonant-u-themeLight .consonant-BtnInfobit:active{border-color:#2c2c2c;background-color:#2c2c2c}.consonant-u-themeLight .consonant-BtnInfobit:active:not(.consonant-u-themeLight .consonant-BtnInfobit--cta) span{color:#fff}.consonant-u-themeLight .consonant-BtnInfobit:focus{outline-color:#0d66d0}.consonant-u-themeLight .consonant-BtnInfobit--cta{border-color:#1473e6;background-color:#1473e6}.consonant-u-themeLight .consonant-BtnInfobit--cta:hover{border-color:#0d66d0;background-color:#0d66d0}.consonant-u-themeLight .consonant-BtnInfobit--cta:active{border-color:#095aba;background-color:#095aba}.consonant-u-themeLight .consonant-DateIntervalInfobit,.consonant-u-themeLight .consonant-IconWithTextInfobit-text{color:#6e6e6e}.consonant-u-themeLight .consonant-LinkWithIcoInfobit:focus{outline-color:#0d66d0}.consonant-u-themeLight .consonant-LinkWithIcoInfobit span{color:#1473e6}.consonant-u-themeLight .consonant-LinkWithIcoInfobit:hover span{color:#0d66d0}.consonant-u-themeLight .consonant-LinkWithIcoInfobit:active span{color:#095aba}.consonant-u-themeLight .consonant-LinkInfobit{color:#1473e6}.consonant-u-themeLight .consonant-LinkInfobit:hover{color:#0d66d0}.consonant-u-themeLight .consonant-LinkInfobit:active{color:#095aba}.consonant-u-themeLight .consonant-LinkInfobit:focus{outline-color:#0d66d0}.consonant-u-themeLight .consonant-PriceInfobit-price{color:#2c2c2c}.consonant-u-themeLight .consonant-PriceInfobit-term{color:#8e8e8e}.consonant-u-themeLight .consonant-ProgressInfobit-text{color:#6e6e6e}.consonant-u-themeLight .consonant-ProgressInfobit-el{background-color:#fff;border-color:#cacaca}.consonant-u-themeLight .consonant-RatingInfobit-stars:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg id='Layer_1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 17 15'%3E%3Cstyle%3E.st0{fill:none}.st1{fill:%23cacaca}%3C/style%3E%3Cg id='Shape'%3E%3Cpath class='st0' d='M8.6.7c-.1 0-.3.1-.3.2L6.4 5.7l-5.2.2c-.2 0-.3.2-.3.4 0 .1 0 .2.1.2l4 3.2-1.4 5c0 .2.1.3.2.4h.1c.1 0 .1 0 .2-.1l4.3-2.8 4.3 2.8c.1.1.3.1.4-.1 0-.1.1-.2 0-.3l-1.4-5 4-3.2c.1-.1.2-.3 0-.4.3 0 .2-.1.1-.1l-5.2-.2L8.9.9C8.8.8 8.7.7 8.6.7z' transform='translate(-.029 -.412)'/%3E%3Cpath class='st1' d='M8.6 2.2L7.1 6l-.2.4h-.5l-4 .2 3.2 2.5.4.3-.2.5-1.1 3.9 3.4-2.2.4-.3.4.3 3.4 2.2-1.1-3.9-.1-.5.4-.3 3.2-2.5-4-.2h-.5L10 6 8.6 2.2m0-1.5c.1 0 .2.1.3.2l1.8 4.8 5.2.2c.1 0 .2.1.3.2 0 .1 0 .3-.1.3l-4 3.2 1.4 5v.1c0 .1-.1.2-.2.3h-.2c-.1 0-.1 0-.2-.1l-4.3-2.8-4.3 2.8c-.1 0-.1.1-.2.1H4c-.1 0-.2-.1-.2-.1 0-.1-.1-.2 0-.2l1.4-5L1 6.5c-.1-.1-.1-.2-.1-.3.1-.2.2-.3.3-.3l5.2-.2L8.3.9c0-.1.1-.2.3-.2z' transform='translate(-.029 -.412)'/%3E%3C/g%3E%3C/svg%3E")}.consonant-u-themeLight .consonant-RatingInfobit-stars:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' id='Layer_1' viewBox='0 0 17 15'%3E%3Cstyle%3E.st0{fill:%230d66d0}%3C/style%3E%3Cg id='Shape'%3E%3Cpath class='st0' d='M8.6.7c-.1 0-.3.1-.3.2L6.4 5.7l-5.2.2c-.2 0-.3.2-.3.4 0 .1 0 .2.1.2l4 3.2-1.4 5c0 .2.1.3.2.4h.1c.1 0 .1 0 .2-.1l4.3-2.8 4.3 2.8c.1.1.3.1.4-.1 0-.1.1-.2 0-.3l-1.4-5 4-3.2c.1-.1.2-.3 0-.4.3 0 .2-.1.1-.1l-5.2-.2L8.9.9C8.8.8 8.7.7 8.6.7z' transform='translate(-.029 -.412)'/%3E%3Cpath class='st0' d='M8.6 2.2L7.1 6l-.2.4h-.5l-4 .2 3.2 2.5.4.3-.2.5-1.1 3.9 3.4-2.2.4-.3.4.3 3.4 2.2-1.1-3.9-.1-.5.4-.3 3.2-2.5-4-.2h-.5L10 6 8.6 2.2m0-1.5c.1 0 .2.1.3.2l1.8 4.8 5.2.2c.1 0 .2.1.3.2 0 .1 0 .3-.1.3l-4 3.2 1.4 5v.1c0 .1-.1.2-.2.3h-.2c-.1 0-.1 0-.2-.1l-4.3-2.8-4.3 2.8c-.1 0-.1.1-.2.1H4c-.1 0-.2-.1-.2-.1 0-.1-.1-.2 0-.2l1.4-5L1 6.5c-.1-.1-.1-.2-.1-.3.1-.2.2-.3.3-.3l5.2-.2L8.3.9c0-.1.1-.2.3-.2z' transform='translate(-.029 -.412)'/%3E%3C/g%3E%3C/svg%3E")}.consonant-u-themeLight .consonant-RatingInfobit-text{color:#8e8e8e}.consonant-u-themeLight .consonant-TextInfobit{color:#6e6e6e}.consonant-u-themeLight .consonant-LoadMore--overBg .consonant-u-themeLight .consonant-LoadMore-btn{color:#4b4b4b}.consonant-u-themeDark .consonant-CardsGrid .consonant-FiltersInfo-results,.consonant-u-themeDark .consonant-CardsGrid .consonant-FiltersInfo-title{color:#fff}.consonant-u-themeDark .consonant-CardsGrid .consonant-LeftFilters{border-color:#4a4a4a;background-color:#323232}.consonant-u-themeDark .consonant-CardsGrid .consonant-LeftFilters-deskTitle{color:inherit}.consonant-u-themeDark .consonant-CardsGrid .consonant-LeftFilters .consonant-Search-inputTitle{color:#e3e3e3}.consonant-u-themeDark .consonant-CardsGrid .consonant-LeftFilters .consonant-Search-input{background-color:#323232;color:#fff}.consonant-u-themeDark .consonant-CardsGrid .consonant-LeftFilters .consonant-ChosenFilter{color:#e3e3e3}.consonant-u-themeDark .consonant-CardsGrid .consonant-LeftFilters .consonant-LeftFilter-itemsItemName,.consonant-u-themeDark .consonant-CardsGrid .consonant-LeftFilters .consonant-LeftFilter-link{color:#fff}.consonant-u-themeDark .consonant-CardsGrid .consonant-LeftFilters .consonant-LeftFilter.is-opened .consonant-LeftFilter-link{color:#e3e3e3}.consonant-u-themeDark .consonant-CardsGrid .consonant-LeftFilters .consonant-LeftFilter-itemsItem:hover{background-color:#252525}.consonant-u-themeDark .consonant-CardsGrid .consonant-Pagination-btn,.consonant-u-themeDark .consonant-CardsGrid .consonant-Pagination-itemBtn,.consonant-u-themeDark .consonant-CardsGrid .consonant-Pagination-summary{color:#fff}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.three-fourths{border-color:#4a4a4a;background-color:#323232}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-inner{background-color:#323232}@media only screen and (min-width:1200px){.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-inner:focus:after{border-color:#4b9cf5}}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-header{background-color:#4a4a4a}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-label{color:#e3e3e3}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-title{color:#fff}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-banner{color:#323232;background-color:#4b9cf5}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-badge{color:#b9b9b9;border-color:#909090;background-color:#323232}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.one-half{border-color:#4a4a4a;background-color:#323232}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-inner{background-color:#323232}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-header{background-color:#4a4a4a}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-label{color:#e3e3e3}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-title{color:#fff}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-text{color:#b9b9b9}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-banner{color:#323232;background-color:#4b9cf5}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-badge{color:#b9b9b9;border-color:#909090;background-color:#323232}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.text-card{border-color:#4a4a4a;background-color:#323232}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-header,.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-inner{background-color:#323232}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-label{color:#e3e3e3}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-title{color:#fff}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-text{color:#b9b9b9}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-banner{color:#323232;background-color:#4b9cf5}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-badge{color:#b9b9b9;border-color:#909090;background-color:#323232}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.product{border-color:#4a4a4a;background-color:#323232}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.product .consonant-Card-inner{background-color:#323232}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.product .consonant-Card-title{color:#fff}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.product .consonant-Card-text{color:#b9b9b9}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.icon-card{border-color:#4a4a4a;background-color:#323232}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.icon-card .consonant-Card-header{filter:contrast(.5) saturate(1.5)}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.icon-card .consonant-Card-label,.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.icon-card .consonant-Card-title{color:#fff}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.double-wide{border-color:#4a4a4a;background-color:#323232}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-inner{background-color:#323232}@media only screen and (min-width:1200px){.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-inner:focus:after{border-color:#4b9cf5}}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-title{color:#fff}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-text{color:#b9b9b9}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-label{color:#e3e3e3}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.full-card{border-color:#6e6e6e;background-color:#323232}@media only screen and (min-width:1200px){.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-inner:focus:after{border-color:#4b9cf5}}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-inner:before{border-color:#323232;box-shadow:1px 1px 0 0 #323232}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-header{background-color:#4a4a4a}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-banner{color:#323232;background-color:#4b9cf5}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-label{color:#323232}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-title{color:#5a5a5a}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-badge{color:#b9b9b9;border-color:#909090;background-color:#323232}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.half-height .consonant-Card-label,.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.half-height .consonant-Card-title{color:#323232}.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.half-height .consonant-Card-banner{color:#323232;background-color:#4b9cf5}@media only screen and (min-width:1200px){.consonant-u-themeDark .consonant-CardsGrid .consonant-Card.half-height .consonant-Card:focus:after{border-color:#4b9cf5}}.consonant-u-themeDark .consonant-CardsGrid .consonant-CardFooter--divider:last-child{border-color:#4a4a4a}.consonant-u-themeDark .consonant-BookmarkInfobit.is-active .consonant-BookmarkInfobit-ico{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 18'%3E%3Cpath stroke-width='1.5' stroke='%23b9b9b9' fill='%23b9b9b9' d='M13.6.6c-1.7.1-3.3 1-4.1 2.5C8.6 1.6 7.1.7 5.5.6c-2.8 0-5 2.2-5 5 0 4.7 9 10.8 9 10.8s9-6 9-10.8c0-2.7-2.1-5-4.9-5z'/%3E%3C/svg%3E")}.consonant-u-themeDark .consonant-BookmarkInfobit-ico{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 18'%3E%3Cpath stroke-width='1.5' fill='%23323232' stroke='%23b9b9b9' d='M13.6.6c-1.7.1-3.3 1-4.1 2.5C8.6 1.6 7.1.7 5.5.6c-2.8 0-5 2.2-5 5 0 4.7 9 10.8 9 10.8s9-6 9-10.8c0-2.7-2.1-5-4.9-5z'/%3E%3C/svg%3E")}@media only screen and (min-width:1200px){.consonant-u-themeDark .consonant-BookmarkInfobit:focus{outline-color:#4b9cf5}}.consonant-u-themeDark .consonant-Tooltip{color:#323232;background-color:#b9b9b9}.consonant-u-themeDark .consonant-Tooltip:after{background-color:#b9b9b9}.consonant-u-themeDark .consonant-BtnInfobit{border-color:#e3e3e3;background-color:#323232}.consonant-u-themeDark .consonant-BtnInfobit:not(.consonant-u-themeDark .consonant-BtnInfobit--cta) span{color:#e3e3e3}.consonant-u-themeDark .consonant-BtnInfobit:hover{border-color:#e3e3e3;background-color:#e3e3e3}.consonant-u-themeDark .consonant-BtnInfobit:hover:not(.consonant-u-themeDark .consonant-BtnInfobit--cta) span{color:#323232}.consonant-u-themeDark .consonant-BtnInfobit:active{border-color:#fff;background-color:#fff}.consonant-u-themeDark .consonant-BtnInfobit:active:not(.consonant-u-themeDark .consonant-BtnInfobit--cta) span{color:#323232}.consonant-u-themeDark .consonant-BtnInfobit:focus{outline-color:#4b9cf5}.consonant-u-themeDark .consonant-BtnInfobit--cta{border-color:#378ef0;background-color:#378ef0}.consonant-u-themeDark .consonant-BtnInfobit--cta:hover{border-color:#4b9cf5;background-color:#4b9cf5}.consonant-u-themeDark .consonant-BtnInfobit--cta:active{border-color:#5aa9fa;background-color:#5aa9fa}.consonant-u-themeDark .consonant-DateIntervalInfobit,.consonant-u-themeDark .consonant-IconWithTextInfobit-text{color:#b9b9b9}.consonant-u-themeDark .consonant-LinkWithIcoInfobit:focus{outline-color:#4b9cf5}.consonant-u-themeDark .consonant-LinkWithIcoInfobit span{color:#378ef0}.consonant-u-themeDark .consonant-LinkWithIcoInfobit:hover span{color:#4b9cf5}.consonant-u-themeDark .consonant-LinkWithIcoInfobit:active span{color:#5aa9fa}.consonant-u-themeDark .consonant-LinkInfobit{color:#378ef0}.consonant-u-themeDark .consonant-LinkInfobit:hover{color:#4b9cf5}.consonant-u-themeDark .consonant-LinkInfobit:active{color:#5aa9fa}.consonant-u-themeDark .consonant-LinkInfobit:focus{outline-color:#4b9cf5}.consonant-u-themeDark .consonant-PriceInfobit-price{color:#fff}.consonant-u-themeDark .consonant-PriceInfobit-term{color:#909090}.consonant-u-themeDark .consonant-ProgressInfobit-text{color:#b9b9b9}.consonant-u-themeDark .consonant-ProgressInfobit-el{background-color:#323232;border-color:#5a5a5a}.consonant-u-themeDark .consonant-RatingInfobit-stars:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg id='Layer_1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 17 15'%3E%3Cstyle%3E.st0{fill:none}.st1{fill:%235a5a5a}%3C/style%3E%3Cg id='Shape'%3E%3Cpath class='st0' d='M8.6.7c-.1 0-.3.1-.3.2L6.4 5.7l-5.2.2c-.2 0-.3.2-.3.4 0 .1 0 .2.1.2l4 3.2-1.4 5c0 .2.1.3.2.4h.1c.1 0 .1 0 .2-.1l4.3-2.8 4.3 2.8c.1.1.3.1.4-.1 0-.1.1-.2 0-.3l-1.4-5 4-3.2c.1-.1.2-.3 0-.4.3 0 .2-.1.1-.1l-5.2-.2L8.9.9C8.8.8 8.7.7 8.6.7z' transform='translate(-.029 -.412)'/%3E%3Cpath class='st1' d='M8.6 2.2L7.1 6l-.2.4h-.5l-4 .2 3.2 2.5.4.3-.2.5-1.1 3.9 3.4-2.2.4-.3.4.3 3.4 2.2-1.1-3.9-.1-.5.4-.3 3.2-2.5-4-.2h-.5L10 6 8.6 2.2m0-1.5c.1 0 .2.1.3.2l1.8 4.8 5.2.2c.1 0 .2.1.3.2 0 .1 0 .3-.1.3l-4 3.2 1.4 5v.1c0 .1-.1.2-.2.3h-.2c-.1 0-.1 0-.2-.1l-4.3-2.8-4.3 2.8c-.1 0-.1.1-.2.1H4c-.1 0-.2-.1-.2-.1 0-.1-.1-.2 0-.2l1.4-5L1 6.5c-.1-.1-.1-.2-.1-.3.1-.2.2-.3.3-.3l5.2-.2L8.3.9c0-.1.1-.2.3-.2z' transform='translate(-.029 -.412)'/%3E%3C/g%3E%3C/svg%3E")}.consonant-u-themeDark .consonant-RatingInfobit-stars:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' id='Layer_1' viewBox='0 0 17 15'%3E%3Cstyle%3E.st0{fill:%234b9cf5}%3C/style%3E%3Cg id='Shape'%3E%3Cpath class='st0' d='M8.6.7c-.1 0-.3.1-.3.2L6.4 5.7l-5.2.2c-.2 0-.3.2-.3.4 0 .1 0 .2.1.2l4 3.2-1.4 5c0 .2.1.3.2.4h.1c.1 0 .1 0 .2-.1l4.3-2.8 4.3 2.8c.1.1.3.1.4-.1 0-.1.1-.2 0-.3l-1.4-5 4-3.2c.1-.1.2-.3 0-.4.3 0 .2-.1.1-.1l-5.2-.2L8.9.9C8.8.8 8.7.7 8.6.7z' transform='translate(-.029 -.412)'/%3E%3Cpath class='st0' d='M8.6 2.2L7.1 6l-.2.4h-.5l-4 .2 3.2 2.5.4.3-.2.5-1.1 3.9 3.4-2.2.4-.3.4.3 3.4 2.2-1.1-3.9-.1-.5.4-.3 3.2-2.5-4-.2h-.5L10 6 8.6 2.2m0-1.5c.1 0 .2.1.3.2l1.8 4.8 5.2.2c.1 0 .2.1.3.2 0 .1 0 .3-.1.3l-4 3.2 1.4 5v.1c0 .1-.1.2-.2.3h-.2c-.1 0-.1 0-.2-.1l-4.3-2.8-4.3 2.8c-.1 0-.1.1-.2.1H4c-.1 0-.2-.1-.2-.1 0-.1-.1-.2 0-.2l1.4-5L1 6.5c-.1-.1-.1-.2-.1-.3.1-.2.2-.3.3-.3l5.2-.2L8.3.9c0-.1.1-.2.3-.2z' transform='translate(-.029 -.412)'/%3E%3C/g%3E%3C/svg%3E")}.consonant-u-themeDark .consonant-RatingInfobit-text{color:#909090}.consonant-u-themeDark .consonant-TextInfobit{color:#b9b9b9}.consonant-u-themeDark .consonant-LoadMore--overBg .consonant-u-themeDark .consonant-LoadMore-btn{color:#e3e3e3}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-FiltersInfo-results,.consonant-u-themeDarkest .consonant-CardsGrid .consonant-FiltersInfo-title{color:#efefef}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-LeftFilters{border-color:#393939;background-color:#1e1e1e}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-LeftFilters-deskTitle{color:inherit}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-LeftFilters .consonant-Search-inputTitle{color:#c8c8c8}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-LeftFilters .consonant-Search-input{background-color:#1e1e1e;color:#efefef}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-LeftFilters .consonant-ChosenFilter{color:#c8c8c8}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-LeftFilters .consonant-LeftFilter-itemsItemName,.consonant-u-themeDarkest .consonant-CardsGrid .consonant-LeftFilters .consonant-LeftFilter-link{color:#efefef}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-LeftFilters .consonant-LeftFilter.is-opened .consonant-LeftFilter-link{color:#c8c8c8}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-LeftFilters .consonant-LeftFilter-itemsItem:hover{background-color:#080808}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Pagination-btn,.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Pagination-itemBtn,.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Pagination-summary{color:#efefef}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.three-fourths{border-color:#393939;background-color:#1e1e1e}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-inner{background-color:#1e1e1e}@media only screen and (min-width:1200px){.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-inner:focus:after{border-color:#378ef0}}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-header{background-color:#393939}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-label{color:#c8c8c8}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-title{color:#efefef}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-banner{color:#1e1e1e;background-color:#378ef0}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-badge{color:#a2a2a2;border-color:#7c7c7c;background-color:#1e1e1e}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.one-half{border-color:#393939;background-color:#1e1e1e}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-inner{background-color:#1e1e1e}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-header{background-color:#393939}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-label{color:#c8c8c8}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-title{color:#efefef}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-text{color:#a2a2a2}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-banner{color:#1e1e1e;background-color:#378ef0}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-badge{color:#a2a2a2;border-color:#7c7c7c;background-color:#1e1e1e}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.text-card{border-color:#393939;background-color:#1e1e1e}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-header,.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-inner{background-color:#1e1e1e}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-label{color:#c8c8c8}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-title{color:#efefef}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-text{color:#a2a2a2}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-banner{color:#1e1e1e;background-color:#378ef0}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.text-card .consonant-Card-badge{color:#a2a2a2;border-color:#7c7c7c;background-color:#1e1e1e}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.product{border-color:#393939;background-color:#1e1e1e}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.product .consonant-Card-inner{background-color:#1e1e1e}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.product .consonant-Card-title{color:#efefef}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.product .consonant-Card-text{color:#a2a2a2}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.icon-card{border-color:#393939;background-color:#1e1e1e}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.icon-card .consonant-Card-header{filter:contrast(.5) saturate(1.5)}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.icon-card .consonant-Card-label,.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.icon-card .consonant-Card-title{color:#efefef}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.double-wide{border-color:#393939;background-color:#1e1e1e}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-inner{background-color:#1e1e1e}@media only screen and (min-width:1200px){.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-inner:focus:after{border-color:#378ef0}}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-title{color:#efefef}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-text{color:#a2a2a2}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-label{color:#c8c8c8}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.full-card{border-color:#5c5c5c;background-color:#1e1e1e}@media only screen and (min-width:1200px){.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-inner:focus:after{border-color:#378ef0}}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-inner:before{border-color:#1e1e1e;box-shadow:1px 1px 0 0 #1e1e1e}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-header{background-color:#393939}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-banner{color:#1e1e1e;background-color:#378ef0}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-label{color:#1e1e1e}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-title{color:#494949}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.full-card .consonant-Card-badge{color:#a2a2a2;border-color:#7c7c7c;background-color:#1e1e1e}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.half-height .consonant-Card-label,.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.half-height .consonant-Card-title{color:#1e1e1e}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.half-height .consonant-Card-banner{color:#1e1e1e;background-color:#378ef0}@media only screen and (min-width:1200px){.consonant-u-themeDarkest .consonant-CardsGrid .consonant-Card.half-height .consonant-Card:focus:after{border-color:#378ef0}}.consonant-u-themeDarkest .consonant-CardsGrid .consonant-CardFooter--divider:last-child{border-color:#393939}.consonant-u-themeDarkest .consonant-BookmarkInfobit.is-active .consonant-BookmarkInfobit-ico{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 18'%3E%3Cpath stroke-width='1.5' stroke='%23a2a2a2' fill='%23a2a2a2' d='M13.6.6c-1.7.1-3.3 1-4.1 2.5C8.6 1.6 7.1.7 5.5.6c-2.8 0-5 2.2-5 5 0 4.7 9 10.8 9 10.8s9-6 9-10.8c0-2.7-2.1-5-4.9-5z'/%3E%3C/svg%3E")}.consonant-u-themeDarkest .consonant-BookmarkInfobit-ico{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 18'%3E%3Cpath stroke-width='1.5' fill='%231e1e1e' stroke='%23a2a2a2' d='M13.6.6c-1.7.1-3.3 1-4.1 2.5C8.6 1.6 7.1.7 5.5.6c-2.8 0-5 2.2-5 5 0 4.7 9 10.8 9 10.8s9-6 9-10.8c0-2.7-2.1-5-4.9-5z'/%3E%3C/svg%3E")}@media only screen and (min-width:1200px){.consonant-u-themeDarkest .consonant-BookmarkInfobit:focus{outline-color:#378ef0}}.consonant-u-themeDarkest .consonant-Tooltip{color:#1e1e1e;background-color:#a2a2a2}.consonant-u-themeDarkest .consonant-Tooltip:after{background-color:#a2a2a2}.consonant-u-themeDarkest .consonant-BtnInfobit{border-color:#c8c8c8;background-color:#1e1e1e}.consonant-u-themeDarkest .consonant-BtnInfobit:not(.consonant-u-themeDarkest .consonant-BtnInfobit--cta) span{color:#c8c8c8}.consonant-u-themeDarkest .consonant-BtnInfobit:hover{border-color:#c8c8c8;background-color:#c8c8c8}.consonant-u-themeDarkest .consonant-BtnInfobit:hover:not(.consonant-u-themeDarkest .consonant-BtnInfobit--cta) span{color:#1e1e1e}.consonant-u-themeDarkest .consonant-BtnInfobit:active{border-color:#efefef;background-color:#efefef}.consonant-u-themeDarkest .consonant-BtnInfobit:active:not(.consonant-u-themeDarkest .consonant-BtnInfobit--cta) span{color:#1e1e1e}.consonant-u-themeDarkest .consonant-BtnInfobit:focus{outline-color:#378ef0}.consonant-u-themeDarkest .consonant-BtnInfobit--cta{border-color:#2680eb;background-color:#2680eb}.consonant-u-themeDarkest .consonant-BtnInfobit--cta:hover{border-color:#378ef0;background-color:#378ef0}.consonant-u-themeDarkest .consonant-BtnInfobit--cta:active{border-color:#4b9cf5;background-color:#4b9cf5}.consonant-u-themeDarkest .consonant-DateIntervalInfobit,.consonant-u-themeDarkest .consonant-IconWithTextInfobit-text{color:#a2a2a2}.consonant-u-themeDarkest .consonant-LinkWithIcoInfobit:focus{outline-color:#378ef0}.consonant-u-themeDarkest .consonant-LinkWithIcoInfobit span{color:#2680eb}.consonant-u-themeDarkest .consonant-LinkWithIcoInfobit:hover span{color:#378ef0}.consonant-u-themeDarkest .consonant-LinkWithIcoInfobit:active span{color:#4b9cf5}.consonant-u-themeDarkest .consonant-LinkInfobit{color:#2680eb}.consonant-u-themeDarkest .consonant-LinkInfobit:hover{color:#378ef0}.consonant-u-themeDarkest .consonant-LinkInfobit:active{color:#4b9cf5}.consonant-u-themeDarkest .consonant-LinkInfobit:focus{outline-color:#378ef0}.consonant-u-themeDarkest .consonant-PriceInfobit-price{color:#efefef}.consonant-u-themeDarkest .consonant-PriceInfobit-term{color:#7c7c7c}.consonant-u-themeDarkest .consonant-ProgressInfobit-text{color:#a2a2a2}.consonant-u-themeDarkest .consonant-ProgressInfobit-el{background-color:#1e1e1e;border-color:#494949}.consonant-u-themeDarkest .consonant-RatingInfobit-stars:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg id='Layer_1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 17 15'%3E%3Cstyle%3E.st0{fill:none}.st1{fill:%23494949}%3C/style%3E%3Cg id='Shape'%3E%3Cpath class='st0' d='M8.6.7c-.1 0-.3.1-.3.2L6.4 5.7l-5.2.2c-.2 0-.3.2-.3.4 0 .1 0 .2.1.2l4 3.2-1.4 5c0 .2.1.3.2.4h.1c.1 0 .1 0 .2-.1l4.3-2.8 4.3 2.8c.1.1.3.1.4-.1 0-.1.1-.2 0-.3l-1.4-5 4-3.2c.1-.1.2-.3 0-.4.3 0 .2-.1.1-.1l-5.2-.2L8.9.9C8.8.8 8.7.7 8.6.7z' transform='translate(-.029 -.412)'/%3E%3Cpath class='st1' d='M8.6 2.2L7.1 6l-.2.4h-.5l-4 .2 3.2 2.5.4.3-.2.5-1.1 3.9 3.4-2.2.4-.3.4.3 3.4 2.2-1.1-3.9-.1-.5.4-.3 3.2-2.5-4-.2h-.5L10 6 8.6 2.2m0-1.5c.1 0 .2.1.3.2l1.8 4.8 5.2.2c.1 0 .2.1.3.2 0 .1 0 .3-.1.3l-4 3.2 1.4 5v.1c0 .1-.1.2-.2.3h-.2c-.1 0-.1 0-.2-.1l-4.3-2.8-4.3 2.8c-.1 0-.1.1-.2.1H4c-.1 0-.2-.1-.2-.1 0-.1-.1-.2 0-.2l1.4-5L1 6.5c-.1-.1-.1-.2-.1-.3.1-.2.2-.3.3-.3l5.2-.2L8.3.9c0-.1.1-.2.3-.2z' transform='translate(-.029 -.412)'/%3E%3C/g%3E%3C/svg%3E")}.consonant-u-themeDarkest .consonant-RatingInfobit-stars:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' id='Layer_1' viewBox='0 0 17 15'%3E%3Cstyle%3E.st0{fill:%23378ef0}%3C/style%3E%3Cg id='Shape'%3E%3Cpath class='st0' d='M8.6.7c-.1 0-.3.1-.3.2L6.4 5.7l-5.2.2c-.2 0-.3.2-.3.4 0 .1 0 .2.1.2l4 3.2-1.4 5c0 .2.1.3.2.4h.1c.1 0 .1 0 .2-.1l4.3-2.8 4.3 2.8c.1.1.3.1.4-.1 0-.1.1-.2 0-.3l-1.4-5 4-3.2c.1-.1.2-.3 0-.4.3 0 .2-.1.1-.1l-5.2-.2L8.9.9C8.8.8 8.7.7 8.6.7z' transform='translate(-.029 -.412)'/%3E%3Cpath class='st0' d='M8.6 2.2L7.1 6l-.2.4h-.5l-4 .2 3.2 2.5.4.3-.2.5-1.1 3.9 3.4-2.2.4-.3.4.3 3.4 2.2-1.1-3.9-.1-.5.4-.3 3.2-2.5-4-.2h-.5L10 6 8.6 2.2m0-1.5c.1 0 .2.1.3.2l1.8 4.8 5.2.2c.1 0 .2.1.3.2 0 .1 0 .3-.1.3l-4 3.2 1.4 5v.1c0 .1-.1.2-.2.3h-.2c-.1 0-.1 0-.2-.1l-4.3-2.8-4.3 2.8c-.1 0-.1.1-.2.1H4c-.1 0-.2-.1-.2-.1 0-.1-.1-.2 0-.2l1.4-5L1 6.5c-.1-.1-.1-.2-.1-.3.1-.2.2-.3.3-.3l5.2-.2L8.3.9c0-.1.1-.2.3-.2z' transform='translate(-.029 -.412)'/%3E%3C/g%3E%3C/svg%3E")}.consonant-u-themeDarkest .consonant-RatingInfobit-text{color:#7c7c7c}.consonant-u-themeDarkest .consonant-TextInfobit{color:#a2a2a2}.consonant-u-themeDarkest .consonant-LoadMore--overBg .consonant-u-themeDarkest .consonant-LoadMore-btn{color:#c8c8c8}[dir=rtl] .consonant-FiltersInfo>.consonant-Select{margin-left:0;margin-right:auto}[dir=rtl] .consonant-FiltersInfo-btn--withFilters{padding-left:0}[dir=rtl] .consonant-FiltersInfo-btnText{padding-left:7px;text-align:right}[dir=rtl] .consonant-FiltersInfo-btnSelected{padding-right:8px;padding-left:7px;border-left:0;border-right:1px solid #505050}[dir=rtl] .consonant-FiltersInfo-results{margin-left:0;margin-right:auto;padding-left:0;text-align:right}[dir=rtl] .consonant-LeftFilters-mobBack{margin-left:13px;margin-right:0;transform:scale(-1)}[dir=rtl] .consonant-LeftFilters-mobileFooter{flex-direction:row-reverse}[dir=rtl] .consonant-LeftFilters-mobileFooterTotalResQty{margin-right:auto}[dir=rtl] .consonant-LeftFilters-clearLink,[dir=rtl] .consonant-LeftFilters-deskTitle,[dir=rtl] .consonant-LeftFilters-mobileFooterTotalResQty,[dir=rtl] .consonant-LeftFilters-mobTitle span{text-align:right}[dir=rtl] .consonant-LeftFilter:after{left:16px;right:auto;transform:scale(-1) rotate(-135deg)}[dir=rtl] .consonant-LeftFilter-link{padding-left:36px;padding-right:6px;text-align:right}[dir=rtl] .consonant-LeftFilter-footerClearBtn,[dir=rtl] .consonant-LeftFilter-footerResQty,[dir=rtl] .consonant-LeftFilter-itemsItemName{text-align:right}[dir=rtl] .consonant-LeftFilter-itemsItemCheckmark{margin-left:10px;margin-right:0}[dir=rtl] .consonant-LeftFilter-selectedItemsQty{text-align:right;padding-left:18px;padding-right:0}[dir=rtl] .consonant-LeftFilter-selectedItemsQty:after{left:0;right:auto}[dir=rtl] .consonant-LeftFilter-footer{flex-direction:row-reverse}[dir=rtl] .consonant-LeftFilter-footerClearBtn{margin-left:auto}[dir=rtl] .consonant-LeftFilter.is-opened .consonant-LeftFilter-name{padding-left:0;padding-right:20px}[dir=rtl] .consonant-TopFilters-filters{margin-right:0;margin-left:17px}[dir=rtl] .consonant-TopFilters-clearBtnWrapper{left:0;right:auto;margin-left:0;margin-right:0}[dir=rtl] .consonant-TopFilters-clearBtnWrapper:empty{margin-left:0;margin-right:-16px}[dir=rtl] .consonant-TopFilters-clearBtnWrapper:after{right:auto;left:100%;transform:scale(-1)}[dir=rtl] .consonant-TopFilters-clearBtn{text-align:right}[dir=rtl] .consonant-TopFilters-selectWrapper{margin-right:0;margin-left:8px}[dir=rtl] .consonant-TopFilters-results{margin-left:0;margin-right:auto;padding-left:0}[dir=rtl] .consonant-TopFilter{margin-right:0;margin-left:8px}[dir=rtl] .consonant-TopFilter:last-of-type{margin-left:0}[dir=rtl] .consonant-TopFilter-itemCheckmark{margin-right:0;margin-left:10px}[dir=rtl] .consonant-TopFilter-footerClearBtn,[dir=rtl] .consonant-TopFilter-footerResQty,[dir=rtl] .consonant-TopFilter-itemsItemName,[dir=rtl] .consonant-TopFilter-link{text-align:right}[dir=rtl] .consonant-TopFilter-selctedItemsQty{margin-right:9px;margin-left:0;text-align:right}[dir=rtl] .consonant-TopFilter-selctedItemsQty:after{left:auto;right:0}[dir=rtl] .consonant-TopFilter-footerResQty{margin-right:0;margin-left:auto}[dir=rtl] .consonant-TopFilter-footerBtn{margin-left:0;margin-right:0}[dir=rtl] .consonant-TopFilter-footerBtn:only-child{margin-right:auto}[dir=rtl] .consonant-TopFilter-footerClearBtn{margin-right:auto;margin-left:17px}[dir=rtl] .consonant-TopFilter.is-selected:not(.is-opened) .consonant-TopFilter-link{padding-left:0;padding-right:12px}[dir=rtl] .consonant-TopFilter.is-opened .consonant-TopFilter-link{padding-right:20px;padding-left:12px;text-align:right}[dir=rtl] .consonant-Select:after{right:auto;left:12px}[dir=rtl] .consonant-Select-btn{padding-left:34px;padding-right:12px;text-align:right}[dir=rtl] .consonant-Select-options{left:0;right:auto}[dir=rtl] .consonant-Select-options--left{right:0;left:auto}[dir=rtl] .consonant-Select-option{text-align:right;padding-left:30px;padding-right:20px}[dir=rtl] .consonant-Select-option.is-selected{text-align:right}[dir=rtl] .consonant-Select-option.is-selected:after{right:auto;left:12px}[dir=rtl] .consonant-Search input{text-align:right}[dir=rtl] .consonant-Search input:focus{padding-right:8px}[dir=rtl] .consonant-Search-inputTitle{text-align:right}[dir=rtl] .consonant-Search-inputClear{display:none}[dir=rtl] .consonant-DoubleWideCard .consonant-DoubleWideCard-label,[dir=rtl] .consonant-DoubleWideCard .consonant-DoubleWideCard-text,[dir=rtl] .consonant-DoubleWideCard .consonant-DoubleWideCard-title,[dir=rtl] .consonant-FullCard .consonant-FullCard-badge,[dir=rtl] .consonant-FullCard .consonant-FullCard-banner,[dir=rtl] .consonant-FullCard .consonant-FullCard-label,[dir=rtl] .consonant-FullCard .consonant-FullCard-title,[dir=rtl] .consonant-HalfHeightCard .consonant-HalfHeightCard-label,[dir=rtl] .consonant-HalfHeightCard .consonant-HalfHeightCard-title,[dir=rtl] .consonant-OneHalfCard .consonant-OneHalfCard-badge,[dir=rtl] .consonant-OneHalfCard .consonant-OneHalfCard-banner,[dir=rtl] .consonant-OneHalfCard .consonant-OneHalfCard-label,[dir=rtl] .consonant-OneHalfCard .consonant-OneHalfCard-text,[dir=rtl] .consonant-OneHalfCard .consonant-OneHalfCard-title,[dir=rtl] .consonant-ThreeFourthCard .consonant-ThreeFourthCard-badge,[dir=rtl] .consonant-ThreeFourthCard .consonant-ThreeFourthCard-banner,[dir=rtl] .consonant-ThreeFourthCard .consonant-ThreeFourthCard-label,[dir=rtl] .consonant-ThreeFourthCard .consonant-ThreeFourthCard-title{text-align:right}[dir=rtl] .consonant-FullCard .consonant-FullCard-videoIco,[dir=rtl] .consonant-OneHalfCard .consonant-OneHalfCard-videoIco,[dir=rtl] .consonant-ThreeFourthCard .consonant-ThreeFourthCard-videoIco{transform:rotate(180deg)}[dir=rtl] .consonant-FullCard .consonant-FullCard-videoIco:hover,[dir=rtl] .consonant-OneHalfCard .consonant-OneHalfCard-videoIco:hover,[dir=rtl] .consonant-ThreeFourthCard .consonant-ThreeFourthCard-videoIco:hover{transform:rotate(180deg) scale(1.1)}[dir=rtl] .consonant-FullCard .consonant-FullCard-banner,[dir=rtl] .consonant-OneHalfCard .consonant-OneHalfCard-banner,[dir=rtl] .consonant-ThreeFourthCard .consonant-ThreeFourthCard-banner{display:flex;align-items:center;justify-content:flex-start}[dir=rtl] .consonant-FullCard .consonant-FullCard-bannerIconWrapper,[dir=rtl] .consonant-OneHalfCard .consonant-OneHalfCard-bannerIconWrapper,[dir=rtl] .consonant-ThreeFourthCard .consonant-ThreeFourthCard-bannerIconWrapper{margin-left:4px;margin-right:0}[dir=rtl] .consonant-CardFooter-cell--left>:first-child,[dir=rtl] .consonant-CardFooter-cell--left>:last-child{margin-left:16px}[dir=rtl] .consonant-CardFooter-cell--left:last-child>:last-child,[dir=rtl] .consonant-CardFooter-cell--right:last-child>:last-child{margin-left:0}[dir=rtl] .consonant-DateIntervalInfobit,[dir=rtl] .consonant-IconWithTextInfobit-text,[dir=rtl] .consonant-LinkInfobit,[dir=rtl] .consonant-LinkWithIcoInfobit span,[dir=rtl] .consonant-PriceInfobit-price,[dir=rtl] .consonant-PriceInfobit-term,[dir=rtl] .consonant-ProgressInfobit-text,[dir=rtl] .consonant-RatingInfobit-text,[dir=rtl] .consonant-TextInfobit{text-align:right}[dir=rtl] .consonant-IconWithTextInfobit img{margin-right:0;margin-left:4px}[dir=rtl] .consonant img+.consonant-TextInfobit{margin-right:-12px}[dir=rtl] .consonant-RatingInfobit-text{margin-left:0;margin-right:7px}[dir=rtl] .consonant-ProgressInfobit-text:not(:last-child){padding-right:0;padding-left:8px}[dir=rtl] .consonant-BtnInfobit-ico{width:auto;height:auto;max-width:24px;max-height:24px;margin-left:8px;overflow:hidden;object-fit:cover}[dir=rtl] .consonant-BtnInfobit-ico--last{margin-left:0;margin-right:8px}[dir=rtl] .consonant-Bookmarks-title{padding-left:55px;padding-right:0;text-align:right}[dir=rtl] .consonant-Bookmarks-itemBadge{left:16px;right:auto}[dir=rtl] .consonant-Bookmarks-icoWrapper .consonant-Bookmarks-ico{margin-left:6px;margin-right:0}[dir=rtl] .consonant-Pagination-btn,[dir=rtl] .consonant-Pagination-summary{text-align:right}[dir=rtl] .consonant-CardCollection-inner{margin-left:-32px;margin-right:0}[dir=rtl] .consonant-CardCollection-inner>div{margin-left:32px;margin-right:0}@media only screen and (min-width:768px){[dir=rtl] .consonant-TopFilters-filtersWrapper{margin-right:0;margin-left:16px}[dir=rtl] .consonant-TopFilters-selectWrapper{margin-left:0;margin-right:8px}[dir=rtl] .consonant-TopFilters-title{text-align:right;margin-left:12px;margin-right:0}[dir=rtl] .consonant-TopFilters-filters--truncated .consonant-TopFilters-moreBtn{margin-left:23px;margin-right:0}[dir=rtl] .consonant-TopFilters-results{text-align:right}[dir=rtl] .consonant-TopFilters-results:after{right:auto;left:0}[dir=rtl] .consonant-TopFilters-results strong{text-align:right}[dir=rtl] .consonant-TopFilters-searchIcoWrapper{margin-left:0;margin-right:auto}[dir=rtl] .consonant-TopFilters-searchIcoWrapper>div{left:0;right:auto}[dir=rtl] .consonant-TopFilters-inner>:not([dir=rtl] .consonant-TopFilters-filtersWrapper):first-child{margin-left:0;margin-right:auto}[dir=rtl] .consonant-TopFilter.is-opened{margin-left:8px;margin-right:0}[dir=rtl] .consonant-TopFilter.is-opened:last-child{margin-left:0}[dir=rtl] .consonant-TopFilter.is-opened .consonant-TopFilter-link{margin-right:0;padding-right:17px}}@media only screen and (min-width:1200px){[dir=rtl] .consonant-LeftFilters{margin-right:0;margin-left:32px}[dir=rtl] .consonant-TopFilters-results{margin-left:0;margin-right:auto}[dir=rtl] .consonant-TopFilters-selectWrapper>div:first-child:after{right:auto;left:12px}[dir=rtl] .consonant-FiltersInfo-wrapper{padding-right:0;padding-left:32px}[dir=rtl] .consonant-FiltersInfo-wrapper:after{right:auto;left:16px}[dir=rtl] .consonant-FiltersInfo-search+.consonant-FiltersInfo-wrapper:last-child{padding-left:0}[dir=rtl] .consonant-FiltersInfo-results{text-align:left}[dir=rtl] .consonant-LeftFilter:after{transform:scale(-1) rotate(135deg)}[dir=rtl] .consonant-LeftFilter-link{padding-right:6px}[dir=rtl] .consonant-LeftFilter-itemBadge{left:32px;right:auto}[dir=rtl] .consonant-LeftFilter.is-opened .consonant-LeftFilter-name{padding-right:0}[dir=rtl] .consonant-LeftFilter.is-opened .consonant-LeftFilter-link{padding-right:8px}[dir=rtl] .consonant-TopFilter .consonant-TopFilter-absoluteWrapper{left:auto;right:0}[dir=rtl] .consonant-ChosenFilter{margin-right:0;margin-left:7px;padding-left:17px;padding-right:8px;text-align:right}[dir=rtl] .consonant-ChosenFilter:after,[dir=rtl] .consonant-ChosenFilter:before{left:8px;right:auto}[dir=rtl] .consonant-Bookmarks .consonant-Bookmarks-itemBadge{left:30px}[dir=rtl] .consonant-Select-btn{padding-right:0}}.consonant-CardsGrid{display:grid!important;justify-content:center;width:100%;max-width:100%;grid-template-columns:repeat(auto-fit,minmax(300px,max-content))}.consonant-CardsGrid.card-hover-grow .consonant-Card.one-half{transition:all .2s ease-in-out}.consonant-CardsGrid.card-hover-grow .consonant-Card.one-half:hover{transform:scale(1.03);transition:all .2s ease-in-out}.consonant-CardsGrid.card-hover-grow .consonant-Card.one-half [class*=-header]:after{display:none!important}.consonant-CardsGrid--with1xGutter{gap:8px;padding-bottom:8px}.consonant-CardsGrid--with2xGutter{gap:16px;padding-bottom:16px}.consonant-CardsGrid--with3xGutter{gap:24px;padding-bottom:24px}.consonant-CardsGrid--with4xGutter{gap:32px;padding-bottom:32px}.consonant-CardsGrid--2up{grid-template-columns:repeat(auto-fit,minmax(300px,max-content))}.consonant-CardsGrid--2up .consonant-Card{max-width:584px}.consonant-CardsGrid--2up .consonant-Card-content{width:100%;max-width:100%}.consonant-CardsGrid--3up .consonant-Card{width:378px;max-width:100%}.consonant-CardsGrid--3up .consonant-Card-content{width:100%;max-width:100%}.consonant-CardsGrid--4up{grid-template-columns:repeat(auto-fit,minmax(225px,max-content))}.consonant-CardsGrid--4up .consonant-Card{min-width:225px;width:276px;max-width:100%;height:384px}.consonant-CardsGrid--4up .consonant-Card-content{width:100%;max-width:100%;padding:20px}.consonant-CardsGrid--5up{grid-template-columns:repeat(auto-fit,minmax(190px,max-content))}.consonant-CardsGrid--5up .consonant-Card{min-width:190px;max-width:228px;height:344px}.consonant-CardsGrid--5up .consonant-Card-content{width:100%;max-width:100%;padding:20px}.consonant-CardsGrid--5up .one-half.consonant-Card{height:auto}.consonant-CardsGrid--5up .one-half.consonant-Card .consonant-Card-header{min-height:172px;max-height:172px}@media only screen and (min-width:680px){.consonant-CardsGrid--2up{grid-template-columns:repeat(auto-fit,minmax(500px,max-content))}}.consonant-Wrapper{font-family:adobe-clean,Segoe UI,Roboto,sans-serif;position:relative;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;margin-top:1px}.consonant-Wrapper *{box-sizing:border-box}.consonant-Wrapper-inner>:last-of-type{display:block;position:relative;flex-grow:1}.consonant-Wrapper-collection{background-color:transparent}.consonant-Wrapper-collection.is-loading{min-height:536px}.consonant-Wrapper-collection:first-child .consonant-FiltersInfo:empty{display:none}.consonant-Wrapper--1200MaxWidth .consonant-Wrapper-inner{width:83.3%;max-width:1200px;margin-left:auto;margin-right:auto}.consonant-Wrapper--1600MaxWidth .consonant-Wrapper-inner{width:83.3%;max-width:1600px;margin-left:auto;margin-right:auto}.consonant-Wrapper--83PercentContainier .consonant-Wrapper-inner{width:83.3%;margin-left:auto;margin-right:auto}.consonant-Wrapper--32MarginContainer .consonant-Wrapper-inner{max-width:unset;margin-left:32px;margin-right:32px}@media only screen and (min-width:1200px){.consonant-Wrapper--withLeftFilter .consonant-Wrapper-inner{display:grid;grid-template-columns:204px auto;gap:32px}.consonant-Wrapper-collection{overflow:visible}}@media only screen and (min-width:1440px){.consonant-Wrapper-collection{margin-bottom:8px}}.consonant-FiltersInfo{display:flex;width:100%;justify-content:space-between;align-items:center;flex-wrap:wrap;margin-left:auto;margin-right:auto;box-sizing:border-box;padding:0 0 16px;top:0;left:0;background-color:transparent}.consonant-FiltersInfo-search{width:100%;max-width:100%}.consonant-FiltersInfo-btnWrapper{max-width:100%}.consonant-FiltersInfo-btn{display:inline-flex;align-items:center;min-width:89px;max-width:100%;margin-bottom:10px;padding:0 0 0 11px;border:1px solid #505050;border-radius:5px;overflow:hidden;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1.875rem;font-weight:700;color:#505050;font-style:normal;word-break:break-word;text-align:left;text-transform:capitalize;background-color:#fff;outline:0;user-select:none}.consonant-FiltersInfo-btn:focus{border-color:#1492e6}.consonant-FiltersInfo-btnSelected{display:block;max-width:40%;padding-left:8px;padding-right:7px;border-left:1px solid #505050;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.consonant-FiltersInfo-btn--withFilters{background-color:#f4f4f4;color:#323232}.consonant-FiltersInfo-btnIco{display:block;min-width:18px;width:18px;height:18px;margin-right:8px;background:transparent url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE2Ljc1IDMuMDAwMDZINy45NUM3LjgzNTI0IDIuNDM0OTIgNy41Mjg2NCAxLjkyNjgzIDcuMDgyMTMgMS41NjE4OEM2LjYzNTYyIDEuMTk2OTIgNi4wNzY2OCAwLjk5NzU1OSA1LjUgMC45OTc1NTlDNC45MjMzMiAwLjk5NzU1OSA0LjM2NDM4IDEuMTk2OTIgMy45MTc4NyAxLjU2MTg4QzMuNDcxMzYgMS45MjY4MyAzLjE2NDc2IDIuNDM0OTIgMy4wNSAzLjAwMDA2SDEuMjVDMS4xODM3IDMuMDAwMDYgMS4xMjAxMSAzLjAyNjQgMS4wNzMyMiAzLjA3MzI5QzEuMDI2MzQgMy4xMjAxNyAxIDMuMTgzNzYgMSAzLjI1MDA2VjMuNzUwMDZDMSAzLjgxNjM3IDEuMDI2MzQgMy44Nzk5NiAxLjA3MzIyIDMuOTI2ODRDMS4xMjAxMSAzLjk3MzczIDEuMTgzNyA0LjAwMDA2IDEuMjUgNC4wMDAwNkgzLjA1QzMuMTY0NzYgNC41NjUyMSAzLjQ3MTM2IDUuMDczMyAzLjkxNzg3IDUuNDM4MjVDNC4zNjQzOCA1LjgwMzIxIDQuOTIzMzIgNi4wMDI1NyA1LjUgNi4wMDI1N0M2LjA3NjY4IDYuMDAyNTcgNi42MzU2MiA1LjgwMzIxIDcuMDgyMTMgNS40MzgyNUM3LjUyODY0IDUuMDczMyA3LjgzNTI0IDQuNTY1MjEgNy45NSA0LjAwMDA2SDE2Ljc1QzE2LjgxNjMgNC4wMDAwNiAxNi44Nzk5IDMuOTczNzMgMTYuOTI2OCAzLjkyNjg0QzE2Ljk3MzcgMy44Nzk5NiAxNyAzLjgxNjM3IDE3IDMuNzUwMDZWMy4yNTAwNkMxNyAzLjE4Mzc2IDE2Ljk3MzcgMy4xMjAxNyAxNi45MjY4IDMuMDczMjlDMTYuODc5OSAzLjAyNjQgMTYuODE2MyAzLjAwMDA2IDE2Ljc1IDMuMDAwMDZaTTUuNSA1LjAwMDA2QzUuMjAzMzMgNS4wMDAwNiA0LjkxMzMyIDQuOTEyMDkgNC42NjY2NCA0Ljc0NzI3QzQuNDE5OTcgNC41ODI0NSA0LjIyNzcxIDQuMzQ4MTggNC4xMTQxOCA0LjA3NDA5QzQuMDAwNjUgMy44IDMuOTcwOTQgMy40OTg0IDQuMDI4ODIgMy4yMDc0M0M0LjA4NjcgMi45MTY0NiA0LjIyOTU2IDIuNjQ5MTggNC40MzkzNCAyLjQzOTRDNC42NDkxMiAyLjIyOTYzIDQuOTE2MzkgMi4wODY3NiA1LjIwNzM2IDIuMDI4ODlDNS40OTgzNCAxLjk3MTAxIDUuNzk5OTQgMi4wMDA3MSA2LjA3NDAzIDIuMTE0MjVDNi4zNDgxMSAyLjIyNzc4IDYuNTgyMzggMi40MjAwNCA2Ljc0NzIgMi42NjY3MUM2LjkxMjAzIDIuOTEzMzggNyAzLjIwMzM5IDcgMy41MDAwNkM3IDMuODk3ODkgNi44NDE5NiA0LjI3OTQyIDYuNTYwNjYgNC41NjA3M0M2LjI3OTM2IDQuODQyMDMgNS44OTc4MiA1LjAwMDA2IDUuNSA1LjAwMDA2WiIgZmlsbD0iIzUwNTA1MCIvPgo8cGF0aCBkPSJNMTYuNzUgMTMuMDAwMUg5Ljk1QzkuODM1MjQgMTIuNDM0OSA5LjUyODY0IDExLjkyNjggOS4wODIxMyAxMS41NjE5QzguNjM1NjIgMTEuMTk2OSA4LjA3NjY4IDEwLjk5NzYgNy41IDEwLjk5NzZDNi45MjMzMiAxMC45OTc2IDYuMzY0MzggMTEuMTk2OSA1LjkxNzg3IDExLjU2MTlDNS40NzEzNiAxMS45MjY4IDUuMTY0NzYgMTIuNDM0OSA1LjA1IDEzLjAwMDFIMS4yNUMxLjE4MzcgMTMuMDAwMSAxLjEyMDExIDEzLjAyNjQgMS4wNzMyMiAxMy4wNzMzQzEuMDI2MzQgMTMuMTIwMiAxIDEzLjE4MzggMSAxMy4yNTAxVjEzLjc1MDFDMSAxMy44MTY0IDEuMDI2MzQgMTMuODggMS4wNzMyMiAxMy45MjY4QzEuMTIwMTEgMTMuOTczNyAxLjE4MzcgMTQuMDAwMSAxLjI1IDE0LjAwMDFINS4wNUM1LjE2NDc2IDE0LjU2NTIgNS40NzEzNiAxNS4wNzMzIDUuOTE3ODcgMTUuNDM4M0M2LjM2NDM4IDE1LjgwMzIgNi45MjMzMiAxNi4wMDI2IDcuNSAxNi4wMDI2QzguMDc2NjggMTYuMDAyNiA4LjYzNTYyIDE1LjgwMzIgOS4wODIxMyAxNS40MzgzQzkuNTI4NjQgMTUuMDczMyA5LjgzNTI0IDE0LjU2NTIgOS45NSAxNC4wMDAxSDE2Ljc1QzE2LjgxNjMgMTQuMDAwMSAxNi44Nzk5IDEzLjk3MzcgMTYuOTI2OCAxMy45MjY4QzE2Ljk3MzcgMTMuODggMTcgMTMuODE2NCAxNyAxMy43NTAxVjEzLjI1MDFDMTcgMTMuMTgzOCAxNi45NzM3IDEzLjEyMDIgMTYuOTI2OCAxMy4wNzMzQzE2Ljg3OTkgMTMuMDI2NCAxNi44MTYzIDEzLjAwMDEgMTYuNzUgMTMuMDAwMVpNNy41IDE1LjAwMDFDNy4yMDMzMyAxNS4wMDAxIDYuOTEzMzIgMTQuOTEyMSA2LjY2NjY0IDE0Ljc0NzNDNi40MTk5NyAxNC41ODI0IDYuMjI3NzEgMTQuMzQ4MiA2LjExNDE4IDE0LjA3NDFDNi4wMDA2NSAxMy44IDUuOTcwOTQgMTMuNDk4NCA2LjAyODgyIDEzLjIwNzRDNi4wODY3IDEyLjkxNjUgNi4yMjk1NiAxMi42NDkyIDYuNDM5MzQgMTIuNDM5NEM2LjY0OTEyIDEyLjIyOTYgNi45MTYzOSAxMi4wODY4IDcuMjA3MzYgMTIuMDI4OUM3LjQ5ODM0IDExLjk3MSA3Ljc5OTk0IDEyLjAwMDcgOC4wNzQwMyAxMi4xMTQyQzguMzQ4MTEgMTIuMjI3OCA4LjU4MjM4IDEyLjQyIDguNzQ3MiAxMi42NjY3QzguOTEyMDMgMTIuOTEzNCA5IDEzLjIwMzQgOSAxMy41MDAxQzkgMTMuODk3OSA4Ljg0MTk2IDE0LjI3OTQgOC41NjA2NiAxNC41NjA3QzguMjc5MzYgMTQuODQyIDcuODk3ODIgMTUuMDAwMSA3LjUgMTUuMDAwMVoiIGZpbGw9IiM1MDUwNTAiLz4KPHBhdGggZD0iTTEgOC4yNTAwNlY4Ljc1MDA2QzEgOC44MTYzNyAxLjAyNjM0IDguODc5OTYgMS4wNzMyMiA4LjkyNjg0QzEuMTIwMTEgOC45NzM3MyAxLjE4MzcgOS4wMDAwNiAxLjI1IDkuMDAwMDZIMTAuMDVDMTAuMTY0OCA5LjU2NTIxIDEwLjQ3MTQgMTAuMDczMyAxMC45MTc5IDEwLjQzODNDMTEuMzY0NCAxMC44MDMyIDExLjkyMzMgMTEuMDAyNiAxMi41IDExLjAwMjZDMTMuMDc2NyAxMS4wMDI2IDEzLjYzNTYgMTAuODAzMiAxNC4wODIxIDEwLjQzODNDMTQuNTI4NiAxMC4wNzMzIDE0LjgzNTIgOS41NjUyMSAxNC45NSA5LjAwMDA2SDE2Ljc1QzE2LjgxNjMgOS4wMDAwNiAxNi44Nzk5IDguOTczNzMgMTYuOTI2OCA4LjkyNjg0QzE2Ljk3MzcgOC44Nzk5NiAxNyA4LjgxNjM3IDE3IDguNzUwMDZWOC4yNTAwNkMxNyA4LjE4Mzc2IDE2Ljk3MzcgOC4xMjAxNyAxNi45MjY4IDguMDczMjlDMTYuODc5OSA4LjAyNjQgMTYuODE2MyA4LjAwMDA2IDE2Ljc1IDguMDAwMDZIMTQuOTVDMTQuODM1MiA3LjQzNDkyIDE0LjUyODYgNi45MjY4MyAxNC4wODIxIDYuNTYxODhDMTMuNjM1NiA2LjE5NjkyIDEzLjA3NjcgNS45OTc1NiAxMi41IDUuOTk3NTZDMTEuOTIzMyA1Ljk5NzU2IDExLjM2NDQgNi4xOTY5MiAxMC45MTc5IDYuNTYxODhDMTAuNDcxNCA2LjkyNjgzIDEwLjE2NDggNy40MzQ5MiAxMC4wNSA4LjAwMDA2SDEuMjVDMS4xODM3IDguMDAwMDYgMS4xMjAxMSA4LjAyNjQgMS4wNzMyMiA4LjA3MzI5QzEuMDI2MzQgOC4xMjAxNyAxIDguMTgzNzYgMSA4LjI1MDA2Wk0xMSA4LjUwMDA2QzExIDguMjAzMzkgMTEuMDg4IDcuOTEzMzggMTEuMjUyOCA3LjY2NjcxQzExLjQxNzYgNy40MjAwNCAxMS42NTE5IDcuMjI3NzggMTEuOTI2IDcuMTE0MjVDMTIuMjAwMSA3LjAwMDcxIDEyLjUwMTcgNi45NzEwMSAxMi43OTI2IDcuMDI4ODlDMTMuMDgzNiA3LjA4Njc2IDEzLjM1MDkgNy4yMjk2MyAxMy41NjA3IDcuNDM5NEMxMy43NzA0IDcuNjQ5MTggMTMuOTEzMyA3LjkxNjQ2IDEzLjk3MTIgOC4yMDc0M0MxNC4wMjkxIDguNDk4NCAxMy45OTk0IDguOCAxMy44ODU4IDkuMDc0MDlDMTMuNzcyMyA5LjM0ODE4IDEzLjU4IDkuNTgyNDUgMTMuMzMzNCA5Ljc0NzI3QzEzLjA4NjcgOS45MTIwOSAxMi43OTY3IDEwLjAwMDEgMTIuNSAxMC4wMDAxQzEyLjEwMjIgMTAuMDAwMSAxMS43MjA2IDkuODQyMDMgMTEuNDM5MyA5LjU2MDczQzExLjE1OCA5LjI3OTQyIDExIDguODk3ODkgMTEgOC41MDAwNloiIGZpbGw9IiM1MDUwNTAiLz4KPC9zdmc+Cg==") no-repeat 0 0}.consonant-FiltersInfo-btnText{display:block;max-width:100%;white-space:nowrap;text-overflow:ellipsis;padding-right:7px;overflow:hidden}.consonant-FiltersInfo-wrapper{position:relative;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;width:100%;padding-top:14px}.consonant-FiltersInfo-wrapper:first-child{padding-top:0}.consonant-FiltersInfo-title{max-width:540px;margin:0;font-size:1.125rem;line-height:1.375rem;font-weight:700;color:#2c2c2c;text-align:left}.consonant-FiltersInfo-results,.consonant-FiltersInfo-title{font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-style:normal;word-break:break-word}.consonant-FiltersInfo-results{display:block;margin-left:auto;padding-left:12px;font-size:.875rem;line-height:1.3125rem;font-weight:400;color:#505050;text-align:right}.consonant-FiltersInfo-results strong{font-weight:700}.consonant-FiltersInfo--withLightText .consonant-FiltersInfo-results,.consonant-FiltersInfo--withLightText .consonant-FiltersInfo-title{color:#eaeaea}.consonant-FiltersInfo>.consonant-Select{margin-left:auto}@media only screen and (min-width:1200px){.consonant-FiltersInfo{flex-wrap:nowrap;align-items:stretch;margin-left:auto;margin-right:auto;padding-bottom:28px}.consonant-FiltersInfo-wrapper{order:-1;padding:0 32px 0 0;flex-wrap:nowrap;align-items:center}.consonant-FiltersInfo-wrapper:after{content:"";position:absolute;width:1px;background-color:#e1e1e1;top:0;bottom:0;right:16px;margin:auto}.consonant-FiltersInfo-wrapper--noLine:after,.consonant-FiltersInfo-wrapper:only-child:after{display:none}.consonant-FiltersInfo-search+.consonant-FiltersInfo-wrapper:last-child{padding-right:0}.consonant-FiltersInfo-search+.consonant-FiltersInfo-wrapper:last-child:after{display:none}.consonant-FiltersInfo-results{min-width:15%;max-width:25%}.consonant-FiltersInfo-btn,.consonant-FiltersInfo-search{display:none}}@media only screen and (min-width:1440px){.consonant-FiltersInfo-title{max-width:720px}}div:not(:only-child)>.consonant-FiltersInfo .consonant-FiltersInfo-wrapper:only-child{padding-top:6px}.consonant-Search{position:relative;padding-bottom:12px}.consonant-Search label{display:flex;flex-wrap:wrap;max-width:100%;cursor:pointer;word-break:break-word}.consonant-Search-inputTitle{display:none;margin:0 0 5px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.75rem;line-height:.875rem;font-weight:400;color:#747474;font-style:normal;word-break:break-word;text-align:left;cursor:pointer}.consonant-Search-inputWrapper{position:relative;display:block;width:100%}.consonant-Search-inputWrapper:after{content:"";width:15px;height:15px;position:absolute;top:0;bottom:0;left:10px;margin:auto;background:transparent url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUiIGhlaWdodD0iMTUiIHZpZXdCb3g9IjAgMCAxNSAxNSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEzLjkyIDEyLjY3NUwxMC41ODYgOS4zNDIwMUMxMS4zOTAyIDguMjE5NTEgMTEuNzQyNyA2LjgzNTYgMTEuNTczNSA1LjQ2NTE3QzExLjQwNDMgNC4wOTQ3NSAxMC43MjU5IDIuODM4MDkgOS42NzI5MyAxLjk0NDgzQzguNjE5OTUgMS4wNTE1NiA3LjI2OTUxIDAuNTg3MDQ2IDUuODg5ODQgMC42NDM1NThDNC41MTAxNyAwLjcwMDA3MSAzLjIwMjI0IDEuMjczNDcgMi4yMjU4NSAyLjI0OTg2QzEuMjQ5NDYgMy4yMjYyNSAwLjY3NjA1MyA0LjUzNDE5IDAuNjE5NTQxIDUuOTEzODZDMC41NjMwMjkgNy4yOTM1MiAxLjAyNzU0IDguNjQzOTcgMS45MjA4MSA5LjY5Njk0QzIuODE0MDcgMTAuNzQ5OSA0LjA3MDczIDExLjQyODQgNS40NDExNiAxMS41OTc1QzYuODExNTggMTEuNzY2NyA4LjE5NTQ5IDExLjQxNDIgOS4zMTggMTAuNjFMMTIuNjUxIDEzLjk0M0MxMi44MjMyIDE0LjA5MDUgMTMuMDQ0NiAxNC4xNjc1IDEzLjI3MTEgMTQuMTU4OEMxMy40OTc3IDE0LjE1IDEzLjcxMjUgMTQuMDU2MSAxMy44NzI4IDEzLjg5NThDMTQuMDMzMSAxMy43MzU1IDE0LjEyNyAxMy41MjA3IDE0LjEzNTcgMTMuMjk0MkMxNC4xNDQ1IDEzLjA2NzcgMTQuMDY3NCAxMi44NDYyIDEzLjkyIDEyLjY3NFYxMi42NzVaTTIuMjY2IDYuMTUwMDFDMi4yNjYgNS4zODY1OCAyLjQ5MjM4IDQuNjQwMjggMi45MTY1MiA0LjAwNTUxQzMuMzQwNjYgMy4zNzA3NCAzLjk0MzUxIDIuODc1OTkgNC42NDg4NCAyLjU4Mzg0QzUuMzU0MTYgMi4yOTE2OCA2LjEzMDI4IDIuMjE1MjQgNi44NzkwNCAyLjM2NDE4QzcuNjI3ODEgMi41MTMxMiA4LjMxNTYgMi44ODA3NSA4Ljg1NTQzIDMuNDIwNThDOS4zOTUyNiAzLjk2MDQxIDkuNzYyODkgNC42NDgyIDkuOTExODMgNS4zOTY5NkMxMC4wNjA4IDYuMTQ1NzMgOS45ODQzMiA2LjkyMTg1IDkuNjkyMTcgNy42MjcxN0M5LjQwMDAyIDguMzMyNDkgOC45MDUyNyA4LjkzNTM0IDguMjcwNSA5LjM1OTQ5QzcuNjM1NzIgOS43ODM2MyA2Ljg4OTQzIDEwLjAxIDYuMTI1OTkgMTAuMDFDNS4xMDIyNiAxMC4wMSA0LjEyMDQ1IDkuNjAzMzQgMy4zOTY1NiA4Ljg3OTQ1QzIuNjcyNjcgOC4xNTU1NSAyLjI2NiA3LjE3Mzc1IDIuMjY2IDYuMTUwMDFWNi4xNTAwMVoiIGZpbGw9IiM1MDUwNTAiLz4KPC9zdmc+Cg==") no-repeat 0 0;background-size:cover;z-index:1}.consonant-Search input{box-sizing:border-box;min-height:32px;width:100%;max-width:100%;padding:0 8px 0 32px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1.875rem;font-weight:400;color:#505050;font-style:normal;word-break:break-word;text-align:left;border:1px solid #eaeaea;border-radius:5px;background-color:#fff;transition:border-color background-color .3s ease-in-out ease-in-out .3s;outline:0;box-shadow:none}.consonant-Search input::-webkit-search-cancel-button,.consonant-Search input::-webkit-search-decoration,.consonant-Search input::-webkit-search-results-button,.consonant-Search input::-webkit-search-results-decoration{display:none}.consonant-Search input::-ms-clear,.consonant-Search input::-ms-reveal{display:none;width:0;height:0}.consonant-Search input::placeholder{font-style:italic;color:#959595;transition:opacity .3s ease-in-out}.consonant-Search input:focus{padding-right:32px;border-color:#2680eb;background-color:#fff}.consonant-Search input:focus::placeholder{opacity:0}input:valid+.consonant-Search-inputClear{visibility:visible;opacity:1;pointer-events:auto}.consonant-Search-inputClear{visibility:hidden;opacity:0;position:absolute;width:20px;height:20px;top:0;bottom:0;right:6px;margin:auto;font-size:0;line-height:0;border:0;border-radius:50%;background-color:#f4f4f4;outline:0;pointer-events:none;transition:background-color .3s ease-in-out}.consonant-Search-inputClear:after,.consonant-Search-inputClear:before{content:"";position:absolute;width:8px;height:1px;top:0;bottom:0;left:0;right:0;margin:auto;background-color:#747474;transform:rotate(45deg)}.consonant-Search-inputClear:after{transform:rotate(-45deg)}.consonant-Search-inputClear:focus{border:1px solid #1492e6}@media only screen and (min-width:1200px){.consonant-Search{order:-2}.consonant-Search-inputTitle{display:block}.consonant-Search-inputClear{width:24px;height:24px}.consonant-Search-inputClear:after,.consonant-Search-inputClear:before{width:10px}.consonant-Search-inputClear:hover{background-color:#1473e6}.consonant-Search-inputClear:hover:after,.consonant-Search-inputClear:hover:before{background-color:#fff}}.consonant-Select{position:relative;width:140px;margin-bottom:10px}.consonant-Select:after{content:"";position:absolute;width:6px;height:6px;top:0;bottom:0;right:12px;margin:auto;border:1px solid #323232;z-index:1;transform:rotate(-45deg) translate3d(-1px,-2px,0);border-top:0;border-right:0;pointer-events:none}.consonant-Select-btn{box-sizing:border-box;display:block;width:100%;max-width:140px;padding:0 34px 0 12px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1.875rem;font-weight:400;color:#505050;font-style:normal;word-break:break-word;text-align:left;text-transform:capitalize;white-space:nowrap;cursor:pointer;border:1px solid #eaeaea;border-radius:5px;background-color:#fff;overflow:hidden;outline:0;text-overflow:ellipsis}.consonant-Select-btn:focus{border-color:#1492e6}.consonant-Select-btn.is-active+.consonant-Select-options{opacity:1}.consonant-Select-options{opacity:0;position:absolute;max-width:70vw;top:calc(100% + 6px);right:0;word-break:break-word;border:1px solid #eaeaea;background-color:#fff;box-shadow:0 3px 15px rgba(80,80,80,.1);transition:opacity .3s ease-in-out;z-index:5;border-radius:5px;overflow:hidden}.consonant-Select-options:empty{display:none}.consonant-Select-options--left{right:auto;left:0}.consonant-Select-option{display:block;width:100%;max-width:100%;padding:9px 30px 9px 20px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1rem;font-weight:400;color:#505050;font-style:normal;word-break:break-word;text-align:left;white-space:nowrap;text-overflow:ellipsis;background-color:#fff;transition:background-color .3s ease-in-out;outline:0;overflow:hidden;border:2px solid transparent}.consonant-Select-option:focus{border-color:#1492e6}.consonant-Select-option:hover{background-color:#f4f4f4}.consonant-Select-option.is-selected{position:relative;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1rem;font-weight:700;color:#2680eb;font-style:normal;word-break:break-word;text-align:left}.consonant-Select-option.is-selected:after{content:"";position:absolute;width:10px;height:5px;top:0;bottom:0;right:16px;margin:auto;border:2px solid #1473e6;border-top:0;border-right:0;transform:rotate(-45deg) translate3d(1px,-2px,0);pointer-events:none}.consonant-Select--autoWidth{width:100%;max-width:100%;margin-bottom:0}.consonant-Select--autoWidth:after{width:4px;height:4px;border-color:#505050}.consonant-Select--autoWidth .consonant-Select-options{min-width:140px}.consonant-Select--autoWidth .consonant-Select-btn{max-width:100%}@media only screen and (min-width:768px){.consonant-Select--autoWidth{margin-right:0}.consonant-Select--autoWidth .consonant-Select-options{width:auto}}@media only screen and (min-width:1200px){.consonant-Select{width:112px;margin-bottom:0}.consonant-Select:focus{border-color:#1492e6}.consonant-Select:after{right:4px}.consonant-Select-options{min-width:108px}.consonant-Select-option{padding-top:7px;padding-bottom:7px}.consonant-Select-btn{max-width:112px;padding-left:4px;padding-right:10px;border:2px solid transparent}}.consonant-Pagination{justify-content:space-between;align-items:center;margin-left:auto;margin-right:auto;margin-bottom:50px;user-select:none}.consonant-Pagination-paginator{display:flex;justify-content:space-between;align-items:center;flex-grow:1;overflow-x:auto}.consonant-Pagination-btn{padding-left:0;padding-right:0;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1.1875rem;font-weight:700;color:#4b4b4b;font-style:normal;word-break:break-word;text-align:left;white-space:nowrap;text-transform:capitalize;background-color:transparent;border:2px solid transparent;outline:0;transition:border-color .3s ease-in-out}.consonant-Pagination-btn:focus{border-color:#1492e6}.consonant-Pagination-items{display:flex;align-items:center;margin:0;padding:0 12px 0 20px;list-style-type:none}.consonant-Pagination-item{margin-right:7px}.consonant-Pagination-item:hover .consonant-Pagination-itemBtn{color:#2c2c2c}.consonant-Pagination-item:active .consonant-Pagination-itemBtn{color:#2c2c2c;background-color:#e1e1e1}.consonant-Pagination-item:active .consonant-Pagination-itemBtn:disabled,.consonant-Pagination-item:hover .consonant-Pagination-itemBtn:disabled,.consonant-Pagination-itemBtn:disabled{color:#b3b3b3;pointer-events:none;background-color:transparent}.consonant-Pagination-item.is-active .consonant-Pagination-itemBtn{background-color:#e1e1e1;color:#4b4b4b}.consonant-Pagination-item.is-active:active .consonant-Pagination-itemBtn,.consonant-Pagination-item.is-active:hover .consonant-Pagination-itemBtn{color:#2c2c2c}.consonant-Pagination-item.is-active .consonant-Pagination-itemBtn:disabled{color:#b3b3b3;background-color:#eaeaea}.consonant-Pagination-item:nth-of-type(n+5){display:none}.consonant-Pagination-itemBtn{position:relative;min-width:32px;min-height:32px;max-width:70px;padding:8px 10px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:.875rem;font-weight:400;color:#4b4b4b;font-style:normal;word-break:break-word;text-align:center;white-space:nowrap;text-overflow:ellipsis;border-radius:16px;outline:0;cursor:pointer;background-color:transparent;overflow:hidden}.consonant-Pagination-itemBtn:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;margin:auto;border:2px solid transparent;border-radius:30px;z-index:1}.consonant-Pagination-itemBtn:focus:after{border-color:#1492e6}.consonant-Pagination-summary{display:none;max-width:30%;align-items:center;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1.3125rem;font-weight:400;color:#505050;font-style:normal;word-break:break-word;text-align:right;margin-left:auto}@media only screen and (min-width:768px){.consonant-Pagination-paginator{justify-content:center}}@media only screen and (min-width:1200px){.consonant-Pagination{display:flex;justify-content:space-between;align-items:center;margin-bottom:100px}.consonant-Pagination-paginator{justify-content:flex-start;margin:0}.consonant-Pagination-btn{max-width:15%;overflow:hidden;text-overflow:ellipsis}.consonant-Pagination-item:nth-of-type(n+5){display:list-item}.consonant-Pagination-item:nth-of-type(n+11){display:none}.consonant-Pagination-summary{display:block}}.consonant-LoadMore{display:block;margin-left:auto;margin-right:auto;padding-bottom:115px;text-align:center;user-select:none}.consonant-LoadMore-inner{display:flex;flex-direction:column;align-items:center}.consonant-LoadMore-text{margin:0 0 14px;font-weight:400;transition:color .3s ease-in-out}.consonant-LoadMore-btn,.consonant-LoadMore-text{max-width:75%;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1.1875rem;color:#505050;font-style:normal;word-break:break-word;text-align:center}.consonant-LoadMore-btn{box-sizing:border-box;padding:5px 13px;font-weight:700;text-transform:capitalize;background-color:transparent;border:2px solid #505050;border-radius:30px;outline:0;user-select:none;transition:color .3s ease-in-out,background-color .3s ease-in-out,border-color .3s ease-in-out}.consonant-LoadMore-btn:hover{background-color:#505050;color:#fff}.consonant-LoadMore-btn:active{background-color:#323232;border-color:#323232;color:#fff}.consonant-LoadMore-btn:focus{outline:0}@media only screen and (min-width:1200px){.consonant-LoadMore-btn:focus{outline:2px solid #1492e6}}@media (prefers-color-scheme:dark){.consonant-LoadMore-btn{color:#c8c8c8;border-color:#c8c8c8}.consonant-LoadMore-btn:hover{background-color:#c8c8c8;color:#080808}.consonant-LoadMore-btn:active{background-color:#efefef;border-color:#efefef;color:#080808}.consonant-LoadMore-text{color:#c8c8c8}}.consonant-LoadMore--overBg .consonant-LoadMore-btn{border-color:#fff;color:#fff}.consonant-LoadMore--overBg .consonant-LoadMore-btn:active,.consonant-LoadMore--overBg .consonant-LoadMore-btn:hover{background-color:#fff;border-color:#fff;color:#505050}.consonant-LoadMore--themeThree .consonant-LoadMore-btn{color:#505050;border-color:#505050;background-color:transparent}.consonant-LoadMore--themeThree .consonant-LoadMore-btn:active,.consonant-LoadMore--themeThree .consonant-LoadMore-btn:hover{color:#fff;border-color:#505050;background-color:#505050}.consonant-LoadMore--themeThree .consonant-LoadMore-text{color:#505050}.consonant-LoadMore--overBg .consonant-LoadMore-text{color:#fff}@media only screen and (min-width:768px){.consonant-LoadMore{padding-bottom:121px}}@media only screen and (min-width:1440px){.consonant-LoadMore{padding-bottom:140px}}.consonant-Loader{box-sizing:border-box;display:inline-block;position:relative;width:16px;height:16px;border-radius:50%;overflow:hidden}.consonant-Loader--absolute{position:absolute;top:0;bottom:0;left:0;right:0;margin:auto;z-index:9}.consonant-Loader:after{content:"";position:absolute;box-sizing:border-box;top:0;bottom:0;left:0;right:0;border:2px solid #eaeaea;border-radius:50%;z-index:0}.consonant-Loader div{box-sizing:border-box;display:block;position:absolute;width:16px;height:16px;border:2px solid #2680eb;border-radius:100%;animation:circle 1s ease-in infinite;transform-origin:50% 50%;border-color:#2680eb transparent transparent;z-index:2;opacity:1;overflow:visible}.consonant-Loader div:first-child{animation-delay:-.1s}.consonant-Loader div:nth-child(2),.consonant-Loader div:nth-child(3){animation-delay:-.14s}.consonant-Loader--medium{width:32px;height:32px}.consonant-Loader--medium:after,.consonant-Loader--medium div{width:32px;height:32px;border-width:4px}.consonant-Loader--big{width:64px;height:64px}.consonant-Loader--big:after,.consonant-Loader--big div{width:64px;height:64px;border-width:5px}[data-tooltip-wrapper]{position:relative;overflow:visible}@media only screen and (min-width:1200px){[data-tooltip-wrapper]:hover .consonant-Tooltip{z-index:6000000;animation-name:fade-in-up;animation-duration:.3s;animation-delay:.2s;animation-timing-function:ease-in-out;animation-fill-mode:forwards}}.consonant-Tooltip{position:absolute;display:none;width:160px;padding:7px 14px;bottom:calc(100% + 9px);left:-72px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.75rem;line-height:1rem;font-weight:400;color:#fff;font-style:normal;word-break:break-word;text-align:center;text-decoration:none;border-radius:8px;background-color:#747474;z-index:-1;user-select:text;opacity:0}.consonant-Tooltip:after{content:"";position:absolute;width:6px;height:6px;bottom:-3px;left:0;right:0;margin:auto;background-color:#747474;transform-origin:50% 50%;transform:rotate(45deg)}@media only screen and (min-width:1200px){.consonant-Tooltip{display:block}}.consonant-SearchResult{background-color:rgba(250,124,19,.4)}.consonant-Bookmarks{position:relative;padding:19px 16px;background-color:transparent;order:1;border:0;outline:0;border-top:1px solid #eaeaea}.consonant-Bookmarks+div:last-child{margin-top:0}.consonant-Bookmarks-itemBadge{display:block;position:absolute;min-width:24px;max-width:100px;height:24px;margin:auto;padding:5px 7px;top:0;bottom:0;right:16px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:.875rem;font-weight:700;color:#fff;font-style:normal;word-break:break-word;text-align:center;white-space:nowrap;text-overflow:ellipsis;border-radius:15px;background-color:#1473e6;z-index:1;opacity:1;border:0;outline:0;transition:opacity .3s ease-in-out;transition-delay:.1s;overflow:hidden}.consonant-Bookmarks-icoWrapper{display:flex;justify-content:flex-start;align-items:center;padding:0;background-color:transparent;border:0;outline:0}.consonant-Bookmarks-icoWrapper .consonant-Bookmarks-ico{display:block;min-width:16px;height:16px;margin-right:6px;background:transparent url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxNSAxMyc+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOm5vbmU7c3Ryb2tlOiM3MDcwNzB9PC9zdHlsZT48L2RlZnM+PHBhdGggY2xhc3M9J2Nscy0xJyBkPSdNMTAuNjguNUE0IDQgMCAwIDAgNy41IDIuNDEgNCA0IDAgMCAwIDQuMzIuNSAzLjgyIDMuODIgMCAwIDAgLjUgNC4zMmMwIDMuNjUgNyA4LjI3IDcgOC4yN3M3LTQuNTggNy04LjI3QTMuODIgMy44MiAwIDAgMCAxMC42OC41eicvPjwvc3ZnPg==") no-repeat 50% 50%;background-size:contain}.consonant-Bookmarks-title{display:block;padding-right:55px;padding-bottom:1px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1rem;font-weight:700;color:#505050;font-style:normal;word-break:break-word;text-align:left;transition:color .3s ease-in-out}.consonant-Bookmarks.is-selected .consonant-Bookmarks-ico{background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxNSAxMyc+PGRlZnM+PHN0eWxlPi5jbHMtMXtmaWxsOiMxNDkyZTY7c3Ryb2tlOiMxNDkyZTZ9PC9zdHlsZT48L2RlZnM+PHBhdGggY2xhc3M9J2Nscy0xJyBkPSdNMTAuNjguNUE0IDQgMCAwIDAgNy41IDIuNDEgNCA0IDAgMCAwIDQuMzIuNSAzLjgyIDMuODIgMCAwIDAgLjUgNC4zMmMwIDMuNjUgNyA4LjI3IDcgOC4yN3M3LTQuNTggNy04LjI3QTMuODIgMy44MiAwIDAgMCAxMC42OC41eicvPjwvc3ZnPg==")}@media only screen and (min-width:1200px){.consonant-Bookmarks{position:relative;display:flex;margin-top:-1px;padding:14px 0;border:2px solid transparent;order:0}.consonant-Bookmarks:focus{border-color:#1492e6}.consonant-Bookmarks:after{content:"";position:absolute;display:block;height:1px;width:100%;left:0;top:0;background-color:#eaeaea;z-index:1}.consonant-Bookmarks-itemBadge{right:30px;font-size:.875rem;line-height:.875rem}.consonant-Bookmarks-itemBadge:active,.consonant-Bookmarks-itemBadge:hover{font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:.875rem;font-weight:700;color:#fff;font-style:normal;word-break:break-word;text-align:center}.consonant-Bookmarks-title:hover{color:#707070}}.consonant-SearchIco{display:flex;justify-content:center;align-items:center;box-sizing:border-box;align-self:stretch;height:32px;padding-left:20px;padding-right:20px;border:0;outline:0;background-color:transparent;transition:background-color .15s ease-in-out;font-size:0;line-height:0}.consonant-SearchIco:active,.consonant-SearchIco:hover{background-color:hsla(0,0%,92%,.3)}.consonant-SearchIco span{display:block;width:15px;height:15px;background:transparent url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNScgaGVpZ2h0PScxNScgdmlld0JveD0nMCAwIDE1IDE1Jz48ZGVmcz48c3R5bGU+LmF7ZmlsbDojZmYxM2RjO29wYWNpdHk6MH0uYntmaWxsOiM1MDUwNTB9PC9zdHlsZT48L2RlZnM+PHBhdGggY2xhc3M9J2EnIGQ9J00wIDBoMTV2MTVIMHonLz48cGF0aCBjbGFzcz0nYicgZD0nTTEzLjUyNyAxMi40MzVMMTAuMzggOS4yODlhNS4xOTIgNS4xOTIgMCAxIDAtMS4yIDEuMmwzLjE0NiAzLjE0NmEuODUuODUgMCAwIDAgMS4yLTEuMnptLTExLTYuMTU5QTMuNjQzIDMuNjQzIDAgMSAxIDYuMTcgOS45MmEzLjY0MyAzLjY0MyAwIDAgMS0zLjY0My0zLjY0NHonLz48L3N2Zz4=") no-repeat 0 0;background-size:contain}@media only screen and (min-width:1200px){.consonant-SearchIco{padding-left:18px;padding-right:18px;border:2px solid transparent}.consonant-SearchIco:focus{border-color:#1492e6}}.consonant-NoResultsView{max-width:86%;margin-left:auto;margin-right:auto;margin-bottom:20px;padding:24px;overflow:hidden}.consonant-NoResultsView-title{display:block;margin-bottom:20px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:1.125rem;line-height:1.6875rem;font-weight:400;color:#505050;font-style:normal;word-break:break-word;text-align:center}.consonant-NoResultsView-description{text-align:center}.consonant-NoResultsView-description *{font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1.3125rem;font-weight:400;color:#505050;font-style:normal;word-break:break-word;text-align:center}.consonant-NoResultsView-description strong{font-weight:700}.consonant-NoResultsView--withLightText .consonant-NoResultsView-description *,.consonant-NoResultsView--withLightText .consonant-NoResultsView-title{color:#fff}.consonant-Wrapper--carousel{display:flex;justify-content:center}.consonant-Wrapper--carousel .consonant-Wrapper-inner{max-width:1200px;width:83.4%}@media only screen and (max-width:1199px){.consonant-Wrapper--carousel .consonant-Wrapper-inner{padding:0;width:100%}}@media only screen and (max-width:599px){.consonant-Wrapper--carousel .consonant-Wrapper-inner{padding:0;max-width:100%;width:100%}}.consonant-Wrapper--carousel .consonant-Wrapper-collection{min-height:100%;min-width:100%}.consonant-Wrapper--carousel .consonant-Wrapper-collection.is-loading{min-height:496px}.consonant-Wrapper--carousel .consonant-Container--carousel{min-width:100%;padding:8px 0;overflow-x:scroll;scroll-behavior:smooth}@media screen and (min-width:1200px){.consonant-Wrapper--carousel .consonant-Container--carousel{overflow:-moz-scrollbars-none;-ms-overflow-style:none}.consonant-Wrapper--carousel .consonant-Container--carousel::-webkit-scrollbar{height:0!important}}@media only screen and (max-width:1199px){.consonant-Wrapper--carousel .consonant-Container--carousel{padding-left:24px;padding-right:0}}@media only screen and (max-width:599px){.consonant-Wrapper--carousel .consonant-Container--carousel{overflow:auto;padding-bottom:24px;padding-left:8px}}.consonant-Wrapper--carousel .consonant-CarouselInfo{display:flex;padding-left:16px;justify-content:space-between}@media screen and (min-width:600px) and (max-width:1199px){.consonant-Wrapper--carousel .consonant-CarouselInfo{padding-left:32px}}.consonant-Wrapper--carousel .consonant-CarouselInfo-collectionTitle{margin:0;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:1.125rem;line-height:1.375rem;font-weight:700;color:#2c2c2c;font-style:normal;word-break:break-word;text-align:left}.consonant-Wrapper--carousel .consonant-CarouselInfo-collectionTitle--withLightText{color:#fff}.consonant-Wrapper--carousel .consonant-CarouselInfo-results{display:block;margin-left:auto;padding-left:12px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1.3125rem;font-weight:400;color:#505050;font-style:normal;word-break:break-word;text-align:right}.consonant-Wrapper--carousel .consonant-CarouselInfo-results strong{font-weight:700}.consonant-Wrapper--carousel .consonant-CarouselInfo-results--withLightText{color:#eaeaea}.consonant-Wrapper--carousel .consonant-CardsGrid{grid-auto-flow:column;justify-content:flex-start;padding:8px 0;width:100%}@media only screen and (max-width:599px){.consonant-Wrapper--carousel .consonant-CardsGrid{width:1200px}}.consonant-Wrapper--carousel .consonant-CardsGrid:after{display:block;content:"";height:100%;margin-left:-16px}.consonant-Wrapper--carousel .consonant-CardsGrid--2up{grid-template-columns:repeat(auto-fill,minmax(500px,500px))}.consonant-Wrapper--carousel .consonant-CardsGrid--2up .consonant-Card{min-width:500px}.consonant-Wrapper--carousel .consonant-CardsGrid--2up:after{width:1px}@media only screen and (max-width:599px){.consonant-Wrapper--carousel .consonant-CardsGrid--2up{grid-template-columns:repeat(auto-fit,clamp(300px,90vw,500px))}.consonant-Wrapper--carousel .consonant-CardsGrid--2up .consonant-Card{min-width:300px;width:clamp(300px,90vw,500px)}.consonant-Wrapper--carousel .consonant-CardsGrid--2up:after{padding:0;width:1px}}.consonant-Wrapper--carousel .consonant-CardsGrid--3up{grid-template-columns:repeat(auto-fill,minmax(378px,378.5px))}.consonant-Wrapper--carousel .consonant-CardsGrid--3up .consonant-Card{min-width:378.5px}.consonant-Wrapper--carousel .consonant-CardsGrid--3up:after{width:1px}@media only screen and (max-width:599px){.consonant-Wrapper--carousel .consonant-CardsGrid--3up{grid-template-columns:repeat(auto-fit,clamp(300px,90vw,378px))}.consonant-Wrapper--carousel .consonant-CardsGrid--3up .consonant-Card{min-width:300px;width:clamp(300px,90vw,378px)}.consonant-Wrapper--carousel .consonant-CardsGrid--3up:after{padding:0;width:1px}}.consonant-Wrapper--carousel .consonant-CardsGrid--4up{grid-template-columns:repeat(auto-fill,minmax(276px,276px))}.consonant-Wrapper--carousel .consonant-CardsGrid--4up .consonant-Card{min-width:276px}.consonant-Wrapper--carousel .consonant-CardsGrid--4up:after{width:1px}@media only screen and (max-width:599px){.consonant-Wrapper--carousel .consonant-CardsGrid--4up{grid-template-columns:repeat(auto-fit,minmax(276px,max-content))}.consonant-Wrapper--carousel .consonant-CardsGrid--4up:after{padding:0;width:1px}}.consonant-Wrapper--carousel .consonant-CardsGrid--5up{grid-template-columns:repeat(auto-fill,minmax(228px,228px))}.consonant-Wrapper--carousel .consonant-CardsGrid--5up .consonant-Card{min-width:228px}.consonant-Wrapper--carousel .consonant-CardsGrid--5up:after{width:1px}@media only screen and (max-width:599px){.consonant-Wrapper--carousel .consonant-CardsGrid--5up{grid-template-columns:repeat(auto-fit,minmax(225px,max-content))}.consonant-Wrapper--carousel .consonant-CardsGrid--5up .consonant-Card{min-width:225px}.consonant-Wrapper--carousel .consonant-CardsGrid--5up:after{padding:0;width:1px}}@media screen and (max-width:599px){.consonant-Wrapper--carousel .consonant-CardsGrid--with4xGutter{padding-left:8px}}.consonant-Wrapper--carousel .consonant-Navigation--carousel{display:none}@media screen and (min-width:600px){.consonant-Wrapper--carousel .consonant-Navigation--carousel{display:block}}.consonant-Wrapper--carousel .consonant-Navigation--carousel button{background:#efefef;border-radius:100%;display:block;height:34px;outline:none;position:absolute;right:0;top:50%;transform:translate(50%,-50%);animation:carousel-fade-button 1s;transition:all .3s ease;width:34px;z-index:5}@media only screen and (max-width:1199px){.consonant-Wrapper--carousel .consonant-Navigation--carousel button{margin-right:36px}}.consonant-Wrapper--carousel .consonant-Navigation--carousel button.consonant-Button--previous{left:0;right:auto;transform:translate(-50%,-50%) rotate(180deg)}.consonant-Wrapper--carousel .consonant-Navigation--carousel button:after,.consonant-Wrapper--carousel .consonant-Navigation--carousel button:before{background-color:#505050;border-bottom-left-radius:25% 60%;border-bottom-right-radius:25% 60%;border-top-left-radius:25% 60%;border-top-right-radius:25%;content:"";display:block;height:3px;left:17px;position:absolute;top:14px;transform-origin:left center;transform:rotate(45deg) translate(-50%,-50%);width:11px;z-index:1}.consonant-Wrapper--carousel .consonant-Navigation--carousel button:after{border-bottom-left-radius:25% 60%;border-bottom-right-radius:25%;border-top-left-radius:25% 60%;border-top-right-radius:25% 60%;top:18px;transform:rotate(-45deg) translate(-50%,50%)}.consonant-Wrapper--carousel .consonant-Navigation--carousel button:hover:after,.consonant-Wrapper--carousel .consonant-Navigation--carousel button:hover:before{background-color:#000}.modalContainer .modal.stuck-above-footer{bottom:0;position:absolute;width:100%}.modalContainer .modal.stuck-above-footer .dexter-Modal_overlay{position:absolute}.dexter-Modal_overlay{display:flex;opacity:0;position:fixed;transition:opacity 125ms ease-in-out,background-color 125ms ease-in-out,backdrop-filter 125ms ease-in-out,-webkit-backdrop-filter 125ms ease-in-out,transform 125ms ease-in-out;visibility:hidden}.dexter-Modal_overlay.is-Open{align-items:center;background:none;bottom:0;justify-content:center;left:0;opacity:1;right:0;top:0;visibility:visible}.dexter-Modal_overlay.closePlacement-outsideTopRight{padding:5.125rem 2.625rem 2.625rem}.dexter-Modal_overlay.closePlacement-outsideTopRight .dexter-CloseButton{right:-2.0625rem;top:-2.0625rem}.dexter-Modal_overlay[data-conf-display*=onPageLoad],.dexter-Modal_overlay[data-conf-preset*=NoClose]{pointer-events:none;z-index:110}.dexter-Modal_overlay[data-conf-display*=onHashChange]:not([data-conf-preset*=NoClose]){background-color:rgba(0,0,0,.9);pointer-events:all;z-index:200}.dexter-Modal_overlay[data-conf-preset*=NoClose] .dexter-Modal{display:block;opacity:1;visibility:visible}.dexter-Modal_overlay[data-conf-preset*=NoClose] .dexter-CloseButton{display:none}.dexter-Modal_overlay.mobile-place-top{align-items:flex-start}.dexter-Modal_overlay.mobile-place-middle{align-items:center}.dexter-Modal_overlay.mobile-place-bottom,.dexter-Modal_overlay[data-conf-preset*=stickyBottom]{align-items:flex-end}@media only screen and (min-width:37.5rem){.dexter-Modal_overlay.tablet-place-top{align-items:flex-start}.dexter-Modal_overlay.tablet-place-middle{align-items:center}.dexter-Modal_overlay.tablet-place-bottom,.dexter-Modal_overlay[data-conf-preset*=stickyBottom]{align-items:flex-end}.dexter-Modal_overlay.tablet-place-left{justify-content:flex-start}.dexter-Modal_overlay.tablet-place-center{justify-content:center}.dexter-Modal_overlay.tablet-place-right{justify-content:flex-end}}@media only screen and (min-width:75rem){.dexter-Modal_overlay.closePlacement-outsideTopRight{padding-top:7.625rem}.dexter-Modal_overlay.desktop-place-top{align-items:flex-start}.dexter-Modal_overlay.desktop-place-middle{align-items:center}.dexter-Modal_overlay.desktop-place-bottom,.dexter-Modal_overlay[data-conf-preset*=stickyBottom]{align-items:flex-end}.dexter-Modal_overlay.desktop-place-left{justify-content:flex-start}.dexter-Modal_overlay.desktop-place-center{justify-content:center}.dexter-Modal_overlay.desktop-place-right{justify-content:flex-end}}.dexter-Modal{display:none;opacity:0;pointer-events:all;visibility:hidden;width:100%}.dexter-Modal:focus{outline:none}.dexter-Modal.is-Open{background:#fff;display:block;opacity:1;position:relative;visibility:visible}.dexter-Modal.mobile-height-100{height:100%}.dexter-Modal.mobile-height-auto,[data-conf-preset*=stickyBottom] .dexter-Modal{height:auto}.dexter-Modal.mobile-height-auto>.aem-Grid,[data-conf-preset*=stickyBottom] .dexter-Modal>.aem-Grid{max-height:calc(100vh - 150px);overflow-x:hidden;overflow-y:auto}.dexter-Modal.drop-shadow{box-shadow:0 .5em 1em -.125em hsla(0,0%,4%,.1),0 0 0 1px hsla(0,0%,4%,.02)}.dexter-Modal .dexter-CloseButton{border:3px solid transparent;border-radius:50%;height:24px;position:absolute;right:5px;top:5px;width:24px;z-index:1}.dexter-Modal .dexter-CloseButton.focus-ring{outline:3px solid #1473e6}.dexter-Modal .dexter-CloseButton .dexter-CloseButton_icon:after{content:"";height:44px;left:-13px;position:absolute;top:-13px;width:44px}.dexter-Modal .dexter-CloseButton .dexter-CloseButton_icon.spectrum-close-circle-light:after{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NCIgaGVpZ2h0PSI0NCI+PHBhdGggZD0iTTI5IDE1YTEwIDEwIDAgMSAwIDAgMTQuMTJBMTAgMTAgMCAwIDAgMjkgMTVabS0zLjExIDExLjc0YS41LjUgMCAwIDEtLjcxIDBMMjIgMjMuNTZsLTMuMTggMy4xOGEuNS41IDAgMCAxLS43MSAwbC0uODUtLjg1YS41LjUgMCAwIDEgMC0uNzFMMjAuNDQgMjJsLTMuMTgtMy4xOGEuNS41IDAgMCAxIDAtLjcxbC44NS0uODVhLjUuNSAwIDAgMSAuNzEgMEwyMiAyMC40NGwzLjE4LTMuMThhLjUuNSAwIDAgMSAuNzEgMGwuODUuODVhLjUuNSAwIDAgMSAwIC43MUwyMy41NSAyMmwzLjE4IDMuMThhLjUuNSAwIDAgMSAwIC43MVoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=")}.dexter-Modal .dexter-CloseButton .dexter-CloseButton_icon.spectrum-close-circle-dark:after{background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NCIgaGVpZ2h0PSI0NCI+PHBhdGggZD0iTTI5IDE1YTEwIDEwIDAgMSAwIDAgMTQuMTJBMTAgMTAgMCAwIDAgMjkgMTVabS0zLjExIDExLjc0YS41LjUgMCAwIDEtLjcxIDBMMjIgMjMuNTZsLTMuMTggMy4xOGEuNS41IDAgMCAxLS43MSAwbC0uODUtLjg1YS41LjUgMCAwIDEgMC0uNzFMMjAuNDQgMjJsLTMuMTgtMy4xOGEuNS41IDAgMCAxIDAtLjcxbC44NS0uODVhLjUuNSAwIDAgMSAuNzEgMEwyMiAyMC40NGwzLjE4LTMuMThhLjUuNSAwIDAgMSAuNzEgMGwuODUuODVhLjUuNSAwIDAgMSAwIC43MUwyMy41NSAyMmwzLjE4IDMuMThhLjUuNSAwIDAgMSAwIC43MVoiIGZpbGw9IiM3MDcwNzAiLz48L3N2Zz4=")}.dexter-Modal .aem-Grid{height:100%;overflow:auto}.dexter-Modal .aem-Grid.focus-ring,.dexter-Modal .aem-Grid:focus{outline:none}@media only screen and (min-width:37.5rem){.dexter-Modal.tablet-width-100{width:100%}.dexter-Modal.tablet-width-240{width:15rem}.dexter-Modal.tablet-width-360{width:22.5rem}.dexter-Modal.tablet-width-480{width:30rem}.dexter-Modal.tablet-width-640{width:40rem}.dexter-Modal.tablet-height-100{height:100%;top:0}.dexter-Modal.tablet-height-240{height:15rem}.dexter-Modal.tablet-height-360{height:22.5rem}.dexter-Modal.tablet-height-480{height:30rem}.dexter-Modal.tablet-height-640{height:40rem}.dexter-Modal.tablet-height-auto,[data-conf-preset*=stickyBottom] .dexter-Modal{height:auto}.dexter-Modal.tablet-height-auto>.aem-Grid,[data-conf-preset*=stickyBottom] .dexter-Modal>.aem-Grid{max-height:calc(100vh - 60px);overflow-x:hidden;overflow-y:auto}}@media only screen and (max-device-width:56.1875rem) and (orientation:landscape){.dexter-Modal.tablet-height-auto#languageNavigation{height:100%}}@media only screen and (min-width:75rem){.dexter-Modal.desktop-width-100{width:100%}.dexter-Modal.desktop-width-240{width:15rem}.dexter-Modal.desktop-width-360{width:22.5rem}.dexter-Modal.desktop-width-480{width:30rem}.dexter-Modal.desktop-width-640{width:40rem}.dexter-Modal.desktop-width-1024{width:64rem}.dexter-Modal.desktop-height-100{height:100%;top:0}.dexter-Modal.desktop-height-240{height:15rem}.dexter-Modal.desktop-height-360{height:22.5rem}.dexter-Modal.desktop-height-480{height:30rem}.dexter-Modal.desktop-height-640{height:40rem}.dexter-Modal.desktop-height-1024{height:64rem}.dexter-Modal.desktop-height-auto,.dexter-Modal.mobile-height-auto,.dexter-Modal.tablet-height-auto,[data-conf-preset*=stickyBottom] .dexter-Modal{height:auto}.dexter-Modal.desktop-height-auto>.aem-Grid,.dexter-Modal.mobile-height-auto>.aem-Grid,.dexter-Modal.tablet-height-auto>.aem-Grid,[data-conf-preset*=stickyBottom] .dexter-Modal>.aem-Grid{max-height:100vh;overflow-x:hidden;overflow-y:auto}}.consonant-TopFilters{display:block;margin:0 auto;padding-bottom:16px}.consonant-TopFilters-inner{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;max-width:100%}.consonant-TopFilters-filters:last-child>div:last-child{margin-right:0}.consonant-TopFilters-inner>:not(.consonant-TopFilters-filtersWrapper):first-child{margin-left:auto;margin-right:0}.consonant-TopFilters-searchWrapper{display:block;order:-2}.consonant-TopFilters-filtersWrapper{display:flex;justify-content:flex-end;align-items:flex-start;flex-grow:1;max-width:calc(100% - 140px * .85 - 8px)}.consonant-TopFilters-filtersWrapper:first-child{max-width:100%;justify-content:flex-start}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.consonant-TopFilters-filtersWrapper{flex-basis:100%}}.consonant-TopFilters-filtersWrapper+*{margin-left:auto}.consonant-TopFilters-filters{display:flex;justify-content:flex-start;align-items:stretch;margin-right:16px;overflow-y:auto}.consonant-TopFilters-filters:last-child{margin-right:0}.consonant-TopFilters-filters>div h3 button{white-space:nowrap}.consonant-TopFilters-filters.consonant-TopFilters-filters--truncated>div h3 button{white-space:nowrap}.consonant-TopFilters-moreBtn{margin-bottom:8px;padding:5px 12px 6px;font-size:.875rem;line-height:1.1875rem;font-weight:700;color:#505050;text-align:center;text-transform:capitalize;background-color:#fff;border:1px solid #eaeaea;border-radius:16px;outline:0}.consonant-TopFilters-moreBtn,.consonant-TopFilters-title{display:none;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-style:normal;word-break:break-word;user-select:none;white-space:nowrap}.consonant-TopFilters-title{margin-right:12px;min-width:55px;max-width:20%;text-overflow:ellipsis;overflow:hidden;font-size:1rem;line-height:2rem;font-weight:600;color:#2c2c2c;text-align:left}.consonant-TopFilters-clearBtnWrapper{position:sticky;display:flex;justify-content:center;align-items:center;right:0;min-height:32px;max-width:40%}.consonant-TopFilters-clearBtnWrapper:empty{margin-left:-16px;overflow:visible}.consonant-TopFilters-clearBtnWrapper--withBlur:after{content:"";position:absolute;width:56px;height:100%;background:transparent linear-gradient(270deg,#fff,hsla(0,0%,100%,0)) 0 0 no-repeat padding-box;top:0;bottom:0;right:100%;margin:auto;z-index:2;pointer-events:none}.consonant-TopFilters-clearBtn{padding:0;max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:2rem;font-weight:700;color:#1473e6;font-style:normal;word-break:break-word;text-align:right;background-color:transparent}.consonant-TopFilters-clearBtn:focus{outline:0}@media only screen and (min-width:1200px){.consonant-TopFilters-clearBtn:focus{outline:2px solid #1492e6}}.consonant-TopFilters-selectWrapper{display:flex;justify-content:flex-end;width:119px;margin-right:8px;order:-1;overflow:visible}.consonant-TopFilters-selectWrapper:only-child{margin-left:auto;margin-right:0}.consonant-TopFilters-searchIcoWrapper{display:none}.consonant-TopFilters-infoWrapper{position:relative;display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;width:100%;padding-top:16px}.consonant-TopFilters-infoWrapper:only-child{padding-top:0}.consonant-TopFilters-collectionTitle{margin:0;font-size:1.125rem;line-height:1.375rem;font-weight:700;color:#2c2c2c;text-align:left}.consonant-TopFilters-collectionTitle,.consonant-TopFilters-results{font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-style:normal;word-break:break-word}.consonant-TopFilters-results{display:block;margin-left:auto;padding-left:12px;font-size:.875rem;line-height:1.3125rem;font-weight:400;color:#505050;text-align:right}.consonant-TopFilters-results strong{font-weight:700}.consonant-TopFilters--withLightText .consonant-TopFilters-collectionTitle,.consonant-TopFilters--withLightText .consonant-TopFilters-results,.consonant-TopFilters--withLightText .consonant-TopFilters-title{color:#fff}.consonant-TopFilters:empty{display:none}@media only screen and (min-width:768px){.consonant-TopFilters{padding-bottom:32px}.consonant-TopFilters-filtersWrapper{max-width:60%;justify-content:flex-start;margin-right:16px}.consonant-TopFilters-title{display:block}.consonant-TopFilters-filters{align-items:flex-start;flex-wrap:wrap;overflow:hidden}.consonant-TopFilters-filters--truncated{justify-content:flex-start;flex-wrap:nowrap;overflow-x:auto}.consonant-TopFilters-filters--truncated .consonant-TopFilters-filters-moreBtn{display:block;min-width:120px;margin-right:24px}.consonant-TopFilters-filters--truncated>div:nth-child(n+4){display:none}.consonant-TopFilters-filters>div h3 button{white-space:normal}.consonant-TopFilters-clearBtnWrapper:after{display:none}.consonant-TopFilters-moreBtn{display:block;min-width:auto}.consonant-TopFilters-selectWrapper{max-width:140px;order:0;margin-right:0}.consonant-TopFilters-searchIcoWrapper{position:relative;display:flex;justify-content:center;align-items:center;min-width:55px;min-height:24px}.consonant-TopFilters-searchIcoWrapper>div{position:relative;width:268px;top:0;right:20px;z-index:3;margin-bottom:-20px}.consonant-TopFilters-searchIcoWrapper:only-child>div{right:0}.consonant-TopFilters-searchIcoWrapper>div+button{display:none;margin:0;padding:0}}@media only screen and (min-width:1200px){.consonant-TopFilters-searchIcoWrapper label>span:first-child{display:none}.consonant-TopFilters-selectWrapper{min-width:auto;max-width:160px;margin-right:0;margin-left:0}.consonant-TopFilters-selectWrapper>div:first-child>button{padding-left:12px;padding-right:12px;border:1px solid #eaeaea;border-radius:4px}.consonant-TopFilters-selectWrapper>div:first-child:after{right:12px}.consonant-TopFilters-filters{overflow:visible}.consonant-TopFilters-filters.consonant-TopFilters-filters--truncated{justify-content:flex-start;flex-wrap:wrap;overflow:visible}.consonant-TopFilters-filters.consonant-TopFilters-filters--truncated>div:last-child{margin-right:0}.consonant-TopFilters .is-opened{margin-bottom:8px}}.consonant-TopFilter{position:relative;margin-right:8px;margin-bottom:8px;cursor:pointer;user-select:none;border:0;outline:0}.consonant-TopFilter:after{content:"";position:absolute;top:0;bottom:0;right:8px;margin:auto;width:4px;height:4px;border:1px solid #747474;transform:rotate(-45deg) translate3d(1px,-2px,0);border-top:0;border-right:0;pointer-events:none}.consonant-TopFilter-inner{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;width:100%;max-width:100%;max-height:90vh;background-color:transparent;border-radius:5px}.consonant-TopFilter-selectedItems,.consonant-TopFilter-selectedItems ul~.consonant-TopFilter-footer{display:none}.consonant-TopFilter-name{display:flex;align-items:center;margin:2px 0}.consonant-TopFilter-link{display:flex;justify-content:space-between;align-items:center;width:100%;max-width:100%;padding:5px 17px 6px 12px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1.1875rem;font-weight:400;color:#505050;font-style:normal;word-break:break-word;text-align:left;text-transform:capitalize;text-decoration:none;border:1px solid #eaeaea;border-radius:4px;background-color:#fff;outline:0;cursor:pointer}.consonant-TopFilter-link:focus{outline:0}@media only screen and (min-width:1200px){.consonant-TopFilter-link:focus{outline:2px solid #1492e6}}.consonant-TopFilter-selectedItemsQty{display:block;position:relative;margin:0 0 0 9px;padding:0 6px;overflow:visible;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1.1875rem;font-weight:400;color:#323232;font-style:normal;word-break:break-word;text-align:left}.consonant-TopFilter-selectedItemsQty:after{content:"";position:absolute;width:1px;height:calc(100% + 4px + 3px);left:0;top:-4px;background-color:#eaeaea}.consonant-TopFilter-selectedItemsQty:empty{display:none}.consonant-TopFilter-items{display:block;height:50vh;margin:auto 0 0;padding:0;list-style-type:none;border-top:1px solid #eaeaea;overflow-y:auto;cursor:default}.consonant-TopFilter-items--clipped{padding-bottom:32px}.consonant-TopFilter-bg{position:relative;display:none;overflow:visible}.consonant-TopFilter-bg:after{content:"";position:absolute;width:100%;max-width:100%;height:20px;left:0;right:0;bottom:100%;background:transparent linear-gradient(180deg,hsla(0,0%,100%,.3),#fff) no-repeat 0 0;z-index:1;pointer-events:none}.consonant-TopFilter-items.consonant-TopFilter-items--clipped+aside{display:block}.consonant-TopFilter-item{display:flex;align-items:baseline;transition:background-color .3s ease-in-out}.consonant-TopFilter-item:hover{background-color:#f4f4f4}.consonant-TopFilter-itemLabel{position:relative;display:flex;align-items:center;width:100%;max-width:100%;padding:8px 20px 6px;cursor:pointer}.consonant-TopFilter-itemLabel:focus{outline:0}@media only screen and (min-width:1200px){.consonant-TopFilter-itemLabel:focus{outline:2px solid #1492e6}}.consonant-TopFilter input[type=checkbox]{width:0;height:0;max-width:0;max-height:0;margin:0;padding:0;opacity:0;border:0;outline:0}input[type=checkbox]:checked+.consonant-TopFilter-itemCheckmark{background-color:#2680eb;border-color:#2680eb}input[type=checkbox]:checked+.consonant-TopFilter-itemCheckmark:after{display:block}.consonant-TopFilter-itemCheckmark{position:relative;display:block;min-width:14px;width:14px;height:14px;margin-right:10px;border:2px solid #959595;border-radius:3px;transition:border-color .3s ease-in-out,background-color .3s ease-in-out;pointer-events:none}.consonant-TopFilter-itemCheckmark:after{display:none;content:"";position:absolute;top:0;bottom:0;left:0;right:0;margin:auto;width:8px;height:4px;border:2px solid #fff;border-top:0;border-right:0;border-radius:2px;transform:rotate(-45deg) translate3d(1px,0,0)}.consonant-TopFilter-itemName{padding-bottom:1px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1.1875rem;font-weight:400;color:#505050;font-style:normal;text-align:left;text-transform:capitalize;word-break:break-word;pointer-events:none}.consonant-TopFilter-footer{margin-top:auto;align-items:center;padding:16px;border-top:1px solid #eaeaea}.consonant-TopFilter-footerResQty{margin-right:auto;color:#505050;text-transform:capitalize}.consonant-TopFilter-footerClearBtn,.consonant-TopFilter-footerResQty{display:block;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1rem;font-weight:700;font-style:normal;word-break:break-word;text-align:left}.consonant-TopFilter-footerClearBtn{margin-right:17px;padding:0;color:#1473e6;background-color:transparent;border:0;outline:0}.consonant-TopFilter-footerClearBtn:focus{outline:0}@media only screen and (min-width:1200px){.consonant-TopFilter-footerClearBtn:focus{outline:2px solid #1492e6}}.consonant-TopFilter-footerClearBtn+.consonant-TopFilter-footerBtn{margin-left:0}.consonant-TopFilter-footerBtn{min-width:71px;margin-left:auto;padding:8px 16px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1rem;font-weight:700;color:#fff;font-style:normal;word-break:break-word;text-align:center;text-transform:capitalize;background-color:#1473e6;border-radius:20px;border:0;outline:0}.consonant-TopFilter-footerBtn:focus{outline:0}@media only screen and (min-width:1200px){.consonant-TopFilter-footerBtn:focus{outline:2px solid #1492e6}}.consonant-TopFilter.is-selected:not(.is-opened):after{display:none}.consonant-TopFilter.is-selected:not(.is-opened)>.consonant-TopFilter-inner{background-color:#f4f4f4}.consonant-TopFilter.is-selected:not(.is-opened) .consonant-TopFilter-link{border-color:#505050;padding-right:0;color:#323232;background-color:#f4f4f4}.consonant-TopFilter.is-opened{position:fixed;display:flex;justify-content:center;align-items:center;width:100%;max-width:100%;padding-left:20px;padding-right:20px;top:0;bottom:0;left:0;right:0;margin:auto;z-index:4;background-color:rgba(80,80,80,.8)}.consonant-TopFilter.is-opened:after{display:none}.consonant-TopFilter.is-opened .consonant-TopFilter-inner{position:relative;box-shadow:0 3px 15px rgba(80,80,80,.8);border:1px solid #eaeaea;border-radius:4px;background-color:#fff}.consonant-TopFilter.is-opened .consonant-TopFilter-inner:after{content:"";position:absolute;display:block;width:100%;max-width:100%;height:33px;bottom:65px;left:0;right:0;background:transparent linear-gradient(180deg,hsla(0,0%,100%,.5),#fff) no-repeat 0 0;z-index:1;pointer-events:none}.consonant-TopFilter.is-opened .consonant-TopFilter-selectedItems ul~.consonant-TopFilter-footer{display:flex}.consonant-TopFilter.is-opened .consonant-TopFilter-selectedItems{display:block}.consonant-TopFilter.is-opened .consonant-TopFilter-selectedItemsQty{display:none}.consonant-TopFilter.is-opened .consonant-TopFilter-link{padding-top:17px;padding-bottom:17px;padding-right:36px;border-bottom:0;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:1rem;line-height:1.1875rem;font-weight:700;color:#505050;font-style:normal;word-break:break-word;text-align:left;text-transform:capitalize;text-decoration:none;cursor:pointer}@media only screen and (min-width:768px){.consonant-TopFilter{max-width:100%}.consonant-TopFilter.is-opened .consonant-TopFilter-inner{max-width:70vw;margin-left:auto;margin-right:auto}}@media only screen and (min-width:1200px){.consonant-TopFilter-items{min-height:0;max-height:295px;padding-top:12px;overflow-y:auto}.consonant-TopFilter-itemLabel{padding-left:24px;padding-right:24px}.consonant-TopFilter.is-opened{position:relative;width:auto;margin:0;padding:0;margin-right:8px;margin-bottom:8px;border-radius:4px;z-index:2;background-color:transparent}.consonant-TopFilter.is-opened:after{width:4px;height:4px;top:0;bottom:0;right:8px;margin:auto;border-color:#1473e6;border-width:1px;transform:rotate(-45deg) translate3d(1px,-2px,0);transition:border-color .3s ease-in-out}.consonant-TopFilter.is-opened .consonant-TopFilter-inner{position:static;box-shadow:none;border:0;background-color:transparent}.consonant-TopFilter.is-opened .consonant-TopFilter-inner:after{display:none}.consonant-TopFilter.is-opened .consonant-TopFilter-link{display:flex;justify-content:space-between;align-items:center;height:32px;padding:5px 17px 6px 12px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1.1875rem;font-weight:400;color:#1473e6;font-style:normal;word-break:break-word;text-align:left;white-space:nowrap;border:1px solid #1473e6;border-radius:4px;transition:border-color .3s ease-in-out,color .3s ease-in-out}.consonant-TopFilter.is-opened input[type=checkbox]:focus+.consonant-TopFilter-itemCheckmark{outline:2px solid #1492e6}.consonant-TopFilter.is-opened .consonant-TopFilter-absoluteWrapper{position:absolute;display:block;left:0;top:40px;width:320px;max-height:360px;overflow-y:auto;border:1px solid #eaeaea;border-radius:4px;box-shadow:0 3px 15px rgba(80,80,80,.101);background-color:#fff;z-index:2;overflow:hidden}.consonant-TopFilter.is-opened .consonant-TopFilter-selectedItemsQty{padding:0;visibility:hidden;font-size:0}.consonant-TopFilter.is-opened .consonant-TopFilter-selectedItems ul~.consonant-TopFilter-footer{display:flex}}.consonant-LeftFilters{position:static;display:flex;flex-direction:column;width:100%;max-width:100%;top:0;bottom:0;left:0;right:0;background-color:#fff;overflow:visible;user-select:none}.consonant-LeftFilters>*,.consonant-LeftFilters>.consonant-Search{display:none}.consonant-LeftFilters-header{display:flex;justify-content:space-between;align-items:center;display:none;width:100%;max-width:100%;padding:14px 12px;border-bottom:1px solid #eaeaea}.consonant-LeftFilters-deskTitle{display:none;margin:0;max-width:70%;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:1rem;line-height:1.1875rem;font-weight:700;color:#2c2c2c;font-style:normal;word-break:break-word;text-align:left}.consonant-LeftFilters-mobTitle{display:flex;align-items:center}.consonant-LeftFilters-mobTitle span{font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:1rem;line-height:1.1875rem;font-weight:400;color:#505050;font-style:normal;word-break:break-word;text-align:left}.consonant-LeftFilters-mobTitle span:focus{outline:1px solid #1492e6}.consonant-LeftFilters-mobBack{display:block;width:32px;height:32px;margin-right:13px;font-size:0;line-height:0;border:1px solid #eaeaea;border-radius:50%;background:#fff url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTAiIHZpZXdCb3g9IjAgMCAxNCAxMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEyLjk4OTkgNC4wMDAwNkgzLjQxMzg4TDUuNjk5ODggMS43MTcwNkM1Ljc5MjkyIDEuNjI0MDIgNS44NjY3MiAxLjUxMzU2IDUuOTE3MDggMS4zOTJDNS45Njc0MyAxLjI3MDQzIDUuOTkzMzUgMS4xNDAxNCA1Ljk5MzM1IDEuMDA4NTZDNS45OTMzNSAwLjg3Njk4MSA1Ljk2NzQzIDAuNzQ2Njg5IDUuOTE3MDggMC42MjUxMjVDNS44NjY3MiAwLjUwMzU2IDUuNzkyOTIgMC4zOTMxMDQgNS42OTk4OCAwLjMwMDA2MkM1LjYwNjg0IDAuMjA3MDIxIDUuNDk2MzggMC4xMzMyMTYgNS4zNzQ4MiAwLjA4Mjg2MjNDNS4yNTMyNSAwLjAzMjUwODUgNS4xMjI5NiAwLjAwNjU5MTggNC45OTEzOCAwLjAwNjU5MThDNC43MjU2NCAwLjAwNjU5MTggNC40NzA3OCAwLjExMjE1NiA0LjI4Mjg4IDAuMzAwMDYyTDAuMjk5ODc4IDQuMjkzMDZDMC4yMDY5MDIgNC4zODU5NCAwLjEzMzE0MyA0LjQ5NjIyIDAuMDgyODE4NyA0LjYxNzYyQzAuMDMyNDk0NCA0LjczOTAyIDAuMDA2NTkxOCA0Ljg2OTE1IDAuMDA2NTkxOCA1LjAwMDU2QzAuMDA2NTkxOCA1LjEzMTk4IDAuMDMyNDk0NCA1LjI2MjEgMC4wODI4MTg3IDUuMzgzNUMwLjEzMzE0MyA1LjUwNDkgMC4yMDY5MDIgNS42MTUxOSAwLjI5OTg3OCA1LjcwODA2TDQuMjgyODggOS43MDAwNkM0LjM3NTkyIDkuNzkzMSA0LjQ4NjM4IDkuODY2OTEgNC42MDc5NCA5LjkxNzI2QzQuNzI5NTEgOS45Njc2MiA0Ljg1OTggOS45OTM1MyA0Ljk5MTM4IDkuOTkzNTNDNS4xMjI5NiA5Ljk5MzUzIDUuMjUzMjUgOS45Njc2MiA1LjM3NDgyIDkuOTE3MjZDNS40OTYzOCA5Ljg2NjkxIDUuNjA2ODQgOS43OTMxIDUuNjk5ODggOS43MDAwNkM1Ljc5MjkyIDkuNjA3MDIgNS44NjY3MiA5LjQ5NjU2IDUuOTE3MDggOS4zNzVDNS45Njc0MyA5LjI1MzQzIDUuOTkzMzUgOS4xMjMxNCA1Ljk5MzM1IDguOTkxNTZDNS45OTMzNSA4Ljg1OTk4IDUuOTY3NDMgOC43Mjk2OSA1LjkxNzA4IDguNjA4MTJDNS44NjY3MiA4LjQ4NjU2IDUuNzkyOTIgOC4zNzYxIDUuNjk5ODggOC4yODMwNkwzLjQxMzg4IDYuMDAwMDZIMTIuOTg5OUMxMy4yNTUxIDYuMDAwMDYgMTMuNTA5NCA1Ljg5NDcgMTMuNjk3IDUuNzA3MTdDMTMuODg0NSA1LjUxOTYzIDEzLjk4OTkgNS4yNjUyOCAxMy45ODk5IDUuMDAwMDZDMTMuOTg5OSA0LjczNDg1IDEzLjg4NDUgNC40ODA0OSAxMy42OTcgNC4yOTI5NkMxMy41MDk0IDQuMTA1NDIgMTMuMjU1MSA0LjAwMDA2IDEyLjk4OTkgNC4wMDAwNloiIGZpbGw9IiM1MDUwNTAiLz4KPC9zdmc+Cg==") no-repeat 50% 50%;background-position:contain;outline:0}.consonant-LeftFilters-mobBack:focus{border-color:#1492e6}.consonant-LeftFilters-clearLink{display:none;padding:0;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1rem;font-weight:700;color:#bcbcbc;font-style:normal;word-break:break-word;text-align:left;text-transform:capitalize;background-color:transparent;outline:0}.consonant-LeftFilters-clearLink:focus{outline:0}@media only screen and (min-width:1200px){.consonant-LeftFilters-clearLink:focus{outline:2px solid #1492e6}}.consonant-LeftFilters-list{margin-bottom:auto;padding-left:16px;padding-right:16px;overflow-y:auto}.consonant-LeftFilters-mobileFooter{display:none;align-items:center;padding:16px;border-top:1px solid #eaeaea;order:2}.consonant-LeftFilters-mobileFooterTotalResQty{margin-right:auto;max-width:55%;color:#505050;text-transform:capitalize}.consonant-LeftFilters-mobileFooterClearBtn,.consonant-LeftFilters-mobileFooterTotalResQty{display:block;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1rem;font-weight:700;font-style:normal;word-break:break-word;text-align:left}.consonant-LeftFilters-mobileFooterClearBtn{margin-right:17px;padding:0;color:#1473e6;background-color:transparent;border:0;outline:0}.consonant-LeftFilters-mobileFooterClearBtn:focus{box-shadow:0 2px 0 0 #1492e6}.consonant-LeftFilters-mobileFooterClearBtn:first-child{margin-left:auto}.consonant-LeftFilters-mobileFooterClearBtn+.consonant-LeftFilters-mobileFooterBtn{margin-left:0}.consonant-LeftFilters-mobileFooterBtn{min-width:71px;margin-left:auto;padding:8px 16px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1rem;font-weight:700;color:#fff;font-style:normal;word-break:break-word;text-align:center;text-transform:capitalize;background-color:#1473e6;border-radius:20px;border:0;outline:0;position:relative}.consonant-LeftFilters-mobileFooterBtn:focus:after{border-radius:18px;content:"";display:block;position:absolute;left:0;right:0;bottom:0;top:0;margin:-2px;transition:box-shadow .13s ease-out,margin .13s ease-out;box-shadow:0 0 0 2px #1492e6}.consonant-LeftFilters.is-opened{position:fixed;z-index:10000;display:flex}.consonant-LeftFilters.is-opened .consonant-LeftFilters-header,.consonant-LeftFilters.is-opened .consonant-LeftFilters-mobileFooter,.consonant-LeftFilters.is-opened>button{display:flex}.consonant-LeftFilters.is-opened .consonant-LeftFilters-list{display:block}.consonant-LeftFilters.is-opened .consonant-LeftFilters-itemName img{display:none;position:relative;top:4px}.consonant-LeftFilters-chosenFilters{position:relative;flex-wrap:wrap;justify-content:flex-start;align-items:center;margin-top:-16px;width:100%;max-width:100%;padding-bottom:8px;background-color:transparent}.consonant-LeftFilters-chosenFilters:empty{display:none}@media only screen and (min-width:1200px){.consonant-LeftFilters{width:204px;max-width:204px;margin-right:32px;padding:8px 16px 16px;border-radius:4px;overflow:visible}.consonant-LeftFilters-list{display:block;margin-bottom:0;padding:0;border-top:1px solid #eaeaea;overflow:hidden;z-index:1}.consonant-LeftFilters-mobTitle{display:none}.consonant-LeftFilters-header{display:flex;padding:0 0 24px;border-bottom:1px solid #eaeaea;order:-3}.consonant-LeftFilters-header+button:after{display:none}.consonant-LeftFilters-deskTitle{display:block}.consonant-LeftFilters>.consonant-Search{display:block;padding-top:13px;padding-bottom:32px}.consonant-LeftFilters>button{display:flex}.consonant-LeftFilters-clearLink{display:block;transition:color .3s ease-in-out}.consonant-LeftFilters-clearLink:active,.consonant-LeftFilters-clearLink:hover{color:#1473e6}.consonant-LeftFilters-chosenFilters{display:flex}}.consonant-LeftFilter{position:relative;border-bottom:1px solid #eaeaea;outline:0;cursor:pointer}.consonant-LeftFilter:after{content:"";position:absolute;right:16px;top:0;bottom:0;margin:auto;width:8px;height:8px;border:2px solid #d3d3d3;transform:rotate(-135deg);border-top:0;border-right:0;pointer-events:none}.consonant-LeftFilter:last-of-type{border-bottom:0}.consonant-LeftFilter-inner{display:flex;flex-direction:column;justify-content:space-between;align-items:stretch;width:100%;max-width:100%;max-height:90vh;background-color:#fff;border-radius:5px}.consonant-LeftFilter-name{display:flex;align-items:center;margin:0}.consonant-LeftFilter-name img{display:block;max-width:16px;height:auto;max-height:16px;margin-right:6px}.consonant-LeftFilter-link{display:block;width:100%;max-width:100%;padding-top:17px;padding-bottom:17px;padding-right:36px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:1rem;line-height:1.1875rem;font-weight:700;color:#505050;font-style:normal;word-break:break-word;text-align:left;text-transform:capitalize;text-decoration:none;background-color:transparent;outline:0;cursor:pointer;border:1px solid transparent}.consonant-LeftFilter-link:focus{border-color:#1492e6}.consonant-LeftFilter-selectedItemsQty{position:relative;display:block;margin-top:4px;padding-right:18px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1rem;font-weight:400;color:#959595;font-style:normal;word-break:break-word;text-align:left;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.consonant-LeftFilter-selectedItemsQty:after{position:absolute;right:12px;content:attr(data-qty);font-weight:700;background-color:#fff}.consonant-LeftFilter-selectedItemsQty:empty{display:none}.consonant-LeftFilter-itemBadge{display:none;position:absolute;min-width:24px;max-width:100px;height:24px;padding:5px 7px;top:12px;right:30px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:.875rem;font-weight:700;color:#fff;font-style:normal;word-break:break-word;text-align:center;white-space:nowrap;text-overflow:ellipsis;border-radius:15px;background-color:#1473e6;z-index:1;opacity:1;border:0;outline:0;transition:opacity .3s ease-in-out;transition-delay:.1s;overflow:hidden}.consonant-LeftFilter-itemBadge:focus{outline:0}@media only screen and (min-width:1200px){.consonant-LeftFilter-itemBadge:focus{outline:2px solid #1492e6}}.consonant-LeftFilter-itemBadge:hover{font-size:0;line-height:0}.consonant-LeftFilter-itemBadge:after,.consonant-LeftFilter-itemBadge:before{content:"";position:absolute;width:10px;height:2px;top:0;bottom:0;left:0;right:0;margin:auto;background-color:#fff;z-index:1;opacity:0;transition:opacity .3s ease-in-out;transition-delay:.1s;transform:rotate(45deg)}.consonant-LeftFilter-itemBadge:after{transform:rotate(-45deg)}.consonant-LeftFilter-itemBadge:hover:after,.consonant-LeftFilter-itemBadge:hover:before{opacity:1}.consonant-LeftFilter-items{display:none;height:50vh;margin:auto 0 0;padding:0;list-style-type:none;border-top:1px solid #eaeaea;overflow-y:auto}.consonant-LeftFilter-itemsItem{display:flex;align-items:baseline;transition:background-color .3s ease-in-out}.consonant-LeftFilter-itemsItem:hover{background-color:#f4f4f4}.consonant-LeftFilter-itemsItem:nth-of-type(n+10):last-of-type{margin-bottom:32px}.consonant-LeftFilter-itemsItemLabel{position:relative;display:flex;align-items:center;width:100%;max-width:100%;padding:8px 20px 6px;cursor:pointer}.consonant-LeftFilter input[type=checkbox]{width:0;height:0;max-width:0;max-height:0;margin:0;padding:0;opacity:0;border:0;outline:0}input[type=checkbox]:checked+.consonant-LeftFilter-itemsItemCheckmark{background-color:#2680eb;border-color:#2680eb}input[type=checkbox]:checked+.consonant-LeftFilter-itemsItemCheckmark:after{display:block}input[type=checkbox]:focus+.consonant-LeftFilter-itemsItemCheckmark{border-color:#1492e6}.consonant-LeftFilter-itemsItemCheckmark{position:relative;display:block;min-width:14px;width:14px;height:14px;margin-right:10px;border:2px solid #959595;border-radius:3px;transition:border-color .3s ease-in-out,background-color .3s ease-in-out;pointer-events:none}.consonant-LeftFilter-itemsItemCheckmark:after{display:none;content:"";position:absolute;top:0;bottom:0;left:0;right:0;margin:auto;width:8px;height:4px;border:2px solid #fff;border-top:0;border-right:0;border-radius:2px;transform:rotate(-45deg) translate3d(1px,0,0)}.consonant-LeftFilter-itemsItemName{padding-bottom:1px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1.1875rem;font-weight:400;color:#505050;font-style:normal;text-align:left;word-break:break-word;pointer-events:none}.consonant-LeftFilter-footer{display:none;margin-top:auto;align-items:center;padding:16px;border-top:1px solid #eaeaea}.consonant-LeftFilter-footerResQty{margin-right:auto;color:#505050;text-transform:capitalize}.consonant-LeftFilter-footerClearBtn,.consonant-LeftFilter-footerResQty{display:block;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1rem;font-weight:700;font-style:normal;word-break:break-word;text-align:left}.consonant-LeftFilter-footerClearBtn{margin-right:17px;padding:0;color:#1473e6;background-color:transparent;border:0;outline:0}.consonant-LeftFilter-footerClearBtn:focus{box-shadow:0 2px 0 0 #1492e6}.consonant-LeftFilter-footerClearBtn+.consonant-LeftFilter-footerBtn{margin-left:0}.consonant-LeftFilter-footerBtn{min-width:71px;margin-left:auto;padding:8px 16px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1rem;font-weight:700;color:#fff;font-style:normal;word-break:break-word;text-align:center;text-transform:capitalize;background-color:#1473e6;border-radius:20px;border:0;outline:0;position:relative}.consonant-LeftFilter-footerBtn:focus:after{border-radius:18px;content:"";display:block;position:absolute;left:0;right:0;bottom:0;top:0;margin:-2px;transition:box-shadow .13s ease-out,margin .13s ease-out;box-shadow:0 0 0 2px #1492e6}.consonant-LeftFilter.is-opened{position:fixed;display:flex;justify-content:center;align-items:center;width:100%;max-width:100%;padding-left:20px;padding-right:20px;top:0;bottom:0;left:0;right:0;margin:auto;z-index:4;background-color:rgba(80,80,80,.8)}.consonant-LeftFilter.is-opened:after{display:none}.consonant-LeftFilter.is-opened .consonant-LeftFilter-inner{position:relative;box-shadow:0 3px 15px rgba(80,80,80,.8);border:1px solid #eaeaea;border-radius:4px}.consonant-LeftFilter.is-opened .consonant-LeftFilter-inner:after{content:"";position:absolute;display:block;width:100%;max-width:100%;height:33px;bottom:65px;left:0;right:0;background:transparent linear-gradient(180deg,hsla(0,0%,100%,.8),#fff) no-repeat 0 0;z-index:1;pointer-events:none}.consonant-LeftFilter.is-opened .consonant-LeftFilter-footer{display:flex}.consonant-LeftFilter.is-opened .consonant-LeftFilter-items{display:block}.consonant-LeftFilter.is-opened .consonant-LeftFilter-selectedItemsQty{display:none}.consonant-LeftFilter.is-opened .consonant-LeftFilter-name{padding-left:20px}@media only screen and (min-width:768px){.consonant-LeftFilter.is-opened .consonant-LeftFilter-inner{max-width:70vw;margin-left:auto;margin-right:auto}}@media only screen and (min-width:1200px){.consonant-LeftFilter:after{display:block;right:13px;border-color:#bcbcbc;transform:rotate(-45deg)}.consonant-LeftFilter-inner{border-radius:0;background-color:transparent}.consonant-LeftFilter-items{min-height:0;max-height:100%;height:auto;padding-top:12px;border-color:transparent;overflow-y:auto}.consonant-LeftFilter-itemsItemLabel{padding:6px 8px}input[type=checkbox]:focus+.consonant-LeftFilter-itemsItemCheckmark{outline:2px solid #1492e6}.consonant-LeftFilter-itemsItem:nth-of-type(n+10):last-of-type{margin-bottom:0}.consonant-LeftFilter-itemsItemName{font-size:.875rem;line-height:1rem}.consonant-LeftFilter-footer{display:none}.consonant-LeftFilter-link{padding-top:14px;padding-bottom:14px;font-size:.875rem;line-height:1rem;word-break:break-word;transition:color .3s ease-in-out;border:2px solid transparent}.consonant-LeftFilter-link:hover{color:#707070}.consonant-LeftFilter-link:focus{border-color:#1492e6}.consonant-LeftFilter-itemBadge{display:block}.consonant-LeftFilter-selectedItemsQty{display:none}.consonant-LeftFilter.is-opened{position:relative;padding:0;background-color:transparent;border-bottom-color:transparent}.consonant-LeftFilter.is-opened:after{display:block;top:24px;bottom:auto;border-color:#959595;transform:rotate(135deg)}.consonant-LeftFilter.is-opened .consonant-LeftFilter-inner{min-height:0;max-height:none;max-width:100%;margin-left:0;margin-right:0;overflow:hidden;box-shadow:none;border:0}.consonant-LeftFilter.is-opened .consonant-LeftFilter-inner:after{display:none}.consonant-LeftFilter.is-opened .consonant-LeftFilter-name{padding-left:0}.consonant-LeftFilter.is-opened .consonant-LeftFilter-name img{display:block;position:relative;top:4px}.consonant-LeftFilter.is-opened .consonant-LeftFilter-link{padding-right:36px;color:#707070}.consonant-LeftFilter.is-opened .consonant-LeftFilter-items{padding-top:4px}.consonant-LeftFilter.is-opened .consonant-LeftFilter-footer{display:none}}.consonant-ChosenFilter{position:relative;max-width:50vw;margin-right:7px;margin-bottom:8px;padding:0 17px 0 8px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.75rem;line-height:1.375rem;font-weight:400;color:#747474;font-style:normal;word-break:break-word;text-align:left;text-overflow:ellipsis;white-space:nowrap;background-color:transparent;border:1px solid #959595;border-radius:4px;outline:0;overflow:hidden}.consonant-ChosenFilter:after,.consonant-ChosenFilter:before{content:"";position:absolute;top:0;bottom:0;margin:auto;right:8px;width:7px;height:1px;background-color:#959595;transform:rotate(45deg)}.consonant-ChosenFilter:after{transform:rotate(-45deg)}.consonant-ChosenFilter:focus{outline:0}@media only screen and (min-width:1200px){.consonant-ChosenFilter:focus{outline:2px solid #1492e6}}.consonant-Card{background-color:#fff;width:100%;max-width:100%;padding-bottom:7px;text-align:left;border:1px solid #eaeaea;border-radius:4px;overflow:hidden;margin:0 auto}.consonant-Card,.consonant-Card-content{position:relative;display:flex;flex-direction:column}.consonant-Card-content{flex-grow:1;padding:20px 24px 24px;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.consonant-Card-title{max-height:2.75rem;margin:0 0 7px;font-size:1.125rem;line-height:1.375rem;font-weight:700;color:#323232;text-decoration:none;-webkit-line-clamp:2}.consonant-Card-text,.consonant-Card-title{display:-webkit-box;-webkit-box-orient:vertical;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-style:normal;text-align:left;word-break:break-word;overflow:hidden}.consonant-Card-text{max-height:3.9375rem;margin:0 0 14px;padding:0;font-size:.875rem;line-height:1.3125rem;font-weight:400;color:#747474;-webkit-line-clamp:3}.consonant-Card-text:empty{display:none}.consonant-Card-label+.consonant-Card-title+p{max-height:4rem;line-height:1rem}.consonant-Card .consonant-BtnInfobit:first-child{margin-left:0}.consonant-Card .consonant-CardFooter--divider:last-child{padding-top:20px}.consonant-Card.consonant-hide-cta .consonant-OneHalfCard-title+p{max-height:none;-webkit-line-clamp:7;margin:0}.consonant-Card.consonant-u-noBorders{border:0}.consonant-Card:focus{border:2px;border-color:#1492e6}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.consonant-Card{flex-grow:0;flex-shrink:0;flex-basis:300px}}@media only screen and (min-width:768px){.consonant-Card{padding-bottom:0}.consonant-Card-content{padding-bottom:24px}}.consonant-CardsGrid .consonant-Card.one-half:hover{box-shadow:0 3px 6px 0 rgba(0,0,0,.16);transition:box-shadow .3s ease-in-out}.consonant-CardsGrid .consonant-Card.one-half [class*=-header]{position:relative}.consonant-CardsGrid .consonant-Card.one-half [class*=-header]:after{position:absolute;content:"";top:0;bottom:0;left:0;right:0;margin:auto;z-index:0;background-color:rgba(0,0,0,.35);opacity:0;transition:opacity .3s ease-in-out}.consonant-CardsGrid .consonant-Card.one-half:hover [class*=-header]:after{opacity:1}.consonant-CardsGrid .consonant-Card.one-half .consonant-Card-header{position:relative;width:100%;height:213px;background-color:#eaeaea;background-position:50% 50%;background-repeat:no-repeat;background-size:cover;border-top-left-radius:4px;border-top-right-radius:4px;overflow:hidden}.consonant-CardsGrid .consonant-Card.one-half .consonant-Card-header .consonant-Card-banner{position:absolute;display:flex;justify-content:flex-start;max-width:56%;max-height:70%;top:24px;right:0;padding:8px 13px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.75rem;line-height:1.0625rem;font-weight:700;color:#fff;font-style:normal;word-break:break-word;text-align:left;letter-spacing:.72px;text-transform:uppercase;border-top-left-radius:4px;border-bottom-left-radius:4px;z-index:1;background-color:#1473e6;user-select:none;overflow-y:auto}.consonant-CardsGrid .consonant-Card.one-half .consonant-Card-header .consonant-Card-bannerIconWrapper{margin-right:4px}.consonant-CardsGrid .consonant-Card.one-half .consonant-Card-header .consonant-Card-bannerIconWrapper img{width:8px;height:8px}.consonant-CardsGrid .consonant-Card.one-half .consonant-Card-header .consonant-Card-badge{position:absolute;display:block;max-width:36%;max-height:50%;top:24px;left:24px;padding:4px 11px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.75rem;line-height:1rem;font-weight:400;color:#747474;font-style:normal;word-break:break-word;text-align:left;border:1px solid #959595;border-radius:4px;background-color:#fff;overflow-y:auto;z-index:1}.consonant-CardsGrid .consonant-Card.one-half .consonant-Card-header .consonant-Card-logo{position:absolute;display:block;bottom:16px;left:0;padding:7px 24px;border:1px solid transparent;border-top-right-radius:4px;border-bottom-right-radius:4px;background-color:#fff;z-index:1;font-size:0;line-height:0}.consonant-CardsGrid .consonant-Card.one-half .consonant-Card-header .consonant-Card-logo img{width:auto;height:auto;max-width:90px;max-height:32px;object-fit:contain;user-select:none}.consonant-CardsGrid .consonant-Card.one-half .consonant-Card-header button.consonant-Card-videoButton-wrapper{width:100%;height:100%;background-color:transparent}.consonant-CardsGrid .consonant-Card.one-half .consonant-Card-header button.consonant-Card-videoButton-wrapper .consonant-Card-videoIco{display:block;position:absolute;width:40px;height:40px;right:24px;bottom:16px;font-size:0;line-height:0;background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg data-name='40' xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'%3E%3Cg data-name='Ellipse 20182' fill='%231473e6' stroke='%23fff' stroke-width='2'%3E%3Ccircle cx='20' cy='20' r='20' stroke='none'/%3E%3Ccircle cx='20' cy='20' r='19' fill='none'/%3E%3C/g%3E%3Cpath data-name='Path 356676' d='M15 10.833v18.333l13.333-9.167z' fill='%23fff'/%3E%3C/svg%3E") no-repeat 0 0;background-size:cover;z-index:1;cursor:pointer;transform-origin:50% 50%;transition:transform .3s ease-in-out}.consonant-CardsGrid .consonant-Card.one-half .consonant-Card-header button.consonant-Card-videoButton-wrapper .consonant-Card-videoIco:active,.consonant-CardsGrid .consonant-Card.one-half .consonant-Card-header button.consonant-Card-videoButton-wrapper .consonant-Card-videoIco:hover{transform:scale(1.1);background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg data-name='40' xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'%3E%3Cg data-name='Ellipse 20182' fill='%230059c2' stroke='%23fff' stroke-width='2'%3E%3Ccircle cx='20' cy='20' r='20' stroke='none'/%3E%3Ccircle cx='20' cy='20' r='19' fill='none'/%3E%3C/g%3E%3Cpath data-name='Path 356676' d='M15 10.833v18.333l13.333-9.167z' fill='%23fff'/%3E%3C/svg%3E") no-repeat 0 0;transition:transform .3s ease-in-out}.consonant-CardsGrid .consonant-Card.one-half .consonant-Card-header button.consonant-Card-videoButton-wrapper .consonant-Card-videoIco:focus{transform:scale(1.1);transition:transform .3s ease-in-out;outline:2px solid #1492e6}.consonant-CardsGrid .consonant-Card.one-half .consonant-Card-label{display:block;max-width:100%;margin-bottom:4px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1rem;font-weight:400;color:#505050;font-style:normal;word-break:break-word;text-align:left;text-decoration:none;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.consonant-CardsGrid--2up .consonant-Card.one-half,.consonant-CardsGrid--3up .consonant-Card.one-half{min-height:448px}.consonant-CardsGrid--4up .consonant-Card.one-half{height:auto}.consonant-CardsGrid--4up .consonant-Card.one-half .consonant-Card-header{min-height:192px;max-height:192px}.consonant-CardsGrid--4up .consonant-Card.one-half .consonant-Card-content,.consonant-CardsGrid--5up .consonant-Card.one-half .consonant-Card-content{padding:16px 16px 20px}.consonant-CardsGrid .consonant-Card.three-fourths{height:448px}.consonant-CardsGrid .consonant-Card.three-fourths:hover{box-shadow:0 3px 6px 0 rgba(0,0,0,.16);transition:box-shadow .3s ease-in-out}.consonant-CardsGrid .consonant-Card.three-fourths [class*=-header]{position:relative}.consonant-CardsGrid .consonant-Card.three-fourths [class*=-header]:after{position:absolute;content:"";top:0;bottom:0;left:0;right:0;margin:auto;z-index:0;background-color:rgba(0,0,0,.35);opacity:0;transition:opacity .3s ease-in-out}.consonant-CardsGrid .consonant-Card.three-fourths:hover [class*=-header]:after{opacity:1}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-header{background-color:#eaeaea;height:316px;overflow:hidden;position:relative;background-position:50% 50%;background-repeat:no-repeat;background-size:cover}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-header button.consonant-Card-videoButton-wrapper{width:100%;height:100%;background-color:transparent}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-videoIco{display:block;position:absolute;width:40px;height:40px;right:24px;bottom:16px;font-size:0;line-height:0;background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg data-name='40' xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'%3E%3Cg data-name='Ellipse 20182' fill='%231473e6' stroke='%23fff' stroke-width='2'%3E%3Ccircle cx='20' cy='20' r='20' stroke='none'/%3E%3Ccircle cx='20' cy='20' r='19' fill='none'/%3E%3C/g%3E%3Cpath data-name='Path 356676' d='M15 10.833v18.333l13.333-9.167z' fill='%23fff'/%3E%3C/svg%3E") no-repeat 0 0;background-size:cover;z-index:1;cursor:pointer;transform-origin:50% 50%;transition:transform .3s ease-in-out}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-videoIco:active,.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-videoIco:hover{transform:scale(1.1);background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg data-name='40' xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'%3E%3Cg data-name='Ellipse 20182' fill='%230059c2' stroke='%23fff' stroke-width='2'%3E%3Ccircle cx='20' cy='20' r='20' stroke='none'/%3E%3Ccircle cx='20' cy='20' r='19' fill='none'/%3E%3C/g%3E%3Cpath data-name='Path 356676' d='M15 10.833v18.333l13.333-9.167z' fill='%23fff'/%3E%3C/svg%3E") no-repeat 0 0;transition:transform .3s ease-in-out}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-videoIco:focus{transform:scale(1.1);transition:transform .3s ease-in-out;outline:2px solid #1492e6}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-logo{position:absolute;display:block;bottom:16px;left:0;padding:7px 24px;border:1px solid transparent;border-top-right-radius:4px;border-bottom-right-radius:4px;z-index:1;background-color:#fff;font-size:0;line-height:0}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-logo img{width:auto;height:auto;max-width:90px;max-height:32px;object-fit:contain;user-select:none}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-label{display:block;max-width:100%;max-height:1rem;margin-bottom:4px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1rem;font-weight:400;color:#505050;font-style:normal;word-break:break-word;text-align:left;text-decoration:none;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-label:empty{display:none}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-content{padding:20px 20px 24px}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-title{max-height:2.75rem;margin:0 0 7px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:1.125rem;line-height:1.375rem;font-weight:700;color:#323232;font-style:normal;text-align:left;text-decoration:none;word-break:break-word;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-title:only-child{max-height:5.5rem;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:4;overflow:hidden}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-title:empty{display:none}.consonant-Card-label+.consonant-CardsGrid .consonant-Card.three-fourths-title:last-child{max-height:4.125rem;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-text{max-height:2rem;margin:0;padding:0;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1rem;font-weight:400;color:#747474;font-style:normal;word-break:break-word;text-align:left;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-text:empty{display:none}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-text:only-child{max-height:5rem;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:5;overflow:hidden}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-label+.consonant-Card-text:last-child{max-height:4rem;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:4;overflow:hidden}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-label+.consonant-Card-title+.consonant-Card-text{max-height:1rem;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-banner{position:absolute;display:flex;justify-content:flex-start;max-width:56%;max-height:70%;top:24px;right:0;padding:8px 13px 7px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.75rem;line-height:1.0625rem;font-weight:700;color:#fff;font-style:normal;word-break:break-word;text-align:left;letter-spacing:.72px;text-transform:uppercase;border-top-left-radius:4px;border-bottom-left-radius:4px;z-index:1;background-color:#1473e6;user-select:none;overflow-y:auto}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-bannerIconWrapper{margin-right:4px}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-bannerIconWrapper img{width:8px;height:8px}.consonant-CardsGrid .consonant-Card.three-fourths .consonant-Card-badge{position:absolute;display:block;max-width:36%;max-height:50%;top:24px;left:24px;padding:4px 11px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.75rem;line-height:1rem;font-weight:400;color:#747474;font-style:normal;word-break:break-word;text-align:left;border:1px solid #959595;border-radius:4px;background-color:#fff;overflow-y:auto;z-index:1}.consonant-CardsGrid--4up .consonant-Card.three-fourths .consonant-Card-title,.consonant-CardsGrid--5up .consonant-Card.three-fourths .consonant-Card-title{margin-bottom:0;max-height:2.75rem;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.consonant-CardsGrid--4up .consonant-Card.three-fourths .consonant-Card-title:first-child,.consonant-CardsGrid--5up .consonant-Card.three-fourths .consonant-Card-title:first-child{max-height:4.125rem;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}.consonant-CardsGrid--4up .consonant-Card.three-fourths .consonant-Card-text,.consonant-CardsGrid--5up .consonant-Card.three-fourths .consonant-Card-text{display:none!important}.consonant-CardsGrid--4up .consonant-Card.three-fourths .consonant-Card-badge,.consonant-CardsGrid--5up .consonant-Card.three-fourths .consonant-Card-badge{position:absolute;display:block;max-width:36%;max-height:50%;top:24px;left:24px;padding:4px 11px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.75rem;line-height:1rem;font-weight:400;color:#747474;font-style:normal;word-break:break-word;text-align:left;border:1px solid #959595;border-radius:4px;background-color:#fff;overflow-y:auto;z-index:1}.consonant-CardsGrid--4up .consonant-Card.three-fourths{height:384px}.consonant-CardsGrid--4up .consonant-Card.three-fourths .consonant-Card-header{min-height:232px;height:276px}.consonant-CardsGrid--5up .consonant-Card.three-fourths{height:344px}.consonant-CardsGrid--5up .consonant-Card-header{min-height:232px;height:232px}.consonant-CardsGrid .consonant-Card.full-card{height:448px}.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-content{position:absolute;bottom:0;display:flex;flex-direction:column;justify-content:flex-end;min-height:108px;margin-top:auto;padding:0 24px 24px;text-decoration:none;background:transparent linear-gradient(180deg,transparent,rgba(0,0,0,.501) 36%,rgba(0,0,0,.701)) 0 0 no-repeat padding-box;outline:0}.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-content:before{content:"";position:absolute;right:24px;bottom:32px;width:12px;height:12px;border:1px solid #fff;box-shadow:1px 1px 0 0 #fff;border-top:0;border-left:0;transform:rotate(-45deg)}.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-content:active,.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-content:hover{text-decoration:none}.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-header{position:absolute!important;width:100%;height:auto;max-height:none;background-color:#eaeaea;background-position:50% 50%;background-repeat:no-repeat;background-size:cover;z-index:0;top:0;bottom:0;left:0;right:0}.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-header img{min-width:100%;min-height:100%}.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-header button.consonant-Card-videoButton-wrapper{width:100%;height:100%;background-color:transparent}.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-videoIco{display:block;position:absolute;width:40px;height:40px;right:24px;bottom:16px;font-size:0;line-height:0;background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg data-name='40' xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'%3E%3Cg data-name='Ellipse 20182' fill='%231473e6' stroke='%23fff' stroke-width='2'%3E%3Ccircle cx='20' cy='20' r='20' stroke='none'/%3E%3Ccircle cx='20' cy='20' r='19' fill='none'/%3E%3C/g%3E%3Cpath data-name='Path 356676' d='M15 10.833v18.333l13.333-9.167z' fill='%23fff'/%3E%3C/svg%3E") no-repeat 0 0;background-size:cover;z-index:1;cursor:pointer;transform-origin:50% 50%;transition:transform .3s ease-in-out;bottom:124px}.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-videoIco:active,.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-videoIco:hover{transform:scale(1.1);background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg data-name='40' xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'%3E%3Cg data-name='Ellipse 20182' fill='%230059c2' stroke='%23fff' stroke-width='2'%3E%3Ccircle cx='20' cy='20' r='20' stroke='none'/%3E%3Ccircle cx='20' cy='20' r='19' fill='none'/%3E%3C/g%3E%3Cpath data-name='Path 356676' d='M15 10.833v18.333l13.333-9.167z' fill='%23fff'/%3E%3C/svg%3E") no-repeat 0 0;transition:transform .3s ease-in-out}.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-videoIco:focus{transform:scale(1.1);transition:transform .3s ease-in-out;outline:2px solid #1492e6}.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-logo{position:absolute;display:block;bottom:124px;left:0;padding:7px 24px;border:1px solid transparent;border-top-right-radius:4px;border-bottom-right-radius:4px;background-color:#fff;z-index:3;font-size:0;line-height:0}.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-logo img{width:auto;height:auto;max-width:90px;max-height:32px;object-fit:contain;user-select:none}.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-label{display:block;max-width:100%;margin-bottom:5px;font-size:.875rem;line-height:1rem;font-weight:400;white-space:nowrap;text-overflow:ellipsis}.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-label,.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-title{font-family:adobe-clean,Segoe UI,Roboto,sans-serif;color:#fff;font-style:normal;word-break:break-word;text-align:left;text-decoration:none;overflow:hidden;z-index:1}.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-title{display:-webkit-box;-webkit-box-orient:vertical;max-height:2.75rem;margin:0;padding-right:24px;font-size:1.125rem;line-height:1.375rem;font-weight:700;-webkit-line-clamp:2}.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-banner{position:absolute;display:flex;justify-content:flex-start;max-width:56%;max-height:70%;top:24px;right:0;padding:8px 13px 7px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.75rem;line-height:1.0625rem;font-weight:700;color:#fff;font-style:normal;word-break:break-word;text-align:left;letter-spacing:.72px;text-transform:uppercase;border-top-left-radius:4px;border-bottom-left-radius:4px;z-index:1;background-color:#1473e6;user-select:none;overflow-y:auto}.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-bannerIconWrapper{margin-right:4px}.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-bannerIconWrapper img{width:8px;height:8px}.consonant-CardsGrid .consonant-Card.full-card .consonant-Card-badge{position:absolute;display:block;max-width:36%;max-height:50%;top:24px;left:24px;padding:4px 11px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.75rem;line-height:1rem;font-weight:400;color:#747474;font-style:normal;word-break:break-word;text-align:left;border:1px solid #959595;border-radius:4px;background-color:#fff;overflow-y:auto;z-index:1}.consonant-CardsGrid--4up .consonant-Card.full-card{height:384px}.consonant-CardsGrid--5up .consonant-Card.full-card{height:344px}.consonant-CardsGrid .consonant-Card.half-height{height:208px}.consonant-CardsGrid .consonant-Card.half-height .consonant-Card-header{z-index:0;height:100%;background-color:#eaeaea;background-position:50% 0;background-repeat:no-repeat;background-size:cover}.consonant-CardsGrid .consonant-Card.half-height .consonant-Card-header:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:transparent linear-gradient(180deg,rgba(0,0,0,.1) 10%,rgba(0,0,0,.8) 80%) 0 0 no-repeat;z-index:1;opacity:1}.consonant-CardsGrid .consonant-Card.half-height .consonant-Card-videoButton-wrapper{top:-118px;background:transparent;position:absolute;height:208px;left:0;right:0;z-index:2;width:100%}.consonant-CardsGrid .consonant-Card.half-height .consonant-Card-videoIco{display:block;position:absolute;width:40px;height:40px;right:24px;bottom:16px;font-size:0;line-height:0;background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg data-name='40' xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'%3E%3Cg data-name='Ellipse 20182' fill='%231473e6' stroke='%23fff' stroke-width='2'%3E%3Ccircle cx='20' cy='20' r='20' stroke='none'/%3E%3Ccircle cx='20' cy='20' r='19' fill='none'/%3E%3C/g%3E%3Cpath data-name='Path 356676' d='M15 10.833v18.333l13.333-9.167z' fill='%23fff'/%3E%3C/svg%3E") no-repeat 0 0;background-size:cover;z-index:1;cursor:pointer;transform-origin:50% 50%;transition:transform .3s ease-in-out;top:75px;left:24px;right:auto}.consonant-CardsGrid .consonant-Card.half-height .consonant-Card-videoIco:active,.consonant-CardsGrid .consonant-Card.half-height .consonant-Card-videoIco:hover{transform:scale(1.1);background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg data-name='40' xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'%3E%3Cg data-name='Ellipse 20182' fill='%230059c2' stroke='%23fff' stroke-width='2'%3E%3Ccircle cx='20' cy='20' r='20' stroke='none'/%3E%3Ccircle cx='20' cy='20' r='19' fill='none'/%3E%3C/g%3E%3Cpath data-name='Path 356676' d='M15 10.833v18.333l13.333-9.167z' fill='%23fff'/%3E%3C/svg%3E") no-repeat 0 0;transition:transform .3s ease-in-out}.consonant-CardsGrid .consonant-Card.half-height .consonant-Card-videoIco:focus{transform:scale(1.1);transition:transform .3s ease-in-out;outline:2px solid #1492e6}.consonant-CardsGrid .consonant-Card.half-height .consonant-Card-content{position:absolute;text-decoration:none;bottom:0;background-color:transparent;flex-direction:column-reverse;padding:8px 24px 32px}.consonant-CardsGrid .consonant-Card.half-height .consonant-Card-title{margin:0 0 5px;max-height:3rem;padding:0;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:1rem;line-height:1.25rem;font-weight:700;color:#fff;font-style:normal;word-break:break-word;text-align:left;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.consonant-CardsGrid .consonant-Card.half-height .consonant-Card-title :only-child{margin-bottom:0}.consonant-CardsGrid .consonant-Card.half-height .consonant-Card-label{display:block;max-height:1.3125rem;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1.3125rem;font-weight:400;color:#fff;font-style:normal;word-break:break-word;text-align:left;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden}.consonant-CardsGrid .consonant-Card.half-height .consonant-Card-banner{position:absolute;display:flex;justify-content:flex-start;max-width:56%;max-height:31%;top:16px;right:0;padding:8px 13px 7px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.75rem;line-height:1.0625rem;font-weight:700;color:#fff;font-style:normal;word-break:break-word;text-align:left;letter-spacing:.72px;text-transform:uppercase;border-top-left-radius:4px;border-bottom-left-radius:4px;z-index:2;background-color:#1473e6;user-select:none;overflow-y:auto}.consonant-CardsGrid .consonant-Card.half-height .consonant-Card-bannerIconWrapper{margin-right:4px}.consonant-CardsGrid .consonant-Card.half-height .consonant-Card-bannerIconWrapper img{width:8px;height:8px}.consonant-CardsGrid .consonant-Card.half-height .consonant-Card--labelTop .consonant-Card-content{flex-direction:column-reverse}.consonant-CardsGrid .consonant-Card.half-height .consonant-Card--labelTop .consonant-Card-label{margin-bottom:8px}.consonant-CardsGrid .consonant-Card.half-height .consonant-Card--labelTop .consonant-Card-label :only-child,.consonant-CardsGrid .consonant-Card.half-height .consonant-Card--labelTop .consonant-Card-title{margin-bottom:0}.consonant-CardsGrid .consonant-Card.half-height .consonant-Card.consonant-u-noBorders{border:0}@media only screen and (min-width:600px){.consonant-CardsGrid .consonant-Card.half-height .consonant-Card-title{max-height:3.175rem;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:1.125rem;line-height:1.375rem;font-weight:700;color:#fff;font-style:normal;word-break:break-word;text-align:left}}@media only screen and (min-width:1200px){.consonant-CardsGrid .consonant-Card.half-height{outline:0;position:relative}.consonant-CardsGrid .consonant-Card.half-height:focus:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;margin:auto;border:2px solid #1473e6;z-index:1}}.consonant-CardsGrid .consonant-Card.double-wide{min-width:300px;max-width:584px;height:448px}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-header{position:relative;height:306px;overflow:hidden;background-position:50% 0;background-repeat:no-repeat;background-size:cover}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-videoIco{display:block;position:absolute;width:40px;height:40px;right:24px;bottom:16px;font-size:0;line-height:0;background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg data-name='40' xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'%3E%3Cg data-name='Ellipse 20182' fill='%231473e6' stroke='%23fff' stroke-width='2'%3E%3Ccircle cx='20' cy='20' r='20' stroke='none'/%3E%3Ccircle cx='20' cy='20' r='19' fill='none'/%3E%3C/g%3E%3Cpath data-name='Path 356676' d='M15 10.833v18.333l13.333-9.167z' fill='%23fff'/%3E%3C/svg%3E") no-repeat 0 0;background-size:cover;z-index:1;cursor:pointer;transform-origin:50% 50%;transition:transform .3s ease-in-out}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-videoIco:active,.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-videoIco:hover{transform:scale(1.1);background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg data-name='40' xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'%3E%3Cg data-name='Ellipse 20182' fill='%230059c2' stroke='%23fff' stroke-width='2'%3E%3Ccircle cx='20' cy='20' r='20' stroke='none'/%3E%3Ccircle cx='20' cy='20' r='19' fill='none'/%3E%3C/g%3E%3Cpath data-name='Path 356676' d='M15 10.833v18.333l13.333-9.167z' fill='%23fff'/%3E%3C/svg%3E") no-repeat 0 0;transition:transform .3s ease-in-out}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-videoIco:focus{transform:scale(1.1);transition:transform .3s ease-in-out;outline:2px solid #1492e6}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-content{flex-grow:1;display:flex;flex-direction:column;padding:16px 24px 28px;text-decoration:none;outline:0;width:100%}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-content:active,.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-content:hover{text-decoration:none}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-content:empty{display:none}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-title{margin:0 0 5px;padding:0;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:1.125rem;line-height:1.375rem;font-weight:700;color:#323232;font-style:normal;word-break:break-word;text-align:left;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-title :only-child{margin-bottom:0}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-logo{position:absolute;display:block;bottom:16px;left:0;padding:7px 24px;border:1px solid transparent;border-top-right-radius:4px;border-bottom-right-radius:4px;background-color:#fff;z-index:1;font-size:0;line-height:0}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-logo img{width:auto;height:auto;max-width:90px;max-height:32px;object-fit:contain;user-select:none}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-label{display:block;margin-bottom:8px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1.3125rem;font-weight:400;color:#505050;font-style:normal;word-break:break-word;text-align:left;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-label :only-child{margin-bottom:0}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-banner{position:absolute;display:flex;justify-content:flex-start;max-width:56%;max-height:70%;top:24px;right:0;padding:8px 13px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.75rem;line-height:1.0625rem;font-weight:700;color:#fff;font-style:normal;word-break:break-word;text-align:left;letter-spacing:.72px;text-transform:uppercase;border-top-left-radius:4px;border-bottom-left-radius:4px;z-index:1;background-color:#1473e6;user-select:none;overflow-y:auto}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-bannerIconWrapper{margin-right:4px}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-bannerIconWrapper img{width:8px;height:8px}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-text{margin:0;padding:0;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1.3125rem;font-weight:400;color:#747474;font-style:normal;word-break:break-word;text-align:left;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card--contentTop{flex-direction:column-reverse}.consonant-Card--contentTop .consonant-CardsGrid .consonant-Card.double-wide-img{flex-grow:1}.consonant-Card--contentTop .consonant-CardsGrid .consonant-Card.double-wide-content{position:absolute;top:0;left:0;right:0;padding-top:24px;background-color:transparent;z-index:1}.consonant-Card--noTextInfo .consonant-CardsGrid .consonant-Card.double-wide-img{height:100%}.consonant-Card--noTextInfo .consonant-CardsGrid .consonant-Card.double-wide-content{display:none}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card.consonant-u-noBorders{border:0}@media only screen and (min-width:1200px){.consonant-CardsGrid .consonant-Card.double-wide{min-width:500px}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-content{outline:0;position:relative}.consonant-CardsGrid .consonant-Card.double-wide .consonant-Card-content:focus:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;margin:auto;border:2px solid #1473e6;z-index:1}}@media only screen and (min-width:680px){.consonant-CardsGrid .consonant-Card.double-wide--2up .consonant-Card.double-wide{min-width:500px}.consonant-CardsGrid .consonant-Card.double-wide--3up .consonant-Card.double-wide,.consonant-CardsGrid .consonant-Card.double-wide--4up .consonant-Card.double-wide,.consonant-CardsGrid .consonant-Card.double-wide--5up .consonant-Card.double-wide{grid-template-columns:repeat(auto-fit,minmax(500px,max-content))}}.consonant-CardsGrid .consonant-Card.product{height:auto;min-height:222px}.consonant-CardsGrid .consonant-Card.product .consonant-Card-content{padding:16px 16px 20px}.consonant-CardsGrid .consonant-Card.product .consonant-Card-videoIco{display:block;position:absolute;width:40px;height:40px;right:24px;bottom:16px;font-size:0;line-height:0;background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg data-name='40' xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'%3E%3Cg data-name='Ellipse 20182' fill='%231473e6' stroke='%23fff' stroke-width='2'%3E%3Ccircle cx='20' cy='20' r='20' stroke='none'/%3E%3Ccircle cx='20' cy='20' r='19' fill='none'/%3E%3C/g%3E%3Cpath data-name='Path 356676' d='M15 10.833v18.333l13.333-9.167z' fill='%23fff'/%3E%3C/svg%3E") no-repeat 0 0;background-size:cover;z-index:1;cursor:pointer;transform-origin:50% 50%;transition:transform .3s ease-in-out}.consonant-CardsGrid .consonant-Card.product .consonant-Card-videoIco:active,.consonant-CardsGrid .consonant-Card.product .consonant-Card-videoIco:hover{transform:scale(1.1);background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg data-name='40' xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'%3E%3Cg data-name='Ellipse 20182' fill='%230059c2' stroke='%23fff' stroke-width='2'%3E%3Ccircle cx='20' cy='20' r='20' stroke='none'/%3E%3Ccircle cx='20' cy='20' r='19' fill='none'/%3E%3C/g%3E%3Cpath data-name='Path 356676' d='M15 10.833v18.333l13.333-9.167z' fill='%23fff'/%3E%3C/svg%3E") no-repeat 0 0;transition:transform .3s ease-in-out}.consonant-CardsGrid .consonant-Card.product .consonant-Card-videoIco:focus{transform:scale(1.1);transition:transform .3s ease-in-out;outline:2px solid #1492e6}.consonant-CardsGrid .consonant-Card.product .consonant-Card-row{display:flex;flex-direction:row;margin-bottom:16px;align-items:center}.consonant-CardsGrid .consonant-Card.product .consonant-Card-title{flex:1;display:-webkit-box;-webkit-box-orient:vertical;max-height:2.75rem;margin:6px 0 10px;text-decoration:none;word-break:break-word;-webkit-line-clamp:2;overflow:hidden}.consonant-CardsGrid .consonant-Card.product .consonant-Card-text{display:-webkit-box;-webkit-box-orient:vertical;max-height:3.9375rem;margin:0 0 20px;padding:0;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1.3125rem;font-weight:400;color:#747474;font-style:normal;word-break:break-word;text-align:left;overflow:hidden}.consonant-CardsGrid .consonant-Card.product .consonant-Card-text:empty{display:none}.consonant-CardsGrid .consonant-Card.text-card{height:auto}.consonant-CardsGrid .consonant-Card.text-card .consonant-Card-content{padding:16px;border-bottom-left-radius:4px;border-bottom-right-radius:4px;padding-bottom:24px}.consonant-CardsGrid .consonant-Card.text-card .consonant-Card-header{flex-grow:1;position:relative;width:100%;padding:16px 0 0 16px;height:64px;max-height:64px;border-top-left-radius:4px;border-top-right-radius:4px;background-image:none!important}.consonant-CardsGrid .consonant-Card.text-card .consonant-Card-videoIco{display:block;position:absolute;width:40px;height:40px;right:24px;bottom:16px;font-size:0;line-height:0;background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg data-name='40' xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'%3E%3Cg data-name='Ellipse 20182' fill='%231473e6' stroke='%23fff' stroke-width='2'%3E%3Ccircle cx='20' cy='20' r='20' stroke='none'/%3E%3Ccircle cx='20' cy='20' r='19' fill='none'/%3E%3C/g%3E%3Cpath data-name='Path 356676' d='M15 10.833v18.333l13.333-9.167z' fill='%23fff'/%3E%3C/svg%3E") no-repeat 0 0;background-size:cover;z-index:1;cursor:pointer;transform-origin:50% 50%;transition:transform .3s ease-in-out}.consonant-CardsGrid .consonant-Card.text-card .consonant-Card-videoIco:active,.consonant-CardsGrid .consonant-Card.text-card .consonant-Card-videoIco:hover{transform:scale(1.1);background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg data-name='40' xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'%3E%3Cg data-name='Ellipse 20182' fill='%230059c2' stroke='%23fff' stroke-width='2'%3E%3Ccircle cx='20' cy='20' r='20' stroke='none'/%3E%3Ccircle cx='20' cy='20' r='19' fill='none'/%3E%3C/g%3E%3Cpath data-name='Path 356676' d='M15 10.833v18.333l13.333-9.167z' fill='%23fff'/%3E%3C/svg%3E") no-repeat 0 0;transition:transform .3s ease-in-out}.consonant-CardsGrid .consonant-Card.text-card .consonant-Card-videoIco:focus{transform:scale(1.1);transition:transform .3s ease-in-out;outline:2px solid #1492e6}.consonant-CardsGrid .consonant-Card.text-card .consonant-Card-logo{display:block;width:48px;height:48px;overflow:hidden;background-size:cover;background-position:50%;border-radius:4px;font-size:0;line-height:0}.consonant-CardsGrid .consonant-Card.text-card .consonant-Card-logo img{width:48px;height:48px;object-fit:cover;user-select:none}.consonant-CardsGrid .consonant-Card.text-card .consonant-Card-label{display:none;max-width:100%;margin-bottom:4px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1rem;font-weight:400;color:#505050;font-style:normal;word-break:break-word;text-align:left;text-decoration:none;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.consonant-CardsGrid .consonant-Card.text-card .consonant-Card-title{max-height:2.75rem;margin:0 0 6px;font-size:1.125rem;line-height:1.375rem;font-weight:700;color:#323232}.consonant-CardsGrid .consonant-Card.text-card .consonant-Card-text,.consonant-CardsGrid .consonant-Card.text-card .consonant-Card-title{display:-webkit-box;-webkit-box-orient:vertical;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-style:normal;word-break:break-word;text-align:left}.consonant-CardsGrid .consonant-Card.text-card .consonant-Card-text{max-height:3.9375rem;margin:0 0 14px;padding:0;font-size:.875rem;line-height:1.3125rem;font-weight:400;color:#747474;-webkit-line-clamp:3;overflow:hidden}.consonant-CardsGrid .consonant-Card.text-card .consonant-Card-text:empty{display:none}.consonant-Card-label+.consonant-CardsGrid .consonant-Card.text-card-title+p{max-height:3rem;line-height:1rem}.consonant-CardsGrid .consonant-Card.text-card .consonant-Card-banner{position:absolute;display:flex;justify-content:flex-start;max-width:56%;max-height:70%;top:16px;right:0;padding:8px 13px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.75rem;line-height:1.0625rem;font-weight:700;color:#fff;font-style:normal;word-break:break-word;text-align:left;letter-spacing:.72px;text-transform:uppercase;border-top-left-radius:4px;border-bottom-left-radius:4px;z-index:1;background-color:#1473e6;user-select:none;overflow-y:auto}.consonant-CardsGrid .consonant-Card.text-card .consonant-Card-bannerIconWrapper{margin-right:4px}.consonant-CardsGrid .consonant-Card.text-card .consonant-Card-bannerIconWrapper img{width:8px;height:8px}.consonant-CardsGrid .consonant-Card.text-card .consonant-Card-badge{position:absolute;display:block;max-width:36%;max-height:50%;top:24px;left:24px;padding:4px 11px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.75rem;line-height:1rem;font-weight:400;color:#747474;font-style:normal;word-break:break-word;text-align:left;border:1px solid #959595;border-radius:4px;background-color:#fff;overflow-y:auto;z-index:1}.consonant-CardsGrid .consonant-Card.text-card .consonant-DateIntervalInfobit{display:none}.consonant-CardsGrid .consonant-Card.text-card .consonant-BtnInfobit{margin-left:0}.consonant-CardsGrid .consonant-Card.icon-card{height:auto;background-color:#f8f8f8;border:1px solid #f8f8f8}.consonant-CardsGrid .consonant-Card.icon-card .consonant-Card-content{padding:16px 16px 20px}.consonant-CardsGrid .consonant-Card.icon-card .consonant-Card-header{flex-grow:1;position:relative;width:100%;padding:16px 0 0 16px;height:64px;max-height:64px;border-top-left-radius:4px;border-top-right-radius:4px;background-image:none!important}.consonant-CardsGrid .consonant-Card.icon-card .consonant-Card-logo{display:block;width:48px;height:48px;overflow:hidden;background-size:cover;background-position:50%;border-radius:4px}.consonant-CardsGrid .consonant-Card.icon-card .consonant-Card-logo img{width:48px;height:48px;object-fit:cover;user-select:none}.consonant-CardsGrid .consonant-Card.icon-card .consonant-Card-label{max-width:100%;margin-bottom:4px;font-size:.875rem;line-height:1rem;font-weight:400;white-space:nowrap;text-overflow:ellipsis}.consonant-CardsGrid .consonant-Card.icon-card .consonant-Card-label,.consonant-CardsGrid .consonant-Card.icon-card .consonant-Card-title{font-family:adobe-clean,Segoe UI,Roboto,sans-serif;color:#2c2c2c;font-style:normal;word-break:break-word;text-align:left;text-decoration:none;overflow:hidden}.consonant-CardsGrid .consonant-Card.icon-card .consonant-Card-title{flex:1;display:-webkit-box;-webkit-box-orient:vertical;max-height:2.75rem;margin:6px 0 10px;-webkit-line-clamp:2;font-size:1.125rem;line-height:1.375rem;font-weight:700}.consonant-LinkBlocker{position:absolute;top:0;left:0;display:block;background-color:transparent;width:100%;height:100%;cursor:pointer;z-index:1}.consonant-LinkBlocker:focus{border:2px solid #1492e6}.consonant-CardFooter{margin-top:auto;padding-top:24px}.consonant-CardFooter:not(:last-child){padding-top:0;padding-bottom:10px}.consonant-CardFooter+.consonant-CardFooter{margin-top:0;padding-top:10px}.consonant-CardFooter+.consonant-CardFooter:not(.consonant-CardFooter--divider){padding-top:0}.consonant-CardFooter--divider:last-child{border-top:1px solid #eaeaea}.consonant-CardFooter-row{display:flex;width:100%;justify-content:space-between;align-items:stretch;height:32px}.consonant-CardFooter-cell{display:flex;justify-content:flex-start;align-items:center;max-width:100%;flex-basis:auto;flex-grow:1}.consonant-CardFooter-cell:empty{display:none}.consonant-CardFooter-cell--left>:first-child{margin-left:0}.consonant-CardFooter-cell--center{justify-content:center}.consonant-CardFooter-cell--center:first-child:not(:only-child){justify-content:flex-start}.consonant-CardFooter-cell--center:first-child>:first-child{margin-left:0}.consonant-CardFooter-cell--right{justify-content:flex-end}.consonant-CardFooter-cell>:nth-of-type(n+11){display:none}@media (-ms-high-contrast:active),(-ms-high-contrast:none){.consonant-CardFooter-cell{width:100%}}.consonant-CardFooter+.consonant-CardFooter~.consonant-CardFooter{display:none}span+h2+p+.consonant-CardFooter+.consonant-CardFooter{margin-bottom:-10px}[data-cells="3"]:not(.consonant-CardFooter-row--fluid) .consonant-CardFooter-cell{max-width:33.33333333%}[data-cells="2"]:not(.consonant-CardFooter-row--fluid) .consonant-CardFooter-cell{max-width:50%}[data-cells="1"]:not(.consonant-CardFooter-row--fluid) .consonant-CardFooter-cell{max-width:100%}[data-cells="0"]:not(.consonant-CardFooter-row--fluid) .consonant-CardFooter-cell{max-width:Infinity%}.consonant-BtnInfobit{display:flex;justify-content:center;align-items:center;min-width:76px;max-width:100%;height:32px;max-height:32px;margin-left:16px;padding-left:16px;padding-right:16px;text-decoration:none;border:2px solid #505050;border-radius:16px;background-color:#fff;cursor:pointer;transition:border-color .3s ease-in-out,background-color .3s ease-in-out}.consonant-BtnInfobit span{font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.8235rem;line-height:.9375rem;font-weight:700;color:#505050;font-style:normal;word-break:break-word;text-align:center;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;transition:color .3s ease-in-out}.consonant-BtnInfobit:hover{text-decoration:none!important;border-color:#505050;background-color:#505050}.consonant-BtnInfobit:hover span{color:#fff}.consonant-BtnInfobit:active{text-decoration:none!important;border-color:#323232;background-color:#323232}.consonant-BtnInfobit:active span{color:#fff}.consonant-BtnInfobit:focus{outline:0}@media only screen and (min-width:1200px){.consonant-BtnInfobit:focus{outline:2px solid #1492e6}}.consonant-BtnInfobit--cta{background-color:#2680eb;border-color:#2680eb}.consonant-BtnInfobit--cta span{color:#fff}.consonant-BtnInfobit--cta:hover{text-decoration:none!important;background-color:#1473e6;border-color:#1473e6}.consonant-BtnInfobit--cta:hover span{color:#fff}.consonant-BtnInfobit--cta:active{text-decoration:none!important;background-color:#0d66d0;border-color:#0d66d0}.consonant-BtnInfobit--cta:active span{color:#fff}.consonant-BtnInfobit-ico{width:auto;height:auto;max-width:24px;max-height:24px;margin-right:8px;overflow:hidden;object-fit:cover;user-select:none}.consonant-BtnInfobit-ico--last{order:1;margin-left:8px;margin-right:0}.consonant-BtnInfobit-ico:only-child{margin:0}.consonant-PriceInfobit{display:flex;justify-content:flex-start;align-items:baseline;min-width:0;max-width:100%;margin-left:16px}.consonant-PriceInfobit-price{max-width:100%;flex-shrink:0;font-size:1.125rem;color:#323232}.consonant-PriceInfobit-price,.consonant-PriceInfobit-term{font-family:adobe-clean,Segoe UI,Roboto,sans-serif;line-height:1.6875rem;font-weight:400;font-style:normal;word-break:break-word;text-align:left;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.consonant-PriceInfobit-term{position:relative;flex-shrink:1;font-size:.875rem;color:#959595}.consonant-PriceInfobit-term:before{content:"/"}.consonant-IconWithTextInfobit{display:flex;justify-content:flex-start;align-items:center;min-width:0;max-width:100%;margin-left:16px}.consonant-IconWithTextInfobit img{display:block;width:auto;height:auto;max-width:80px;max-height:22px;margin-right:4px;object-fit:contain;user-select:none}.consonant-IconWithTextInfobit-text{max-width:100%;max-height:2rem;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1rem;font-weight:400;color:#747474;font-style:normal;word-break:break-word;text-align:left;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.consonant-LinkWithIcoInfobit{display:flex;justify-content:flex-start;align-items:center;min-width:0;max-width:100%;margin-left:16px;text-decoration:none}.consonant-LinkWithIcoInfobit:focus{outline:0}@media only screen and (min-width:1200px){.consonant-LinkWithIcoInfobit:focus{outline:2px solid #1492e6}}.consonant-LinkWithIcoInfobit span{max-width:100%;max-height:2rem;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.9375rem;line-height:1rem;font-weight:700;color:#2680eb;font-style:normal;word-break:break-word;text-align:left;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.consonant-LinkWithIcoInfobit:hover span{text-decoration:none;color:#1473e6}.consonant-LinkWithIcoInfobit:active span{text-decoration:none;color:#0d66d0}.consonant-LinkWithIcoInfobit img{display:block;width:18px;height:auto;max-width:18px;max-height:18px;object-fit:contain;user-select:none}.consonant-LinkWithIcoInfobit img:not(:last-child){margin-right:8px}.consonant-RatingInfobit{display:flex;justify-content:flex-start;align-items:center;max-width:100%;margin-left:16px}.consonant-RatingInfobit--negMargin{margin-right:-24px}.consonant-RatingInfobit-stars{display:block;position:relative;height:15px;max-width:100%;white-space:nowrap}.consonant-RatingInfobit-stars:before{content:"";display:block;position:relative;height:15px;background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg id='Layer_1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 17 15'%3E%3Cstyle%3E.st0{fill:none}.st1{fill:%23d3d3d3}%3C/style%3E%3Cg id='Shape'%3E%3Cpath class='st0' d='M8.6.7c-.1 0-.3.1-.3.2L6.4 5.7l-5.2.2c-.2 0-.3.2-.3.4 0 .1 0 .2.1.2l4 3.2-1.4 5c0 .2.1.3.2.4h.1c.1 0 .1 0 .2-.1l4.3-2.8 4.3 2.8c.1.1.3.1.4-.1 0-.1.1-.2 0-.3l-1.4-5 4-3.2c.1-.1.2-.3 0-.4.3 0 .2-.1.1-.1l-5.2-.2L8.9.9C8.8.8 8.7.7 8.6.7z' transform='translate(-.029 -.412)'/%3E%3Cpath class='st1' d='M8.6 2.2L7.1 6l-.2.4h-.5l-4 .2 3.2 2.5.4.3-.2.5-1.1 3.9 3.4-2.2.4-.3.4.3 3.4 2.2-1.1-3.9-.1-.5.4-.3 3.2-2.5-4-.2h-.5L10 6 8.6 2.2m0-1.5c.1 0 .2.1.3.2l1.8 4.8 5.2.2c.1 0 .2.1.3.2 0 .1 0 .3-.1.3l-4 3.2 1.4 5v.1c0 .1-.1.2-.2.3h-.2c-.1 0-.1 0-.2-.1l-4.3-2.8-4.3 2.8c-.1 0-.1.1-.2.1H4c-.1 0-.2-.1-.2-.1 0-.1-.1-.2 0-.2l1.4-5L1 6.5c-.1-.1-.1-.2-.1-.3.1-.2.2-.3.3-.3l5.2-.2L8.3.9c0-.1.1-.2.3-.2z' transform='translate(-.029 -.412)'/%3E%3C/g%3E%3C/svg%3E") repeat-x 0 0;background-size:17px 15px;z-index:1;overflow:hidden}.consonant-RatingInfobit-stars:after{content:"";display:block;position:absolute;height:15px;background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' id='Layer_1' viewBox='0 0 17 15'%3E%3Cstyle%3E.st0{fill:%231473e6}%3C/style%3E%3Cg id='Shape'%3E%3Cpath class='st0' d='M8.6.7c-.1 0-.3.1-.3.2L6.4 5.7l-5.2.2c-.2 0-.3.2-.3.4 0 .1 0 .2.1.2l4 3.2-1.4 5c0 .2.1.3.2.4h.1c.1 0 .1 0 .2-.1l4.3-2.8 4.3 2.8c.1.1.3.1.4-.1 0-.1.1-.2 0-.3l-1.4-5 4-3.2c.1-.1.2-.3 0-.4.3 0 .2-.1.1-.1l-5.2-.2L8.9.9C8.8.8 8.7.7 8.6.7z' transform='translate(-.029 -.412)'/%3E%3Cpath class='st0' d='M8.6 2.2L7.1 6l-.2.4h-.5l-4 .2 3.2 2.5.4.3-.2.5-1.1 3.9 3.4-2.2.4-.3.4.3 3.4 2.2-1.1-3.9-.1-.5.4-.3 3.2-2.5-4-.2h-.5L10 6 8.6 2.2m0-1.5c.1 0 .2.1.3.2l1.8 4.8 5.2.2c.1 0 .2.1.3.2 0 .1 0 .3-.1.3l-4 3.2 1.4 5v.1c0 .1-.1.2-.2.3h-.2c-.1 0-.1 0-.2-.1l-4.3-2.8-4.3 2.8c-.1 0-.1.1-.2.1H4c-.1 0-.2-.1-.2-.1 0-.1-.1-.2 0-.2l1.4-5L1 6.5c-.1-.1-.1-.2-.1-.3.1-.2.2-.3.3-.3l5.2-.2L8.3.9c0-.1.1-.2.3-.2z' transform='translate(-.029 -.412)'/%3E%3C/g%3E%3C/svg%3E") repeat-x 0 0;background-size:17px 15px;z-index:2;left:0;top:0;bottom:0;overflow:hidden}.consonant-RatingInfobit-text{max-width:35%;margin-left:7px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1.375rem;font-weight:400;color:#959595;font-style:normal;word-break:break-word;text-align:left;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.consonant-RatingInfobit[data-stars="5"]{min-width:109px}.consonant-RatingInfobit[data-stars="5"] .consonant-RatingInfobit-stars:before{width:85px}.consonant-RatingInfobit[data-stars="4"]{min-width:92px}.consonant-RatingInfobit[data-stars="4"] .consonant-RatingInfobit-stars:before{width:68px}.consonant-RatingInfobit[data-stars="3"]{min-width:75px}.consonant-RatingInfobit[data-stars="3"] .consonant-RatingInfobit-stars:before{width:51px}.consonant-RatingInfobit[data-stars="2"]{min-width:58px}.consonant-RatingInfobit[data-stars="2"] .consonant-RatingInfobit-stars:before{width:34px}.consonant-RatingInfobit[data-stars="1"]{min-width:41px}.consonant-RatingInfobit[data-stars="1"] .consonant-RatingInfobit-stars:before{width:17px}.consonant-RatingInfobit-stars[data-rating="100"]:after{width:100%}.consonant-RatingInfobit-stars[data-rating="99"]:after{width:99%}.consonant-RatingInfobit-stars[data-rating="98"]:after{width:98%}.consonant-RatingInfobit-stars[data-rating="97"]:after{width:97%}.consonant-RatingInfobit-stars[data-rating="96"]:after{width:96%}.consonant-RatingInfobit-stars[data-rating="95"]:after{width:95%}.consonant-RatingInfobit-stars[data-rating="94"]:after{width:94%}.consonant-RatingInfobit-stars[data-rating="93"]:after{width:93%}.consonant-RatingInfobit-stars[data-rating="92"]:after{width:92%}.consonant-RatingInfobit-stars[data-rating="91"]:after{width:91%}.consonant-RatingInfobit-stars[data-rating="90"]:after{width:90%}.consonant-RatingInfobit-stars[data-rating="89"]:after{width:89%}.consonant-RatingInfobit-stars[data-rating="88"]:after{width:88%}.consonant-RatingInfobit-stars[data-rating="87"]:after{width:87%}.consonant-RatingInfobit-stars[data-rating="86"]:after{width:86%}.consonant-RatingInfobit-stars[data-rating="85"]:after{width:85%}.consonant-RatingInfobit-stars[data-rating="84"]:after{width:84%}.consonant-RatingInfobit-stars[data-rating="83"]:after{width:83%}.consonant-RatingInfobit-stars[data-rating="82"]:after{width:82%}.consonant-RatingInfobit-stars[data-rating="81"]:after{width:81%}.consonant-RatingInfobit-stars[data-rating="80"]:after{width:80%}.consonant-RatingInfobit-stars[data-rating="79"]:after{width:79%}.consonant-RatingInfobit-stars[data-rating="78"]:after{width:78%}.consonant-RatingInfobit-stars[data-rating="77"]:after{width:77%}.consonant-RatingInfobit-stars[data-rating="76"]:after{width:76%}.consonant-RatingInfobit-stars[data-rating="75"]:after{width:75%}.consonant-RatingInfobit-stars[data-rating="74"]:after{width:74%}.consonant-RatingInfobit-stars[data-rating="73"]:after{width:73%}.consonant-RatingInfobit-stars[data-rating="72"]:after{width:72%}.consonant-RatingInfobit-stars[data-rating="71"]:after{width:71%}.consonant-RatingInfobit-stars[data-rating="70"]:after{width:70%}.consonant-RatingInfobit-stars[data-rating="69"]:after{width:69%}.consonant-RatingInfobit-stars[data-rating="68"]:after{width:68%}.consonant-RatingInfobit-stars[data-rating="67"]:after{width:67%}.consonant-RatingInfobit-stars[data-rating="66"]:after{width:66%}.consonant-RatingInfobit-stars[data-rating="65"]:after{width:65%}.consonant-RatingInfobit-stars[data-rating="64"]:after{width:64%}.consonant-RatingInfobit-stars[data-rating="63"]:after{width:63%}.consonant-RatingInfobit-stars[data-rating="62"]:after{width:62%}.consonant-RatingInfobit-stars[data-rating="61"]:after{width:61%}.consonant-RatingInfobit-stars[data-rating="60"]:after{width:60%}.consonant-RatingInfobit-stars[data-rating="59"]:after{width:59%}.consonant-RatingInfobit-stars[data-rating="58"]:after{width:58%}.consonant-RatingInfobit-stars[data-rating="57"]:after{width:57%}.consonant-RatingInfobit-stars[data-rating="56"]:after{width:56%}.consonant-RatingInfobit-stars[data-rating="55"]:after{width:55%}.consonant-RatingInfobit-stars[data-rating="54"]:after{width:54%}.consonant-RatingInfobit-stars[data-rating="53"]:after{width:53%}.consonant-RatingInfobit-stars[data-rating="52"]:after{width:52%}.consonant-RatingInfobit-stars[data-rating="51"]:after{width:51%}.consonant-RatingInfobit-stars[data-rating="50"]:after{width:50%}.consonant-RatingInfobit-stars[data-rating="49"]:after{width:49%}.consonant-RatingInfobit-stars[data-rating="48"]:after{width:48%}.consonant-RatingInfobit-stars[data-rating="47"]:after{width:47%}.consonant-RatingInfobit-stars[data-rating="46"]:after{width:46%}.consonant-RatingInfobit-stars[data-rating="45"]:after{width:45%}.consonant-RatingInfobit-stars[data-rating="44"]:after{width:44%}.consonant-RatingInfobit-stars[data-rating="43"]:after{width:43%}.consonant-RatingInfobit-stars[data-rating="42"]:after{width:42%}.consonant-RatingInfobit-stars[data-rating="41"]:after{width:41%}.consonant-RatingInfobit-stars[data-rating="40"]:after{width:40%}.consonant-RatingInfobit-stars[data-rating="39"]:after{width:39%}.consonant-RatingInfobit-stars[data-rating="38"]:after{width:38%}.consonant-RatingInfobit-stars[data-rating="37"]:after{width:37%}.consonant-RatingInfobit-stars[data-rating="36"]:after{width:36%}.consonant-RatingInfobit-stars[data-rating="35"]:after{width:35%}.consonant-RatingInfobit-stars[data-rating="34"]:after{width:34%}.consonant-RatingInfobit-stars[data-rating="33"]:after{width:33%}.consonant-RatingInfobit-stars[data-rating="32"]:after{width:32%}.consonant-RatingInfobit-stars[data-rating="31"]:after{width:31%}.consonant-RatingInfobit-stars[data-rating="30"]:after{width:30%}.consonant-RatingInfobit-stars[data-rating="29"]:after{width:29%}.consonant-RatingInfobit-stars[data-rating="28"]:after{width:28%}.consonant-RatingInfobit-stars[data-rating="27"]:after{width:27%}.consonant-RatingInfobit-stars[data-rating="26"]:after{width:26%}.consonant-RatingInfobit-stars[data-rating="25"]:after{width:25%}.consonant-RatingInfobit-stars[data-rating="24"]:after{width:24%}.consonant-RatingInfobit-stars[data-rating="23"]:after{width:23%}.consonant-RatingInfobit-stars[data-rating="22"]:after{width:22%}.consonant-RatingInfobit-stars[data-rating="21"]:after{width:21%}.consonant-RatingInfobit-stars[data-rating="20"]:after{width:20%}.consonant-RatingInfobit-stars[data-rating="19"]:after{width:19%}.consonant-RatingInfobit-stars[data-rating="18"]:after{width:18%}.consonant-RatingInfobit-stars[data-rating="17"]:after{width:17%}.consonant-RatingInfobit-stars[data-rating="16"]:after{width:16%}.consonant-RatingInfobit-stars[data-rating="15"]:after{width:15%}.consonant-RatingInfobit-stars[data-rating="14"]:after{width:14%}.consonant-RatingInfobit-stars[data-rating="13"]:after{width:13%}.consonant-RatingInfobit-stars[data-rating="12"]:after{width:12%}.consonant-RatingInfobit-stars[data-rating="11"]:after{width:11%}.consonant-RatingInfobit-stars[data-rating="10"]:after{width:10%}.consonant-RatingInfobit-stars[data-rating="9"]:after{width:9%}.consonant-RatingInfobit-stars[data-rating="8"]:after{width:8%}.consonant-RatingInfobit-stars[data-rating="7"]:after{width:7%}.consonant-RatingInfobit-stars[data-rating="6"]:after{width:6%}.consonant-RatingInfobit-stars[data-rating="5"]:after{width:5%}.consonant-RatingInfobit-stars[data-rating="4"]:after{width:4%}.consonant-RatingInfobit-stars[data-rating="3"]:after{width:3%}.consonant-RatingInfobit-stars[data-rating="2"]:after{width:2%}.consonant-RatingInfobit-stars[data-rating="1"]:after{width:1%}.consonant-RatingInfobit-stars[data-rating="0"]:after{width:0}.consonant-RatingInfobit-stars[data-rating="0"]:after,.consonant-RatingInfobit-stars[data-rating="1"]:after,.consonant-RatingInfobit-stars[data-rating="2"]:after,.consonant-RatingInfobit-stars[data-rating="3"]:after,.consonant-RatingInfobit-stars[data-rating="4"]:after,.consonant-RatingInfobit-stars[data-rating="5"]:after,.consonant-RatingInfobit-stars[data-rating="6"]:after,.consonant-RatingInfobit-stars[data-rating="7"]:after,.consonant-RatingInfobit-stars[data-rating="8"]:after,.consonant-RatingInfobit-stars[data-rating="9"]:after,.consonant-RatingInfobit-stars[data-rating="10"]:after,.consonant-RatingInfobit-stars[data-rating="11"]:after,.consonant-RatingInfobit-stars[data-rating="12"]:after,.consonant-RatingInfobit-stars[data-rating="13"]:after,.consonant-RatingInfobit-stars[data-rating="14"]:after,.consonant-RatingInfobit-stars[data-rating="15"]:after,.consonant-RatingInfobit-stars[data-rating="16"]:after,.consonant-RatingInfobit-stars[data-rating="17"]:after,.consonant-RatingInfobit-stars[data-rating="18"]:after,.consonant-RatingInfobit-stars[data-rating="19"]:after,.consonant-RatingInfobit-stars[data-rating="20"]:after{background-size:cover}.consonant-BookmarkInfobit{margin-left:16px;padding:0;font-size:0;line-height:0;border:0;outline:0;background-color:transparent}.consonant-BookmarkInfobit:focus{outline:0}@media only screen and (min-width:1200px){.consonant-BookmarkInfobit:focus{outline:2px solid #1492e6}}.consonant-BookmarkInfobit.is-active .consonant-BookmarkInfobit-ico{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 18'%3E%3Cpath stroke-width='1.5' stroke='%23747474' fill='%23747474' d='M13.6.6c-1.7.1-3.3 1-4.1 2.5C8.6 1.6 7.1.7 5.5.6c-2.8 0-5 2.2-5 5 0 4.7 9 10.8 9 10.8s9-6 9-10.8c0-2.7-2.1-5-4.9-5z'/%3E%3C/svg%3E")}.consonant-BookmarkInfobit.is-disabled{pointer-events:none;opacity:.5}.consonant-BookmarkInfobit-ico{display:block;width:19px;height:17px;background:transparent url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 18'%3E%3Cpath stroke-width='1.5' fill='%23fff' stroke='%23747474' d='M13.6.6c-1.7.1-3.3 1-4.1 2.5C8.6 1.6 7.1.7 5.5.6c-2.8 0-5 2.2-5 5 0 4.7 9 10.8 9 10.8s9-6 9-10.8c0-2.7-2.1-5-4.9-5z'/%3E%3C/svg%3E") no-repeat 50% 50%;background-size:contain}.consonant-DateIntervalInfobit{display:block;min-width:0;max-width:100%;max-height:2rem;margin-left:16px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1rem;font-weight:400;color:#747474;font-style:normal;word-break:break-word;text-align:left;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;white-space:normal;text-overflow:clip;overflow:hidden}.consonant-ProgressInfobit{min-width:0;max-width:100%;width:100%;margin-left:16px}.consonant-ProgressInfobit-wrapper{display:flex;justify-content:space-between;align-self:flex-start;margin-bottom:5px}.consonant-ProgressInfobit-text{display:block;max-width:100%;padding-right:8px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1.375rem;font-weight:700;color:#747474;font-style:normal;word-break:break-word;text-align:left;text-transform:uppercase;white-space:nowrap;text-overflow:ellipsis;letter-spacing:.14px;overflow:hidden}.consonant-ProgressInfobit-text:last-of-type{padding-right:0}.consonant-ProgressInfobit-text--italic{font-style:italic}.consonant-ProgressInfobit-el{position:relative;width:100%;height:5px;background-color:#fff;border:1px solid #d3d3d3;border-radius:5px}.consonant-ProgressInfobit-val{position:absolute;top:-1px;bottom:-1px;left:-1px;z-index:1;border-radius:5px;font-size:0;line-height:0}.consonant-TextInfobit{min-width:0;max-width:100%;max-height:2rem;margin:0 0 0 16px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.875rem;line-height:1rem;font-weight:400;color:#747474;font-style:normal;word-break:break-word;text-align:left;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}img+.consonant-TextInfobit{margin-left:4px}.consonant-IconInfobit{display:block;min-width:14px;width:auto;height:auto;max-width:28px;max-height:28px;margin-left:16px;object-fit:contain;user-select:none}.consonant-IconInfobit+.consonant-IconInfobit{margin-left:12px}.consonant-LinkInfobit{min-width:0;max-width:100%;max-height:2rem;margin-left:16px;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;font-size:.9375rem;line-height:1.375rem;font-weight:700;color:#2680eb;font-style:normal;word-break:break-word;text-align:left;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;text-decoration:none;transition:color .3s ease-in-out}.consonant-LinkInfobit:hover{color:#1473e6;text-decoration:none}.consonant-LinkInfobit:active{color:#0d66d0;text-decoration:none}.consonant-LinkInfobit:focus{outline:0}@media only screen and (min-width:1200px){.consonant-LinkInfobit:focus{outline:2px solid #1492e6}}:not(:last-of-type):nth-child(2)>.consonant-LinkInfobit:only-child{margin-right:0}.Categories .consonant-TopFilters-categoriesTitle{text-align:center;font-size:30px;font-weight:700;font-family:adobe-clean,Segoe UI,Roboto,sans-serif;margin-bottom:32px;color:#2c2c2c}.Categories .consonant-TopFilters-collectionTitle{display:none}.Categories .filters-category{text-align:center;margin-bottom:30px;display:flex;overflow-x:auto;justify-content:left}.Categories .filters-category button{border-radius:24px;background:#909090;color:#fff;font-weight:700;font-size:16px;height:48px;margin:0 6px;padding:12px 20px 13px 18px;display:flex;white-space:nowrap;align-items:center;font-family:adobe-clean,Segoe UI,Roboto,sans-serif}.Categories .filters-category button img.filters-category--icon{height:24px;vertical-align:-8px;margin-right:6px}.Categories .filters-category button:not(:first-child):after{content:"";width:12px}.Categories .filters-category button:hover{background:#505050}.Categories .filters-category button[data-selected=selected]{background:#292929}.Categories .filters-category button[data-group=alltopics] img{display:none}.Categories .consonant-TopFilter button{border:1px solid #bbb}.Categories span.filter-group-title{display:block;text-transform:uppercase;font-weight:600;padding-top:12px;font-size:14px;border-top:1px solid #ddd;margin:6px 20px}.Categories span.filter-group-title:first-child{border-top:none;margin-top:0;padding-top:2px}.Categories .consonant-Card-label{text-transform:uppercase}.Categories .consonant-NoResultsView{min-height:300px}@media screen and (max-width:480px){.consonant-Wrapper--1200MaxWidth .consonant-Wrapper-inner{width:92%}.Categories .filters-category{justify-content:left}}.consonant-BtnInfobit--dark,[class*=consonant-u-theme] .consonant-BtnInfobit--dark{border-color:#101010;background-color:#1e1e1e}.consonant-BtnInfobit--dark span,[class*=consonant-u-theme] .consonant-BtnInfobit--dark span{color:#e3e3e3!important}.consonant-BtnInfobit--dark:hover,[class*=consonant-u-theme] .consonant-BtnInfobit--dark:hover{border-color:#000;background-color:#000}.consonant-BtnInfobit--dark:hover span,[class*=consonant-u-theme] .consonant-BtnInfobit--dark:hover span{color:#fff!important}:lang(ja) .consonant-Wrapper,:lang(ko) .consonant-Wrapper,:lang(th) .consonant-Wrapper,:lang(tw) .consonant-Wrapper,:lang(zh) .consonant-Wrapper{font-family:inherit}:lang(ja) .consonant-CardsGrid .consonant-Card.half-height .consonant-Card-title,:lang(ja) .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-title,:lang(ko) .consonant-CardsGrid .consonant-Card.half-height .consonant-Card-title,:lang(ko) .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-title,:lang(th) .consonant-CardsGrid .consonant-Card.half-height .consonant-Card-title,:lang(th) .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-title,:lang(tw) .consonant-CardsGrid .consonant-Card.half-height .consonant-Card-title,:lang(tw) .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-title,:lang(zh) .consonant-CardsGrid .consonant-Card.half-height .consonant-Card-title,:lang(zh) .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-title{font-size:15px;line-height:normal}:lang(ja) .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-text,:lang(ko) .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-text,:lang(th) .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-text,:lang(tw) .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-text,:lang(zh) .consonant-CardsGrid .consonant-Card.one-half .consonant-Card-text{line-height:1.275rem} \ No newline at end of file diff --git a/dist/main.js b/dist/main.js index fafc2320..346a2841 100644 --- a/dist/main.js +++ b/dist/main.js @@ -12,6 +12,7 @@ <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD <<<<<<< HEAD * Chimera UI Libraries - Build 0.23.28 (1/6/2025, 16:49:34) ======= @@ -162,6 +163,9 @@ ======= * Chimera UI Libraries - Build 0.23.28 (1/7/2025, 15:01:29) >>>>>>> 683a289 (MWPW-155425: confirming the build is up to date) +======= + * Chimera UI Libraries - Build 0.23.28 (1/8/2025, 14:41:08) +>>>>>>> bddc1de (feat(mwpw-162835): husky) * */ /******/ (function(modules) { // webpackBootstrap @@ -6504,7 +6508,6 @@ var Container = function Container(props) { var categories = getConfig('filterPanel', 'categories'); // eslint-disable-next-line no-use-before-define, max-len var authoredCategories = isCategoriesContainer ? getAuthoredCategories(authoredFilters, categories) : []; - // eslint-disable-next-line no-use-before-define var sanitizedEventFilter = eventFilter ? (0, _general.sanitizeEventFilter)(eventFilter) : []; /** diff --git a/dist/main.min.js b/dist/main.min.js index 2c9e908e..8150d89b 100644 --- a/dist/main.min.js +++ b/dist/main.min.js @@ -12,6 +12,7 @@ <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD <<<<<<< HEAD * Chimera UI Libraries - Build 0.23.28 (1/6/2025, 16:49:34) ======= @@ -162,6 +163,9 @@ ======= * Chimera UI Libraries - Build 0.23.28 (1/7/2025, 15:01:29) >>>>>>> 683a289 (MWPW-155425: confirming the build is up to date) +======= + * Chimera UI Libraries - Build 0.23.28 (1/8/2025, 14:41:08) +>>>>>>> bddc1de (feat(mwpw-162835): husky) * */!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=119)}([function(e,t,n){"use strict";(function(t){"production"===t.env.NODE_ENV?e.exports=n(210):e.exports=n(211)}).call(t,n(12))},function(e,t,n){(function(t){if("production"!==t.env.NODE_ENV){var r=n(109);e.exports=n(230)(r.isElement,!0)}else e.exports=n(231)()}).call(t,n(12))},function(e,t,n){var r=n(9),o=n(3),i=n(23),a=n(27),l=n(25),u="prototype",s=function(e,t,n){var c,f,d,p,h=e&s.F,m=e&s.G,v=e&s.S,y=e&s.P,g=e&s.B,b=m?r:v?r[t]||(r[t]={}):(r[t]||{})[u],w=m?o:o[t]||(o[t]={}),T=w[u]||(w[u]={});for(c in m&&(n=t),n)d=((f=!h&&b&&void 0!==b[c])?b:n)[c],p=g&&f?l(d,r):y&&"function"==typeof d?l(Function.call,d):d,b&&a(b,c,d,e&s.U),w[c]!=d&&i(w,c,p),y&&T[c]!=d&&(T[c]=d)};r.core=o,s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,e.exports=s},function(e,t){var n=e.exports={version:"2.6.12"};"number"==typeof __e&&(__e=n)},function(e,t,n){var r=n(41)("wks"),o=n(34),i=n(9).Symbol,a="function"==typeof i;(e.exports=function(e){return r[e]||(r[e]=a&&i[e]||(a?i:o)("Symbol."+e))}).store=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.sanitizeEventFilter=t.getSearchParam=t.getGlobalNavHeight=t.getLinkTarget=t.getEventBanner=t.getCurrentDate=t.isDateAfterInterval=t.isDateBeforeInterval=t.isDateWithinInterval=t.qs=t.mergeDeep=t.setByPath=t.debounce=t.getSelectedItemsCount=t.getByPath=t.template=t.getEndNumber=t.getStartNumber=t.getPageStartEnd=t.generateRange=t.stopPropagation=t.isAtleastOneFilterSelected=t.isNullish=t.parseToPrimitive=t.isObject=t.mapObject=t.sanitizeText=t.sortByKey=t.intersection=t.isSuperset=t.chainFromIterable=t.chain=t.removeDuplicatesByKey=t.truncateList=t.truncateString=t.readInclusionsFromLocalStorage=t.readBookmarksFromLocalStorage=t.saveBookmarksToLocalStorage=void 0;var r=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,l=e[Symbol.iterator]();!(r=(a=l.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&l.return&&l.return()}finally{if(o)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};t.getTransitions=function(e){for(var t=[].concat(i(e)),n=h(),r=new o.MinPriorityQueue,a=0;a0&&r.enqueue(t[a],l);var u=Date.parse(Date.parse(t[a].endDate)-n);t[a].endDate&&u>0&&r.enqueue(null,u)}return r};var o=n(222);function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt(n)?1:0}))},/[a-zA-Z0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\s.]/g),s=(t.sanitizeText=function(e){if(!e)return"";var t=e.toLowerCase().trim(),n=t.match(u);return t=n?n.join(""):""},t.mapObject=function(e,t){var n={};return Object.keys(e).forEach((function(r){n[r]=t(e[r])})),n}),c=t.isObject=function(e){return!!e&&e.constructor===Object},f=(t.parseToPrimitive=function e(t){if(c(t))return s(t,e);if(Array.isArray(t))return t.map(e);try{return e(JSON.parse(t))}catch(e){return t}},t.isNullish=function(e){return null==e||Number.isNaN(e)},t.isAtleastOneFilterSelected=function(e){return l(e.map((function(e){return e.items}))).some((function(e){return e.selected}))},t.stopPropagation=function(e){return e.stopPropagation()},t.generateRange=function(e,t){var n=e,r=1,o=[];for(t0?t>=n:t<=n;)o.push(n),n+=r;return o},t.getPageStartEnd=function(e,t,n){var r=Math.floor(t/2),o=void 0,i=void 0;return n<=t+1?(o=1,i=n):(o=Math.min(Math.max(1,e-r),n-t),i=Math.max(Math.min(e+r,n),t+1)),[o,i]},t.getStartNumber=function(e,t){return 1===e?1:e*t-(t-1)},t.getEndNumber=function(e,t,n){var r=e*t;return r0&&void 0!==arguments[0]?arguments[0]:"",t=arguments[1];if(!t)return e;return e.replace(/{([A-z]*)}/gi,(function(e,n){return t[n]||e}))},t.getByPath=function(e,t,n){if(!e||!t)return n;for(var r=e,o=t.split("."),i=0;i1&&void 0!==arguments[1]?arguments[1]:0,n=void 0;return function(){for(var r=arguments.length,o=Array(r),i=0;i1?n-1:0),o=1;o1&&void 0!==arguments[1]?arguments[1]:{}).array,n=new URLSearchParams;return Object.entries(e).forEach((function(e){var o=r(e,2),i=o[0],a=o[1];f(i)?Array.isArray(a)?"comma"===t?n.append(i,encodeURIComponent(a)):n.append(i,encodeURIComponent(a.join("|"))):n.append(i,encodeURIComponent(a)):n.append(i,a)})),n.toString()}},t.isDateWithinInterval=function(e,t,n){var r=Date.parse(e),o=Date.parse(t),i=Date.parse(n);return o<=r&&i>r}),p=t.isDateBeforeInterval=function(e,t){return Date.parse(e)Date.parse(t)},t.getCurrentDate=function(){var e=new URLSearchParams(window.location.search),t=parseInt(e.get("servertime"),10),n=performance.now();return t?new Date(t+n):new Date});t.getEventBanner=function(e,t,n){var r=h();return d(r,e,t)?n.live||{backgroundColor:"",description:"",fontColor:"",icon:""}:p(r,e)?n.upcoming||{backgroundColor:"",description:"",fontColor:"",icon:""}:n.onDemand||{backgroundColor:"",description:"",fontColor:"",icon:""}};t.getLinkTarget=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:window.location.hostname;if(t||e.startsWith("#"))return t;var r="_blank";try{var o=new URL(e).hostname;n===(void 0===o?"":o)&&(r="_self")}catch(e){}return r},t.getGlobalNavHeight=function(){var e=document.querySelector("header");if(!e)return 20;var t=e.getAttribute("daa-lh")&&e.getAttribute("daa-lh").includes("bacom"),n=t?e:document.querySelector(".feds-header-wrapper");return t||n&&n.classList.contains("feds-header-wrapper--sticky")?e.offsetHeight+20:20},t.getSearchParam=function(e,t){return e&&e.startsWith("http")&&t?new URL(e).searchParams.get(t):null},t.sanitizeEventFilter=function(e){return!e||e.indexOf("all")>-1?[]:Array.isArray(e)?e:[e]}},function(e,t,n){var r; /*! diff --git a/dist/main.source.js b/dist/main.source.js index 9c6919f7..dcd0460d 100644 --- a/dist/main.source.js +++ b/dist/main.source.js @@ -742,7 +742,7 @@ eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _propTypes = __webpack_require__(1);\n\n__webpack_require__(232);\n\nvar _lana = __webpack_require__(50);\n\nvar _Popup = __webpack_require__(233);\n\nvar _Popup2 = _interopRequireDefault(_Popup);\n\nvar _Search = __webpack_require__(234);\n\nvar _Search2 = _interopRequireDefault(_Search);\n\nvar _Loader = __webpack_require__(235);\n\nvar _Loader2 = _interopRequireDefault(_Loader);\n\nvar _general = __webpack_require__(5);\n\nvar _config = __webpack_require__(20);\n\nvar _CardsCarousel = __webpack_require__(236);\n\nvar _CardsCarousel2 = _interopRequireDefault(_CardsCarousel);\n\nvar _View = __webpack_require__(289);\n\nvar _View2 = _interopRequireDefault(_View);\n\nvar _LoadMore = __webpack_require__(290);\n\nvar _LoadMore2 = _interopRequireDefault(_LoadMore);\n\nvar _Bookmarks = __webpack_require__(291);\n\nvar _Bookmarks2 = _interopRequireDefault(_Bookmarks);\n\nvar _Paginator = __webpack_require__(292);\n\nvar _Paginator2 = _interopRequireDefault(_Paginator);\n\nvar _Grid = __webpack_require__(112);\n\nvar _Grid2 = _interopRequireDefault(_Grid);\n\nvar _CardFilterer = __webpack_require__(293);\n\nvar _CardFilterer2 = _interopRequireDefault(_CardFilterer);\n\nvar _Panel = __webpack_require__(295);\n\nvar _Panel2 = _interopRequireDefault(_Panel);\n\nvar _Panel3 = __webpack_require__(300);\n\nvar _Panel4 = _interopRequireDefault(_Panel3);\n\nvar _JsonProcessor = __webpack_require__(310);\n\nvar _JsonProcessor2 = _interopRequireDefault(_JsonProcessor);\n\nvar _hooks = __webpack_require__(7);\n\nvar _Info = __webpack_require__(311);\n\nvar _constants = __webpack_require__(15);\n\nvar _contexts = __webpack_require__(111);\n\nvar _consonant = __webpack_require__(110);\n\nvar _Helpers = __webpack_require__(22);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n/**\n * Consonant Card Collection\n * Config is implicitly populated by authors\n *\n * @component\n * @example\n * const config = {\n collection: {},\n featuredCards: [{}],\n filterPanel: {},\n hideCtaIds: [{}],\n hideCtaTags: [{}],\n sort: {},\n pagination: {},\n bookmarks: {},\n search: {},\n language: ''\n * }\n * return (\n * \n * )\n */\nvar Container = function Container(props) {\n var config = props.config;\n\n var getConfig = (0, _consonant.makeConfigGetter)(config);\n var filterGroupPrefix = 'ch_';\n var searchPrefix = 'sh_';\n var CARD_HASH_LENGTH = 10;\n\n /**\n **** Authored Configs ****\n */\n var filterPanelEnabled = getConfig('filterPanel', 'enabled');\n var filterPanelType = getConfig('filterPanel', 'type');\n var paginationType = getConfig('pagination', 'type');\n var paginationIsEnabled = getConfig('pagination', 'enabled');\n var resultsPerPage = getConfig('collection', 'resultsPerPage');\n var onlyShowBookmarks = getConfig('bookmarks', 'leftFilterPanel.bookmarkOnlyCollection');\n var authoredFilters = getConfig('filterPanel', 'filters');\n var filterLogic = getConfig('filterPanel', 'filterLogic').toLowerCase().trim();\n var totalCardLimit = getConfig('collection', 'totalCardsToShow');\n var sampleSize = getConfig('collection', 'reservoir.sample');\n var reservoirSize = getConfig('collection', 'reservoir.pool');\n var searchFields = getConfig('search', 'searchFields');\n var sortOptions = getConfig('sort', 'options');\n var defaultSort = getConfig('sort', 'defaultSort');\n var defaultSortOption = (0, _consonant.getDefaultSortOption)(config, defaultSort);\n var featuredCards = getConfig('featuredCards', '').toString().replace(/\\[|\\]/g, '').replace(/`/g, '').split(',');\n // eslint-disable-next-line no-use-before-define,max-len\n featuredCards = featuredCards.concat(featuredCards.map(function (id) {\n return rollingHash(id, CARD_HASH_LENGTH);\n }));\n var hideCtaIds = getConfig('hideCtaIds', '').toString().replace(/\\[|\\]/g, '').replace(/`/g, '').split(',');\n // eslint-disable-next-line no-use-before-define\n hideCtaIds = hideCtaIds.concat(hideCtaIds.map(function (id) {\n return rollingHash(id, CARD_HASH_LENGTH);\n }));\n var hideCtaTags = getConfig('hideCtaTags', '').toString().replace(/\\[|\\]/g, '').replace(/`/g, '').split(',');\n var leftPanelSearchPlaceholder = getConfig('search', 'i18n.leftFilterPanel.searchPlaceholderText');\n var topPanelSearchPlaceholder = getConfig('search', 'i18n.topFilterPanel.searchPlaceholderText');\n var searchPlaceholderText = getConfig('search', 'i18n.filterInfo.searchPlaceholderText');\n var noResultsTitle = getConfig('search', 'i18n.noResultsTitle');\n var noResultsDescription = getConfig('search', 'i18n.noResultsDescription');\n var apiFailureTitle = getConfig('collection', 'i18n.onErrorTitle');\n var apiFailureDescription = getConfig('collection', 'i18n.onErrorDescription');\n var isLazy = getConfig('collection', 'lazyload');\n var trackImpressions = getConfig('analytics', 'trackImpressions');\n var collectionIdentifier = getConfig('analytics', 'collectionIdentifier');\n var targetEnabled = getConfig('target', 'enabled');\n var useLastViewedSession = getConfig('target', 'lastViewedSession');\n var authoredMode = getConfig('collection', 'mode');\n var authoredLayoutContainer = getConfig('collection', 'layout.container');\n var showEmptyFilters = getConfig('filterPanel', 'showEmptyFilters');\n var eventFilter = getConfig('filterPanel', 'eventFilter');\n var searchEnabled = getConfig('search', 'enabled');\n var sortEnabled = getConfig('sort', 'enabled');\n var cardStyle = getConfig('collection', 'cardStyle');\n var title = getConfig('collection', 'i18n.title');\n var headers = getConfig('headers', '');\n var partialLoadWithBackgroundFetch = getConfig('collection', 'partialLoadWithBackgroundFetch.enabled');\n var partialLoadCount = getConfig('collection', 'partialLoadWithBackgroundFetch.partialLoadCount');\n /**\n **** Constants ****\n */\n var DESKTOP_SCREEN_SIZE = window.innerWidth >= _constants.DESKTOP_MIN_WIDTH;\n var isXorFilter = filterLogic.toLowerCase().trim() === _constants.FILTER_TYPES.XOR;\n var isCarouselContainer = authoredLayoutContainer === _constants.LAYOUT_CONTAINER.CAROUSEL;\n var isStandardContainer = authoredLayoutContainer !== _constants.LAYOUT_CONTAINER.CAROUSEL;\n var isCategoriesContainer = authoredLayoutContainer === _constants.LAYOUT_CONTAINER.CATEGORIES;\n\n // eslint-disable-next-line no-use-before-define\n var categories = getConfig('filterPanel', 'categories');\n // eslint-disable-next-line no-use-before-define, max-len\n var authoredCategories = isCategoriesContainer ? getAuthoredCategories(authoredFilters, categories) : [];\n // eslint-disable-next-line no-use-before-define\n var sanitizedEventFilter = eventFilter ? (0, _general.sanitizeEventFilter)(eventFilter) : [];\n\n /**\n **** Hooks ****\n */\n /**\n * @typedef {Array} timedCollection - result of Timed Event Sort\n * @description — As an alternative/iteration on filtered cards for timed\n * collections\n * @typedef {Function} setTimedCollection\n * @description - Sets timedCollection after setTimeout triggers\n *\n * @type {[Array, Function]} timedCollection\n */\n /* eslint-disable no-unused-vars */\n\n var _useState = (0, _react.useState)([]),\n _useState2 = _slicedToArray(_useState, 2),\n timedCollection = _useState2[0],\n setTimedCollection = _useState2[1];\n /**\n * @typedef {Number} transition - MS to next transition\n * @description — set by eventSort, from cardFilteret.nextTransitionMs\n * @typedef {Function} setTransition\n * @description - next Transition trigger\n *\n * @type {[Number, Function]} transition\n */\n /* eslint-disable no-unused-vars */\n\n\n var _useState3 = (0, _react.useState)(0),\n _useState4 = _slicedToArray(_useState3, 2),\n transition = _useState4[0],\n setTransition = _useState4[1];\n\n var _useState5 = (0, _react.useState)(0),\n _useState6 = _slicedToArray(_useState5, 2),\n cardCount = _useState6[0],\n setCardCount = _useState6[1];\n\n var _useState7 = (0, _react.useState)(false),\n _useState8 = _slicedToArray(_useState7, 2),\n isPartialLoad = _useState8[0],\n setIsPartialLoad = _useState8[1];\n\n var hashedRef = (0, _react.useRef)(false);\n\n var _React$useState = _react2.default.useState(),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n updateState = _React$useState2[1];\n\n var scrollElementRef = (0, _react.useRef)(null);\n var nextTransition = _react2.default.useCallback(function () {\n return updateState({});\n }, []);\n /**\n * @typedef {Object} urlState\n * @description — object with url query values\n *\n * @typedef {Function} setUrlState\n * @description - set url query value by key\n *\n * @typedef {Function} clearUrlState\n * @description - clear whole url query state\n *\n * @type {[Object, Function, Function]} OpenDropdown\n */\n\n var _useURLState = (0, _hooks.useURLState)(),\n _useURLState2 = _slicedToArray(_useURLState, 3),\n urlState = _useURLState2[0],\n setUrlState = _useURLState2[1],\n clearUrlState = _useURLState2[2];\n\n /**\n * @typedef {Number} OpenDropdownState - Id of a selected dropdown\n * @description — Passed in Context Provider So All Nested Components can be in sync\n *\n * @typedef {Function} OpenDropdownStateSetter\n * @description\n *\n * @type {[Number, Function]} OpenDropdown\n */\n\n\n var _useState9 = (0, _react.useState)(null),\n _useState10 = _slicedToArray(_useState9, 2),\n openDropdown = _useState10[0],\n setOpenDropdown = _useState10[1];\n\n /**\n * @typedef {Array} BookmarkedCardIdsState — Initiailzed From Local Storage\n *\n * @typedef {Function} BookmarkedCardIdsSetter — Sets internal state of saved bookmarks\n *\n * @type {[Array, Function]} BookmarkedCardIds\n */\n\n\n var _useState11 = (0, _react.useState)((0, _general.readBookmarksFromLocalStorage)()),\n _useState12 = _slicedToArray(_useState11, 2),\n bookmarkedCardIds = _useState12[0],\n setBookmarkedCardIds = _useState12[1];\n\n var _useState13 = (0, _react.useState)((0, _general.readInclusionsFromLocalStorage)()),\n _useState14 = _slicedToArray(_useState13, 1),\n inclusionIds = _useState14[0];\n\n /**\n * @typedef {Number} CurrentPageState — Initialized to the first page\n * @description Same page state for 'Load More' or 'Paginator'\n *\n * @typedef {Function} CurrentPageStateSetter — Sets page as user navigates through pages\n *\n * @type {[Number, Function]} CurrentPage\n */\n\n\n var _useState15 = (0, _react.useState)(+urlState.page || 1),\n _useState16 = _slicedToArray(_useState15, 2),\n currentPage = _useState16[0],\n setCurrentPage = _useState16[1];\n\n /**\n * @typedef {Array} FiltersState — Contains Filters For Filter Panel\n * @description Same Filter state for Left or Top\n *\n * @typedef {Function} FiltersStateSetter — Sets Authored Filters as State\n *\n * @type {[Array, Function]} Filters\n */\n\n\n var _useState17 = (0, _react.useState)([]),\n _useState18 = _slicedToArray(_useState17, 2),\n filters = _useState18[0],\n setFilters = _useState18[1];\n // window.filters = filters;\n\n\n var _useState19 = (0, _react.useState)([]),\n _useState20 = _slicedToArray(_useState19, 2),\n currCategories = _useState20[0],\n setCategories = _useState20[1];\n\n /**\n * @typedef {String} SearchQueryState — Will be used to search through cards\n * @typedef {Function} SearchQueryStateSetter — Sets user search query\n *\n * @type {[String, Function]} SearchQuery\n */\n\n\n var _useState21 = (0, _react.useState)(''),\n _useState22 = _slicedToArray(_useState21, 2),\n searchQuery = _useState22[0],\n setSearchQuery = _useState22[1];\n\n var _useState23 = (0, _react.useState)(''),\n _useState24 = _slicedToArray(_useState23, 2),\n selectedCategory = _useState24[0],\n setSelectedCategory = _useState24[1];\n\n /**\n * @typedef {String} SortOpenedState — Toggles Sort Popup Opened Or Closed\n * @typedef {Function} SortOpenedStateSetter — Sets Sort Option\n *\n * @type {[Boolean, Function]} SortOpened\n */\n\n\n var _useState25 = (0, _react.useState)(false),\n _useState26 = _slicedToArray(_useState25, 2),\n sortOpened = _useState26[0],\n setSortOpened = _useState26[1];\n\n /**\n * @typedef {String} SortOptionState — Can be one of a range of types\n * @description 'Title (A-Z)', 'Title (Z-A), Date (New to Old), Date (Old to New), Featured\n *\n * @typedef {Function} SortOptionStateSetter — Sets Sort Option\n *\n * @type {[String, Function]} SortOption\n */\n\n\n var _useState27 = (0, _react.useState)(defaultSortOption),\n _useState28 = _slicedToArray(_useState27, 2),\n sortOption = _useState28[0],\n setSortOption = _useState28[1];\n\n if (sortOption.sort === _constants.SORT_TYPES.RANDOM) {\n totalCardLimit = sampleSize;\n }\n\n /**\n * @typedef {Boolean} WindowWidthState — Can either be true or false\n * @description Used to toggle between mobile and desktop layouts\n *\n * @typedef {Function} WindowWidthStateSetter — Updates window width\n *\n * @type {[Number]} WindowWidth\n */\n\n var _useWindowDimensions = (0, _hooks.useWindowDimensions)(),\n windowWidth = _useWindowDimensions.width;\n\n /**\n * @typedef {Boolean} ShowMobileFiltersState — Can either be true or false\n * @description When true mobile filters will appear on the page\n *\n * @typedef {Function} ShowMobileFiltersStateSetter\n * @description Toggles mobile filter header/footer to show or hide\n *\n * @type {[Boolean, Function]} ShowMobileFilters\n */\n\n\n var _useState29 = (0, _react.useState)(false),\n _useState30 = _slicedToArray(_useState29, 2),\n showMobileFilters = _useState30[0],\n setShowMobileFilters = _useState30[1];\n\n /**\n * @typedef {Boolean} ShowBookmarkState — Can either be true or false\n * @description For Top Filter Panel, there is a limit to how many filter groups can show\n *\n * @typedef {Function} ShowBookmarkStateSetter — Sets limit on filter quantity\n * @description When over allowed Filter Group Quantity - A \"More +\" button appears\n *\n * @type {[Boolean, Function]} ShowBookmarks\n */\n\n\n var _useState31 = (0, _react.useState)(false),\n _useState32 = _slicedToArray(_useState31, 2),\n showBookmarks = _useState32[0],\n setShowBookmarks = _useState32[1];\n\n /**\n * @typedef {Boolean} LimitFilterQuantityState — Can either be true or false\n * @description For Top Filter Panel, there is a limit to how many filter groups can show\n *\n * @typedef {Function} LimitFilterQuantityStateSetter — Sets limit on filter quantity\n * @description When over allowed Filter Group Quantity - A \"More +\" button appears\n *\n * @type {[Boolean, Function]} LimitFilterQuantity\n */\n\n\n var _useState33 = (0, _react.useState)(filterPanelType === 'top'),\n _useState34 = _slicedToArray(_useState33, 2),\n showLimitedFiltersQty = _useState34[0],\n setShowLimitedFiltersQty = _useState34[1];\n\n /**\n * @typedef {Array} CardState\n * @description sets cards retrieved either server side render or API call\n *\n * @typedef {Function} CardStateSetter\n * @description E.g. Render Featured Cards Server side, While collection cards from API call\n *\n * @type {[Array, Function]} Cards\n */\n\n\n var _useState35 = (0, _react.useState)([]),\n _useState36 = _slicedToArray(_useState35, 2),\n cards = _useState36[0],\n setCards = _useState36[1];\n\n /**\n * @typedef {Boolean} LoadingState — Can either be true or false\n * @description When true a loading spinner will appear on the page\n *\n * @typedef {Function} LoadingStateSetter — Sets loader true or false\n * @description True while waiting for API response. False on cards retrieved or api failure\n *\n * @type {[Boolean, Function]} Loading\n */\n\n\n var _useState37 = (0, _react.useState)(false),\n _useState38 = _slicedToArray(_useState37, 2),\n isLoading = _useState38[0],\n setLoading = _useState38[1];\n\n /**\n * @typedef {Boolean} ApiFailureState — Can either be true or false\n * @description When true an API error has occured\n *\n * @typedef {Function} ApiFailureStateSetter — Sets API failure flag true or false\n * @description True when retrieved or api failure. False otherwise\n *\n * @type {[Boolean, Function]} ApiFailure\n */\n\n\n var _useState39 = (0, _react.useState)(false),\n _useState40 = _slicedToArray(_useState39, 2),\n isApiFailure = _useState40[0],\n setApiFailure = _useState40[1];\n\n var _useState41 = (0, _react.useState)(null),\n _useState42 = _slicedToArray(_useState41, 2),\n randomSortId = _useState42[0],\n setRandomSortId = _useState42[1];\n\n var _useState43 = (0, _react.useState)(true),\n _useState44 = _slicedToArray(_useState43, 2),\n isFirstLoad = _useState44[0],\n setIsFirstLoad = _useState44[1];\n\n var _useState45 = (0, _react.useState)(),\n _useState46 = _slicedToArray(_useState45, 2),\n visibleStamp = _useState46[0],\n setVisibleStamp = _useState46[1];\n\n var _useState47 = (0, _react.useState)(false),\n _useState48 = _slicedToArray(_useState47, 2),\n hasFetched = _useState48[0],\n setHasFetched = _useState48[1];\n\n /**\n * Creates a DOM reference to first filter item\n * @returns {Object} - filter item DOM reference\n */\n\n\n var filterItemRef = (0, _react.createRef)();\n\n /**\n * Creates a DOM reference to filter info button\n * @returns {Object} - filter info DOM reference\n */\n var filterInfoRef = (0, _react.createRef)();\n\n /**\n **** Helper Methods ****\n */\n\n function getParentChild(id) {\n var i = id.length;\n while (id[i] !== '/' && i >= 0) {\n i--;\n }\n return [id.substring(0, i), id.substring(i + 1)];\n }\n\n function rollingHash(s, l) {\n if (!s) {\n return '';\n }\n var BASE = 53;\n var MOD = Math.pow(10, l) + 7;\n var hash = 0;\n var basePower = 1;\n for (var i = 0; i < s.length; i++) {\n hash = (hash + (s.charCodeAt(i) - 97 + 1) * basePower) % MOD;\n basePower = basePower * BASE % MOD;\n }\n return ((hash + MOD) % MOD).toString(36);\n }\n\n /**\n * For a given group of filters, it will unselect all of them\n * @param {Array} filterGroups - a group of filters\n * @returns {Array} fitlerGroups - the updated group of filters\n */\n var getAllFiltersClearedState = function getAllFiltersClearedState(filterGroups) {\n return filterGroups.map(function (filterGroup) {\n return _extends({}, filterGroup, {\n items: filterGroup.items.map(function (filterItem) {\n return _extends({}, filterItem, {\n selected: false\n });\n })\n });\n });\n };\n\n /**\n * For a given group of filters, it will unselect the one with a given id\n * @param {Number} id - the id of an individual filter item\n * @param {Array} filterGroups - a group of filters\n * @returns {Array} fitlerGroups - the updated group of filters\n */\n var getFilterItemClearedState = function getFilterItemClearedState(id, filterGroups) {\n return filterGroups.map(function (filterGroup) {\n if (filterGroup.id !== id) {\n return filterGroup;\n }\n return _extends({}, filterGroup, {\n items: filterGroup.items.map(function (filterItem) {\n return _extends({}, filterItem, {\n selected: false\n });\n })\n });\n });\n };\n\n /**\n * Will uncheck a filter with a given id\n * @param {Number} id - the id of an individual filter item\n * @returns {Void} - an updated state\n */\n var clearFilterItem = function clearFilterItem(id) {\n var group = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n setFilters(function (prevFilters) {\n var filterClearedState = getFilterItemClearedState(id, prevFilters);\n return filterClearedState;\n });\n\n var urlParams = new URLSearchParams(window.location.search);\n clearUrlState();\n // actually clear the url state\n urlParams.forEach(function (value, key) {\n var chFilter = key.toLowerCase().replace('ch_', '').replace(/ /g, '-');\n if (key.indexOf(filterGroupPrefix) !== 0 && !id.toLowerCase().includes(chFilter) || !group.toLowerCase().replace(/ /g, '-').includes(chFilter)) {\n setUrlState(key, value.replace(/%20/g, ' '));\n }\n });\n };\n\n /**\n * Will uncheck all filter items\n * @returns {Void} - an updated state\n */\n var clearAllFilters = function clearAllFilters() {\n setFilters(function (prevFilters) {\n var allFiltersClearedState = getAllFiltersClearedState(prevFilters);\n return allFiltersClearedState;\n });\n\n var urlParams = new URLSearchParams(window.location.search);\n\n clearUrlState();\n urlParams.forEach(function (value, key) {\n if (key.indexOf(filterGroupPrefix) !== 0) setUrlState(key, value);\n });\n };\n\n /**\n * Resets filters, and search to empty. Hides bookmark filter\n * @returns {Void} - an updated state\n */\n var resetFiltersSearchAndBookmarks = function resetFiltersSearchAndBookmarks() {\n clearAllFilters();\n setSearchQuery('');\n var urlParams = new URLSearchParams(window.location.search);\n clearUrlState();\n urlParams.forEach(function (value, key) {\n if (key.indexOf(filterGroupPrefix) === -1 && key.indexOf(searchPrefix) === -1) setUrlState(key, value);\n });\n setShowBookmarks(false);\n };\n\n /**\n **** EVENT HANDLERS ****\n */\n\n /**\n * On Load More Button Click, Increment Page Cuonter By 1\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var onLoadMoreClick = function onLoadMoreClick() {\n setCurrentPage(function (prevState) {\n return prevState + 1;\n });\n window.scrollTo(0, window.pageYOffset);\n };\n\n /**\n * Takes sort user selects and sets it so cards are sorted\n *\n * @param {ClickEvent} e - The observable event.\n * @listens ClickEvent\n */\n var handleSortChange = function handleSortChange(option) {\n setSortOption(option);\n setSortOpened(false);\n setIsFirstLoad(false);\n };\n\n /**\n * Handles whenever the search box is clicked or input field\n * changes\n *\n * @param {ClickEvent, ChangeEvent} e\n * @listens ClickEvent, ChangeEvent\n */\n var handleSearchInputChange = function handleSearchInputChange(val) {\n setSearchQuery(val);\n setCurrentPage(1);\n setUrlState(searchPrefix, val);\n };\n\n /**\n * Handles when a group of filters is clicked. Behavior should be\n * to toggle group open or closed\n *\n * @param {ClickEvent} e - The observable event.\n * @listens ClickEvent\n */\n var handleFilterGroupClick = function handleFilterGroupClick(filterId) {\n setFilters(function (prevFilters) {\n var opened = void 0;\n return prevFilters.map(function (el) {\n if (el.id === filterId) {\n opened = !el.opened;\n } else {\n // eslint-disable-next-line prefer-destructuring\n opened = el.opened;\n }\n return _extends({}, el, { opened: opened });\n });\n });\n };\n\n /**\n * Will find and set needed filter to url\n *\n * @param {string} filterId - selected filter group id\n * @param {string} itemId - selected filter item id\n * @param {boolean} isChecked\n * @returns {Void} - an updated url\n */\n var changeUrlState = function changeUrlState(filterId, itemId, isChecked) {\n var _filters$find = filters.find(function (_ref) {\n var id = _ref.id;\n return id === filterId;\n }),\n group = _filters$find.group,\n items = _filters$find.items;\n\n var _items$find = items.find(function (_ref2) {\n var id = _ref2.id;\n return id === itemId;\n }),\n label = _items$find.label;\n\n var urlStateValue = urlState[filterGroupPrefix + group] || [];\n /* istanbul ignore if */\n if (typeof urlStateValue === 'string') {\n urlStateValue = urlStateValue.split(',');\n }\n\n var value = isChecked ? [].concat(_toConsumableArray(urlStateValue), [label]) : urlStateValue.filter(function (item) {\n return item !== label;\n });\n\n setUrlState(filterGroupPrefix + group, value);\n };\n\n /**\n * Handles what happens when a specific filter item (checkbox)\n * is clicked\n *\n * @param {CheckboxClickEvent} e\n * @listens CheckboxClickEvent\n */\n var handleCheckBoxChange = function handleCheckBoxChange(filterId, itemId, isChecked) {\n if (isXorFilter && isChecked) {\n clearAllFilters();\n }\n\n setFilters(function (prevFilters) {\n return prevFilters.map(function (filter) {\n if (filter.id !== filterId) return filter;\n\n return _extends({}, filter, {\n items: filter.items.map(function (item) {\n return _extends({}, item, {\n selected: item.id === itemId ? !item.selected : item.selected\n });\n })\n });\n });\n });\n setCurrentPage(1);\n changeUrlState(filterId, itemId, isChecked);\n };\n\n /**\n * Shows/Hides Mobile Filter Panel\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleMobileFiltersToggle = function handleMobileFiltersToggle() {\n return setShowMobileFilters(function (prev) {\n return !prev;\n });\n };\n\n /**\n * When a card's bookmark icon is clicked, save the card\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleCardBookmarking = function handleCardBookmarking(id) {\n // Update bookmarked IDs\n var cardIsBookmarked = bookmarkedCardIds.find(function (card) {\n return card === id;\n });\n\n if (cardIsBookmarked) {\n setBookmarkedCardIds(function (prev) {\n return prev.filter(function (el) {\n return el !== id;\n });\n });\n } else {\n setBookmarkedCardIds(function (prev) {\n return [].concat(_toConsumableArray(prev), [id]);\n });\n }\n };\n\n /**\n * Will show or hide all saved bookmarks when clicked\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleShowBookmarksFilterClick = function handleShowBookmarksFilterClick(e) {\n e.stopPropagation();\n setShowBookmarks(function (prev) {\n return !prev;\n });\n setCurrentPage(1);\n };\n\n /**\n * If top filter panel, toggle or hide more button\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleShowAllTopFilters = function handleShowAllTopFilters() {\n setShowLimitedFiltersQty(function (prev) {\n return !prev;\n });\n };\n\n /**\n * On window click, all dropdowns should hide\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleWindowClick = function handleWindowClick() {\n setOpenDropdown(null);\n };\n\n /**\n * Handles escape for mobile filter dialog\n *\n * @param event\n */\n var handleMobileFilterEscape = function handleMobileFilterEscape(event) {\n if (event.key !== 'Escape' && event.key !== 'Esc') return;\n\n setShowMobileFilters(false);\n };\n\n /**\n **** Effects ****\n */\n\n /**\n * Sets authored filters as state\n * @returns {Void} - an updated state\n */\n\n (0, _react.useEffect)(function () {\n setFilters(authoredFilters.map(function (filterGroup) {\n return _extends({}, filterGroup, {\n opened: DESKTOP_SCREEN_SIZE ? filterGroup.openedOnLoad : false,\n items: filterGroup.items.map(function (filterItem) {\n return _extends({}, filterItem, {\n selected: false\n });\n })\n });\n }));\n }, []);\n\n /**\n * Sets filters from url as state\n * @returns {Void} - an updated state\n */\n (0, _react.useEffect)(function () {\n setFilters(function (origin) {\n return origin.map(function (filter) {\n var group = filter.group,\n items = filter.items;\n\n var urlStateValue = urlState[filterGroupPrefix + group];\n\n if (!urlStateValue) return filter;\n /* istanbul ignore next */\n var urlStateArray = urlStateValue.split(',');\n return _extends({}, filter, {\n opened: true,\n /* istanbul ignore next */\n items: items.map(function (item) {\n return _extends({}, item, {\n selected: urlStateArray.includes(String(item.label))\n });\n })\n });\n });\n });\n var urlSearchValue = urlState[searchPrefix];\n if (urlSearchValue) {\n setSearchQuery(urlSearchValue[0]);\n }\n }, []);\n\n (0, _react.useEffect)(function () {\n setRandomSortId(Math.floor(Math.random() * 10e12));\n }, []);\n\n /**\n * Trigger after button load more click\n * @returns {Void} - an updated url page\n */\n (0, _react.useEffect)(function () {\n setUrlState('page', currentPage === 1 ? '' : currentPage);\n }, [currentPage]);\n\n var removeEmptyFilters = function removeEmptyFilters(allFilters, cardsFromJson) {\n var _ref3;\n\n var tags = (_ref3 = []).concat.apply(_ref3, _toConsumableArray(cardsFromJson.map(function (card) {\n return card.tags.map(function (tag) {\n return tag.id;\n });\n })));\n\n var timingTags = [_constants.EVENT_TIMING_IDS.LIVE, _constants.EVENT_TIMING_IDS.ONDEMAND, _constants.EVENT_TIMING_IDS.UPCOMING];\n\n return allFilters.map(function (filter) {\n return _extends({}, filter, {\n /* istanbul ignore next */\n items: filter.items.filter(function (item) {\n return tags.includes(item.id) || tags.includes(item.label) || tags.toString().includes('/' + item.id) // ***** FIX HERE *****\n || timingTags.includes(item.id);\n })\n });\n }).filter(function (filter) {\n return filter.items.length > 0;\n });\n };\n\n /**\n * This handles getting Cards, there are some conditions:\n * - If target is not enabled a simple request is made without mods or delay.\n * - If target is enabled & tVisitor API is present add values from Visitor\n * - If target is enabled & the Visitor API is not present setTimeout with\n * counter to recheck for the Visitor API. If 20 attempts are made w/o\n * success fail the request.\n * @returns {Void} - an updated state\n */\n (0, _react.useEffect)(function () {\n if (isLazy && visibleStamp || isLazy && !hasFetched) {\n return;\n }\n var _window = window,\n visitorPromise = _window.__satelliteLoadedPromise;\n\n\n var collectionEndpoint = getConfig('collection', 'endpoint');\n var fallbackEndpoint = getConfig('collection', 'fallbackEndpoint');\n\n var r = new RegExp('^(?:[a-z]+:)?//', 'i');\n var collectionEndpointURI = void 0;\n if (r.test(collectionEndpoint)) {\n collectionEndpointURI = new URL(collectionEndpoint);\n } else {\n collectionEndpointURI = new URL(collectionEndpoint, window.location.origin);\n }\n\n if (!fallbackEndpoint) {\n collectionEndpointURI.searchParams.set('flatFile', false);\n collectionEndpoint = collectionEndpointURI.toString();\n }\n\n setLoading(true);\n\n /**\n * @func getCards\n * @desc wraps fetch with function to make it reusable\n *\n * @param {String} endPoint, URL with params for card request\n * @returns {Void} - an updated state\n */\n function getCards() {\n var endPoint = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : collectionEndpoint;\n\n var start = Date.now();\n return window.fetch(endPoint, {\n credentials: 'include',\n headers: headers\n }).then(function (resp) {\n var ok = resp.ok,\n status = resp.status,\n statusText = resp.statusText,\n url = resp.url;\n\n\n if (ok) {\n return resp.json().then(function (json) {\n var validData = !!Object.keys(json).length;\n\n if (validData) return json;\n\n (0, _lana.logLana)({ message: 'no valid response data from ' + endPoint, tags: 'collection' });\n /* istanbul ignore next */\n return Promise.reject(new Error('no valid reponse data'));\n });\n }\n (0, _lana.logLana)({ message: 'failure for call to ' + url, tags: 'collection', errorMessage: status + ': ' + statusText });\n return Promise.reject(new Error(status + ': ' + statusText + ', failure for call to ' + url));\n }).then(function (payload) {\n (0, _lana.logLana)({ message: 'response took ' + (Date.now() - start) / 1000 + 's', tags: 'collection' });\n setLoading(false);\n setIsFirstLoad(true);\n if (!(0, _general.getByPath)(payload, 'cards.length')) {\n (0, _lana.logLana)({ message: 'no cards return by query to this endpoint: ' + endPoint, tags: 'collection' });\n return;\n }\n if (payload.isHashed && !hashedRef.current) {\n hashedRef.current = true;\n var TAG_HASH_LENGTH = 6;\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = authoredFilters[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var group = _step.value;\n\n group.id = rollingHash(group.id, TAG_HASH_LENGTH);\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = group.items[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var filterItem = _step3.value;\n\n var _getParentChild = getParentChild(filterItem.id),\n _getParentChild2 = _slicedToArray(_getParentChild, 2),\n parent = _getParentChild2[0],\n child = _getParentChild2[1];\n\n filterItem.id = rollingHash(parent, TAG_HASH_LENGTH) + '/' + rollingHash(child, TAG_HASH_LENGTH);\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n var temp = [];\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = hideCtaTags[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var tag = _step2.value;\n\n var _getParentChild3 = getParentChild(tag),\n _getParentChild4 = _slicedToArray(_getParentChild3, 2),\n parent = _getParentChild4[0],\n child = _getParentChild4[1];\n\n if (parent !== '' && child !== '') {\n temp.push(rollingHash(parent, TAG_HASH_LENGTH) + '/' + rollingHash(child, TAG_HASH_LENGTH));\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n hideCtaTags = temp;\n }\n setCardCount(payload.totalCount ? payload.totalCount : payload.cards.length);\n\n var _removeDuplicateCards = new _JsonProcessor2.default(payload.cards).removeDuplicateCards().addCardMetaData(_constants.TRUNCATE_TEXT_QTY, onlyShowBookmarks, bookmarkedCardIds, hideCtaIds, hideCtaTags),\n _removeDuplicateCards2 = _removeDuplicateCards.processedCards,\n processedCards = _removeDuplicateCards2 === undefined ? [] : _removeDuplicateCards2;\n\n if (isCategoriesContainer) {\n setFilters(function (prevFilters) {\n return prevFilters.map(function (filter) {\n var group = filter.group,\n items = filter.items;\n\n var urlStateValue = urlState[filterGroupPrefix + group];\n if (!urlStateValue) return filter;\n var urlStateArray = urlStateValue.split(',');\n return _extends({}, filter, {\n opened: true,\n items: items.map(function (item) {\n return _extends({}, item, {\n selected: urlStateArray.includes(String(item.label))\n });\n })\n });\n });\n });\n } else {\n setFilters(function () {\n return authoredFilters.map(function (filter) {\n var group = filter.group,\n items = filter.items;\n\n var urlStateValue = urlState[filterGroupPrefix + group];\n if (!urlStateValue) return filter;\n var urlStateArray = urlStateValue.split(',');\n return _extends({}, filter, {\n opened: true,\n items: items.map(function (item) {\n return _extends({}, item, {\n selected: urlStateArray.includes(String(item.label))\n });\n })\n });\n });\n });\n }\n\n var transitions = (0, _general.getTransitions)(processedCards);\n if (sortOption.sort.toLowerCase() === 'eventsort') {\n while (transitions.size() > 0) {\n setTimeout(function () {\n nextTransition();\n }, transitions.dequeue().priority + _constants.ONE_SECOND_DELAY);\n }\n }\n\n setCards(processedCards);\n if (!showEmptyFilters) {\n setFilters(function (prevFilters) {\n return removeEmptyFilters(prevFilters, processedCards);\n });\n }\n setTimeout(function () {\n if (!scrollElementRef.current) return;\n if (processedCards.length === 0) return;\n if (currentPage === 1) return;\n var cardsToshow = processedCards.slice(0, resultsPerPage * currentPage);\n var getLastPageID = resultsPerPage * currentPage - resultsPerPage;\n /* istanbul ignore if */\n if (cardsToshow.length < getLastPageID) return;\n var lastID = scrollElementRef.current.children[getLastPageID];\n lastID.scrollIntoView();\n }, 100);\n }).catch(function () {\n if (endPoint === collectionEndpoint && fallbackEndpoint) {\n getCards(fallbackEndpoint);\n return;\n }\n (0, _lana.logLana)({ message: 'failed to return processed cards', tags: 'collection' });\n setLoading(false);\n setApiFailure(true);\n });\n }\n /**\n * @func getVisitorData\n * @desc wraps fetching Visitor API data in a function for reuse, also if\n * last used session is checked, update currentEntityId with targetValueRevealID\n *\n * @param {Promise} visitorApi, window.__satelliteLoadedPromise when accessed\n * @returns {Void} - an updated state, thru calling getCards\n */\n /* istanbul ignore next */\n function getVisitorData(visitorApi) {\n var collectionURI = new URL(collectionEndpoint);\n\n if (useLastViewedSession) {\n var targetRevealId = localStorage.getItem('targetValueRevealID');\n if (targetRevealId) {\n collectionURI.searchParams.set('currentEntityId', targetRevealId);\n }\n }\n\n visitorApi.then(function (result) {\n if (window.alloy && window.edgeConfigId) {\n window.alloy('getIdentity').then(function (res) {\n collectionURI.searchParams.set('mcgvid', res.identity.ECID);\n collectionURI.searchParams.set('mboxMCGLH', res.edge.regionId);\n getCards(collectionURI.toString());\n });\n } else {\n var visitor = result.getVisitorId();\n collectionURI.searchParams.set('mcgvid', visitor.getMarketingCloudVisitorID());\n collectionURI.searchParams.set('sdid', visitor.getSupplementalDataID());\n collectionURI.searchParams.set('mboxAAMB', visitor.getAudienceManagerBlob());\n collectionURI.searchParams.set('mboxMCGLH', visitor.getAudienceManagerLocationHint());\n getCards(collectionURI.toString());\n }\n });\n }\n\n /**\n * @func visitorRetry\n * @desc Visitor API is late loading often, this sets a recursive call\n * in a setTimeout to run 20 times, and then fail the request.\n *\n * @returns {Void} - an updated state, thru calling getVisitorData which\n * calls getCards\n */\n /* istanbul ignore next */\n function visitorRetry() {\n var retryCount = 0;\n\n var timedRetry = function timedRetry() {\n setTimeout(function () {\n if (retryCount >= 20) {\n setLoading(false);\n\n setApiFailure(true);\n\n return;\n }\n\n var _window2 = window,\n visitorPromiseRetry = _window2.__satelliteLoadedPromise;\n\n\n if (visitorPromiseRetry) {\n getVisitorData(visitorPromiseRetry);\n }\n\n if (!visitorPromiseRetry && retryCount < 20) {\n timedRetry();\n }\n\n retryCount += 1;\n }, 100);\n };\n\n timedRetry();\n }\n /* istanbul ignore if */\n if (targetEnabled && visitorPromise) {\n getVisitorData(visitorPromise);\n }\n /* istanbul ignore if */\n if (targetEnabled && !visitorPromise) {\n visitorRetry();\n }\n\n if (!targetEnabled && !partialLoadWithBackgroundFetch) {\n getCards();\n }\n if (!targetEnabled && partialLoadWithBackgroundFetch) {\n var collectionEndpointUrl = new URL(collectionEndpoint);\n collectionEndpointUrl.searchParams.set('partialLoadCount', String(partialLoadCount));\n setIsPartialLoad(true);\n getCards(collectionEndpointUrl.toString()).then(function () {\n getCards().then(function () {\n setIsPartialLoad(false);\n });\n });\n }\n }, [visibleStamp, hasFetched]);\n\n /**\n * Saves cards to local storage and updates card w/ bookmarked data\n * @returns {Void} - an updated state\n */\n (0, _react.useEffect)(function () {\n (0, _general.saveBookmarksToLocalStorage)(bookmarkedCardIds);\n setCards((0, _Helpers.getUpdatedCardBookmarkData)(cards, bookmarkedCardIds));\n }, [bookmarkedCardIds]);\n\n /**\n * Handles clearing state on showBookmarks\n * @returns {Void} - an updated state\n */\n (0, _react.useEffect)(function () {\n if (showBookmarks) {\n clearAllFilters();\n setSearchQuery('');\n }\n }, [showBookmarks]);\n\n /**\n * Handles focus and escape on mobile filter toggle\n * @returns {Void}\n */\n (0, _react.useEffect)(function () {\n if (showMobileFilters) {\n if (filterItemRef && filterItemRef.current) {\n filterItemRef.current.focusMobTitle();\n }\n document.addEventListener('keydown', handleMobileFilterEscape);\n } else {\n if (filterInfoRef && filterInfoRef.current) {\n filterInfoRef.current.focus();\n }\n document.removeEventListener('keydown', handleMobileFilterEscape);\n }\n\n return function () {\n document.removeEventListener('keydown', handleMobileFilterEscape);\n };\n }, [showMobileFilters]);\n\n var box = (0, _react.useRef)();\n\n (0, _react.useEffect)(function () {\n /* istanbul ignore if */\n if (box && !visibleStamp && isLazy) {\n var io = new IntersectionObserver(function (entries) {\n if (entries[0].intersectionRatio <= 0) return;\n setHasFetched(true);\n setVisibleStamp(new Date().getTime());\n });\n io.observe(box.current);\n }\n }, [box]);\n\n /**\n **** Derived State ****\n */\n\n /**\n * Array of filters chosen by the user\n * @type {Array}\n */\n var activeFilterIds = (0, _Helpers.getActiveFilterIds)(filters);\n\n /**\n * Array of filters panels (groupings) created by the author\n * @type {Array}\n */\n var activePanels = (0, _Helpers.getActivePanels)(activeFilterIds) || new Set();\n\n /**\n * Instance of CardFilterer class that handles returning subset of cards\n * based off user interactions\n *\n * @type {Object}\n */\n var cardFilterer = new _CardFilterer2.default(cards, randomSortId, sampleSize, reservoirSize, featuredCards);\n\n /**\n * @type {Function} getFilteredCollection\n * @desc Closure around CardFilterer for reuse within context\n * @returns {Object}\n * */\n var getFilteredCollection = function getFilteredCollection() {\n return cardFilterer.sortCards(sortOption, sanitizedEventFilter, featuredCards, hideCtaIds, isFirstLoad).keepBookmarkedCardsOnly(onlyShowBookmarks, bookmarkedCardIds, showBookmarks).keepCardsWithinDateRange().filterCards(activeFilterIds, activePanels, filterLogic, _constants.FILTER_TYPES, currCategories).truncateList(totalCardLimit).searchCards(searchQuery, searchFields, cardStyle).removeCards(inclusionIds);\n };\n\n /**\n * @type {Array} filteredCards: Filtered cards based off current state of page\n * @type {Number} nextTransitionMs: Number for timed event sort transition\n */\n /* eslint-disable no-unused-vars */\n\n var _getFilteredCollectio = getFilteredCollection(),\n _getFilteredCollectio2 = _getFilteredCollectio.filteredCards,\n filteredCards = _getFilteredCollectio2 === undefined ? [] : _getFilteredCollectio2,\n _getFilteredCollectio3 = _getFilteredCollectio.nextTransitionMs,\n nextTransitionMs = _getFilteredCollectio3 === undefined ? 0 : _getFilteredCollectio3;\n\n /**\n * Subset of cards to show the user\n * @type {Array}\n */\n\n\n var gridCards = timedCollection.length ? timedCollection : filteredCards;\n var gridCardLen = gridCards.length;\n if (isPartialLoad) {\n gridCardLen = cardCount;\n }\n\n /**\n * Total pages (used by Paginator Component)\n * @type {Number}\n */\n var totalPages = (0, _Helpers.getTotalPages)(resultsPerPage, gridCardLen);\n\n /**\n * Number of cards to show (used by Load More component)\n * @type {Number}\n */\n var numCardsToShow = (0, _Helpers.getNumCardsToShow)(resultsPerPage, currentPage, gridCardLen);\n\n /**\n * How many filters were selected - (used by Left Filter Panel)\n * @type {Number}\n */\n var selectedFiltersItemsQty = (0, _consonant.getNumSelectedFilterItems)(filters);\n\n /**\n * Conditions to Display A Form Of Pagination\n * @type {Boolean}\n */\n var displayPagination = (0, _Helpers.shouldDisplayPaginator)(paginationIsEnabled, totalCardLimit, gridCardLen);\n /**\n * Conditions to display the Load More Button\n * @type {Boolean}\n */\n var displayLoadMore = displayPagination && paginationType === 'loadMore';\n\n /**\n * Conditions to display the Paginator Component\n * @type {Boolean}\n */\n var displayPaginator = displayPagination && paginationType === 'paginator';\n\n /**\n * Conditions to display the Left Filter Panel Component\n * @type {Boolean}\n */\n var displayLeftFilterPanel = filterPanelEnabled && filterPanelType === _constants.FILTER_PANEL.LEFT;\n\n /**\n * Whether at lease one card was returned by Card Filterer\n * @type {Boolean}\n */\n var atLeastOneCard = gridCardLen > 0;\n\n /**\n * Where to place the Sort Popup (either left or right)\n * @type {String} - Location of Sort Popup in Top Filter Panel View\n */\n var topPanelSortPopupLocation = filters.length > 0 && windowWidth < _constants.TABLET_MIN_WIDTH ? _constants.SORT_POPUP_LOCATION.LEFT : _constants.SORT_POPUP_LOCATION.RIGHT;\n\n /**\n * How Long Paginator Component Should Be\n * @type {Number} - Location of Sort Popup in Top Filter Panel View\n */\n var paginatorCount = DESKTOP_SCREEN_SIZE ? _constants.PAGINATION_COUNT.DESKTOP : _constants.PAGINATION_COUNT.MOBILE;\n\n /**\n * Whether we are using the top filter panel or not\n * @type {Boolean}\n */\n var isTopFilterPanel = filterPanelType === _constants.FILTER_PANEL.TOP;\n\n /**\n * Whether we are using the top filter panel or not\n * @type {Boolean}\n */\n var isLeftFilterPanel = filterPanelType === _constants.FILTER_PANEL.LEFT;\n\n /**\n * Ui options that cause grid to rerender necessitate the aria attribute being set\n * @type {Boolean}\n */\n var isGridAreaLive = filterPanelEnabled || searchEnabled || sortEnabled || paginationIsEnabled;\n\n var filterNames = '';\n filters.forEach(function (el) {\n el.items.filter(function (item) {\n return item.selected;\n }).forEach(function (item) {\n filterNames += item.label + ', ';\n });\n });\n\n /**\n **** Class names ****\n */\n\n /**\n * Class name for the authored theme:\n * light, dark, darkest;\n * @type {String}\n */\n var themeClass = (0, _classnames2.default)({\n 'consonant-u-themeLight': authoredMode === _constants.THEME_TYPE.LIGHT,\n 'consonant-u-themeDark': authoredMode === _constants.THEME_TYPE.DARK,\n 'consonant-u-themeDarkest': authoredMode === _constants.THEME_TYPE.DARKEST\n });\n\n /**\n * @param {*} filterList\n * @param {*} categoryList\n * @returns List of categories for the top pills\n * Prepends the \"All Topics\" pill to the list of categories\n */\n function getAuthoredCategories(filterList, categoryList) {\n var categoryIds = filterList.filter(function (filter) {\n return filter.id.includes('caas:product-categories');\n }).map(function (item) {\n return item.id;\n });\n\n // Sorts category list based on authored order\n var selectedCategories = categoryIds.map(function (id) {\n return categoryList && categoryList.filter(function (category) {\n return category.id === id;\n })[0];\n });\n\n return [{\n group: 'All Topics',\n title: 'All Topics',\n id: '',\n items: []\n }].concat(_toConsumableArray(selectedCategories));\n }\n\n /**\n * @returns List of all products from all categories for the 'All products' menu\n * Prepends the \"All products\" label to the list of categories\n */\n function getAllCategoryProducts() {\n if (!authoredCategories) return [];\n var allCategories = [];\n var _iteratorNormalCompletion4 = true;\n var _didIteratorError4 = false;\n var _iteratorError4 = undefined;\n\n try {\n for (var _iterator4 = authoredCategories[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n var category = _step4.value;\n\n if (category && category.items) {\n var _iteratorNormalCompletion5 = true;\n var _didIteratorError5 = false;\n var _iteratorError5 = undefined;\n\n try {\n for (var _iterator5 = category.items[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n var item = _step5.value;\n\n item.fromCategory = true;\n }\n } catch (err) {\n _didIteratorError5 = true;\n _iteratorError5 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion5 && _iterator5.return) {\n _iterator5.return();\n }\n } finally {\n if (_didIteratorError5) {\n throw _iteratorError5;\n }\n }\n }\n\n allCategories = allCategories.concat(category.items);\n }\n }\n } catch (err) {\n _didIteratorError4 = true;\n _iteratorError4 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion4 && _iterator4.return) {\n _iterator4.return();\n }\n } finally {\n if (_didIteratorError4) {\n throw _iteratorError4;\n }\n }\n }\n\n return {\n group: 'All products',\n id: 'caas:all-products',\n items: allCategories\n };\n }\n\n /**\n * @param {*} selectedCategories\n * @param {*} groupId\n * Sets the categories and filters based on the selected category\n */\n function categoryHandler(selectedCategories, groupId) {\n var temp = [];\n var _iteratorNormalCompletion6 = true;\n var _didIteratorError6 = false;\n var _iteratorError6 = undefined;\n\n try {\n for (var _iterator6 = selectedCategories[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n var category = _step6.value;\n\n temp.push(category.id);\n }\n } catch (err) {\n _didIteratorError6 = true;\n _iteratorError6 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion6 && _iterator6.return) {\n _iterator6.return();\n }\n } finally {\n if (_didIteratorError6) {\n throw _iteratorError6;\n }\n }\n }\n\n setCategories(temp);\n setFilters(function (prevFilters) {\n prevFilters.pop();\n var newGroup = authoredCategories.filter(function (category) {\n return category.id === groupId;\n })[0];\n if (!newGroup.items.length) {\n var nextFilters = prevFilters.concat(getAllCategoryProducts());\n return nextFilters;\n }\n prevFilters.push(newGroup);\n return prevFilters;\n });\n setSelectedCategory(groupId);\n setCurrentPage(1);\n }\n\n /**\n * @param {*} category\n * @returns The Authored icon for the category if exists,\n * otherwise returns the default icon from the tags or an empty string\n */\n function getCategoryIcon(category) {\n var authoredIcon = authoredFilters.filter(function (filter) {\n return filter.id === category.id;\n }).map(function (filter) {\n return filter.icon;\n }).toString();\n return authoredIcon || category.icon || '';\n }\n\n var collectionStr = collectionIdentifier ? collectionIdentifier + ' | ' : '';\n var filterStr = selectedFiltersItemsQty ? filterNames : 'No Filters';\n var searchQueryStr = searchQuery || 'None';\n var collectionAnalytics = collectionStr + 'Card Collection | Filters: ' + filterStr + '| Search Query: ' + searchQueryStr;\n /**\n * Class name for the consonant wrapper:\n * whether consonant wrapper contains left filter;\n * @type {String}\n */\n var wrapperClass = (0, _classnames2.default)({\n 'consonant-Wrapper': true,\n 'consonant-Wrapper--32MarginContainer': authoredLayoutContainer === _constants.LAYOUT_CONTAINER.SIZE_100_VW_32_MARGIN,\n 'consonant-Wrapper--83PercentContainier': authoredLayoutContainer === _constants.LAYOUT_CONTAINER.SIZE_83_VW,\n 'consonant-Wrapper--1200MaxWidth': authoredLayoutContainer === _constants.LAYOUT_CONTAINER.SIZE_1200_PX,\n 'consonant-Wrapper--1600MaxWidth': authoredLayoutContainer === _constants.LAYOUT_CONTAINER.SIZE_1600_PX,\n 'consonant-Wrapper--1200MaxWidth Categories': isCategoriesContainer,\n 'consonant-Wrapper--carousel': isCarouselContainer,\n 'consonant-Wrapper--withLeftFilter': filterPanelEnabled && isLeftFilterPanel\n });\n\n (0, _react.useEffect)(function () {\n if (isCategoriesContainer) {\n setFilters(function (prevFilters) {\n var nextFilters = prevFilters.concat(getAllCategoryProducts());\n return nextFilters;\n });\n }\n }, []);\n\n return _react2.default.createElement(\n _contexts.ConfigContext.Provider,\n { value: config },\n _react2.default.createElement(\n _contexts.ExpandableContext.Provider,\n { value: { value: openDropdown, setValue: setOpenDropdown } },\n _react2.default.createElement(\n 'section',\n {\n ref: box,\n role: 'group',\n 'aria-label': title || 'Card Collection',\n 'daa-lh': collectionAnalytics,\n 'daa-im': String(trackImpressions),\n onClick: handleWindowClick,\n className: wrapperClass + ' ' + themeClass },\n _react2.default.createElement(\n 'div',\n { className: 'consonant-Wrapper-inner' },\n isCategoriesContainer && _react2.default.createElement(\n _react.Fragment,\n null,\n _react2.default.createElement(\n 'h2',\n { 'data-testid': 'consonant-TopFilters-categoriesTitle', className: 'consonant-TopFilters-categoriesTitle' },\n title\n ),\n _react2.default.createElement(\n 'div',\n { className: 'filters-category' },\n authoredCategories.map(function (category) {\n if (!category) return null;\n var selected = '';\n if (category.id === selectedCategory) {\n selected = 'selected';\n }\n return _react2.default.createElement(\n 'button',\n {\n key: category.id,\n onClick: function onClick() {\n categoryHandler(category.items, category.id);\n },\n 'data-selected': selected,\n 'data-testid': 'category-button-' + category.id,\n 'data-group': category.group.replaceAll(' ', '').toLowerCase() },\n _react2.default.createElement('img', { className: 'filters-category--icon', src: getCategoryIcon(category), alt: category.icon && 'Category icon' }),\n category.title\n );\n })\n )\n ),\n displayLeftFilterPanel && isStandardContainer && _react2.default.createElement(\n 'div',\n { className: 'consonant-Wrapper-leftFilterWrapper' },\n _react2.default.createElement(_Panel4.default, {\n filters: filters,\n selectedFiltersQty: selectedFiltersItemsQty,\n windowWidth: windowWidth,\n onFilterClick: handleFilterGroupClick,\n onClearAllFilters: resetFiltersSearchAndBookmarks,\n onClearFilterItems: clearFilterItem,\n onCheckboxClick: handleCheckBoxChange,\n onMobileFiltersToggleClick: handleMobileFiltersToggle,\n onSelectedFilterClick: handleCheckBoxChange,\n showMobileFilters: showMobileFilters,\n resQty: gridCardLen,\n bookmarkComponent: _react2.default.createElement(_Bookmarks2.default, {\n showBookmarks: showBookmarks,\n onClick: handleShowBookmarksFilterClick,\n savedCardsCount: bookmarkedCardIds.length }),\n searchComponent: _react2.default.createElement(_Search2.default, {\n placeholderText: leftPanelSearchPlaceholder,\n name: 'filtersSideSearch',\n value: searchQuery,\n autofocus: false,\n onSearch: handleSearchInputChange }),\n ref: filterItemRef })\n ),\n _react2.default.createElement(\n 'div',\n { className: 'consonant-Wrapper-collection' + (isLoading ? ' is-loading' : '') },\n isTopFilterPanel && isStandardContainer && _react2.default.createElement(_Panel2.default, {\n filterPanelEnabled: filterPanelEnabled,\n filters: filters,\n windowWidth: windowWidth,\n resQty: gridCardLen,\n onCheckboxClick: handleCheckBoxChange,\n onFilterClick: handleFilterGroupClick,\n onClearFilterItems: clearFilterItem,\n categories: currCategories,\n onClearAllFilters: resetFiltersSearchAndBookmarks,\n showLimitedFiltersQty: showLimitedFiltersQty,\n searchComponent: _react2.default.createElement(_Search2.default, {\n placeholderText: topPanelSearchPlaceholder,\n name: 'filtersTopSearch',\n value: searchQuery,\n autofocus: DESKTOP_SCREEN_SIZE,\n onSearch: handleSearchInputChange }),\n sortComponent: _react2.default.createElement(_Popup2.default, {\n opened: sortOpened,\n id: 'sort',\n val: sortOption,\n values: sortOptions,\n onSelect: handleSortChange,\n name: 'filtersTopSelect',\n autoWidth: true,\n optionsAlignment: topPanelSortPopupLocation }),\n onShowAllClick: handleShowAllTopFilters }),\n isLeftFilterPanel && isStandardContainer && _react2.default.createElement(_Info.Info, {\n enabled: filterPanelEnabled,\n filtersQty: filters.length,\n filters: filters,\n cardsQty: gridCardLen,\n selectedFiltersQty: selectedFiltersItemsQty,\n windowWidth: windowWidth,\n onMobileFiltersToggleClick: handleMobileFiltersToggle,\n searchComponent: _react2.default.createElement(_Search2.default, {\n placeholderText: searchPlaceholderText,\n name: 'searchFiltersInfo',\n value: searchQuery,\n autofocus: false,\n onSearch: handleSearchInputChange }),\n sortComponent: _react2.default.createElement(_Popup2.default, {\n opened: sortOpened,\n id: 'sort',\n val: sortOption,\n values: sortOptions,\n onSelect: handleSortChange,\n autoWidth: false,\n optionsAlignment: 'right' }),\n sortOptions: sortOptions,\n ref: filterInfoRef }),\n atLeastOneCard && isStandardContainer && _react2.default.createElement(\n _react.Fragment,\n null,\n _react2.default.createElement(_Grid2.default, {\n resultsPerPage: resultsPerPage,\n pages: currentPage,\n cards: gridCards,\n forwardedRef: scrollElementRef,\n onCardBookmark: handleCardBookmarking,\n isAriaLiveActive: isGridAreaLive }),\n displayLoadMore && _react2.default.createElement(_LoadMore2.default, {\n onClick: onLoadMoreClick,\n show: numCardsToShow,\n total: gridCardLen }),\n displayPaginator && _react2.default.createElement(_Paginator2.default, {\n pageCount: paginatorCount,\n currentPageNumber: currentPage,\n totalPages: totalPages,\n showItemsPerPage: resultsPerPage,\n totalResults: gridCardLen,\n onClick: setCurrentPage })\n ),\n atLeastOneCard && isCarouselContainer && !(cardStyle === 'custom-card') && _react2.default.createElement(_CardsCarousel2.default, {\n resQty: gridCardLen,\n cards: gridCards,\n role: 'tablist',\n onCardBookmark: handleCardBookmarking }),\n atLeastOneCard && isCarouselContainer && cardStyle === 'custom-card' && _react2.default.createElement(_View2.default, {\n title: 'Not Supported',\n description: 'Using custom cards within a carousel layout is currently not supported. Please re-author the component',\n replaceValue: '' }),\n isLoading && !atLeastOneCard && _react2.default.createElement(_Loader2.default, {\n size: _constants.LOADER_SIZE.BIG,\n hidden: !totalCardLimit,\n absolute: true }),\n !isApiFailure && !atLeastOneCard && !isLoading && _react2.default.createElement(_View2.default, {\n title: noResultsTitle,\n description: noResultsDescription,\n replaceValue: searchQuery }),\n isApiFailure && _react2.default.createElement(_View2.default, {\n title: apiFailureTitle,\n description: apiFailureDescription,\n replaceValue: '' })\n )\n )\n )\n )\n );\n};\n\nContainer.propTypes = {\n config: (0, _propTypes.shape)(_config.configType)\n};\n\nContainer.defaultProps = {\n config: {}\n};\n\nexports.default = Container;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZWFjdC9zcmMvanMvY29tcG9uZW50cy9Db25zb25hbnQvQ29udGFpbmVyL0NvbnRhaW5lci5qc3g/YzY0MCJdLCJuYW1lcyI6WyJDb250YWluZXIiLCJwcm9wcyIsImNvbmZpZyIsImdldENvbmZpZyIsImZpbHRlckdyb3VwUHJlZml4Iiwic2VhcmNoUHJlZml4IiwiQ0FSRF9IQVNIX0xFTkdUSCIsImZpbHRlclBhbmVsRW5hYmxlZCIsImZpbHRlclBhbmVsVHlwZSIsInBhZ2luYXRpb25UeXBlIiwicGFnaW5hdGlvbklzRW5hYmxlZCIsInJlc3VsdHNQZXJQYWdlIiwib25seVNob3dCb29rbWFya3MiLCJhdXRob3JlZEZpbHRlcnMiLCJmaWx0ZXJMb2dpYyIsInRvTG93ZXJDYXNlIiwidHJpbSIsInRvdGFsQ2FyZExpbWl0Iiwic2FtcGxlU2l6ZSIsInJlc2Vydm9pclNpemUiLCJzZWFyY2hGaWVsZHMiLCJzb3J0T3B0aW9ucyIsImRlZmF1bHRTb3J0IiwiZGVmYXVsdFNvcnRPcHRpb24iLCJmZWF0dXJlZENhcmRzIiwidG9TdHJpbmciLCJyZXBsYWNlIiwic3BsaXQiLCJjb25jYXQiLCJtYXAiLCJyb2xsaW5nSGFzaCIsImlkIiwiaGlkZUN0YUlkcyIsImhpZGVDdGFUYWdzIiwibGVmdFBhbmVsU2VhcmNoUGxhY2Vob2xkZXIiLCJ0b3BQYW5lbFNlYXJjaFBsYWNlaG9sZGVyIiwic2VhcmNoUGxhY2Vob2xkZXJUZXh0Iiwibm9SZXN1bHRzVGl0bGUiLCJub1Jlc3VsdHNEZXNjcmlwdGlvbiIsImFwaUZhaWx1cmVUaXRsZSIsImFwaUZhaWx1cmVEZXNjcmlwdGlvbiIsImlzTGF6eSIsInRyYWNrSW1wcmVzc2lvbnMiLCJjb2xsZWN0aW9uSWRlbnRpZmllciIsInRhcmdldEVuYWJsZWQiLCJ1c2VMYXN0Vmlld2VkU2Vzc2lvbiIsImF1dGhvcmVkTW9kZSIsImF1dGhvcmVkTGF5b3V0Q29udGFpbmVyIiwic2hvd0VtcHR5RmlsdGVycyIsImV2ZW50RmlsdGVyIiwic2VhcmNoRW5hYmxlZCIsInNvcnRFbmFibGVkIiwiY2FyZFN0eWxlIiwidGl0bGUiLCJoZWFkZXJzIiwicGFydGlhbExvYWRXaXRoQmFja2dyb3VuZEZldGNoIiwicGFydGlhbExvYWRDb3VudCIsIkRFU0tUT1BfU0NSRUVOX1NJWkUiLCJ3aW5kb3ciLCJpbm5lcldpZHRoIiwiREVTS1RPUF9NSU5fV0lEVEgiLCJpc1hvckZpbHRlciIsIkZJTFRFUl9UWVBFUyIsIlhPUiIsImlzQ2Fyb3VzZWxDb250YWluZXIiLCJMQVlPVVRfQ09OVEFJTkVSIiwiQ0FST1VTRUwiLCJpc1N0YW5kYXJkQ29udGFpbmVyIiwiaXNDYXRlZ29yaWVzQ29udGFpbmVyIiwiQ0FURUdPUklFUyIsImNhdGVnb3JpZXMiLCJhdXRob3JlZENhdGVnb3JpZXMiLCJnZXRBdXRob3JlZENhdGVnb3JpZXMiLCJzYW5pdGl6ZWRFdmVudEZpbHRlciIsInRpbWVkQ29sbGVjdGlvbiIsInNldFRpbWVkQ29sbGVjdGlvbiIsInRyYW5zaXRpb24iLCJzZXRUcmFuc2l0aW9uIiwiY2FyZENvdW50Iiwic2V0Q2FyZENvdW50IiwiaXNQYXJ0aWFsTG9hZCIsInNldElzUGFydGlhbExvYWQiLCJoYXNoZWRSZWYiLCJSZWFjdCIsInVzZVN0YXRlIiwidXBkYXRlU3RhdGUiLCJzY3JvbGxFbGVtZW50UmVmIiwibmV4dFRyYW5zaXRpb24iLCJ1c2VDYWxsYmFjayIsInVybFN0YXRlIiwic2V0VXJsU3RhdGUiLCJjbGVhclVybFN0YXRlIiwib3BlbkRyb3Bkb3duIiwic2V0T3BlbkRyb3Bkb3duIiwiYm9va21hcmtlZENhcmRJZHMiLCJzZXRCb29rbWFya2VkQ2FyZElkcyIsImluY2x1c2lvbklkcyIsInBhZ2UiLCJjdXJyZW50UGFnZSIsInNldEN1cnJlbnRQYWdlIiwiZmlsdGVycyIsInNldEZpbHRlcnMiLCJjdXJyQ2F0ZWdvcmllcyIsInNldENhdGVnb3JpZXMiLCJzZWFyY2hRdWVyeSIsInNldFNlYXJjaFF1ZXJ5Iiwic2VsZWN0ZWRDYXRlZ29yeSIsInNldFNlbGVjdGVkQ2F0ZWdvcnkiLCJzb3J0T3BlbmVkIiwic2V0U29ydE9wZW5lZCIsInNvcnRPcHRpb24iLCJzZXRTb3J0T3B0aW9uIiwic29ydCIsIlNPUlRfVFlQRVMiLCJSQU5ET00iLCJ3aW5kb3dXaWR0aCIsIndpZHRoIiwic2hvd01vYmlsZUZpbHRlcnMiLCJzZXRTaG93TW9iaWxlRmlsdGVycyIsInNob3dCb29rbWFya3MiLCJzZXRTaG93Qm9va21hcmtzIiwic2hvd0xpbWl0ZWRGaWx0ZXJzUXR5Iiwic2V0U2hvd0xpbWl0ZWRGaWx0ZXJzUXR5IiwiY2FyZHMiLCJzZXRDYXJkcyIsImlzTG9hZGluZyIsInNldExvYWRpbmciLCJpc0FwaUZhaWx1cmUiLCJzZXRBcGlGYWlsdXJlIiwicmFuZG9tU29ydElkIiwic2V0UmFuZG9tU29ydElkIiwiaXNGaXJzdExvYWQiLCJzZXRJc0ZpcnN0TG9hZCIsInZpc2libGVTdGFtcCIsInNldFZpc2libGVTdGFtcCIsImhhc0ZldGNoZWQiLCJzZXRIYXNGZXRjaGVkIiwiZmlsdGVySXRlbVJlZiIsImZpbHRlckluZm9SZWYiLCJnZXRQYXJlbnRDaGlsZCIsImkiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJzIiwibCIsIkJBU0UiLCJNT0QiLCJoYXNoIiwiYmFzZVBvd2VyIiwiY2hhckNvZGVBdCIsImdldEFsbEZpbHRlcnNDbGVhcmVkU3RhdGUiLCJmaWx0ZXJHcm91cHMiLCJmaWx0ZXJHcm91cCIsIml0ZW1zIiwiZmlsdGVySXRlbSIsInNlbGVjdGVkIiwiZ2V0RmlsdGVySXRlbUNsZWFyZWRTdGF0ZSIsImNsZWFyRmlsdGVySXRlbSIsImdyb3VwIiwicHJldkZpbHRlcnMiLCJmaWx0ZXJDbGVhcmVkU3RhdGUiLCJ1cmxQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJsb2NhdGlvbiIsInNlYXJjaCIsImZvckVhY2giLCJ2YWx1ZSIsImtleSIsImNoRmlsdGVyIiwiaW5kZXhPZiIsImluY2x1ZGVzIiwiY2xlYXJBbGxGaWx0ZXJzIiwiYWxsRmlsdGVyc0NsZWFyZWRTdGF0ZSIsInJlc2V0RmlsdGVyc1NlYXJjaEFuZEJvb2ttYXJrcyIsIm9uTG9hZE1vcmVDbGljayIsInByZXZTdGF0ZSIsInNjcm9sbFRvIiwicGFnZVlPZmZzZXQiLCJoYW5kbGVTb3J0Q2hhbmdlIiwib3B0aW9uIiwiaGFuZGxlU2VhcmNoSW5wdXRDaGFuZ2UiLCJ2YWwiLCJoYW5kbGVGaWx0ZXJHcm91cENsaWNrIiwiZmlsdGVySWQiLCJvcGVuZWQiLCJlbCIsImNoYW5nZVVybFN0YXRlIiwiaXRlbUlkIiwiaXNDaGVja2VkIiwiZmluZCIsImxhYmVsIiwidXJsU3RhdGVWYWx1ZSIsImZpbHRlciIsIml0ZW0iLCJoYW5kbGVDaGVja0JveENoYW5nZSIsImhhbmRsZU1vYmlsZUZpbHRlcnNUb2dnbGUiLCJwcmV2IiwiaGFuZGxlQ2FyZEJvb2ttYXJraW5nIiwiY2FyZElzQm9va21hcmtlZCIsImNhcmQiLCJoYW5kbGVTaG93Qm9va21hcmtzRmlsdGVyQ2xpY2siLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwiaGFuZGxlU2hvd0FsbFRvcEZpbHRlcnMiLCJoYW5kbGVXaW5kb3dDbGljayIsImhhbmRsZU1vYmlsZUZpbHRlckVzY2FwZSIsImV2ZW50Iiwib3BlbmVkT25Mb2FkIiwib3JpZ2luIiwidXJsU3RhdGVBcnJheSIsIlN0cmluZyIsInVybFNlYXJjaFZhbHVlIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwicmVtb3ZlRW1wdHlGaWx0ZXJzIiwiYWxsRmlsdGVycyIsImNhcmRzRnJvbUpzb24iLCJ0YWdzIiwidGFnIiwidGltaW5nVGFncyIsIkVWRU5UX1RJTUlOR19JRFMiLCJMSVZFIiwiT05ERU1BTkQiLCJVUENPTUlORyIsInZpc2l0b3JQcm9taXNlIiwiX19zYXRlbGxpdGVMb2FkZWRQcm9taXNlIiwiY29sbGVjdGlvbkVuZHBvaW50IiwiZmFsbGJhY2tFbmRwb2ludCIsInIiLCJSZWdFeHAiLCJjb2xsZWN0aW9uRW5kcG9pbnRVUkkiLCJ0ZXN0IiwiVVJMIiwic2VhcmNoUGFyYW1zIiwic2V0IiwiZ2V0Q2FyZHMiLCJlbmRQb2ludCIsInN0YXJ0IiwiRGF0ZSIsIm5vdyIsImZldGNoIiwiY3JlZGVudGlhbHMiLCJ0aGVuIiwicmVzcCIsIm9rIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInVybCIsImpzb24iLCJ2YWxpZERhdGEiLCJPYmplY3QiLCJrZXlzIiwibWVzc2FnZSIsIlByb21pc2UiLCJyZWplY3QiLCJFcnJvciIsImVycm9yTWVzc2FnZSIsInBheWxvYWQiLCJpc0hhc2hlZCIsImN1cnJlbnQiLCJUQUdfSEFTSF9MRU5HVEgiLCJwYXJlbnQiLCJjaGlsZCIsInRlbXAiLCJwdXNoIiwidG90YWxDb3VudCIsIkpzb25Qcm9jZXNzb3IiLCJyZW1vdmVEdXBsaWNhdGVDYXJkcyIsImFkZENhcmRNZXRhRGF0YSIsIlRSVU5DQVRFX1RFWFRfUVRZIiwicHJvY2Vzc2VkQ2FyZHMiLCJ0cmFuc2l0aW9ucyIsInNpemUiLCJzZXRUaW1lb3V0IiwiZGVxdWV1ZSIsInByaW9yaXR5IiwiT05FX1NFQ09ORF9ERUxBWSIsImNhcmRzVG9zaG93Iiwic2xpY2UiLCJnZXRMYXN0UGFnZUlEIiwibGFzdElEIiwiY2hpbGRyZW4iLCJzY3JvbGxJbnRvVmlldyIsImNhdGNoIiwiZ2V0VmlzaXRvckRhdGEiLCJ2aXNpdG9yQXBpIiwiY29sbGVjdGlvblVSSSIsInRhcmdldFJldmVhbElkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsInJlc3VsdCIsImFsbG95IiwiZWRnZUNvbmZpZ0lkIiwicmVzIiwiaWRlbnRpdHkiLCJFQ0lEIiwiZWRnZSIsInJlZ2lvbklkIiwidmlzaXRvciIsImdldFZpc2l0b3JJZCIsImdldE1hcmtldGluZ0Nsb3VkVmlzaXRvcklEIiwiZ2V0U3VwcGxlbWVudGFsRGF0YUlEIiwiZ2V0QXVkaWVuY2VNYW5hZ2VyQmxvYiIsImdldEF1ZGllbmNlTWFuYWdlckxvY2F0aW9uSGludCIsInZpc2l0b3JSZXRyeSIsInJldHJ5Q291bnQiLCJ0aW1lZFJldHJ5IiwidmlzaXRvclByb21pc2VSZXRyeSIsImNvbGxlY3Rpb25FbmRwb2ludFVybCIsImZvY3VzTW9iVGl0bGUiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJmb2N1cyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJib3giLCJpbyIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwiZW50cmllcyIsImludGVyc2VjdGlvblJhdGlvIiwiZ2V0VGltZSIsIm9ic2VydmUiLCJhY3RpdmVGaWx0ZXJJZHMiLCJhY3RpdmVQYW5lbHMiLCJTZXQiLCJjYXJkRmlsdGVyZXIiLCJDYXJkRmlsdGVyZXIiLCJnZXRGaWx0ZXJlZENvbGxlY3Rpb24iLCJzb3J0Q2FyZHMiLCJrZWVwQm9va21hcmtlZENhcmRzT25seSIsImtlZXBDYXJkc1dpdGhpbkRhdGVSYW5nZSIsImZpbHRlckNhcmRzIiwidHJ1bmNhdGVMaXN0Iiwic2VhcmNoQ2FyZHMiLCJyZW1vdmVDYXJkcyIsImZpbHRlcmVkQ2FyZHMiLCJuZXh0VHJhbnNpdGlvbk1zIiwiZ3JpZENhcmRzIiwiZ3JpZENhcmRMZW4iLCJ0b3RhbFBhZ2VzIiwibnVtQ2FyZHNUb1Nob3ciLCJzZWxlY3RlZEZpbHRlcnNJdGVtc1F0eSIsImRpc3BsYXlQYWdpbmF0aW9uIiwiZGlzcGxheUxvYWRNb3JlIiwiZGlzcGxheVBhZ2luYXRvciIsImRpc3BsYXlMZWZ0RmlsdGVyUGFuZWwiLCJGSUxURVJfUEFORUwiLCJMRUZUIiwiYXRMZWFzdE9uZUNhcmQiLCJ0b3BQYW5lbFNvcnRQb3B1cExvY2F0aW9uIiwiVEFCTEVUX01JTl9XSURUSCIsIlNPUlRfUE9QVVBfTE9DQVRJT04iLCJSSUdIVCIsInBhZ2luYXRvckNvdW50IiwiUEFHSU5BVElPTl9DT1VOVCIsIkRFU0tUT1AiLCJNT0JJTEUiLCJpc1RvcEZpbHRlclBhbmVsIiwiVE9QIiwiaXNMZWZ0RmlsdGVyUGFuZWwiLCJpc0dyaWRBcmVhTGl2ZSIsImZpbHRlck5hbWVzIiwidGhlbWVDbGFzcyIsIlRIRU1FX1RZUEUiLCJMSUdIVCIsIkRBUksiLCJEQVJLRVNUIiwiZmlsdGVyTGlzdCIsImNhdGVnb3J5TGlzdCIsImNhdGVnb3J5SWRzIiwic2VsZWN0ZWRDYXRlZ29yaWVzIiwiY2F0ZWdvcnkiLCJnZXRBbGxDYXRlZ29yeVByb2R1Y3RzIiwiYWxsQ2F0ZWdvcmllcyIsImZyb21DYXRlZ29yeSIsImNhdGVnb3J5SGFuZGxlciIsImdyb3VwSWQiLCJwb3AiLCJuZXdHcm91cCIsIm5leHRGaWx0ZXJzIiwiZ2V0Q2F0ZWdvcnlJY29uIiwiYXV0aG9yZWRJY29uIiwiaWNvbiIsImNvbGxlY3Rpb25TdHIiLCJmaWx0ZXJTdHIiLCJzZWFyY2hRdWVyeVN0ciIsImNvbGxlY3Rpb25BbmFseXRpY3MiLCJ3cmFwcGVyQ2xhc3MiLCJTSVpFXzEwMF9WV18zMl9NQVJHSU4iLCJTSVpFXzgzX1ZXIiwiU0laRV8xMjAwX1BYIiwiU0laRV8xNjAwX1BYIiwic2V0VmFsdWUiLCJyZXBsYWNlQWxsIiwiTE9BREVSX1NJWkUiLCJCSUciLCJwcm9wVHlwZXMiLCJjb25maWdUeXBlIiwiZGVmYXVsdFByb3BzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7Ozs7QUFPQTs7OztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOztBQVFBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBZUE7O0FBSUE7O0FBTUE7Ozs7OztBQVVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JBLElBQU1BLFlBQVksU0FBWkEsU0FBWSxDQUFDQyxLQUFELEVBQVc7QUFBQSxRQUNqQkMsTUFEaUIsR0FDTkQsS0FETSxDQUNqQkMsTUFEaUI7O0FBRXpCLFFBQU1DLFlBQVksaUNBQWlCRCxNQUFqQixDQUFsQjtBQUNBLFFBQU1FLG9CQUFvQixLQUExQjtBQUNBLFFBQU1DLGVBQWUsS0FB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QUFZLHdHQUZoQjtBQUlJLDBDQUFhLEVBSmpCLEdBakdKO0FBdUdNeUUscUNBQWEsQ0FBQytOLGNBQWQsSUFDRiw4QkFBQyxnQkFBRDtBQUNJLGtDQUFNOEMsdUJBQVlDLEdBRHRCO0FBRUksb0NBQVEsQ0FBQzFYLGNBRmI7QUFHSSwwQ0FISixHQXhHSjtBQTZHTSx5QkFBQzhHLFlBQUQsSUFBaUIsQ0FBQzZOLGNBQWxCLElBQW9DLENBQUMvTixTQUFyQyxJQUNGLDhCQUFDLGNBQUQ7QUFDSSxtQ0FBT3hGLGNBRFg7QUFFSSx5Q0FBYUMsb0JBRmpCO0FBR0ksMENBQWNrRSxXQUhsQixHQTlHSjtBQW1ITXVCLHdDQUNGLDhCQUFDLGNBQUQ7QUFDSSxtQ0FBT3hGLGVBRFg7QUFFSSx5Q0FBYUMscUJBRmpCO0FBR0ksMENBQWEsRUFIakI7QUFwSEo7QUEvREo7QUFSSjtBQUhKO0FBREosS0FESjtBQTJNSCxDQTk4Q0Q7O0FBZzlDQXhDLFVBQVU0WSxTQUFWLEdBQXNCO0FBQ2xCMVksWUFBUSxzQkFBTTJZLGtCQUFOO0FBRFUsQ0FBdEI7O0FBSUE3WSxVQUFVOFksWUFBVixHQUF5QjtBQUNyQjVZLFlBQVE7QUFEYSxDQUF6Qjs7a0JBSWVGLFMiLCJmaWxlIjoiMTA4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7XG4gICAgRnJhZ21lbnQsXG4gICAgdXNlRWZmZWN0LFxuICAgIHVzZVJlZixcbiAgICB1c2VTdGF0ZSxcbiAgICBjcmVhdGVSZWYsXG59IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgc2hhcGUgfSBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCAnd2hhdHdnLWZldGNoJztcbmltcG9ydCB7IGxvZ0xhbmEgfSBmcm9tICcuLi9IZWxwZXJzL2xhbmEnO1xuaW1wb3J0IFBvcHVwIGZyb20gJy4uL1NvcnQvUG9wdXAnO1xuaW1wb3J0IFNlYXJjaCBmcm9tICcuLi9TZWFyY2gvU2VhcmNoJztcbmltcG9ydCBMb2FkZXIgZnJvbSAnLi4vTG9hZGVyL0xvYWRlcic7XG5pbXBvcnQge1xuICAgIGdldEJ5UGF0aCxcbiAgICBzYW5pdGl6ZUV2ZW50RmlsdGVyLFxuICAgIHNhdmVCb29rbWFya3NUb0xvY2FsU3RvcmFnZSxcbiAgICByZWFkQm9va21hcmtzRnJvbUxvY2FsU3RvcmFnZSxcbiAgICByZWFkSW5jbHVzaW9uc0Zyb21Mb2NhbFN0b3JhZ2UsXG4gICAgZ2V0VHJhbnNpdGlvbnMsXG59IGZyb20gJy4uL0hlbHBlcnMvZ2VuZXJhbCc7XG5pbXBvcnQgeyBjb25maWdUeXBlIH0gZnJvbSAnLi4vdHlwZXMvY29uZmlnJztcbmltcG9ydCBDYXJkc0Nhcm91c2VsIGZyb20gJy4uL0NhcmRzQ2Fyb3VzZWwvQ2FyZHNDYXJvdXNlbCc7XG5pbXBvcnQgTm9SZXN1bHRzVmlldyBmcm9tICcuLi9Ob1Jlc3VsdHMvVmlldyc7XG5pbXBvcnQgTG9hZE1vcmUgZnJvbSAnLi4vUGFnaW5hdGlvbi9Mb2FkTW9yZSc7XG5pbXBvcnQgQm9va21hcmtzIGZyb20gJy4uL0Jvb2ttYXJrcy9Cb29rbWFya3MnO1xuaW1wb3J0IFBhZ2luYXRvciBmcm9tICcuLi9QYWdpbmF0aW9uL1BhZ2luYXRvcic7XG5pbXBvcnQgR3JpZCBmcm9tICcuLi9HcmlkL0dyaWQnO1xuaW1wb3J0IENhcmRGaWx0ZXJlciBmcm9tICcuLi9IZWxwZXJzL0NhcmRGaWx0ZXJlcic7XG5pbXBvcnQgRmlsdGVyc1BhbmVsVG9wIGZyb20gJy4uL0ZpbHRlcnMvVG9wL1BhbmVsJztcbmltcG9ydCBMZWZ0RmlsdGVyUGFuZWwgZnJvbSAnLi4vRmlsdGVycy9MZWZ0L1BhbmVsJztcbmltcG9ydCBKc29uUHJvY2Vzc29yIGZyb20gJy4uL0hlbHBlcnMvSnNvblByb2Nlc3Nvcic7XG5pbXBvcnQgeyB1c2VXaW5kb3dEaW1lbnNpb25zLCB1c2VVUkxTdGF0ZSB9IGZyb20gJy4uL0hlbHBlcnMvaG9va3MnO1xuaW1wb3J0IHsgSW5mbyBhcyBMZWZ0SW5mbyB9IGZyb20gJy4uL0ZpbHRlcnMvTGVmdC9JbmZvJztcbmltcG9ydCB7XG4gICAgREVTS1RPUF9NSU5fV0lEVEgsXG4gICAgRklMVEVSX1RZUEVTLFxuICAgIEZJTFRFUl9QQU5FTCxcbiAgICBMT0FERVJfU0laRSxcbiAgICBQQUdJTkFUSU9OX0NPVU5ULFxuICAgIFRBQkxFVF9NSU5fV0lEVEgsXG4gICAgVFJVTkNBVEVfVEVYVF9RVFksXG4gICAgU09SVF9QT1BVUF9MT0NBVElPTixcbiAgICBUSEVNRV9UWVBFLFxuICAgIExBWU9VVF9DT05UQUlORVIsXG4gICAgT05FX1NFQ09ORF9ERUxBWSxcbiAgICBTT1JUX1RZUEVTLFxuICAgIEVWRU5UX1RJTUlOR19JRFMsXG59IGZyb20gJy4uL0hlbHBlcnMvY29uc3RhbnRzJztcbmltcG9ydCB7XG4gICAgQ29uZmlnQ29udGV4dCxcbiAgICBFeHBhbmRhYmxlQ29udGV4dCxcbn0gZnJvbSAnLi4vSGVscGVycy9jb250ZXh0cyc7XG5pbXBvcnQge1xuICAgIGdldERlZmF1bHRTb3J0T3B0aW9uLFxuICAgIGdldE51bVNlbGVjdGVkRmlsdGVySXRlbXMsXG4gICAgbWFrZUNvbmZpZ0dldHRlcixcbn0gZnJvbSAnLi4vSGVscGVycy9jb25zb25hbnQnO1xuXG5pbXBvcnQge1xuICAgIHNob3VsZERpc3BsYXlQYWdpbmF0b3IsXG4gICAgZ2V0TnVtQ2FyZHNUb1Nob3csXG4gICAgZ2V0VG90YWxQYWdlcyxcbiAgICBnZXRBY3RpdmVGaWx0ZXJJZHMsXG4gICAgZ2V0QWN0aXZlUGFuZWxzLFxuICAgIGdldFVwZGF0ZWRDYXJkQm9va21hcmtEYXRhLFxufSBmcm9tICcuLi9IZWxwZXJzL0hlbHBlcnMnO1xuXG5cbi8qKlxuICogQ29uc29uYW50IENhcmQgQ29sbGVjdGlvblxuICogQ29uZmlnIGlzIGltcGxpY2l0bHkgcG9wdWxhdGVkIGJ5IGF1dGhvcnNcbiAqXG4gKiBAY29tcG9uZW50XG4gKiBAZXhhbXBsZVxuICogY29uc3QgY29uZmlnID0ge1xuICAgIGNvbGxlY3Rpb246IHt9LFxuICAgIGZlYXR1cmVkQ2FyZHM6IFt7fV0sXG4gICAgZmlsdGVyUGFuZWw6IHt9LFxuICAgIGhpZGVDdGFJZHM6IFt7fV0sXG4gICAgaGlkZUN0YVRhZ3M6IFt7fV0sXG4gICAgc29ydDoge30sXG4gICAgcGFnaW5hdGlvbjoge30sXG4gICAgYm9va21hcmtzOiB7fSxcbiAgICBzZWFyY2g6IHt9LFxuICAgIGxhbmd1YWdlOiAnJ1xuICogfVxuICogcmV0dXJuIChcbiAqICAgPENvbnRhaW5lciBjb25maWc9e2NvbmZpZ30vPlxuICogKVxuICovXG5jb25zdCBDb250YWluZXIgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCB7IGNvbmZpZyB9ID0gcHJvcHM7XG4gICAgY29uc3QgZ2V0Q29uZmlnID0gbWFrZUNvbmZpZ0dldHRlcihjb25maWcpO1xuICAgIGNvbnN0IGZpbHRlckdyb3VwUHJlZml4ID0gJ2NoXyc7XG4gICAgY29uc3Qgc2VhcmNoUHJlZml4ID0gJ3NoXyc7XG4gICAgY29uc3QgQ0FSRF9IQVNIX0xFTkdUSCA9IDEwO1xuXG4gICAgLyoqXG4gICAgICoqKiogQXV0aG9yZWQgQ29uZmlncyAqKioqXG4gICAgICovXG4gICAgY29uc3QgZmlsdGVyUGFuZWxFbmFibGVkID0gZ2V0Q29uZmlnKCdmaWx0ZXJQYW5lbCcsICdlbmFibGVkJyk7XG4gICAgY29uc3QgZmlsdGVyUGFuZWxUeXBlID0gZ2V0Q29uZmlnKCdmaWx0ZXJQYW5lbCcsICd0eXBlJyk7XG4gICAgY29uc3QgcGFnaW5hdGlvblR5cGUgPSBnZXRDb25maWcoJ3BhZ2luYXRpb24nLCAndHlwZScpO1xuICAgIGNvbnN0IHBhZ2luYXRpb25Jc0VuYWJsZWQgPSBnZXRDb25maWcoJ3BhZ2luYXRpb24nLCAnZW5hYmxlZCcpO1xuICAgIGNvbnN0IHJlc3VsdHNQZXJQYWdlID0gZ2V0Q29uZmlnKCdjb2xsZWN0aW9uJywgJ3Jlc3VsdHNQZXJQYWdlJyk7XG4gICAgY29uc3Qgb25seVNob3dCb29rbWFya3MgPSBnZXRDb25maWcoJ2Jvb2ttYXJrcycsICdsZWZ0RmlsdGVyUGFuZWwuYm9va21hcmtPbmx5Q29sbGVjdGlvbicpO1xuICAgIGNvbnN0IGF1dGhvcmVkRmlsdGVycyA9IGdldENvbmZpZygnZmlsdGVyUGFuZWwnLCAnZmlsdGVycycpO1xuICAgIGNvbnN0IGZpbHRlckxvZ2ljID0gZ2V0Q29uZmlnKCdmaWx0ZXJQYW5lbCcsICdmaWx0ZXJMb2dpYycpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGxldCB0b3RhbENhcmRMaW1pdCA9IGdldENvbmZpZygnY29sbGVjdGlvbicsICd0b3RhbENhcmRzVG9TaG93Jyk7XG4gICAgY29uc3Qgc2FtcGxlU2l6ZSA9IGdldENvbmZpZygnY29sbGVjdGlvbicsICdyZXNlcnZvaXIuc2FtcGxlJyk7XG4gICAgY29uc3QgcmVzZXJ2b2lyU2l6ZSA9IGdldENvbmZpZygnY29sbGVjdGlvbicsICdyZXNlcnZvaXIucG9vbCcpO1xuICAgIGNvbnN0IHNlYXJjaEZpZWxkcyA9IGdldENvbmZpZygnc2VhcmNoJywgJ3NlYXJjaEZpZWxkcycpO1xuICAgIGNvbnN0IHNvcnRPcHRpb25zID0gZ2V0Q29uZmlnKCdzb3J0JywgJ29wdGlvbnMnKTtcbiAgICBjb25zdCBkZWZhdWx0U29ydCA9IGdldENvbmZpZygnc29ydCcsICdkZWZhdWx0U29ydCcpO1xuICAgIGNvbnN0IGRlZmF1bHRTb3J0T3B0aW9uID0gZ2V0RGVmYXVsdFNvcnRPcHRpb24oY29uZmlnLCBkZWZhdWx0U29ydCk7XG4gICAgbGV0IGZlYXR1cmVkQ2FyZHMgPSBnZXRDb25maWcoJ2ZlYXR1cmVkQ2FyZHMnLCAnJylcbiAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgLnJlcGxhY2UoL1xcW3xcXF0vZywgJycpXG4gICAgICAgIC5yZXBsYWNlKC9gL2csICcnKVxuICAgICAgICAuc3BsaXQoJywnKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmUsbWF4LWxlblxuICAgIGZlYXR1cmVkQ2FyZHMgPSBmZWF0dXJlZENhcmRzLmNvbmNhdChmZWF0dXJlZENhcmRzLm1hcChpZCA9PiByb2xsaW5nSGFzaChpZCwgQ0FSRF9IQVNIX0xFTkdUSCkpKTtcbiAgICBsZXQgaGlkZUN0YUlkcyA9IGdldENvbmZpZygnaGlkZUN0YUlkcycsICcnKVxuICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAucmVwbGFjZSgvXFxbfFxcXS9nLCAnJylcbiAgICAgICAgLnJlcGxhY2UoL2AvZywgJycpXG4gICAgICAgIC5zcGxpdCgnLCcpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgIGhpZGVDdGFJZHMgPSBoaWRlQ3RhSWRzLmNvbmNhdChoaWRlQ3RhSWRzLm1hcChpZCA9PiByb2xsaW5nSGFzaChpZCwgQ0FSRF9IQVNIX0xFTkdUSCkpKTtcbiAgICBsZXQgaGlkZUN0YVRhZ3MgPSBnZXRDb25maWcoJ2hpZGVDdGFUYWdzJywgJycpXG4gICAgICAgIC50b1N0cmluZygpXG4gICAgICAgIC5yZXBsYWNlKC9cXFt8XFxdL2csICcnKVxuICAgICAgICAucmVwbGFjZSgvYC9nLCAnJylcbiAgICAgICAgLnNwbGl0KCcsJyk7XG4gICAgY29uc3QgbGVmdFBhbmVsU2VhcmNoUGxhY2Vob2xkZXIgPSBnZXRDb25maWcoJ3NlYXJjaCcsICdpMThuLmxlZnRGaWx0ZXJQYW5lbC5zZWFyY2hQbGFjZWhvbGRlclRleHQnKTtcbiAgICBjb25zdCB0b3BQYW5lbFNlYXJjaFBsYWNlaG9sZGVyID0gZ2V0Q29uZmlnKCdzZWFyY2gnLCAnaTE4bi50b3BGaWx0ZXJQYW5lbC5zZWFyY2hQbGFjZWhvbGRlclRleHQnKTtcbiAgICBjb25zdCBzZWFyY2hQbGFjZWhvbGRlclRleHQgPSBnZXRDb25maWcoJ3NlYXJjaCcsICdpMThuLmZpbHRlckluZm8uc2VhcmNoUGxhY2Vob2xkZXJUZXh0Jyk7XG4gICAgY29uc3Qgbm9SZXN1bHRzVGl0bGUgPSBnZXRDb25maWcoJ3NlYXJjaCcsICdpMThuLm5vUmVzdWx0c1RpdGxlJyk7XG4gICAgY29uc3Qgbm9SZXN1bHRzRGVzY3JpcHRpb24gPSBnZXRDb25maWcoJ3NlYXJjaCcsICdpMThuLm5vUmVzdWx0c0Rlc2NyaXB0aW9uJyk7XG4gICAgY29uc3QgYXBpRmFpbHVyZVRpdGxlID0gZ2V0Q29uZmlnKCdjb2xsZWN0aW9uJywgJ2kxOG4ub25FcnJvclRpdGxlJyk7XG4gICAgY29uc3QgYXBpRmFpbHVyZURlc2NyaXB0aW9uID0gZ2V0Q29uZmlnKCdjb2xsZWN0aW9uJywgJ2kxOG4ub25FcnJvckRlc2NyaXB0aW9uJyk7XG4gICAgY29uc3QgaXNMYXp5ID0gZ2V0Q29uZmlnKCdjb2xsZWN0aW9uJywgJ2xhenlsb2FkJyk7XG4gICAgY29uc3QgdHJhY2tJbXByZXNzaW9ucyA9IGdldENvbmZpZygnYW5hbHl0aWNzJywgJ3RyYWNrSW1wcmVzc2lvbnMnKTtcbiAgICBjb25zdCBjb2xsZWN0aW9uSWRlbnRpZmllciA9IGdldENvbmZpZygnYW5hbHl0aWNzJywgJ2NvbGxlY3Rpb25JZGVudGlmaWVyJyk7XG4gICAgY29uc3QgdGFyZ2V0RW5hYmxlZCA9IGdldENvbmZpZygndGFyZ2V0JywgJ2VuYWJsZWQnKTtcbiAgICBjb25zdCB1c2VMYXN0Vmlld2VkU2Vzc2lvbiA9IGdldENvbmZpZygndGFyZ2V0JywgJ2xhc3RWaWV3ZWRTZXNzaW9uJyk7XG4gICAgY29uc3QgYXV0aG9yZWRNb2RlID0gZ2V0Q29uZmlnKCdjb2xsZWN0aW9uJywgJ21vZGUnKTtcbiAgICBjb25zdCBhdXRob3JlZExheW91dENvbnRhaW5lciA9IGdldENvbmZpZygnY29sbGVjdGlvbicsICdsYXlvdXQuY29udGFpbmVyJyk7XG4gICAgY29uc3Qgc2hvd0VtcHR5RmlsdGVycyA9IGdldENvbmZpZygnZmlsdGVyUGFuZWwnLCAnc2hvd0VtcHR5RmlsdGVycycpO1xuICAgIGNvbnN0IGV2ZW50RmlsdGVyID0gZ2V0Q29uZmlnKCdmaWx0ZXJQYW5lbCcsICdldmVudEZpbHRlcicpO1xuICAgIGNvbnN0IHNlYXJjaEVuYWJsZWQgPSBnZXRDb25maWcoJ3NlYXJjaCcsICdlbmFibGVkJyk7XG4gICAgY29uc3Qgc29ydEVuYWJsZWQgPSBnZXRDb25maWcoJ3NvcnQnLCAnZW5hYmxlZCcpO1xuICAgIGNvbnN0IGNhcmRTdHlsZSA9IGdldENvbmZpZygnY29sbGVjdGlvbicsICdjYXJkU3R5bGUnKTtcbiAgICBjb25zdCB0aXRsZSA9IGdldENvbmZpZygnY29sbGVjdGlvbicsICdpMThuLnRpdGxlJyk7XG4gICAgY29uc3QgaGVhZGVycyA9IGdldENvbmZpZygnaGVhZGVycycsICcnKTtcbiAgICBjb25zdCBwYXJ0aWFsTG9hZFdpdGhCYWNrZ3JvdW5kRmV0Y2ggPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAncGFydGlhbExvYWRXaXRoQmFja2dyb3VuZEZldGNoLmVuYWJsZWQnKTtcbiAgICBjb25zdCBwYXJ0aWFsTG9hZENvdW50ID0gZ2V0Q29uZmlnKCdjb2xsZWN0aW9uJywgJ3BhcnRpYWxMb2FkV2l0aEJhY2tncm91bmRGZXRjaC5wYXJ0aWFsTG9hZENvdW50Jyk7XG4gICAgLyoqXG4gICAgICoqKiogQ29uc3RhbnRzICoqKipcbiAgICAgKi9cbiAgICBjb25zdCBERVNLVE9QX1NDUkVFTl9TSVpFID0gd2luZG93LmlubmVyV2lkdGggPj0gREVTS1RPUF9NSU5fV0lEVEg7XG4gICAgY29uc3QgaXNYb3JGaWx0ZXIgPSBmaWx0ZXJMb2dpYy50b0xvd2VyQ2FzZSgpLnRyaW0oKSA9PT0gRklMVEVSX1RZUEVTLlhPUjtcbiAgICBjb25zdCBpc0Nhcm91c2VsQ29udGFpbmVyID0gYXV0aG9yZWRMYXlvdXRDb250YWluZXIgPT09IExBWU9VVF9DT05UQUlORVIuQ0FST1VTRUw7XG4gICAgY29uc3QgaXNTdGFuZGFyZENvbnRhaW5lciA9IGF1dGhvcmVkTGF5b3V0Q29udGFpbmVyICE9PSBMQVlPVVRfQ09OVEFJTkVSLkNBUk9VU0VMO1xuICAgIGNvbnN0IGlzQ2F0ZWdvcmllc0NvbnRhaW5lciA9IGF1dGhvcmVkTGF5b3V0Q29udGFpbmVyID09PSBMQVlPVVRfQ09OVEFJTkVSLkNBVEVHT1JJRVM7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICBjb25zdCBjYXRlZ29yaWVzID0gZ2V0Q29uZmlnKCdmaWx0ZXJQYW5lbCcsICdjYXRlZ29yaWVzJyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lLCBtYXgtbGVuXG4gICAgY29uc3QgYXV0aG9yZWRDYXRlZ29yaWVzID0gaXNDYXRlZ29yaWVzQ29udGFpbmVyID8gZ2V0QXV0aG9yZWRDYXRlZ29yaWVzKGF1dGhvcmVkRmlsdGVycywgY2F0ZWdvcmllcykgOiBbXTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICBjb25zdCBzYW5pdGl6ZWRFdmVudEZpbHRlciA9IGV2ZW50RmlsdGVyID8gc2FuaXRpemVFdmVudEZpbHRlcihldmVudEZpbHRlcikgOiBbXTtcblxuICAgIC8qKlxuICAgICAqKioqIEhvb2tzICoqKipcbiAgICAgKi9cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7QXJyYXl9IHRpbWVkQ29sbGVjdGlvbiAtIHJlc3VsdCBvZiBUaW1lZCBFdmVudCBTb3J0XG4gICAgICogQGRlc2NyaXB0aW9uIOKAlCBBcyBhbiBhbHRlcm5hdGl2ZS9pdGVyYXRpb24gb24gZmlsdGVyZWQgY2FyZHMgZm9yIHRpbWVkXG4gICAgICogY29sbGVjdGlvbnNcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IHNldFRpbWVkQ29sbGVjdGlvblxuICAgICAqIEBkZXNjcmlwdGlvbiAtIFNldHMgdGltZWRDb2xsZWN0aW9uIGFmdGVyIHNldFRpbWVvdXQgdHJpZ2dlcnNcbiAgICAgKlxuICAgICAqIEB0eXBlIHtbQXJyYXksIEZ1bmN0aW9uXX0gdGltZWRDb2xsZWN0aW9uXG4gICAgICovXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbiAgICBjb25zdCBbdGltZWRDb2xsZWN0aW9uLCBzZXRUaW1lZENvbGxlY3Rpb25dID0gdXNlU3RhdGUoW10pO1xuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtOdW1iZXJ9IHRyYW5zaXRpb24gLSBNUyB0byBuZXh0IHRyYW5zaXRpb25cbiAgICAgKiBAZGVzY3JpcHRpb24g4oCUICBzZXQgYnkgZXZlbnRTb3J0LCBmcm9tIGNhcmRGaWx0ZXJldC5uZXh0VHJhbnNpdGlvbk1zXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBzZXRUcmFuc2l0aW9uXG4gICAgICogQGRlc2NyaXB0aW9uIC0gbmV4dCBUcmFuc2l0aW9uIHRyaWdnZXJcbiAgICAgKlxuICAgICAqIEB0eXBlIHtbTnVtYmVyLCBGdW5jdGlvbl19IHRyYW5zaXRpb25cbiAgICAgKi9cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuICAgIGNvbnN0IFt0cmFuc2l0aW9uLCBzZXRUcmFuc2l0aW9uXSA9IHVzZVN0YXRlKDApO1xuXG4gICAgY29uc3QgW2NhcmRDb3VudCwgc2V0Q2FyZENvdW50XSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtpc1BhcnRpYWxMb2FkLCBzZXRJc1BhcnRpYWxMb2FkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBoYXNoZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuXG4gICAgY29uc3QgWywgdXBkYXRlU3RhdGVdID0gUmVhY3QudXNlU3RhdGUoKTtcbiAgICBjb25zdCBzY3JvbGxFbGVtZW50UmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IG5leHRUcmFuc2l0aW9uID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4gdXBkYXRlU3RhdGUoe30pLCBbXSk7XG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge09iamVjdH0gdXJsU3RhdGVcbiAgICAgKiBAZGVzY3JpcHRpb24g4oCUIG9iamVjdCB3aXRoIHVybCBxdWVyeSB2YWx1ZXNcbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gc2V0VXJsU3RhdGVcbiAgICAgKiBAZGVzY3JpcHRpb24gLSBzZXQgdXJsIHF1ZXJ5IHZhbHVlIGJ5IGtleVxuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBjbGVhclVybFN0YXRlXG4gICAgICogQGRlc2NyaXB0aW9uIC0gY2xlYXIgd2hvbGUgdXJsIHF1ZXJ5IHN0YXRlXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W09iamVjdCwgRnVuY3Rpb24sIEZ1bmN0aW9uXX0gT3BlbkRyb3Bkb3duXG4gICAgICovXG4gICAgY29uc3QgW3VybFN0YXRlLCBzZXRVcmxTdGF0ZSwgY2xlYXJVcmxTdGF0ZV0gPSB1c2VVUkxTdGF0ZSgpO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge051bWJlcn0gT3BlbkRyb3Bkb3duU3RhdGUgLSBJZCBvZiBhIHNlbGVjdGVkIGRyb3Bkb3duXG4gICAgICogQGRlc2NyaXB0aW9uIOKAlCBQYXNzZWQgaW4gQ29udGV4dCBQcm92aWRlciBTbyBBbGwgTmVzdGVkIENvbXBvbmVudHMgY2FuIGJlIGluIHN5bmNcbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gT3BlbkRyb3Bkb3duU3RhdGVTZXR0ZXJcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKlxuICAgICAqIEB0eXBlIHtbTnVtYmVyLCBGdW5jdGlvbl19IE9wZW5Ecm9wZG93blxuICAgICAqL1xuICAgIGNvbnN0IFtvcGVuRHJvcGRvd24sIHNldE9wZW5Ecm9wZG93bl0gPSB1c2VTdGF0ZShudWxsKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtBcnJheX0gQm9va21hcmtlZENhcmRJZHNTdGF0ZSDigJQgSW5pdGlhaWx6ZWQgRnJvbSBMb2NhbCBTdG9yYWdlXG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IEJvb2ttYXJrZWRDYXJkSWRzU2V0dGVyIOKAlCBTZXRzIGludGVybmFsIHN0YXRlIG9mIHNhdmVkIGJvb2ttYXJrc1xuICAgICAqXG4gICAgICogQHR5cGUge1tBcnJheSwgRnVuY3Rpb25dfSBCb29rbWFya2VkQ2FyZElkc1xuICAgICAqL1xuICAgIGNvbnN0IFtib29rbWFya2VkQ2FyZElkcywgc2V0Qm9va21hcmtlZENhcmRJZHNdID0gdXNlU3RhdGUocmVhZEJvb2ttYXJrc0Zyb21Mb2NhbFN0b3JhZ2UoKSk7XG4gICAgY29uc3QgW2luY2x1c2lvbklkc10gPSB1c2VTdGF0ZShyZWFkSW5jbHVzaW9uc0Zyb21Mb2NhbFN0b3JhZ2UoKSk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7TnVtYmVyfSBDdXJyZW50UGFnZVN0YXRlIOKAlCBJbml0aWFsaXplZCB0byB0aGUgZmlyc3QgcGFnZVxuICAgICAqIEBkZXNjcmlwdGlvbiBTYW1lIHBhZ2Ugc3RhdGUgZm9yICdMb2FkIE1vcmUnIG9yICdQYWdpbmF0b3InXG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IEN1cnJlbnRQYWdlU3RhdGVTZXR0ZXIg4oCUIFNldHMgcGFnZSBhcyB1c2VyIG5hdmlnYXRlcyB0aHJvdWdoIHBhZ2VzXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W051bWJlciwgRnVuY3Rpb25dfSBDdXJyZW50UGFnZVxuICAgICAqL1xuICAgIGNvbnN0IFtjdXJyZW50UGFnZSwgc2V0Q3VycmVudFBhZ2VdID0gdXNlU3RhdGUoK3VybFN0YXRlLnBhZ2UgfHwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7QXJyYXl9IEZpbHRlcnNTdGF0ZSDigJQgQ29udGFpbnMgRmlsdGVycyBGb3IgRmlsdGVyIFBhbmVsXG4gICAgICogQGRlc2NyaXB0aW9uIFNhbWUgRmlsdGVyIHN0YXRlIGZvciBMZWZ0IG9yIFRvcFxuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBGaWx0ZXJzU3RhdGVTZXR0ZXIg4oCUIFNldHMgQXV0aG9yZWQgRmlsdGVycyBhcyBTdGF0ZVxuICAgICAqXG4gICAgICogQHR5cGUge1tBcnJheSwgRnVuY3Rpb25dfSBGaWx0ZXJzXG4gICAgICovXG4gICAgY29uc3QgW2ZpbHRlcnMsIHNldEZpbHRlcnNdID0gdXNlU3RhdGUoW10pO1xuICAgIC8vIHdpbmRvdy5maWx0ZXJzID0gZmlsdGVycztcbiAgICBjb25zdCBbY3VyckNhdGVnb3JpZXMsIHNldENhdGVnb3JpZXNdID0gdXNlU3RhdGUoW10pO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge1N0cmluZ30gU2VhcmNoUXVlcnlTdGF0ZSDigJQgV2lsbCBiZSB1c2VkIHRvIHNlYXJjaCB0aHJvdWdoIGNhcmRzXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBTZWFyY2hRdWVyeVN0YXRlU2V0dGVyIOKAlCBTZXRzIHVzZXIgc2VhcmNoIHF1ZXJ5XG4gICAgICpcbiAgICAgKiBAdHlwZSB7W1N0cmluZywgRnVuY3Rpb25dfSBTZWFyY2hRdWVyeVxuICAgICAqL1xuICAgIGNvbnN0IFtzZWFyY2hRdWVyeSwgc2V0U2VhcmNoUXVlcnldID0gdXNlU3RhdGUoJycpO1xuICAgIGNvbnN0IFtzZWxlY3RlZENhdGVnb3J5LCBzZXRTZWxlY3RlZENhdGVnb3J5XSA9IHVzZVN0YXRlKCcnKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtTdHJpbmd9IFNvcnRPcGVuZWRTdGF0ZSDigJQgVG9nZ2xlcyBTb3J0IFBvcHVwIE9wZW5lZCBPciBDbG9zZWRcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IFNvcnRPcGVuZWRTdGF0ZVNldHRlciDigJQgU2V0cyBTb3J0IE9wdGlvblxuICAgICAqXG4gICAgICogQHR5cGUge1tCb29sZWFuLCBGdW5jdGlvbl19IFNvcnRPcGVuZWRcbiAgICAgKi9cbiAgICBjb25zdCBbc29ydE9wZW5lZCwgc2V0U29ydE9wZW5lZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7U3RyaW5nfSBTb3J0T3B0aW9uU3RhdGUg4oCUIENhbiBiZSBvbmUgb2YgYSByYW5nZSBvZiB0eXBlc1xuICAgICAqIEBkZXNjcmlwdGlvbiAnVGl0bGUgKEEtWiknLCAnVGl0bGUgKFotQSksIERhdGUgKE5ldyB0byBPbGQpLCBEYXRlIChPbGQgdG8gTmV3KSwgRmVhdHVyZWRcbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gU29ydE9wdGlvblN0YXRlU2V0dGVyIOKAlCBTZXRzIFNvcnQgT3B0aW9uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W1N0cmluZywgRnVuY3Rpb25dfSBTb3J0T3B0aW9uXG4gICAgICovXG4gICAgY29uc3QgW3NvcnRPcHRpb24sIHNldFNvcnRPcHRpb25dID0gdXNlU3RhdGUoZGVmYXVsdFNvcnRPcHRpb24pO1xuXG4gICAgaWYgKHNvcnRPcHRpb24uc29ydCA9PT0gU09SVF9UWVBFUy5SQU5ET00pIHtcbiAgICAgICAgdG90YWxDYXJkTGltaXQgPSBzYW1wbGVTaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtCb29sZWFufSBXaW5kb3dXaWR0aFN0YXRlIOKAlCBDYW4gZWl0aGVyIGJlIHRydWUgb3IgZmFsc2VcbiAgICAgKiBAZGVzY3JpcHRpb24gVXNlZCB0byB0b2dnbGUgYmV0d2VlbiBtb2JpbGUgYW5kIGRlc2t0b3AgbGF5b3V0c1xuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBXaW5kb3dXaWR0aFN0YXRlU2V0dGVyIOKAlCBVcGRhdGVzIHdpbmRvdyB3aWR0aFxuICAgICAqXG4gICAgICogQHR5cGUge1tOdW1iZXJdfSBXaW5kb3dXaWR0aFxuICAgICAqL1xuICAgIGNvbnN0IHsgd2lkdGg6IHdpbmRvd1dpZHRoIH0gPSB1c2VXaW5kb3dEaW1lbnNpb25zKCk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7Qm9vbGVhbn0gU2hvd01vYmlsZUZpbHRlcnNTdGF0ZSDigJQgQ2FuIGVpdGhlciBiZSB0cnVlIG9yIGZhbHNlXG4gICAgICogQGRlc2NyaXB0aW9uIFdoZW4gdHJ1ZSBtb2JpbGUgZmlsdGVycyB3aWxsIGFwcGVhciBvbiB0aGUgcGFnZVxuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBTaG93TW9iaWxlRmlsdGVyc1N0YXRlU2V0dGVyXG4gICAgICogQGRlc2NyaXB0aW9uIFRvZ2dsZXMgbW9iaWxlIGZpbHRlciBoZWFkZXIvZm9vdGVyIHRvIHNob3cgb3IgaGlkZVxuICAgICAqXG4gICAgICogQHR5cGUge1tCb29sZWFuLCBGdW5jdGlvbl19IFNob3dNb2JpbGVGaWx0ZXJzXG4gICAgICovXG4gICAgY29uc3QgW3Nob3dNb2JpbGVGaWx0ZXJzLCBzZXRTaG93TW9iaWxlRmlsdGVyc10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7Qm9vbGVhbn0gU2hvd0Jvb2ttYXJrU3RhdGUg4oCUIENhbiBlaXRoZXIgYmUgdHJ1ZSBvciBmYWxzZVxuICAgICAqIEBkZXNjcmlwdGlvbiBGb3IgVG9wIEZpbHRlciBQYW5lbCwgdGhlcmUgaXMgYSBsaW1pdCB0byBob3cgbWFueSBmaWx0ZXIgZ3JvdXBzIGNhbiBzaG93XG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IFNob3dCb29rbWFya1N0YXRlU2V0dGVyIOKAlCBTZXRzIGxpbWl0IG9uIGZpbHRlciBxdWFudGl0eVxuICAgICAqIEBkZXNjcmlwdGlvbiBXaGVuIG92ZXIgYWxsb3dlZCBGaWx0ZXIgR3JvdXAgUXVhbnRpdHkgLSBBIFwiTW9yZSArXCIgYnV0dG9uIGFwcGVhcnNcbiAgICAgKlxuICAgICAqIEB0eXBlIHtbQm9vbGVhbiwgRnVuY3Rpb25dfSBTaG93Qm9va21hcmtzXG4gICAgICovXG4gICAgY29uc3QgW3Nob3dCb29rbWFya3MsIHNldFNob3dCb29rbWFya3NdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge0Jvb2xlYW59IExpbWl0RmlsdGVyUXVhbnRpdHlTdGF0ZSDigJQgQ2FuIGVpdGhlciBiZSB0cnVlIG9yIGZhbHNlXG4gICAgICogQGRlc2NyaXB0aW9uIEZvciBUb3AgRmlsdGVyIFBhbmVsLCB0aGVyZSBpcyBhIGxpbWl0IHRvIGhvdyBtYW55IGZpbHRlciBncm91cHMgY2FuIHNob3dcbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gTGltaXRGaWx0ZXJRdWFudGl0eVN0YXRlU2V0dGVyIOKAlCBTZXRzIGxpbWl0IG9uIGZpbHRlciBxdWFudGl0eVxuICAgICAqIEBkZXNjcmlwdGlvbiBXaGVuIG92ZXIgYWxsb3dlZCBGaWx0ZXIgR3JvdXAgUXVhbnRpdHkgLSBBIFwiTW9yZSArXCIgYnV0dG9uIGFwcGVhcnNcbiAgICAgKlxuICAgICAqIEB0eXBlIHtbQm9vbGVhbiwgRnVuY3Rpb25dfSBMaW1pdEZpbHRlclF1YW50aXR5XG4gICAgICovXG4gICAgY29uc3QgW3Nob3dMaW1pdGVkRmlsdGVyc1F0eSwgc2V0U2hvd0xpbWl0ZWRGaWx0ZXJzUXR5XSA9IHVzZVN0YXRlKGZpbHRlclBhbmVsVHlwZSA9PT0gJ3RvcCcpO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge0FycmF5fSBDYXJkU3RhdGVcbiAgICAgKiBAZGVzY3JpcHRpb24gc2V0cyBjYXJkcyByZXRyaWV2ZWQgZWl0aGVyIHNlcnZlciBzaWRlIHJlbmRlciBvciBBUEkgY2FsbFxuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBDYXJkU3RhdGVTZXR0ZXJcbiAgICAgKiBAZGVzY3JpcHRpb24gRS5nLiBSZW5kZXIgRmVhdHVyZWQgQ2FyZHMgU2VydmVyIHNpZGUsIFdoaWxlIGNvbGxlY3Rpb24gY2FyZHMgZnJvbSBBUEkgY2FsbFxuICAgICAqXG4gICAgICogQHR5cGUge1tBcnJheSwgRnVuY3Rpb25dfSBDYXJkc1xuICAgICAqL1xuICAgIGNvbnN0IFtjYXJkcywgc2V0Q2FyZHNdID0gdXNlU3RhdGUoW10pO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge0Jvb2xlYW59IExvYWRpbmdTdGF0ZSDigJQgQ2FuIGVpdGhlciBiZSB0cnVlIG9yIGZhbHNlXG4gICAgICogQGRlc2NyaXB0aW9uIFdoZW4gdHJ1ZSBhIGxvYWRpbmcgc3Bpbm5lciB3aWxsIGFwcGVhciBvbiB0aGUgcGFnZVxuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBMb2FkaW5nU3RhdGVTZXR0ZXIg4oCUIFNldHMgbG9hZGVyIHRydWUgb3IgZmFsc2VcbiAgICAgKiBAZGVzY3JpcHRpb24gVHJ1ZSB3aGlsZSB3YWl0aW5nIGZvciBBUEkgcmVzcG9uc2UuIEZhbHNlIG9uIGNhcmRzIHJldHJpZXZlZCBvciBhcGkgZmFpbHVyZVxuICAgICAqXG4gICAgICogQHR5cGUge1tCb29sZWFuLCBGdW5jdGlvbl19IExvYWRpbmdcbiAgICAgKi9cbiAgICBjb25zdCBbaXNMb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtCb29sZWFufSBBcGlGYWlsdXJlU3RhdGUg4oCUIENhbiBlaXRoZXIgYmUgdHJ1ZSBvciBmYWxzZVxuICAgICAqIEBkZXNjcmlwdGlvbiBXaGVuIHRydWUgYW4gQVBJIGVycm9yIGhhcyBvY2N1cmVkXG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IEFwaUZhaWx1cmVTdGF0ZVNldHRlciDigJQgU2V0cyBBUEkgZmFpbHVyZSBmbGFnIHRydWUgb3IgZmFsc2VcbiAgICAgKiBAZGVzY3JpcHRpb24gVHJ1ZSB3aGVuIHJldHJpZXZlZCBvciBhcGkgZmFpbHVyZS4gRmFsc2Ugb3RoZXJ3aXNlXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W0Jvb2xlYW4sIEZ1bmN0aW9uXX0gQXBpRmFpbHVyZVxuICAgICAqL1xuICAgIGNvbnN0IFtpc0FwaUZhaWx1cmUsIHNldEFwaUZhaWx1cmVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtyYW5kb21Tb3J0SWQsIHNldFJhbmRvbVNvcnRJZF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbaXNGaXJzdExvYWQsIHNldElzRmlyc3RMb2FkXSA9IHVzZVN0YXRlKHRydWUpO1xuICAgIGNvbnN0IFt2aXNpYmxlU3RhbXAsIHNldFZpc2libGVTdGFtcF0gPSB1c2VTdGF0ZSgpO1xuICAgIGNvbnN0IFtoYXNGZXRjaGVkLCBzZXRIYXNGZXRjaGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBET00gcmVmZXJlbmNlIHRvIGZpcnN0IGZpbHRlciBpdGVtXG4gICAgICogQHJldHVybnMge09iamVjdH0gLSBmaWx0ZXIgaXRlbSBET00gcmVmZXJlbmNlXG4gICAgICovXG4gICAgY29uc3QgZmlsdGVySXRlbVJlZiA9IGNyZWF0ZVJlZigpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIERPTSByZWZlcmVuY2UgdG8gZmlsdGVyIGluZm8gYnV0dG9uXG4gICAgICogQHJldHVybnMge09iamVjdH0gLSBmaWx0ZXIgaW5mbyBET00gcmVmZXJlbmNlXG4gICAgICovXG4gICAgY29uc3QgZmlsdGVySW5mb1JlZiA9IGNyZWF0ZVJlZigpO1xuXG4gICAgLyoqXG4gICAgICoqKiogSGVscGVyIE1ldGhvZHMgKioqKlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gZ2V0UGFyZW50Q2hpbGQoaWQpIHtcbiAgICAgICAgbGV0IGkgPSBpZC5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpZFtpXSAhPT0gJy8nICYmIGkgPj0gMCkge1xuICAgICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbaWQuc3Vic3RyaW5nKDAsIGkpLCBpZC5zdWJzdHJpbmcoaSArIDEpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByb2xsaW5nSGFzaChzLCBsKSB7XG4gICAgICAgIGlmICghcykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IEJBU0UgPSA1MztcbiAgICAgICAgY29uc3QgTU9EID0gMTAgKiogbCArIDc7XG4gICAgICAgIGxldCBoYXNoID0gMDtcbiAgICAgICAgbGV0IGJhc2VQb3dlciA9IDE7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaGFzaCA9IChoYXNoICsgKHMuY2hhckNvZGVBdChpKSAtIDk3ICsgMSkgKiBiYXNlUG93ZXIpICUgTU9EO1xuICAgICAgICAgICAgYmFzZVBvd2VyID0gKGJhc2VQb3dlciAqIEJBU0UpICUgTU9EO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoKGhhc2ggKyBNT0QpICUgTU9EKS50b1N0cmluZygzNik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgZmlsdGVycywgaXQgd2lsbCB1bnNlbGVjdCBhbGwgb2YgdGhlbVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGZpbHRlckdyb3VwcyAtIGEgZ3JvdXAgb2YgZmlsdGVyc1xuICAgICAqIEByZXR1cm5zIHtBcnJheX0gZml0bGVyR3JvdXBzIC0gdGhlIHVwZGF0ZWQgZ3JvdXAgb2YgZmlsdGVyc1xuICAgICAqL1xuICAgIGNvbnN0IGdldEFsbEZpbHRlcnNDbGVhcmVkU3RhdGUgPSBmaWx0ZXJHcm91cHMgPT4gZmlsdGVyR3JvdXBzLm1hcChmaWx0ZXJHcm91cCA9PiAoe1xuICAgICAgICAuLi5maWx0ZXJHcm91cCxcbiAgICAgICAgaXRlbXM6IGZpbHRlckdyb3VwLml0ZW1zLm1hcChmaWx0ZXJJdGVtID0+ICh7XG4gICAgICAgICAgICAuLi5maWx0ZXJJdGVtLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICB9KSksXG4gICAgfSkpO1xuXG4gICAgLyoqXG4gICAgICogRm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgZmlsdGVycywgaXQgd2lsbCB1bnNlbGVjdCB0aGUgb25lIHdpdGggYSBnaXZlbiBpZFxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBpZCAtIHRoZSBpZCBvZiBhbiBpbmRpdmlkdWFsIGZpbHRlciBpdGVtXG4gICAgICogQHBhcmFtIHtBcnJheX0gZmlsdGVyR3JvdXBzIC0gYSBncm91cCBvZiBmaWx0ZXJzXG4gICAgICogQHJldHVybnMge0FycmF5fSBmaXRsZXJHcm91cHMgLSB0aGUgdXBkYXRlZCBncm91cCBvZiBmaWx0ZXJzXG4gICAgICovXG4gICAgY29uc3QgZ2V0RmlsdGVySXRlbUNsZWFyZWRTdGF0ZSA9IChpZCwgZmlsdGVyR3JvdXBzKSA9PiBmaWx0ZXJHcm91cHMubWFwKChmaWx0ZXJHcm91cCkgPT4ge1xuICAgICAgICBpZiAoZmlsdGVyR3JvdXAuaWQgIT09IGlkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyR3JvdXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmZpbHRlckdyb3VwLFxuICAgICAgICAgICAgaXRlbXM6IGZpbHRlckdyb3VwLml0ZW1zLm1hcChmaWx0ZXJJdGVtID0+ICh7XG4gICAgICAgICAgICAgICAgLi4uZmlsdGVySXRlbSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBXaWxsIHVuY2hlY2sgYSBmaWx0ZXIgd2l0aCBhIGdpdmVuIGlkXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGlkIC0gdGhlIGlkIG9mIGFuIGluZGl2aWR1YWwgZmlsdGVyIGl0ZW1cbiAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHN0YXRlXG4gICAgICovXG4gICAgY29uc3QgY2xlYXJGaWx0ZXJJdGVtID0gKGlkLCBncm91cCA9ICcnKSA9PiB7XG4gICAgICAgIHNldEZpbHRlcnMoKHByZXZGaWx0ZXJzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJDbGVhcmVkU3RhdGUgPSBnZXRGaWx0ZXJJdGVtQ2xlYXJlZFN0YXRlKGlkLCBwcmV2RmlsdGVycyk7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyQ2xlYXJlZFN0YXRlO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgICAgICBjbGVhclVybFN0YXRlKCk7XG4gICAgICAgIC8vIGFjdHVhbGx5IGNsZWFyIHRoZSB1cmwgc3RhdGVcbiAgICAgICAgdXJsUGFyYW1zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoRmlsdGVyID0ga2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnY2hfJywgJycpLnJlcGxhY2UoLyAvZywgJy0nKTtcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihmaWx0ZXJHcm91cFByZWZpeCkgIT09IDBcbiAgICAgICAgICAgICAgICAmJiAhaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjaEZpbHRlcilcbiAgICAgICAgICAgICAgICB8fCAhZ3JvdXAudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8gL2csICctJykuaW5jbHVkZXMoY2hGaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgc2V0VXJsU3RhdGUoa2V5LCB2YWx1ZS5yZXBsYWNlKC8lMjAvZywgJyAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBXaWxsIHVuY2hlY2sgYWxsIGZpbHRlciBpdGVtc1xuICAgICAqIEByZXR1cm5zIHtWb2lkfSAtIGFuIHVwZGF0ZWQgc3RhdGVcbiAgICAgKi9cbiAgICBjb25zdCBjbGVhckFsbEZpbHRlcnMgPSAoKSA9PiB7XG4gICAgICAgIHNldEZpbHRlcnMoKHByZXZGaWx0ZXJzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhbGxGaWx0ZXJzQ2xlYXJlZFN0YXRlID0gZ2V0QWxsRmlsdGVyc0NsZWFyZWRTdGF0ZShwcmV2RmlsdGVycyk7XG4gICAgICAgICAgICByZXR1cm4gYWxsRmlsdGVyc0NsZWFyZWRTdGF0ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblxuICAgICAgICBjbGVhclVybFN0YXRlKCk7XG4gICAgICAgIHVybFBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoZmlsdGVyR3JvdXBQcmVmaXgpICE9PSAwKSBzZXRVcmxTdGF0ZShrZXksIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyBmaWx0ZXJzLCBhbmQgc2VhcmNoIHRvIGVtcHR5LiBIaWRlcyBib29rbWFyayBmaWx0ZXJcbiAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHN0YXRlXG4gICAgICovXG4gICAgY29uc3QgcmVzZXRGaWx0ZXJzU2VhcmNoQW5kQm9va21hcmtzID0gKCkgPT4ge1xuICAgICAgICBjbGVhckFsbEZpbHRlcnMoKTtcbiAgICAgICAgc2V0U2VhcmNoUXVlcnkoJycpO1xuICAgICAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgICAgICBjbGVhclVybFN0YXRlKCk7XG4gICAgICAgIHVybFBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoZmlsdGVyR3JvdXBQcmVmaXgpID09PSAtMVxuICAgICAgICAgICAgICAgICYmIGtleS5pbmRleE9mKHNlYXJjaFByZWZpeCkgPT09IC0xKSBzZXRVcmxTdGF0ZShrZXksIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNldFNob3dCb29rbWFya3MoZmFsc2UpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKioqKiBFVkVOVCBIQU5ETEVSUyAqKioqXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBPbiBMb2FkIE1vcmUgQnV0dG9uIENsaWNrLCBJbmNyZW1lbnQgUGFnZSBDdW9udGVyIEJ5IDFcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q2xpY2tFdmVudH0gZVxuICAgICAqIEBsaXN0ZW5zIENsaWNrRXZlbnRcbiAgICAgKi9cbiAgICBjb25zdCBvbkxvYWRNb3JlQ2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIHNldEN1cnJlbnRQYWdlKHByZXZTdGF0ZSA9PiBwcmV2U3RhdGUgKyAxKTtcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHdpbmRvdy5wYWdlWU9mZnNldCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRha2VzIHNvcnQgdXNlciBzZWxlY3RzIGFuZCBzZXRzIGl0IHNvIGNhcmRzIGFyZSBzb3J0ZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q2xpY2tFdmVudH0gZSAtIFRoZSBvYnNlcnZhYmxlIGV2ZW50LlxuICAgICAqIEBsaXN0ZW5zIENsaWNrRXZlbnRcbiAgICAgKi9cbiAgICBjb25zdCBoYW5kbGVTb3J0Q2hhbmdlID0gKG9wdGlvbikgPT4ge1xuICAgICAgICBzZXRTb3J0T3B0aW9uKG9wdGlvbik7XG4gICAgICAgIHNldFNvcnRPcGVuZWQoZmFsc2UpO1xuICAgICAgICBzZXRJc0ZpcnN0TG9hZChmYWxzZSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgd2hlbmV2ZXIgdGhlIHNlYXJjaCBib3ggaXMgY2xpY2tlZCBvciBpbnB1dCBmaWVsZFxuICAgICAqIGNoYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q2xpY2tFdmVudCwgQ2hhbmdlRXZlbnR9IGVcbiAgICAgKiBAbGlzdGVucyBDbGlja0V2ZW50LCBDaGFuZ2VFdmVudFxuICAgICAqL1xuICAgIGNvbnN0IGhhbmRsZVNlYXJjaElucHV0Q2hhbmdlID0gKHZhbCkgPT4ge1xuICAgICAgICBzZXRTZWFyY2hRdWVyeSh2YWwpO1xuICAgICAgICBzZXRDdXJyZW50UGFnZSgxKTtcbiAgICAgICAgc2V0VXJsU3RhdGUoc2VhcmNoUHJlZml4LCB2YWwpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIHdoZW4gYSBncm91cCBvZiBmaWx0ZXJzIGlzIGNsaWNrZWQuIEJlaGF2aW9yIHNob3VsZCBiZVxuICAgICAqIHRvIHRvZ2dsZSBncm91cCBvcGVuIG9yIGNsb3NlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHtDbGlja0V2ZW50fSBlIC0gVGhlIG9ic2VydmFibGUgZXZlbnQuXG4gICAgICogQGxpc3RlbnMgQ2xpY2tFdmVudFxuICAgICAqL1xuICAgIGNvbnN0IGhhbmRsZUZpbHRlckdyb3VwQ2xpY2sgPSAoZmlsdGVySWQpID0+IHtcbiAgICAgICAgc2V0RmlsdGVycygocHJldkZpbHRlcnMpID0+IHtcbiAgICAgICAgICAgIGxldCBvcGVuZWQ7XG4gICAgICAgICAgICByZXR1cm4gcHJldkZpbHRlcnMubWFwKChlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlbC5pZCA9PT0gZmlsdGVySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgb3BlbmVkID0gIWVsLm9wZW5lZDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgICAgICAgICAgICAgb3BlbmVkID0gZWwub3BlbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5lbCwgb3BlbmVkIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFdpbGwgZmluZCBhbmQgc2V0IG5lZWRlZCBmaWx0ZXIgdG8gdXJsXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsdGVySWQgLSBzZWxlY3RlZCBmaWx0ZXIgZ3JvdXAgaWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaXRlbUlkIC0gc2VsZWN0ZWQgZmlsdGVyIGl0ZW0gaWRcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzQ2hlY2tlZFxuICAgICAqIEByZXR1cm5zIHtWb2lkfSAtIGFuIHVwZGF0ZWQgdXJsXG4gICAgICovXG4gICAgY29uc3QgY2hhbmdlVXJsU3RhdGUgPSAoZmlsdGVySWQsIGl0ZW1JZCwgaXNDaGVja2VkKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZ3JvdXAsIGl0ZW1zIH0gPSBmaWx0ZXJzLmZpbmQoKHsgaWQgfSkgPT4gaWQgPT09IGZpbHRlcklkKTtcbiAgICAgICAgY29uc3QgeyBsYWJlbCB9ID0gaXRlbXMuZmluZCgoeyBpZCB9KSA9PiBpZCA9PT0gaXRlbUlkKTtcblxuICAgICAgICBsZXQgdXJsU3RhdGVWYWx1ZSA9IHVybFN0YXRlW2ZpbHRlckdyb3VwUHJlZml4ICsgZ3JvdXBdIHx8IFtdO1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgICovXG4gICAgICAgIGlmICh0eXBlb2YgdXJsU3RhdGVWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHVybFN0YXRlVmFsdWUgPSB1cmxTdGF0ZVZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzQ2hlY2tlZFxuICAgICAgICAgICAgPyBbLi4udXJsU3RhdGVWYWx1ZSwgbGFiZWxdXG4gICAgICAgICAgICA6IHVybFN0YXRlVmFsdWUuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gbGFiZWwpO1xuXG4gICAgICAgIHNldFVybFN0YXRlKGZpbHRlckdyb3VwUHJlZml4ICsgZ3JvdXAsIHZhbHVlKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyB3aGF0IGhhcHBlbnMgd2hlbiBhIHNwZWNpZmljIGZpbHRlciBpdGVtIChjaGVja2JveClcbiAgICAgKiBpcyBjbGlja2VkXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NoZWNrYm94Q2xpY2tFdmVudH0gZVxuICAgICAqIEBsaXN0ZW5zIENoZWNrYm94Q2xpY2tFdmVudFxuICAgICAqL1xuICAgIGNvbnN0IGhhbmRsZUNoZWNrQm94Q2hhbmdlID0gKGZpbHRlcklkLCBpdGVtSWQsIGlzQ2hlY2tlZCkgPT4ge1xuICAgICAgICBpZiAoaXNYb3JGaWx0ZXIgJiYgaXNDaGVja2VkKSB7XG4gICAgICAgICAgICBjbGVhckFsbEZpbHRlcnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldEZpbHRlcnMocHJldkZpbHRlcnMgPT4gcHJldkZpbHRlcnMubWFwKChmaWx0ZXIpID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIuaWQgIT09IGZpbHRlcklkKSByZXR1cm4gZmlsdGVyO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgICAgICAgICBpdGVtczogZmlsdGVyLml0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBpdGVtLmlkID09PSBpdGVtSWQgPyAhaXRlbS5zZWxlY3RlZCA6IGl0ZW0uc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkpO1xuICAgICAgICBzZXRDdXJyZW50UGFnZSgxKTtcbiAgICAgICAgY2hhbmdlVXJsU3RhdGUoZmlsdGVySWQsIGl0ZW1JZCwgaXNDaGVja2VkKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU2hvd3MvSGlkZXMgTW9iaWxlIEZpbHRlciBQYW5lbFxuICAgICAqXG4gICAgICogQHBhcmFtIHtDbGlja0V2ZW50fSBlXG4gICAgICogQGxpc3RlbnMgQ2xpY2tFdmVudFxuICAgICAqL1xuICAgIGNvbnN0IGhhbmRsZU1vYmlsZUZpbHRlcnNUb2dnbGUgPSAoKSA9PiBzZXRTaG93TW9iaWxlRmlsdGVycyhwcmV2ID0+ICFwcmV2KTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gYSBjYXJkJ3MgYm9va21hcmsgaWNvbiBpcyBjbGlja2VkLCBzYXZlIHRoZSBjYXJkXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NsaWNrRXZlbnR9IGVcbiAgICAgKiBAbGlzdGVucyBDbGlja0V2ZW50XG4gICAgICovXG4gICAgY29uc3QgaGFuZGxlQ2FyZEJvb2ttYXJraW5nID0gKGlkKSA9PiB7XG4gICAgICAgIC8vIFVwZGF0ZSBib29rbWFya2VkIElEc1xuICAgICAgICBjb25zdCBjYXJkSXNCb29rbWFya2VkID0gYm9va21hcmtlZENhcmRJZHMuZmluZChjYXJkID0+IGNhcmQgPT09IGlkKTtcblxuICAgICAgICBpZiAoY2FyZElzQm9va21hcmtlZCkge1xuICAgICAgICAgICAgc2V0Qm9va21hcmtlZENhcmRJZHMocHJldiA9PiBwcmV2LmZpbHRlcihlbCA9PiBlbCAhPT0gaWQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNldEJvb2ttYXJrZWRDYXJkSWRzKHByZXYgPT4gWy4uLnByZXYsIGlkXSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogV2lsbCBzaG93ICBvciBoaWRlIGFsbCBzYXZlZCBib29rbWFya3Mgd2hlbiBjbGlja2VkXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NsaWNrRXZlbnR9IGVcbiAgICAgKiBAbGlzdGVucyBDbGlja0V2ZW50XG4gICAgICovXG4gICAgY29uc3QgaGFuZGxlU2hvd0Jvb2ttYXJrc0ZpbHRlckNsaWNrID0gKGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgc2V0U2hvd0Jvb2ttYXJrcyhwcmV2ID0+ICFwcmV2KTtcbiAgICAgICAgc2V0Q3VycmVudFBhZ2UoMSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIElmIHRvcCBmaWx0ZXIgcGFuZWwsIHRvZ2dsZSBvciBoaWRlIG1vcmUgYnV0dG9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NsaWNrRXZlbnR9IGVcbiAgICAgKiBAbGlzdGVucyBDbGlja0V2ZW50XG4gICAgICovXG4gICAgY29uc3QgaGFuZGxlU2hvd0FsbFRvcEZpbHRlcnMgPSAoKSA9PiB7XG4gICAgICAgIHNldFNob3dMaW1pdGVkRmlsdGVyc1F0eShwcmV2ID0+ICFwcmV2KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogT24gd2luZG93IGNsaWNrLCBhbGwgZHJvcGRvd25zIHNob3VsZCBoaWRlXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NsaWNrRXZlbnR9IGVcbiAgICAgKiBAbGlzdGVucyBDbGlja0V2ZW50XG4gICAgICovXG4gICAgY29uc3QgaGFuZGxlV2luZG93Q2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIHNldE9wZW5Ecm9wZG93bihudWxsKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBlc2NhcGUgZm9yIG1vYmlsZSBmaWx0ZXIgZGlhbG9nXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnRcbiAgICAgKi9cbiAgICBjb25zdCBoYW5kbGVNb2JpbGVGaWx0ZXJFc2NhcGUgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSAhPT0gJ0VzY2FwZScgJiYgZXZlbnQua2V5ICE9PSAnRXNjJykgcmV0dXJuO1xuXG4gICAgICAgIHNldFNob3dNb2JpbGVGaWx0ZXJzKGZhbHNlKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICoqKiogRWZmZWN0cyAqKioqXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGF1dGhvcmVkIGZpbHRlcnMgYXMgc3RhdGVcbiAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHN0YXRlXG4gICAgICovXG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRGaWx0ZXJzKGF1dGhvcmVkRmlsdGVycy5tYXAoZmlsdGVyR3JvdXAgPT4gKHtcbiAgICAgICAgICAgIC4uLmZpbHRlckdyb3VwLFxuICAgICAgICAgICAgb3BlbmVkOiBERVNLVE9QX1NDUkVFTl9TSVpFID8gZmlsdGVyR3JvdXAub3BlbmVkT25Mb2FkIDogZmFsc2UsXG4gICAgICAgICAgICBpdGVtczogZmlsdGVyR3JvdXAuaXRlbXMubWFwKGZpbHRlckl0ZW0gPT4gKHtcbiAgICAgICAgICAgICAgICAuLi5maWx0ZXJJdGVtLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpKTtcbiAgICB9LCBbXSk7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGZpbHRlcnMgZnJvbSB1cmwgYXMgc3RhdGVcbiAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHN0YXRlXG4gICAgICovXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0RmlsdGVycyhvcmlnaW4gPT4gb3JpZ2luLm1hcCgoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGdyb3VwLCBpdGVtcyB9ID0gZmlsdGVyO1xuICAgICAgICAgICAgY29uc3QgdXJsU3RhdGVWYWx1ZSA9IHVybFN0YXRlW2ZpbHRlckdyb3VwUHJlZml4ICsgZ3JvdXBdO1xuXG4gICAgICAgICAgICBpZiAoIXVybFN0YXRlVmFsdWUpIHJldHVybiBmaWx0ZXI7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbiAgICAgICAgICAgIGNvbnN0IHVybFN0YXRlQXJyYXkgPSB1cmxTdGF0ZVZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgICAgICBpdGVtczogaXRlbXMubWFwKGl0ZW0gPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHVybFN0YXRlQXJyYXkuaW5jbHVkZXMoU3RyaW5nKGl0ZW0ubGFiZWwpKSxcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KSk7XG4gICAgICAgIGNvbnN0IHVybFNlYXJjaFZhbHVlID0gdXJsU3RhdGVbc2VhcmNoUHJlZml4XTtcbiAgICAgICAgaWYgKHVybFNlYXJjaFZhbHVlKSB7XG4gICAgICAgICAgICBzZXRTZWFyY2hRdWVyeSh1cmxTZWFyY2hWYWx1ZVswXSk7XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRSYW5kb21Tb3J0SWQoTWF0aC5mbG9vcigoTWF0aC5yYW5kb20oKSAqIDEwZTEyKSkpO1xuICAgIH0sIFtdKTtcblxuICAgIC8qKlxuICAgICAqIFRyaWdnZXIgYWZ0ZXIgYnV0dG9uIGxvYWQgbW9yZSBjbGlja1xuICAgICAqIEByZXR1cm5zIHtWb2lkfSAtIGFuIHVwZGF0ZWQgdXJsIHBhZ2VcbiAgICAgKi9cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRVcmxTdGF0ZSgncGFnZScsIGN1cnJlbnRQYWdlID09PSAxID8gJycgOiBjdXJyZW50UGFnZSk7XG4gICAgfSwgW2N1cnJlbnRQYWdlXSk7XG5cbiAgICBjb25zdCByZW1vdmVFbXB0eUZpbHRlcnMgPSAoYWxsRmlsdGVycywgY2FyZHNGcm9tSnNvbikgPT4ge1xuICAgICAgICBjb25zdCB0YWdzID0gW10uY29uY2F0KC4uLmNhcmRzRnJvbUpzb24ubWFwKGNhcmQgPT4gY2FyZC50YWdzLm1hcCh0YWcgPT4gdGFnLmlkKSkpO1xuXG4gICAgICAgIGNvbnN0IHRpbWluZ1RhZ3MgPSBbXG4gICAgICAgICAgICBFVkVOVF9USU1JTkdfSURTLkxJVkUsXG4gICAgICAgICAgICBFVkVOVF9USU1JTkdfSURTLk9OREVNQU5ELFxuICAgICAgICAgICAgRVZFTlRfVElNSU5HX0lEUy5VUENPTUlORyxcbiAgICAgICAgXTtcblxuICAgICAgICByZXR1cm4gYWxsRmlsdGVycy5tYXAoZmlsdGVyID0+ICh7XG4gICAgICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgaXRlbXM6IGZpbHRlci5pdGVtcy5maWx0ZXIoaXRlbSA9PiB0YWdzLmluY2x1ZGVzKGl0ZW0uaWQpXG4gICAgICAgICAgICB8fCB0YWdzLmluY2x1ZGVzKGl0ZW0ubGFiZWwpXG4gICAgICAgICAgICB8fCB0YWdzLnRvU3RyaW5nKCkuaW5jbHVkZXMoYC8ke2l0ZW0uaWR9YCkgLy8gKioqKiogRklYICBIRVJFICoqKioqXG4gICAgICAgICAgICB8fCB0aW1pbmdUYWdzLmluY2x1ZGVzKGl0ZW0uaWQpKSxcbiAgICAgICAgfSkpLmZpbHRlcihmaWx0ZXIgPT4gZmlsdGVyLml0ZW1zLmxlbmd0aCA+IDApO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGhhbmRsZXMgZ2V0dGluZyBDYXJkcywgdGhlcmUgYXJlIHNvbWUgY29uZGl0aW9uczpcbiAgICAgKiAtIElmIHRhcmdldCBpcyBub3QgZW5hYmxlZCBhIHNpbXBsZSByZXF1ZXN0IGlzIG1hZGUgd2l0aG91dCBtb2RzIG9yIGRlbGF5LlxuICAgICAqIC0gSWYgdGFyZ2V0IGlzIGVuYWJsZWQgJiB0VmlzaXRvciBBUEkgaXMgcHJlc2VudCBhZGQgdmFsdWVzIGZyb20gVmlzaXRvclxuICAgICAqIC0gSWYgdGFyZ2V0IGlzIGVuYWJsZWQgJiB0aGUgVmlzaXRvciBBUEkgaXMgbm90IHByZXNlbnQgc2V0VGltZW91dCB3aXRoXG4gICAgICogY291bnRlciB0byByZWNoZWNrIGZvciB0aGUgVmlzaXRvciBBUEkuIElmIDIwIGF0dGVtcHRzIGFyZSBtYWRlIHcvb1xuICAgICAqIHN1Y2Nlc3MgZmFpbCB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHN0YXRlXG4gICAgICovXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKChpc0xhenkgJiYgdmlzaWJsZVN0YW1wKSB8fCAoaXNMYXp5ICYmICFoYXNGZXRjaGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgX19zYXRlbGxpdGVMb2FkZWRQcm9taXNlOiB2aXNpdG9yUHJvbWlzZSB9ID0gd2luZG93O1xuXG4gICAgICAgIGxldCBjb2xsZWN0aW9uRW5kcG9pbnQgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAnZW5kcG9pbnQnKTtcbiAgICAgICAgY29uc3QgZmFsbGJhY2tFbmRwb2ludCA9IGdldENvbmZpZygnY29sbGVjdGlvbicsICdmYWxsYmFja0VuZHBvaW50Jyk7XG5cbiAgICAgICAgY29uc3QgciA9IG5ldyBSZWdFeHAoJ14oPzpbYS16XSs6KT8vLycsICdpJyk7XG4gICAgICAgIGxldCBjb2xsZWN0aW9uRW5kcG9pbnRVUkk7XG4gICAgICAgIGlmIChyLnRlc3QoY29sbGVjdGlvbkVuZHBvaW50KSkge1xuICAgICAgICAgICAgY29sbGVjdGlvbkVuZHBvaW50VVJJID0gbmV3IFVSTChjb2xsZWN0aW9uRW5kcG9pbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sbGVjdGlvbkVuZHBvaW50VVJJID0gbmV3IFVSTChjb2xsZWN0aW9uRW5kcG9pbnQsIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmYWxsYmFja0VuZHBvaW50KSB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uRW5kcG9pbnRVUkkuc2VhcmNoUGFyYW1zLnNldCgnZmxhdEZpbGUnLCBmYWxzZSk7XG4gICAgICAgICAgICBjb2xsZWN0aW9uRW5kcG9pbnQgPSBjb2xsZWN0aW9uRW5kcG9pbnRVUkkudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBmdW5jIGdldENhcmRzXG4gICAgICAgICAqIEBkZXNjIHdyYXBzIGZldGNoIHdpdGggZnVuY3Rpb24gdG8gbWFrZSBpdCByZXVzYWJsZVxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gZW5kUG9pbnQsIFVSTCB3aXRoIHBhcmFtcyBmb3IgY2FyZCByZXF1ZXN0XG4gICAgICAgICAqIEByZXR1cm5zIHtWb2lkfSAtIGFuIHVwZGF0ZWQgc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGdldENhcmRzKGVuZFBvaW50ID0gY29sbGVjdGlvbkVuZHBvaW50KSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgICAgICByZXR1cm4gd2luZG93LmZldGNoKGVuZFBvaW50LCB7XG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigocmVzcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvayxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgICAgIH0gPSByZXNwO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChvaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3AuanNvbigpLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZERhdGEgPSAhIU9iamVjdC5rZXlzKGpzb24pLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZERhdGEpIHJldHVybiBqc29uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nTGFuYSh7IG1lc3NhZ2U6IGBubyB2YWxpZCByZXNwb25zZSBkYXRhIGZyb20gJHtlbmRQb2ludH1gLCB0YWdzOiAnY29sbGVjdGlvbicgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdubyB2YWxpZCByZXBvbnNlIGRhdGEnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsb2dMYW5hKHsgbWVzc2FnZTogYGZhaWx1cmUgZm9yIGNhbGwgdG8gJHt1cmx9YCwgdGFnczogJ2NvbGxlY3Rpb24nLCBlcnJvck1lc3NhZ2U6IGAke3N0YXR1c306ICR7c3RhdHVzVGV4dH1gIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGAke3N0YXR1c306ICR7c3RhdHVzVGV4dH0sIGZhaWx1cmUgZm9yIGNhbGwgdG8gJHt1cmx9YCkpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKHBheWxvYWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nTGFuYSh7IG1lc3NhZ2U6IGByZXNwb25zZSB0b29rICR7KERhdGUubm93KCkgLSBzdGFydCkgLyAxMDAwfXNgLCB0YWdzOiAnY29sbGVjdGlvbicgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBzZXRJc0ZpcnN0TG9hZCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFnZXRCeVBhdGgocGF5bG9hZCwgJ2NhcmRzLmxlbmd0aCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dMYW5hKHsgbWVzc2FnZTogYG5vIGNhcmRzIHJldHVybiBieSBxdWVyeSB0byB0aGlzIGVuZHBvaW50OiAke2VuZFBvaW50fWAsIHRhZ3M6ICdjb2xsZWN0aW9uJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5pc0hhc2hlZCAmJiAhaGFzaGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRBR19IQVNIX0xFTkdUSCA9IDY7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGF1dGhvcmVkRmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmlkID0gcm9sbGluZ0hhc2goZ3JvdXAuaWQsIFRBR19IQVNIX0xFTkdUSCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWx0ZXJJdGVtIG9mIGdyb3VwLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFtwYXJlbnQsIGNoaWxkXSA9IGdldFBhcmVudENoaWxkKGZpbHRlckl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJJdGVtLmlkID0gYCR7cm9sbGluZ0hhc2gocGFyZW50LCBUQUdfSEFTSF9MRU5HVEgpfS8ke3JvbGxpbmdIYXNoKGNoaWxkLCBUQUdfSEFTSF9MRU5HVEgpfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVtcCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB0YWcgb2YgaGlkZUN0YVRhZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbcGFyZW50LCBjaGlsZF0gPSBnZXRQYXJlbnRDaGlsZCh0YWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQgIT09ICcnICYmIGNoaWxkICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnB1c2goYCR7cm9sbGluZ0hhc2gocGFyZW50LCBUQUdfSEFTSF9MRU5HVEgpfS8ke3JvbGxpbmdIYXNoKGNoaWxkLCBUQUdfSEFTSF9MRU5HVEgpfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVDdGFUYWdzID0gdGVtcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzZXRDYXJkQ291bnQocGF5bG9hZC50b3RhbENvdW50ID8gcGF5bG9hZC50b3RhbENvdW50IDogcGF5bG9hZC5jYXJkcy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHByb2Nlc3NlZENhcmRzID0gW10gfSA9IG5ldyBKc29uUHJvY2Vzc29yKHBheWxvYWQuY2FyZHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVtb3ZlRHVwbGljYXRlQ2FyZHMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENhcmRNZXRhRGF0YShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVOQ0FURV9URVhUX1FUWSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5U2hvd0Jvb2ttYXJrcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29rbWFya2VkQ2FyZElkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ3RhSWRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVDdGFUYWdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ2F0ZWdvcmllc0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RmlsdGVycyhwcmV2RmlsdGVycyA9PiBwcmV2RmlsdGVycy5tYXAoKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZ3JvdXAsIGl0ZW1zIH0gPSBmaWx0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsU3RhdGVWYWx1ZSA9IHVybFN0YXRlW2ZpbHRlckdyb3VwUHJlZml4ICsgZ3JvdXBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXJsU3RhdGVWYWx1ZSkgcmV0dXJuIGZpbHRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxTdGF0ZUFycmF5ID0gdXJsU3RhdGVWYWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogaXRlbXMubWFwKGl0ZW0gPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogdXJsU3RhdGVBcnJheS5pbmNsdWRlcyhTdHJpbmcoaXRlbS5sYWJlbCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpbHRlcnMoKCkgPT4gYXV0aG9yZWRGaWx0ZXJzLm1hcCgoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBncm91cCwgaXRlbXMgfSA9IGZpbHRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxTdGF0ZVZhbHVlID0gdXJsU3RhdGVbZmlsdGVyR3JvdXBQcmVmaXggKyBncm91cF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1cmxTdGF0ZVZhbHVlKSByZXR1cm4gZmlsdGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybFN0YXRlQXJyYXkgPSB1cmxTdGF0ZVZhbHVlLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBpdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiB1cmxTdGF0ZUFycmF5LmluY2x1ZGVzKFN0cmluZyhpdGVtLmxhYmVsKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNpdGlvbnMgPSBnZXRUcmFuc2l0aW9ucyhwcm9jZXNzZWRDYXJkcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3J0T3B0aW9uLnNvcnQudG9Mb3dlckNhc2UoKSA9PT0gJ2V2ZW50c29ydCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cmFuc2l0aW9ucy5zaXplKCkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRUcmFuc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdHJhbnNpdGlvbnMuZGVxdWV1ZSgpLnByaW9yaXR5ICsgT05FX1NFQ09ORF9ERUxBWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzZXRDYXJkcyhwcm9jZXNzZWRDYXJkcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2hvd0VtcHR5RmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RmlsdGVycyhwcmV2RmlsdGVycyA9PiByZW1vdmVFbXB0eUZpbHRlcnMocHJldkZpbHRlcnMsIHByb2Nlc3NlZENhcmRzKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNjcm9sbEVsZW1lbnRSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NlZENhcmRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYWdlID09PSAxKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJkc1Rvc2hvdyA9IHByb2Nlc3NlZENhcmRzLnNsaWNlKDAsIHJlc3VsdHNQZXJQYWdlICogY3VycmVudFBhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2V0TGFzdFBhZ2VJRCA9IChyZXN1bHRzUGVyUGFnZSAqIGN1cnJlbnRQYWdlKSAtIHJlc3VsdHNQZXJQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FyZHNUb3Nob3cubGVuZ3RoIDwgZ2V0TGFzdFBhZ2VJRCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdElEID0gc2Nyb2xsRWxlbWVudFJlZi5jdXJyZW50LmNoaWxkcmVuW2dldExhc3RQYWdlSURdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdElELnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kUG9pbnQgPT09IGNvbGxlY3Rpb25FbmRwb2ludCAmJiBmYWxsYmFja0VuZHBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDYXJkcyhmYWxsYmFja0VuZHBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsb2dMYW5hKHsgbWVzc2FnZTogJ2ZhaWxlZCB0byByZXR1cm4gcHJvY2Vzc2VkIGNhcmRzJywgdGFnczogJ2NvbGxlY3Rpb24nIH0pO1xuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0QXBpRmFpbHVyZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogQGZ1bmMgZ2V0VmlzaXRvckRhdGFcbiAgICAgICAgICogQGRlc2Mgd3JhcHMgZmV0Y2hpbmcgVmlzaXRvciBBUEkgZGF0YSBpbiBhIGZ1bmN0aW9uIGZvciByZXVzZSwgYWxzbyBpZlxuICAgICAgICAgKiBsYXN0IHVzZWQgc2Vzc2lvbiBpcyBjaGVja2VkLCB1cGRhdGUgY3VycmVudEVudGl0eUlkIHdpdGggdGFyZ2V0VmFsdWVSZXZlYWxJRFxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge1Byb21pc2V9IHZpc2l0b3JBcGksIHdpbmRvdy5fX3NhdGVsbGl0ZUxvYWRlZFByb21pc2Ugd2hlbiBhY2Nlc3NlZFxuICAgICAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHN0YXRlLCB0aHJ1IGNhbGxpbmcgZ2V0Q2FyZHNcbiAgICAgICAgICovXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGZ1bmN0aW9uIGdldFZpc2l0b3JEYXRhKHZpc2l0b3JBcGkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25VUkkgPSBuZXcgVVJMKGNvbGxlY3Rpb25FbmRwb2ludCk7XG5cbiAgICAgICAgICAgIGlmICh1c2VMYXN0Vmlld2VkU2Vzc2lvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFJldmVhbElkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RhcmdldFZhbHVlUmV2ZWFsSUQnKTtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0UmV2ZWFsSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblVSSS5zZWFyY2hQYXJhbXMuc2V0KCdjdXJyZW50RW50aXR5SWQnLCB0YXJnZXRSZXZlYWxJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2aXNpdG9yQXBpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuYWxsb3kgJiYgd2luZG93LmVkZ2VDb25maWdJZCkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWxsb3koJ2dldElkZW50aXR5JylcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uVVJJLnNlYXJjaFBhcmFtcy5zZXQoJ21jZ3ZpZCcsIHJlcy5pZGVudGl0eS5FQ0lEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uVVJJLnNlYXJjaFBhcmFtcy5zZXQoJ21ib3hNQ0dMSCcsIHJlcy5lZGdlLnJlZ2lvbklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDYXJkcyhjb2xsZWN0aW9uVVJJLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmlzaXRvciA9IHJlc3VsdC5nZXRWaXNpdG9ySWQoKTtcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblVSSS5zZWFyY2hQYXJhbXMuc2V0KCdtY2d2aWQnLCB2aXNpdG9yLmdldE1hcmtldGluZ0Nsb3VkVmlzaXRvcklEKCkpO1xuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uVVJJLnNlYXJjaFBhcmFtcy5zZXQoJ3NkaWQnLCB2aXNpdG9yLmdldFN1cHBsZW1lbnRhbERhdGFJRCgpKTtcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblVSSS5zZWFyY2hQYXJhbXMuc2V0KCdtYm94QUFNQicsIHZpc2l0b3IuZ2V0QXVkaWVuY2VNYW5hZ2VyQmxvYigpKTtcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblVSSS5zZWFyY2hQYXJhbXMuc2V0KCdtYm94TUNHTEgnLCB2aXNpdG9yLmdldEF1ZGllbmNlTWFuYWdlckxvY2F0aW9uSGludCgpKTtcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q2FyZHMoY29sbGVjdGlvblVSSS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZnVuYyB2aXNpdG9yUmV0cnlcbiAgICAgICAgICogQGRlc2MgVmlzaXRvciBBUEkgaXMgbGF0ZSBsb2FkaW5nIG9mdGVuLCB0aGlzIHNldHMgYSByZWN1cnNpdmUgY2FsbFxuICAgICAgICAgKiBpbiBhIHNldFRpbWVvdXQgdG8gcnVuIDIwIHRpbWVzLCBhbmQgdGhlbiBmYWlsIHRoZSByZXF1ZXN0LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHN0YXRlLCB0aHJ1IGNhbGxpbmcgZ2V0VmlzaXRvckRhdGEgd2hpY2hcbiAgICAgICAgICogY2FsbHMgZ2V0Q2FyZHNcbiAgICAgICAgICovXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGZ1bmN0aW9uIHZpc2l0b3JSZXRyeSgpIHtcbiAgICAgICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcblxuICAgICAgICAgICAgY29uc3QgdGltZWRSZXRyeSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPj0gMjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcGlGYWlsdXJlKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IF9fc2F0ZWxsaXRlTG9hZGVkUHJvbWlzZTogdmlzaXRvclByb21pc2VSZXRyeSB9ID0gd2luZG93O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yUHJvbWlzZVJldHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRWaXNpdG9yRGF0YSh2aXNpdG9yUHJvbWlzZVJldHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmlzaXRvclByb21pc2VSZXRyeSAmJiByZXRyeUNvdW50IDwgMjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVkUmV0cnkoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHJ5Q291bnQgKz0gMTtcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGltZWRSZXRyeSgpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAodGFyZ2V0RW5hYmxlZCAmJiB2aXNpdG9yUHJvbWlzZSkge1xuICAgICAgICAgICAgZ2V0VmlzaXRvckRhdGEodmlzaXRvclByb21pc2UpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAodGFyZ2V0RW5hYmxlZCAmJiAhdmlzaXRvclByb21pc2UpIHtcbiAgICAgICAgICAgIHZpc2l0b3JSZXRyeSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0YXJnZXRFbmFibGVkICYmICFwYXJ0aWFsTG9hZFdpdGhCYWNrZ3JvdW5kRmV0Y2gpIHtcbiAgICAgICAgICAgIGdldENhcmRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0YXJnZXRFbmFibGVkICYmIHBhcnRpYWxMb2FkV2l0aEJhY2tncm91bmRGZXRjaCkge1xuICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbkVuZHBvaW50VXJsID0gbmV3IFVSTChjb2xsZWN0aW9uRW5kcG9pbnQpO1xuICAgICAgICAgICAgY29sbGVjdGlvbkVuZHBvaW50VXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3BhcnRpYWxMb2FkQ291bnQnLCBTdHJpbmcocGFydGlhbExvYWRDb3VudCkpO1xuICAgICAgICAgICAgc2V0SXNQYXJ0aWFsTG9hZCh0cnVlKTtcbiAgICAgICAgICAgIGdldENhcmRzKGNvbGxlY3Rpb25FbmRwb2ludFVybC50b1N0cmluZygpKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBnZXRDYXJkcygpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRJc1BhcnRpYWxMb2FkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW3Zpc2libGVTdGFtcCwgaGFzRmV0Y2hlZF0pO1xuXG4gICAgLyoqXG4gICAgICogU2F2ZXMgY2FyZHMgdG8gbG9jYWwgc3RvcmFnZSBhbmQgdXBkYXRlcyBjYXJkIHcvIGJvb2ttYXJrZWQgZGF0YVxuICAgICAqIEByZXR1cm5zIHtWb2lkfSAtIGFuIHVwZGF0ZWQgc3RhdGVcbiAgICAgKi9cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzYXZlQm9va21hcmtzVG9Mb2NhbFN0b3JhZ2UoYm9va21hcmtlZENhcmRJZHMpO1xuICAgICAgICBzZXRDYXJkcyhnZXRVcGRhdGVkQ2FyZEJvb2ttYXJrRGF0YShjYXJkcywgYm9va21hcmtlZENhcmRJZHMpKTtcbiAgICB9LCBbYm9va21hcmtlZENhcmRJZHNdKTtcblxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBjbGVhcmluZyBzdGF0ZSBvbiBzaG93Qm9va21hcmtzXG4gICAgICogQHJldHVybnMge1ZvaWR9IC0gYW4gdXBkYXRlZCBzdGF0ZVxuICAgICAqL1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChzaG93Qm9va21hcmtzKSB7XG4gICAgICAgICAgICBjbGVhckFsbEZpbHRlcnMoKTtcbiAgICAgICAgICAgIHNldFNlYXJjaFF1ZXJ5KCcnKTtcbiAgICAgICAgfVxuICAgIH0sIFtzaG93Qm9va21hcmtzXSk7XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGZvY3VzIGFuZCBlc2NhcGUgb24gbW9iaWxlIGZpbHRlciB0b2dnbGVcbiAgICAgKiBAcmV0dXJucyB7Vm9pZH1cbiAgICAgKi9cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoc2hvd01vYmlsZUZpbHRlcnMpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJJdGVtUmVmICYmIGZpbHRlckl0ZW1SZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIGZpbHRlckl0ZW1SZWYuY3VycmVudC5mb2N1c01vYlRpdGxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlTW9iaWxlRmlsdGVyRXNjYXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJJbmZvUmVmICYmIGZpbHRlckluZm9SZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIGZpbHRlckluZm9SZWYuY3VycmVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZU1vYmlsZUZpbHRlckVzY2FwZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZU1vYmlsZUZpbHRlckVzY2FwZSk7XG4gICAgICAgIH07XG4gICAgfSwgW3Nob3dNb2JpbGVGaWx0ZXJzXSk7XG5cbiAgICBjb25zdCBib3ggPSB1c2VSZWYoKTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoYm94ICYmICF2aXNpYmxlU3RhbXAgJiYgaXNMYXp5KSB7XG4gICAgICAgICAgICBjb25zdCBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyaWVzWzBdLmludGVyc2VjdGlvblJhdGlvIDw9IDApIHJldHVybjtcbiAgICAgICAgICAgICAgICBzZXRIYXNGZXRjaGVkKHRydWUpO1xuICAgICAgICAgICAgICAgIHNldFZpc2libGVTdGFtcChuZXcgRGF0ZSgpLmdldFRpbWUoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlvLm9ic2VydmUoYm94LmN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgfSwgW2JveF0pO1xuXG4gICAgLyoqXG4gICAgICoqKiogRGVyaXZlZCBTdGF0ZSAqKioqXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBvZiBmaWx0ZXJzIGNob3NlbiBieSB0aGUgdXNlclxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKi9cbiAgICBjb25zdCBhY3RpdmVGaWx0ZXJJZHMgPSBnZXRBY3RpdmVGaWx0ZXJJZHMoZmlsdGVycyk7XG5cbiAgICAvKipcbiAgICAgKiBBcnJheSBvZiBmaWx0ZXJzIHBhbmVscyAoZ3JvdXBpbmdzKSBjcmVhdGVkIGJ5IHRoZSBhdXRob3JcbiAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICovXG4gICAgY29uc3QgYWN0aXZlUGFuZWxzID0gZ2V0QWN0aXZlUGFuZWxzKGFjdGl2ZUZpbHRlcklkcykgfHwgbmV3IFNldCgpO1xuXG4gICAgLyoqXG4gICAgICogSW5zdGFuY2Ugb2YgQ2FyZEZpbHRlcmVyIGNsYXNzIHRoYXQgaGFuZGxlcyByZXR1cm5pbmcgc3Vic2V0IG9mIGNhcmRzXG4gICAgICogYmFzZWQgb2ZmIHVzZXIgaW50ZXJhY3Rpb25zXG4gICAgICpcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIGNvbnN0IGNhcmRGaWx0ZXJlciA9IG5ldyBDYXJkRmlsdGVyZXIoXG4gICAgICAgIGNhcmRzLFxuICAgICAgICByYW5kb21Tb3J0SWQsXG4gICAgICAgIHNhbXBsZVNpemUsXG4gICAgICAgIHJlc2Vydm9pclNpemUsXG4gICAgICAgIGZlYXR1cmVkQ2FyZHMsXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtGdW5jdGlvbn0gZ2V0RmlsdGVyZWRDb2xsZWN0aW9uXG4gICAgICogQGRlc2MgQ2xvc3VyZSBhcm91bmQgQ2FyZEZpbHRlcmVyIGZvciByZXVzZSB3aXRoaW4gY29udGV4dFxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgICogKi9cbiAgICBjb25zdCBnZXRGaWx0ZXJlZENvbGxlY3Rpb24gPSAoKSA9PiBjYXJkRmlsdGVyZXJcbiAgICAgICAgLnNvcnRDYXJkcyhzb3J0T3B0aW9uLCBzYW5pdGl6ZWRFdmVudEZpbHRlciwgZmVhdHVyZWRDYXJkcywgaGlkZUN0YUlkcywgaXNGaXJzdExvYWQpXG4gICAgICAgIC5rZWVwQm9va21hcmtlZENhcmRzT25seShvbmx5U2hvd0Jvb2ttYXJrcywgYm9va21hcmtlZENhcmRJZHMsIHNob3dCb29rbWFya3MpXG4gICAgICAgIC5rZWVwQ2FyZHNXaXRoaW5EYXRlUmFuZ2UoKVxuICAgICAgICAuZmlsdGVyQ2FyZHMoYWN0aXZlRmlsdGVySWRzLCBhY3RpdmVQYW5lbHMsIGZpbHRlckxvZ2ljLCBGSUxURVJfVFlQRVMsIGN1cnJDYXRlZ29yaWVzKVxuICAgICAgICAudHJ1bmNhdGVMaXN0KHRvdGFsQ2FyZExpbWl0KVxuICAgICAgICAuc2VhcmNoQ2FyZHMoc2VhcmNoUXVlcnksIHNlYXJjaEZpZWxkcywgY2FyZFN0eWxlKVxuICAgICAgICAucmVtb3ZlQ2FyZHMoaW5jbHVzaW9uSWRzKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtBcnJheX0gZmlsdGVyZWRDYXJkczogRmlsdGVyZWQgY2FyZHMgYmFzZWQgb2ZmIGN1cnJlbnQgc3RhdGUgb2YgcGFnZVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9IG5leHRUcmFuc2l0aW9uTXM6IE51bWJlciBmb3IgdGltZWQgZXZlbnQgc29ydCB0cmFuc2l0aW9uXG4gICAgICovXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbiAgICBjb25zdCB7IGZpbHRlcmVkQ2FyZHMgPSBbXSwgbmV4dFRyYW5zaXRpb25NcyA9IDAgfSA9IGdldEZpbHRlcmVkQ29sbGVjdGlvbigpO1xuXG4gICAgLyoqXG4gICAgICogU3Vic2V0IG9mIGNhcmRzIHRvIHNob3cgdGhlIHVzZXJcbiAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICovXG4gICAgY29uc3QgZ3JpZENhcmRzID0gdGltZWRDb2xsZWN0aW9uLmxlbmd0aCA/IHRpbWVkQ29sbGVjdGlvbiA6IGZpbHRlcmVkQ2FyZHM7XG4gICAgbGV0IGdyaWRDYXJkTGVuID0gZ3JpZENhcmRzLmxlbmd0aDtcbiAgICBpZiAoaXNQYXJ0aWFsTG9hZCkge1xuICAgICAgICBncmlkQ2FyZExlbiA9IGNhcmRDb3VudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb3RhbCBwYWdlcyAodXNlZCBieSBQYWdpbmF0b3IgQ29tcG9uZW50KVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgY29uc3QgdG90YWxQYWdlcyA9IGdldFRvdGFsUGFnZXMocmVzdWx0c1BlclBhZ2UsIGdyaWRDYXJkTGVuKTtcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBjYXJkcyB0byBzaG93ICh1c2VkIGJ5IExvYWQgTW9yZSBjb21wb25lbnQpXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICBjb25zdCBudW1DYXJkc1RvU2hvdyA9IGdldE51bUNhcmRzVG9TaG93KHJlc3VsdHNQZXJQYWdlLCBjdXJyZW50UGFnZSwgZ3JpZENhcmRMZW4pO1xuXG4gICAgLyoqXG4gICAgICogSG93IG1hbnkgZmlsdGVycyB3ZXJlIHNlbGVjdGVkIC0gKHVzZWQgYnkgTGVmdCBGaWx0ZXIgUGFuZWwpXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICBjb25zdCBzZWxlY3RlZEZpbHRlcnNJdGVtc1F0eSA9IGdldE51bVNlbGVjdGVkRmlsdGVySXRlbXMoZmlsdGVycyk7XG5cbiAgICAvKipcbiAgICAgKiBDb25kaXRpb25zIHRvIERpc3BsYXkgQSBGb3JtIE9mIFBhZ2luYXRpb25cbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBjb25zdCBkaXNwbGF5UGFnaW5hdGlvbiA9IHNob3VsZERpc3BsYXlQYWdpbmF0b3IoXG4gICAgICAgIHBhZ2luYXRpb25Jc0VuYWJsZWQsXG4gICAgICAgIHRvdGFsQ2FyZExpbWl0LFxuICAgICAgICBncmlkQ2FyZExlbixcbiAgICApO1xuICAgIC8qKlxuICAgICAqIENvbmRpdGlvbnMgdG8gZGlzcGxheSB0aGUgTG9hZCBNb3JlIEJ1dHRvblxuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqL1xuICAgIGNvbnN0IGRpc3BsYXlMb2FkTW9yZSA9IGRpc3BsYXlQYWdpbmF0aW9uICYmIHBhZ2luYXRpb25UeXBlID09PSAnbG9hZE1vcmUnO1xuXG4gICAgLyoqXG4gICAgICogQ29uZGl0aW9ucyB0byBkaXNwbGF5IHRoZSBQYWdpbmF0b3IgQ29tcG9uZW50XG4gICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICovXG4gICAgY29uc3QgZGlzcGxheVBhZ2luYXRvciA9IGRpc3BsYXlQYWdpbmF0aW9uICYmIHBhZ2luYXRpb25UeXBlID09PSAncGFnaW5hdG9yJztcblxuICAgIC8qKlxuICAgICAqIENvbmRpdGlvbnMgdG8gZGlzcGxheSB0aGUgTGVmdCBGaWx0ZXIgUGFuZWwgQ29tcG9uZW50XG4gICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICovXG4gICAgY29uc3QgZGlzcGxheUxlZnRGaWx0ZXJQYW5lbCA9IGZpbHRlclBhbmVsRW5hYmxlZCAmJiBmaWx0ZXJQYW5lbFR5cGUgPT09IEZJTFRFUl9QQU5FTC5MRUZUO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBhdCBsZWFzZSBvbmUgY2FyZCB3YXMgcmV0dXJuZWQgYnkgQ2FyZCBGaWx0ZXJlclxuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqL1xuICAgIGNvbnN0IGF0TGVhc3RPbmVDYXJkID0gZ3JpZENhcmRMZW4gPiAwO1xuXG4gICAgLyoqXG4gICAgICogV2hlcmUgdG8gcGxhY2UgdGhlIFNvcnQgUG9wdXAgKGVpdGhlciBsZWZ0IG9yIHJpZ2h0KVxuICAgICAqIEB0eXBlIHtTdHJpbmd9IC0gTG9jYXRpb24gb2YgU29ydCBQb3B1cCBpbiBUb3AgRmlsdGVyIFBhbmVsIFZpZXdcbiAgICAgKi9cbiAgICBjb25zdCB0b3BQYW5lbFNvcnRQb3B1cExvY2F0aW9uID0gZmlsdGVycy5sZW5ndGggPiAwICYmIHdpbmRvd1dpZHRoIDwgVEFCTEVUX01JTl9XSURUSCA/XG4gICAgICAgIFNPUlRfUE9QVVBfTE9DQVRJT04uTEVGVCA6IFNPUlRfUE9QVVBfTE9DQVRJT04uUklHSFQ7XG5cbiAgICAvKipcbiAgICAgKiBIb3cgTG9uZyBQYWdpbmF0b3IgQ29tcG9uZW50IFNob3VsZCBCZVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9IC0gTG9jYXRpb24gb2YgU29ydCBQb3B1cCBpbiBUb3AgRmlsdGVyIFBhbmVsIFZpZXdcbiAgICAgKi9cbiAgICBjb25zdCBwYWdpbmF0b3JDb3VudCA9IERFU0tUT1BfU0NSRUVOX1NJWkUgPyBQQUdJTkFUSU9OX0NPVU5ULkRFU0tUT1AgOiBQQUdJTkFUSU9OX0NPVU5ULk1PQklMRTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSB0b3AgZmlsdGVyIHBhbmVsIG9yIG5vdFxuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqL1xuICAgIGNvbnN0IGlzVG9wRmlsdGVyUGFuZWwgPSBmaWx0ZXJQYW5lbFR5cGUgPT09IEZJTFRFUl9QQU5FTC5UT1A7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgdG9wIGZpbHRlciBwYW5lbCBvciBub3RcbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBjb25zdCBpc0xlZnRGaWx0ZXJQYW5lbCA9IGZpbHRlclBhbmVsVHlwZSA9PT0gRklMVEVSX1BBTkVMLkxFRlQ7XG5cbiAgICAvKipcbiAgICAgKiBVaSBvcHRpb25zIHRoYXQgY2F1c2UgZ3JpZCB0byByZXJlbmRlciBuZWNlc3NpdGF0ZSB0aGUgYXJpYSBhdHRyaWJ1dGUgYmVpbmcgc2V0XG4gICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICovXG4gICAgY29uc3QgaXNHcmlkQXJlYUxpdmUgPVxuICAgICAgICBmaWx0ZXJQYW5lbEVuYWJsZWQgfHxcbiAgICAgICAgc2VhcmNoRW5hYmxlZCB8fFxuICAgICAgICBzb3J0RW5hYmxlZCB8fFxuICAgICAgICBwYWdpbmF0aW9uSXNFbmFibGVkO1xuXG4gICAgbGV0IGZpbHRlck5hbWVzID0gJyc7XG4gICAgZmlsdGVycy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICBlbC5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBmaWx0ZXJOYW1lcyArPSBgJHtpdGVtLmxhYmVsfSwgYDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKioqKiBDbGFzcyBuYW1lcyAqKioqXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBDbGFzcyBuYW1lIGZvciB0aGUgYXV0aG9yZWQgdGhlbWU6XG4gICAgICogbGlnaHQsIGRhcmssIGRhcmtlc3Q7XG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKi9cbiAgICBjb25zdCB0aGVtZUNsYXNzID0gY2xhc3NOYW1lcyh7XG4gICAgICAgICdjb25zb25hbnQtdS10aGVtZUxpZ2h0JzogYXV0aG9yZWRNb2RlID09PSBUSEVNRV9UWVBFLkxJR0hULFxuICAgICAgICAnY29uc29uYW50LXUtdGhlbWVEYXJrJzogYXV0aG9yZWRNb2RlID09PSBUSEVNRV9UWVBFLkRBUkssXG4gICAgICAgICdjb25zb25hbnQtdS10aGVtZURhcmtlc3QnOiBhdXRob3JlZE1vZGUgPT09IFRIRU1FX1RZUEUuREFSS0VTVCxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Kn0gZmlsdGVyTGlzdFxuICAgICAqIEBwYXJhbSB7Kn0gY2F0ZWdvcnlMaXN0XG4gICAgICogQHJldHVybnMgTGlzdCBvZiBjYXRlZ29yaWVzIGZvciB0aGUgdG9wIHBpbGxzXG4gICAgICogICAgICAgICAgUHJlcGVuZHMgdGhlIFwiQWxsIFRvcGljc1wiIHBpbGwgdG8gdGhlIGxpc3Qgb2YgY2F0ZWdvcmllc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEF1dGhvcmVkQ2F0ZWdvcmllcyhmaWx0ZXJMaXN0LCBjYXRlZ29yeUxpc3QpIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlJZHMgPSBmaWx0ZXJMaXN0XG4gICAgICAgICAgICAuZmlsdGVyKGZpbHRlciA9PiBmaWx0ZXIuaWQuaW5jbHVkZXMoJ2NhYXM6cHJvZHVjdC1jYXRlZ29yaWVzJykpXG4gICAgICAgICAgICAubWFwKGl0ZW0gPT4gaXRlbS5pZCk7XG5cbiAgICAgICAgLy8gU29ydHMgY2F0ZWdvcnkgbGlzdCBiYXNlZCBvbiBhdXRob3JlZCBvcmRlclxuICAgICAgICBjb25zdCBzZWxlY3RlZENhdGVnb3JpZXMgPSBjYXRlZ29yeUlkc1xuICAgICAgICAgICAgLm1hcChpZCA9PiBjYXRlZ29yeUxpc3QgJiYgY2F0ZWdvcnlMaXN0LmZpbHRlcihjYXRlZ29yeSA9PiBjYXRlZ29yeS5pZCA9PT0gaWQpWzBdKTtcblxuICAgICAgICByZXR1cm4gW3tcbiAgICAgICAgICAgIGdyb3VwOiAnQWxsIFRvcGljcycsXG4gICAgICAgICAgICB0aXRsZTogJ0FsbCBUb3BpY3MnLFxuICAgICAgICAgICAgaWQ6ICcnLFxuICAgICAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICB9LCAuLi5zZWxlY3RlZENhdGVnb3JpZXNdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIExpc3Qgb2YgYWxsIHByb2R1Y3RzIGZyb20gYWxsIGNhdGVnb3JpZXMgZm9yIHRoZSAnQWxsIHByb2R1Y3RzJyBtZW51XG4gICAgICogICAgICAgICAgUHJlcGVuZHMgdGhlIFwiQWxsIHByb2R1Y3RzXCIgbGFiZWwgdG8gdGhlIGxpc3Qgb2YgY2F0ZWdvcmllc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEFsbENhdGVnb3J5UHJvZHVjdHMoKSB7XG4gICAgICAgIGlmICghYXV0aG9yZWRDYXRlZ29yaWVzKSByZXR1cm4gW107XG4gICAgICAgIGxldCBhbGxDYXRlZ29yaWVzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgYXV0aG9yZWRDYXRlZ29yaWVzKSB7XG4gICAgICAgICAgICBpZiAoY2F0ZWdvcnkgJiYgY2F0ZWdvcnkuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2F0ZWdvcnkuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5mcm9tQ2F0ZWdvcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhbGxDYXRlZ29yaWVzID0gYWxsQ2F0ZWdvcmllcy5jb25jYXQoY2F0ZWdvcnkuaXRlbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdyb3VwOiAnQWxsIHByb2R1Y3RzJyxcbiAgICAgICAgICAgIGlkOiAnY2FhczphbGwtcHJvZHVjdHMnLFxuICAgICAgICAgICAgaXRlbXM6IGFsbENhdGVnb3JpZXMsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHsqfSBzZWxlY3RlZENhdGVnb3JpZXNcbiAgICAgKiBAcGFyYW0geyp9IGdyb3VwSWRcbiAgICAgKiBTZXRzIHRoZSBjYXRlZ29yaWVzIGFuZCBmaWx0ZXJzIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBjYXRlZ29yeVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhdGVnb3J5SGFuZGxlcihzZWxlY3RlZENhdGVnb3JpZXMsIGdyb3VwSWQpIHtcbiAgICAgICAgY29uc3QgdGVtcCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIHNlbGVjdGVkQ2F0ZWdvcmllcykge1xuICAgICAgICAgICAgdGVtcC5wdXNoKGNhdGVnb3J5LmlkKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRDYXRlZ29yaWVzKHRlbXApO1xuICAgICAgICBzZXRGaWx0ZXJzKChwcmV2RmlsdGVycykgPT4ge1xuICAgICAgICAgICAgcHJldkZpbHRlcnMucG9wKCk7XG4gICAgICAgICAgICBjb25zdCBuZXdHcm91cCA9IGF1dGhvcmVkQ2F0ZWdvcmllcy5maWx0ZXIoY2F0ZWdvcnkgPT4gY2F0ZWdvcnkuaWQgPT09IGdyb3VwSWQpWzBdO1xuICAgICAgICAgICAgaWYgKCFuZXdHcm91cC5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0RmlsdGVycyA9IHByZXZGaWx0ZXJzLmNvbmNhdChnZXRBbGxDYXRlZ29yeVByb2R1Y3RzKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0RmlsdGVycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZXZGaWx0ZXJzLnB1c2gobmV3R3JvdXApO1xuICAgICAgICAgICAgcmV0dXJuIHByZXZGaWx0ZXJzO1xuICAgICAgICB9KTtcbiAgICAgICAgc2V0U2VsZWN0ZWRDYXRlZ29yeShncm91cElkKTtcbiAgICAgICAgc2V0Q3VycmVudFBhZ2UoMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHsqfSBjYXRlZ29yeVxuICAgICAqIEByZXR1cm5zIFRoZSBBdXRob3JlZCBpY29uIGZvciB0aGUgY2F0ZWdvcnkgaWYgZXhpc3RzLFxuICAgICAqICAgICAgICAgIG90aGVyd2lzZSByZXR1cm5zIHRoZSBkZWZhdWx0IGljb24gZnJvbSB0aGUgdGFncyBvciBhbiBlbXB0eSBzdHJpbmdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRDYXRlZ29yeUljb24oY2F0ZWdvcnkpIHtcbiAgICAgICAgY29uc3QgYXV0aG9yZWRJY29uID0gYXV0aG9yZWRGaWx0ZXJzXG4gICAgICAgICAgICAuZmlsdGVyKGZpbHRlciA9PiBmaWx0ZXIuaWQgPT09IGNhdGVnb3J5LmlkKVxuICAgICAgICAgICAgLm1hcChmaWx0ZXIgPT4gZmlsdGVyLmljb24pXG4gICAgICAgICAgICAudG9TdHJpbmcoKTtcbiAgICAgICAgcmV0dXJuIGF1dGhvcmVkSWNvbiB8fCBjYXRlZ29yeS5pY29uIHx8ICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbGxlY3Rpb25TdHIgPSBjb2xsZWN0aW9uSWRlbnRpZmllciA/IGAke2NvbGxlY3Rpb25JZGVudGlmaWVyfSB8IGAgOiAnJztcbiAgICBjb25zdCBmaWx0ZXJTdHIgPSBzZWxlY3RlZEZpbHRlcnNJdGVtc1F0eSA/IGZpbHRlck5hbWVzIDogJ05vIEZpbHRlcnMnO1xuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5U3RyID0gc2VhcmNoUXVlcnkgfHwgJ05vbmUnO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25BbmFseXRpY3MgPSBgJHtjb2xsZWN0aW9uU3RyfUNhcmQgQ29sbGVjdGlvbiB8IEZpbHRlcnM6ICR7ZmlsdGVyU3RyfXwgU2VhcmNoIFF1ZXJ5OiAke3NlYXJjaFF1ZXJ5U3RyfWA7XG4gICAgLyoqXG4gICAgICogQ2xhc3MgbmFtZSBmb3IgdGhlIGNvbnNvbmFudCB3cmFwcGVyOlxuICAgICAqIHdoZXRoZXIgY29uc29uYW50IHdyYXBwZXIgY29udGFpbnMgbGVmdCBmaWx0ZXI7XG4gICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgKi9cbiAgICBjb25zdCB3cmFwcGVyQ2xhc3MgPSBjbGFzc05hbWVzKHtcbiAgICAgICAgJ2NvbnNvbmFudC1XcmFwcGVyJzogdHJ1ZSxcbiAgICAgICAgJ2NvbnNvbmFudC1XcmFwcGVyLS0zMk1hcmdpbkNvbnRhaW5lcic6IGF1dGhvcmVkTGF5b3V0Q29udGFpbmVyID09PSBMQVlPVVRfQ09OVEFJTkVSLlNJWkVfMTAwX1ZXXzMyX01BUkdJTixcbiAgICAgICAgJ2NvbnNvbmFudC1XcmFwcGVyLS04M1BlcmNlbnRDb250YWluaWVyJzogYXV0aG9yZWRMYXlvdXRDb250YWluZXIgPT09IExBWU9VVF9DT05UQUlORVIuU0laRV84M19WVyxcbiAgICAgICAgJ2NvbnNvbmFudC1XcmFwcGVyLS0xMjAwTWF4V2lkdGgnOiBhdXRob3JlZExheW91dENvbnRhaW5lciA9PT0gTEFZT1VUX0NPTlRBSU5FUi5TSVpFXzEyMDBfUFgsXG4gICAgICAgICdjb25zb25hbnQtV3JhcHBlci0tMTYwME1heFdpZHRoJzogYXV0aG9yZWRMYXlvdXRDb250YWluZXIgPT09IExBWU9VVF9DT05UQUlORVIuU0laRV8xNjAwX1BYLFxuICAgICAgICAnY29uc29uYW50LVdyYXBwZXItLTEyMDBNYXhXaWR0aCBDYXRlZ29yaWVzJzogaXNDYXRlZ29yaWVzQ29udGFpbmVyLFxuICAgICAgICAnY29uc29uYW50LVdyYXBwZXItLWNhcm91c2VsJzogaXNDYXJvdXNlbENvbnRhaW5lcixcbiAgICAgICAgJ2NvbnNvbmFudC1XcmFwcGVyLS13aXRoTGVmdEZpbHRlcic6IGZpbHRlclBhbmVsRW5hYmxlZCAmJiBpc0xlZnRGaWx0ZXJQYW5lbCxcbiAgICB9KTtcblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChpc0NhdGVnb3JpZXNDb250YWluZXIpIHtcbiAgICAgICAgICAgIHNldEZpbHRlcnMoKHByZXZGaWx0ZXJzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEZpbHRlcnMgPSBwcmV2RmlsdGVycy5jb25jYXQoZ2V0QWxsQ2F0ZWdvcnlQcm9kdWN0cygpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dEZpbHRlcnM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxDb25maWdDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb25maWd9PlxuICAgICAgICAgICAgPEV4cGFuZGFibGVDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt7IHZhbHVlOiBvcGVuRHJvcGRvd24sIHNldFZhbHVlOiBzZXRPcGVuRHJvcGRvd24gfX0gPlxuICAgICAgICAgICAgICAgIHsvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlbiAqL31cbiAgICAgICAgICAgICAgICB7LyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzeC1hMTF5L25vLW5vbmludGVyYWN0aXZlLWVsZW1lbnQtaW50ZXJhY3Rpb25zLGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi99XG4gICAgICAgICAgICAgICAgPHNlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgcmVmPXtib3h9XG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJncm91cFwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RpdGxlIHx8ICdDYXJkIENvbGxlY3Rpb24nfVxuICAgICAgICAgICAgICAgICAgICBkYWEtbGg9e2NvbGxlY3Rpb25BbmFseXRpY3N9XG4gICAgICAgICAgICAgICAgICAgIGRhYS1pbT17U3RyaW5nKHRyYWNrSW1wcmVzc2lvbnMpfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVXaW5kb3dDbGlja31cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHt3cmFwcGVyQ2xhc3N9ICR7dGhlbWVDbGFzc31gfT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb25zb25hbnQtV3JhcHBlci1pbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgeyBpc0NhdGVnb3JpZXNDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgZGF0YS10ZXN0aWQ9XCJjb25zb25hbnQtVG9wRmlsdGVycy1jYXRlZ29yaWVzVGl0bGVcIiBjbGFzc05hbWU9XCJjb25zb25hbnQtVG9wRmlsdGVycy1jYXRlZ29yaWVzVGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXJzLWNhdGVnb3J5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcmVkQ2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYXRlZ29yeSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhdGVnb3J5LmlkID09PSBzZWxlY3RlZENhdGVnb3J5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gJ3NlbGVjdGVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtjYXRlZ29yeS5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeUhhbmRsZXIoY2F0ZWdvcnkuaXRlbXMsIGNhdGVnb3J5LmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXNlbGVjdGVkPXtzZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgY2F0ZWdvcnktYnV0dG9uLSR7Y2F0ZWdvcnkuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZ3JvdXA9e2NhdGVnb3J5Lmdyb3VwLnJlcGxhY2VBbGwoJyAnLCAnJykudG9Mb3dlckNhc2UoKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzTmFtZT1cImZpbHRlcnMtY2F0ZWdvcnktLWljb25cIiBzcmM9e2dldENhdGVnb3J5SWNvbihjYXRlZ29yeSl9IGFsdD17Y2F0ZWdvcnkuaWNvbiAmJiAnQ2F0ZWdvcnkgaWNvbid9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2F0ZWdvcnkudGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgeyBkaXNwbGF5TGVmdEZpbHRlclBhbmVsICYmIGlzU3RhbmRhcmRDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29uc29uYW50LVdyYXBwZXItbGVmdEZpbHRlcldyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGVmdEZpbHRlclBhbmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM9e2ZpbHRlcnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRmlsdGVyc1F0eT17c2VsZWN0ZWRGaWx0ZXJzSXRlbXNRdHl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1dpZHRoPXt3aW5kb3dXaWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25GaWx0ZXJDbGljaz17aGFuZGxlRmlsdGVyR3JvdXBDbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGVhckFsbEZpbHRlcnM9e3Jlc2V0RmlsdGVyc1NlYXJjaEFuZEJvb2ttYXJrc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGVhckZpbHRlckl0ZW1zPXtjbGVhckZpbHRlckl0ZW19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tib3hDbGljaz17aGFuZGxlQ2hlY2tCb3hDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTW9iaWxlRmlsdGVyc1RvZ2dsZUNsaWNrPXtoYW5kbGVNb2JpbGVGaWx0ZXJzVG9nZ2xlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdGVkRmlsdGVyQ2xpY2s9e2hhbmRsZUNoZWNrQm94Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TW9iaWxlRmlsdGVycz17c2hvd01vYmlsZUZpbHRlcnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1F0eT17Z3JpZENhcmRMZW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2ttYXJrQ29tcG9uZW50PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCb29rbWFya3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Qm9va21hcmtzPXtzaG93Qm9va21hcmtzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNob3dCb29rbWFya3NGaWx0ZXJDbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZENhcmRzQ291bnQ9e2Jvb2ttYXJrZWRDYXJkSWRzLmxlbmd0aH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hDb21wb25lbnQ9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlYXJjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyVGV4dD17bGVmdFBhbmVsU2VhcmNoUGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZpbHRlcnNTaWRlU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c2VhcmNoUXVlcnl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2ZvY3VzPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlYXJjaD17aGFuZGxlU2VhcmNoSW5wdXRDaGFuZ2V9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmPXtmaWx0ZXJJdGVtUmVmfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YGNvbnNvbmFudC1XcmFwcGVyLWNvbGxlY3Rpb24ke2lzTG9hZGluZyA/ICcgaXMtbG9hZGluZycgOiAnJ31gfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGlzVG9wRmlsdGVyUGFuZWwgJiYgaXNTdGFuZGFyZENvbnRhaW5lciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGaWx0ZXJzUGFuZWxUb3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFuZWxFbmFibGVkPXtmaWx0ZXJQYW5lbEVuYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM9e2ZpbHRlcnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1dpZHRoPXt3aW5kb3dXaWR0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzUXR5PXtncmlkQ2FyZExlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGVja2JveENsaWNrPXtoYW5kbGVDaGVja0JveENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25GaWx0ZXJDbGljaz17aGFuZGxlRmlsdGVyR3JvdXBDbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGVhckZpbHRlckl0ZW1zPXtjbGVhckZpbHRlckl0ZW19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3JpZXM9e2N1cnJDYXRlZ29yaWVzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsZWFyQWxsRmlsdGVycz17cmVzZXRGaWx0ZXJzU2VhcmNoQW5kQm9va21hcmtzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TGltaXRlZEZpbHRlcnNRdHk9e3Nob3dMaW1pdGVkRmlsdGVyc1F0eX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoQ29tcG9uZW50PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlclRleHQ9e3RvcFBhbmVsU2VhcmNoUGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZpbHRlcnNUb3BTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hRdWVyeX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvZm9jdXM9e0RFU0tUT1BfU0NSRUVOX1NJWkV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWFyY2g9e2hhbmRsZVNlYXJjaElucHV0Q2hhbmdlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRDb21wb25lbnQ9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFBvcHVwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbmVkPXtzb3J0T3BlbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic29ydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsPXtzb3J0T3B0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17c29ydE9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q9e2hhbmRsZVNvcnRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImZpbHRlcnNUb3BTZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9XaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNBbGlnbm1lbnQ9e3RvcFBhbmVsU29ydFBvcHVwTG9jYXRpb259IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TaG93QWxsQ2xpY2s9e2hhbmRsZVNob3dBbGxUb3BGaWx0ZXJzfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGlzTGVmdEZpbHRlclBhbmVsICYmIGlzU3RhbmRhcmRDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TGVmdEluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZD17ZmlsdGVyUGFuZWxFbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzUXR5PXtmaWx0ZXJzLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZHNRdHk9e2dyaWRDYXJkTGVufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZpbHRlcnNRdHk9e3NlbGVjdGVkRmlsdGVyc0l0ZW1zUXR5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dXaWR0aD17d2luZG93V2lkdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTW9iaWxlRmlsdGVyc1RvZ2dsZUNsaWNrPXtoYW5kbGVNb2JpbGVGaWx0ZXJzVG9nZ2xlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hDb21wb25lbnQ9eyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlclRleHQ9e3NlYXJjaFBsYWNlaG9sZGVyVGV4dH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwic2VhcmNoRmlsdGVyc0luZm9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hRdWVyeX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvZm9jdXM9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VhcmNoPXtoYW5kbGVTZWFyY2hJbnB1dENoYW5nZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydENvbXBvbmVudD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UG9wdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuZWQ9e3NvcnRPcGVuZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzb3J0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWw9e3NvcnRPcHRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXtzb3J0T3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdD17aGFuZGxlU29ydENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvV2lkdGg9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNBbGlnbm1lbnQ9XCJyaWdodFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydE9wdGlvbnM9e3NvcnRPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWY9e2ZpbHRlckluZm9SZWZ9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYXRMZWFzdE9uZUNhcmQgJiYgaXNTdGFuZGFyZENvbnRhaW5lciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdyaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNQZXJQYWdlPXtyZXN1bHRzUGVyUGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VzPXtjdXJyZW50UGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRzPXtncmlkQ2FyZHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkZWRSZWY9e3Njcm9sbEVsZW1lbnRSZWZ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNhcmRCb29rbWFyaz17aGFuZGxlQ2FyZEJvb2ttYXJraW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBcmlhTGl2ZUFjdGl2ZT17aXNHcmlkQXJlYUxpdmV9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtkaXNwbGF5TG9hZE1vcmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExvYWRNb3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtvbkxvYWRNb3JlQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93PXtudW1DYXJkc1RvU2hvd31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsPXtncmlkQ2FyZExlbn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGlzcGxheVBhZ2luYXRvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UGFnaW5hdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlQ291bnQ9e3BhZ2luYXRvckNvdW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2VOdW1iZXI9e2N1cnJlbnRQYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxQYWdlcz17dG90YWxQYWdlc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dJdGVtc1BlclBhZ2U9e3Jlc3VsdHNQZXJQYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxSZXN1bHRzPXtncmlkQ2FyZExlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3NldEN1cnJlbnRQYWdlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GcmFnbWVudD59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBhdExlYXN0T25lQ2FyZCAmJiBpc0Nhcm91c2VsQ29udGFpbmVyICYmICEoY2FyZFN0eWxlID09PSAnY3VzdG9tLWNhcmQnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxDYXJkc0Nhcm91c2VsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1F0eT17Z3JpZENhcmRMZW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRzPXtncmlkQ2FyZHN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJ0YWJsaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYXJkQm9va21hcms9e2hhbmRsZUNhcmRCb29rbWFya2luZ30gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBhdExlYXN0T25lQ2FyZCAmJiBpc0Nhcm91c2VsQ29udGFpbmVyICYmIChjYXJkU3R5bGUgPT09ICdjdXN0b20tY2FyZCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPE5vUmVzdWx0c1ZpZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJOb3QgU3VwcG9ydGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249XCJVc2luZyBjdXN0b20gY2FyZHMgd2l0aGluIGEgY2Fyb3VzZWwgbGF5b3V0IGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLiBQbGVhc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmUtYXV0aG9yIHRoZSBjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlVmFsdWU9XCJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGlzTG9hZGluZyAmJiAhYXRMZWFzdE9uZUNhcmQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TG9hZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9e0xPQURFUl9TSVpFLkJJR31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuPXshdG90YWxDYXJkTGltaXR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIWlzQXBpRmFpbHVyZSAmJiAhYXRMZWFzdE9uZUNhcmQgJiYgIWlzTG9hZGluZyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb1Jlc3VsdHNWaWV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXtub1Jlc3VsdHNUaXRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249e25vUmVzdWx0c0Rlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlVmFsdWU9e3NlYXJjaFF1ZXJ5fSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGlzQXBpRmFpbHVyZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb1Jlc3VsdHNWaWV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXthcGlGYWlsdXJlVGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXthcGlGYWlsdXJlRGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VWYWx1ZT1cIlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDwvRXhwYW5kYWJsZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgIDwvQ29uZmlnQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xufTtcblxuQ29udGFpbmVyLnByb3BUeXBlcyA9IHtcbiAgICBjb25maWc6IHNoYXBlKGNvbmZpZ1R5cGUpLFxufTtcblxuQ29udGFpbmVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBjb25maWc6IHt9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29udGFpbmVyO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vcmVhY3Qvc3JjL2pzL2NvbXBvbmVudHMvQ29uc29uYW50L0NvbnRhaW5lci9Db250YWluZXIuanN4Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///108\n"); +eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _classnames = __webpack_require__(6);\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nvar _propTypes = __webpack_require__(1);\n\n__webpack_require__(232);\n\nvar _lana = __webpack_require__(50);\n\nvar _Popup = __webpack_require__(233);\n\nvar _Popup2 = _interopRequireDefault(_Popup);\n\nvar _Search = __webpack_require__(234);\n\nvar _Search2 = _interopRequireDefault(_Search);\n\nvar _Loader = __webpack_require__(235);\n\nvar _Loader2 = _interopRequireDefault(_Loader);\n\nvar _general = __webpack_require__(5);\n\nvar _config = __webpack_require__(20);\n\nvar _CardsCarousel = __webpack_require__(236);\n\nvar _CardsCarousel2 = _interopRequireDefault(_CardsCarousel);\n\nvar _View = __webpack_require__(289);\n\nvar _View2 = _interopRequireDefault(_View);\n\nvar _LoadMore = __webpack_require__(290);\n\nvar _LoadMore2 = _interopRequireDefault(_LoadMore);\n\nvar _Bookmarks = __webpack_require__(291);\n\nvar _Bookmarks2 = _interopRequireDefault(_Bookmarks);\n\nvar _Paginator = __webpack_require__(292);\n\nvar _Paginator2 = _interopRequireDefault(_Paginator);\n\nvar _Grid = __webpack_require__(112);\n\nvar _Grid2 = _interopRequireDefault(_Grid);\n\nvar _CardFilterer = __webpack_require__(293);\n\nvar _CardFilterer2 = _interopRequireDefault(_CardFilterer);\n\nvar _Panel = __webpack_require__(295);\n\nvar _Panel2 = _interopRequireDefault(_Panel);\n\nvar _Panel3 = __webpack_require__(300);\n\nvar _Panel4 = _interopRequireDefault(_Panel3);\n\nvar _JsonProcessor = __webpack_require__(310);\n\nvar _JsonProcessor2 = _interopRequireDefault(_JsonProcessor);\n\nvar _hooks = __webpack_require__(7);\n\nvar _Info = __webpack_require__(311);\n\nvar _constants = __webpack_require__(15);\n\nvar _contexts = __webpack_require__(111);\n\nvar _consonant = __webpack_require__(110);\n\nvar _Helpers = __webpack_require__(22);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n/**\n * Consonant Card Collection\n * Config is implicitly populated by authors\n *\n * @component\n * @example\n * const config = {\n collection: {},\n featuredCards: [{}],\n filterPanel: {},\n hideCtaIds: [{}],\n hideCtaTags: [{}],\n sort: {},\n pagination: {},\n bookmarks: {},\n search: {},\n language: ''\n * }\n * return (\n * \n * )\n */\nvar Container = function Container(props) {\n var config = props.config;\n\n var getConfig = (0, _consonant.makeConfigGetter)(config);\n var filterGroupPrefix = 'ch_';\n var searchPrefix = 'sh_';\n var CARD_HASH_LENGTH = 10;\n\n /**\n **** Authored Configs ****\n */\n var filterPanelEnabled = getConfig('filterPanel', 'enabled');\n var filterPanelType = getConfig('filterPanel', 'type');\n var paginationType = getConfig('pagination', 'type');\n var paginationIsEnabled = getConfig('pagination', 'enabled');\n var resultsPerPage = getConfig('collection', 'resultsPerPage');\n var onlyShowBookmarks = getConfig('bookmarks', 'leftFilterPanel.bookmarkOnlyCollection');\n var authoredFilters = getConfig('filterPanel', 'filters');\n var filterLogic = getConfig('filterPanel', 'filterLogic').toLowerCase().trim();\n var totalCardLimit = getConfig('collection', 'totalCardsToShow');\n var sampleSize = getConfig('collection', 'reservoir.sample');\n var reservoirSize = getConfig('collection', 'reservoir.pool');\n var searchFields = getConfig('search', 'searchFields');\n var sortOptions = getConfig('sort', 'options');\n var defaultSort = getConfig('sort', 'defaultSort');\n var defaultSortOption = (0, _consonant.getDefaultSortOption)(config, defaultSort);\n var featuredCards = getConfig('featuredCards', '').toString().replace(/\\[|\\]/g, '').replace(/`/g, '').split(',');\n // eslint-disable-next-line no-use-before-define,max-len\n featuredCards = featuredCards.concat(featuredCards.map(function (id) {\n return rollingHash(id, CARD_HASH_LENGTH);\n }));\n var hideCtaIds = getConfig('hideCtaIds', '').toString().replace(/\\[|\\]/g, '').replace(/`/g, '').split(',');\n // eslint-disable-next-line no-use-before-define\n hideCtaIds = hideCtaIds.concat(hideCtaIds.map(function (id) {\n return rollingHash(id, CARD_HASH_LENGTH);\n }));\n var hideCtaTags = getConfig('hideCtaTags', '').toString().replace(/\\[|\\]/g, '').replace(/`/g, '').split(',');\n var leftPanelSearchPlaceholder = getConfig('search', 'i18n.leftFilterPanel.searchPlaceholderText');\n var topPanelSearchPlaceholder = getConfig('search', 'i18n.topFilterPanel.searchPlaceholderText');\n var searchPlaceholderText = getConfig('search', 'i18n.filterInfo.searchPlaceholderText');\n var noResultsTitle = getConfig('search', 'i18n.noResultsTitle');\n var noResultsDescription = getConfig('search', 'i18n.noResultsDescription');\n var apiFailureTitle = getConfig('collection', 'i18n.onErrorTitle');\n var apiFailureDescription = getConfig('collection', 'i18n.onErrorDescription');\n var isLazy = getConfig('collection', 'lazyload');\n var trackImpressions = getConfig('analytics', 'trackImpressions');\n var collectionIdentifier = getConfig('analytics', 'collectionIdentifier');\n var targetEnabled = getConfig('target', 'enabled');\n var useLastViewedSession = getConfig('target', 'lastViewedSession');\n var authoredMode = getConfig('collection', 'mode');\n var authoredLayoutContainer = getConfig('collection', 'layout.container');\n var showEmptyFilters = getConfig('filterPanel', 'showEmptyFilters');\n var eventFilter = getConfig('filterPanel', 'eventFilter');\n var searchEnabled = getConfig('search', 'enabled');\n var sortEnabled = getConfig('sort', 'enabled');\n var cardStyle = getConfig('collection', 'cardStyle');\n var title = getConfig('collection', 'i18n.title');\n var headers = getConfig('headers', '');\n var partialLoadWithBackgroundFetch = getConfig('collection', 'partialLoadWithBackgroundFetch.enabled');\n var partialLoadCount = getConfig('collection', 'partialLoadWithBackgroundFetch.partialLoadCount');\n /**\n **** Constants ****\n */\n var DESKTOP_SCREEN_SIZE = window.innerWidth >= _constants.DESKTOP_MIN_WIDTH;\n var isXorFilter = filterLogic.toLowerCase().trim() === _constants.FILTER_TYPES.XOR;\n var isCarouselContainer = authoredLayoutContainer === _constants.LAYOUT_CONTAINER.CAROUSEL;\n var isStandardContainer = authoredLayoutContainer !== _constants.LAYOUT_CONTAINER.CAROUSEL;\n var isCategoriesContainer = authoredLayoutContainer === _constants.LAYOUT_CONTAINER.CATEGORIES;\n\n // eslint-disable-next-line no-use-before-define\n var categories = getConfig('filterPanel', 'categories');\n // eslint-disable-next-line no-use-before-define, max-len\n var authoredCategories = isCategoriesContainer ? getAuthoredCategories(authoredFilters, categories) : [];\n var sanitizedEventFilter = eventFilter ? (0, _general.sanitizeEventFilter)(eventFilter) : [];\n\n /**\n **** Hooks ****\n */\n /**\n * @typedef {Array} timedCollection - result of Timed Event Sort\n * @description — As an alternative/iteration on filtered cards for timed\n * collections\n * @typedef {Function} setTimedCollection\n * @description - Sets timedCollection after setTimeout triggers\n *\n * @type {[Array, Function]} timedCollection\n */\n /* eslint-disable no-unused-vars */\n\n var _useState = (0, _react.useState)([]),\n _useState2 = _slicedToArray(_useState, 2),\n timedCollection = _useState2[0],\n setTimedCollection = _useState2[1];\n /**\n * @typedef {Number} transition - MS to next transition\n * @description — set by eventSort, from cardFilteret.nextTransitionMs\n * @typedef {Function} setTransition\n * @description - next Transition trigger\n *\n * @type {[Number, Function]} transition\n */\n /* eslint-disable no-unused-vars */\n\n\n var _useState3 = (0, _react.useState)(0),\n _useState4 = _slicedToArray(_useState3, 2),\n transition = _useState4[0],\n setTransition = _useState4[1];\n\n var _useState5 = (0, _react.useState)(0),\n _useState6 = _slicedToArray(_useState5, 2),\n cardCount = _useState6[0],\n setCardCount = _useState6[1];\n\n var _useState7 = (0, _react.useState)(false),\n _useState8 = _slicedToArray(_useState7, 2),\n isPartialLoad = _useState8[0],\n setIsPartialLoad = _useState8[1];\n\n var hashedRef = (0, _react.useRef)(false);\n\n var _React$useState = _react2.default.useState(),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n updateState = _React$useState2[1];\n\n var scrollElementRef = (0, _react.useRef)(null);\n var nextTransition = _react2.default.useCallback(function () {\n return updateState({});\n }, []);\n /**\n * @typedef {Object} urlState\n * @description — object with url query values\n *\n * @typedef {Function} setUrlState\n * @description - set url query value by key\n *\n * @typedef {Function} clearUrlState\n * @description - clear whole url query state\n *\n * @type {[Object, Function, Function]} OpenDropdown\n */\n\n var _useURLState = (0, _hooks.useURLState)(),\n _useURLState2 = _slicedToArray(_useURLState, 3),\n urlState = _useURLState2[0],\n setUrlState = _useURLState2[1],\n clearUrlState = _useURLState2[2];\n\n /**\n * @typedef {Number} OpenDropdownState - Id of a selected dropdown\n * @description — Passed in Context Provider So All Nested Components can be in sync\n *\n * @typedef {Function} OpenDropdownStateSetter\n * @description\n *\n * @type {[Number, Function]} OpenDropdown\n */\n\n\n var _useState9 = (0, _react.useState)(null),\n _useState10 = _slicedToArray(_useState9, 2),\n openDropdown = _useState10[0],\n setOpenDropdown = _useState10[1];\n\n /**\n * @typedef {Array} BookmarkedCardIdsState — Initiailzed From Local Storage\n *\n * @typedef {Function} BookmarkedCardIdsSetter — Sets internal state of saved bookmarks\n *\n * @type {[Array, Function]} BookmarkedCardIds\n */\n\n\n var _useState11 = (0, _react.useState)((0, _general.readBookmarksFromLocalStorage)()),\n _useState12 = _slicedToArray(_useState11, 2),\n bookmarkedCardIds = _useState12[0],\n setBookmarkedCardIds = _useState12[1];\n\n var _useState13 = (0, _react.useState)((0, _general.readInclusionsFromLocalStorage)()),\n _useState14 = _slicedToArray(_useState13, 1),\n inclusionIds = _useState14[0];\n\n /**\n * @typedef {Number} CurrentPageState — Initialized to the first page\n * @description Same page state for 'Load More' or 'Paginator'\n *\n * @typedef {Function} CurrentPageStateSetter — Sets page as user navigates through pages\n *\n * @type {[Number, Function]} CurrentPage\n */\n\n\n var _useState15 = (0, _react.useState)(+urlState.page || 1),\n _useState16 = _slicedToArray(_useState15, 2),\n currentPage = _useState16[0],\n setCurrentPage = _useState16[1];\n\n /**\n * @typedef {Array} FiltersState — Contains Filters For Filter Panel\n * @description Same Filter state for Left or Top\n *\n * @typedef {Function} FiltersStateSetter — Sets Authored Filters as State\n *\n * @type {[Array, Function]} Filters\n */\n\n\n var _useState17 = (0, _react.useState)([]),\n _useState18 = _slicedToArray(_useState17, 2),\n filters = _useState18[0],\n setFilters = _useState18[1];\n // window.filters = filters;\n\n\n var _useState19 = (0, _react.useState)([]),\n _useState20 = _slicedToArray(_useState19, 2),\n currCategories = _useState20[0],\n setCategories = _useState20[1];\n\n /**\n * @typedef {String} SearchQueryState — Will be used to search through cards\n * @typedef {Function} SearchQueryStateSetter — Sets user search query\n *\n * @type {[String, Function]} SearchQuery\n */\n\n\n var _useState21 = (0, _react.useState)(''),\n _useState22 = _slicedToArray(_useState21, 2),\n searchQuery = _useState22[0],\n setSearchQuery = _useState22[1];\n\n var _useState23 = (0, _react.useState)(''),\n _useState24 = _slicedToArray(_useState23, 2),\n selectedCategory = _useState24[0],\n setSelectedCategory = _useState24[1];\n\n /**\n * @typedef {String} SortOpenedState — Toggles Sort Popup Opened Or Closed\n * @typedef {Function} SortOpenedStateSetter — Sets Sort Option\n *\n * @type {[Boolean, Function]} SortOpened\n */\n\n\n var _useState25 = (0, _react.useState)(false),\n _useState26 = _slicedToArray(_useState25, 2),\n sortOpened = _useState26[0],\n setSortOpened = _useState26[1];\n\n /**\n * @typedef {String} SortOptionState — Can be one of a range of types\n * @description 'Title (A-Z)', 'Title (Z-A), Date (New to Old), Date (Old to New), Featured\n *\n * @typedef {Function} SortOptionStateSetter — Sets Sort Option\n *\n * @type {[String, Function]} SortOption\n */\n\n\n var _useState27 = (0, _react.useState)(defaultSortOption),\n _useState28 = _slicedToArray(_useState27, 2),\n sortOption = _useState28[0],\n setSortOption = _useState28[1];\n\n if (sortOption.sort === _constants.SORT_TYPES.RANDOM) {\n totalCardLimit = sampleSize;\n }\n\n /**\n * @typedef {Boolean} WindowWidthState — Can either be true or false\n * @description Used to toggle between mobile and desktop layouts\n *\n * @typedef {Function} WindowWidthStateSetter — Updates window width\n *\n * @type {[Number]} WindowWidth\n */\n\n var _useWindowDimensions = (0, _hooks.useWindowDimensions)(),\n windowWidth = _useWindowDimensions.width;\n\n /**\n * @typedef {Boolean} ShowMobileFiltersState — Can either be true or false\n * @description When true mobile filters will appear on the page\n *\n * @typedef {Function} ShowMobileFiltersStateSetter\n * @description Toggles mobile filter header/footer to show or hide\n *\n * @type {[Boolean, Function]} ShowMobileFilters\n */\n\n\n var _useState29 = (0, _react.useState)(false),\n _useState30 = _slicedToArray(_useState29, 2),\n showMobileFilters = _useState30[0],\n setShowMobileFilters = _useState30[1];\n\n /**\n * @typedef {Boolean} ShowBookmarkState — Can either be true or false\n * @description For Top Filter Panel, there is a limit to how many filter groups can show\n *\n * @typedef {Function} ShowBookmarkStateSetter — Sets limit on filter quantity\n * @description When over allowed Filter Group Quantity - A \"More +\" button appears\n *\n * @type {[Boolean, Function]} ShowBookmarks\n */\n\n\n var _useState31 = (0, _react.useState)(false),\n _useState32 = _slicedToArray(_useState31, 2),\n showBookmarks = _useState32[0],\n setShowBookmarks = _useState32[1];\n\n /**\n * @typedef {Boolean} LimitFilterQuantityState — Can either be true or false\n * @description For Top Filter Panel, there is a limit to how many filter groups can show\n *\n * @typedef {Function} LimitFilterQuantityStateSetter — Sets limit on filter quantity\n * @description When over allowed Filter Group Quantity - A \"More +\" button appears\n *\n * @type {[Boolean, Function]} LimitFilterQuantity\n */\n\n\n var _useState33 = (0, _react.useState)(filterPanelType === 'top'),\n _useState34 = _slicedToArray(_useState33, 2),\n showLimitedFiltersQty = _useState34[0],\n setShowLimitedFiltersQty = _useState34[1];\n\n /**\n * @typedef {Array} CardState\n * @description sets cards retrieved either server side render or API call\n *\n * @typedef {Function} CardStateSetter\n * @description E.g. Render Featured Cards Server side, While collection cards from API call\n *\n * @type {[Array, Function]} Cards\n */\n\n\n var _useState35 = (0, _react.useState)([]),\n _useState36 = _slicedToArray(_useState35, 2),\n cards = _useState36[0],\n setCards = _useState36[1];\n\n /**\n * @typedef {Boolean} LoadingState — Can either be true or false\n * @description When true a loading spinner will appear on the page\n *\n * @typedef {Function} LoadingStateSetter — Sets loader true or false\n * @description True while waiting for API response. False on cards retrieved or api failure\n *\n * @type {[Boolean, Function]} Loading\n */\n\n\n var _useState37 = (0, _react.useState)(false),\n _useState38 = _slicedToArray(_useState37, 2),\n isLoading = _useState38[0],\n setLoading = _useState38[1];\n\n /**\n * @typedef {Boolean} ApiFailureState — Can either be true or false\n * @description When true an API error has occured\n *\n * @typedef {Function} ApiFailureStateSetter — Sets API failure flag true or false\n * @description True when retrieved or api failure. False otherwise\n *\n * @type {[Boolean, Function]} ApiFailure\n */\n\n\n var _useState39 = (0, _react.useState)(false),\n _useState40 = _slicedToArray(_useState39, 2),\n isApiFailure = _useState40[0],\n setApiFailure = _useState40[1];\n\n var _useState41 = (0, _react.useState)(null),\n _useState42 = _slicedToArray(_useState41, 2),\n randomSortId = _useState42[0],\n setRandomSortId = _useState42[1];\n\n var _useState43 = (0, _react.useState)(true),\n _useState44 = _slicedToArray(_useState43, 2),\n isFirstLoad = _useState44[0],\n setIsFirstLoad = _useState44[1];\n\n var _useState45 = (0, _react.useState)(),\n _useState46 = _slicedToArray(_useState45, 2),\n visibleStamp = _useState46[0],\n setVisibleStamp = _useState46[1];\n\n var _useState47 = (0, _react.useState)(false),\n _useState48 = _slicedToArray(_useState47, 2),\n hasFetched = _useState48[0],\n setHasFetched = _useState48[1];\n\n /**\n * Creates a DOM reference to first filter item\n * @returns {Object} - filter item DOM reference\n */\n\n\n var filterItemRef = (0, _react.createRef)();\n\n /**\n * Creates a DOM reference to filter info button\n * @returns {Object} - filter info DOM reference\n */\n var filterInfoRef = (0, _react.createRef)();\n\n /**\n **** Helper Methods ****\n */\n\n function getParentChild(id) {\n var i = id.length;\n while (id[i] !== '/' && i >= 0) {\n i--;\n }\n return [id.substring(0, i), id.substring(i + 1)];\n }\n\n function rollingHash(s, l) {\n if (!s) {\n return '';\n }\n var BASE = 53;\n var MOD = Math.pow(10, l) + 7;\n var hash = 0;\n var basePower = 1;\n for (var i = 0; i < s.length; i++) {\n hash = (hash + (s.charCodeAt(i) - 97 + 1) * basePower) % MOD;\n basePower = basePower * BASE % MOD;\n }\n return ((hash + MOD) % MOD).toString(36);\n }\n\n /**\n * For a given group of filters, it will unselect all of them\n * @param {Array} filterGroups - a group of filters\n * @returns {Array} fitlerGroups - the updated group of filters\n */\n var getAllFiltersClearedState = function getAllFiltersClearedState(filterGroups) {\n return filterGroups.map(function (filterGroup) {\n return _extends({}, filterGroup, {\n items: filterGroup.items.map(function (filterItem) {\n return _extends({}, filterItem, {\n selected: false\n });\n })\n });\n });\n };\n\n /**\n * For a given group of filters, it will unselect the one with a given id\n * @param {Number} id - the id of an individual filter item\n * @param {Array} filterGroups - a group of filters\n * @returns {Array} fitlerGroups - the updated group of filters\n */\n var getFilterItemClearedState = function getFilterItemClearedState(id, filterGroups) {\n return filterGroups.map(function (filterGroup) {\n if (filterGroup.id !== id) {\n return filterGroup;\n }\n return _extends({}, filterGroup, {\n items: filterGroup.items.map(function (filterItem) {\n return _extends({}, filterItem, {\n selected: false\n });\n })\n });\n });\n };\n\n /**\n * Will uncheck a filter with a given id\n * @param {Number} id - the id of an individual filter item\n * @returns {Void} - an updated state\n */\n var clearFilterItem = function clearFilterItem(id) {\n var group = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n setFilters(function (prevFilters) {\n var filterClearedState = getFilterItemClearedState(id, prevFilters);\n return filterClearedState;\n });\n\n var urlParams = new URLSearchParams(window.location.search);\n clearUrlState();\n // actually clear the url state\n urlParams.forEach(function (value, key) {\n var chFilter = key.toLowerCase().replace('ch_', '').replace(/ /g, '-');\n if (key.indexOf(filterGroupPrefix) !== 0 && !id.toLowerCase().includes(chFilter) || !group.toLowerCase().replace(/ /g, '-').includes(chFilter)) {\n setUrlState(key, value.replace(/%20/g, ' '));\n }\n });\n };\n\n /**\n * Will uncheck all filter items\n * @returns {Void} - an updated state\n */\n var clearAllFilters = function clearAllFilters() {\n setFilters(function (prevFilters) {\n var allFiltersClearedState = getAllFiltersClearedState(prevFilters);\n return allFiltersClearedState;\n });\n\n var urlParams = new URLSearchParams(window.location.search);\n\n clearUrlState();\n urlParams.forEach(function (value, key) {\n if (key.indexOf(filterGroupPrefix) !== 0) setUrlState(key, value);\n });\n };\n\n /**\n * Resets filters, and search to empty. Hides bookmark filter\n * @returns {Void} - an updated state\n */\n var resetFiltersSearchAndBookmarks = function resetFiltersSearchAndBookmarks() {\n clearAllFilters();\n setSearchQuery('');\n var urlParams = new URLSearchParams(window.location.search);\n clearUrlState();\n urlParams.forEach(function (value, key) {\n if (key.indexOf(filterGroupPrefix) === -1 && key.indexOf(searchPrefix) === -1) setUrlState(key, value);\n });\n setShowBookmarks(false);\n };\n\n /**\n **** EVENT HANDLERS ****\n */\n\n /**\n * On Load More Button Click, Increment Page Cuonter By 1\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var onLoadMoreClick = function onLoadMoreClick() {\n setCurrentPage(function (prevState) {\n return prevState + 1;\n });\n window.scrollTo(0, window.pageYOffset);\n };\n\n /**\n * Takes sort user selects and sets it so cards are sorted\n *\n * @param {ClickEvent} e - The observable event.\n * @listens ClickEvent\n */\n var handleSortChange = function handleSortChange(option) {\n setSortOption(option);\n setSortOpened(false);\n setIsFirstLoad(false);\n };\n\n /**\n * Handles whenever the search box is clicked or input field\n * changes\n *\n * @param {ClickEvent, ChangeEvent} e\n * @listens ClickEvent, ChangeEvent\n */\n var handleSearchInputChange = function handleSearchInputChange(val) {\n setSearchQuery(val);\n setCurrentPage(1);\n setUrlState(searchPrefix, val);\n };\n\n /**\n * Handles when a group of filters is clicked. Behavior should be\n * to toggle group open or closed\n *\n * @param {ClickEvent} e - The observable event.\n * @listens ClickEvent\n */\n var handleFilterGroupClick = function handleFilterGroupClick(filterId) {\n setFilters(function (prevFilters) {\n var opened = void 0;\n return prevFilters.map(function (el) {\n if (el.id === filterId) {\n opened = !el.opened;\n } else {\n // eslint-disable-next-line prefer-destructuring\n opened = el.opened;\n }\n return _extends({}, el, { opened: opened });\n });\n });\n };\n\n /**\n * Will find and set needed filter to url\n *\n * @param {string} filterId - selected filter group id\n * @param {string} itemId - selected filter item id\n * @param {boolean} isChecked\n * @returns {Void} - an updated url\n */\n var changeUrlState = function changeUrlState(filterId, itemId, isChecked) {\n var _filters$find = filters.find(function (_ref) {\n var id = _ref.id;\n return id === filterId;\n }),\n group = _filters$find.group,\n items = _filters$find.items;\n\n var _items$find = items.find(function (_ref2) {\n var id = _ref2.id;\n return id === itemId;\n }),\n label = _items$find.label;\n\n var urlStateValue = urlState[filterGroupPrefix + group] || [];\n /* istanbul ignore if */\n if (typeof urlStateValue === 'string') {\n urlStateValue = urlStateValue.split(',');\n }\n\n var value = isChecked ? [].concat(_toConsumableArray(urlStateValue), [label]) : urlStateValue.filter(function (item) {\n return item !== label;\n });\n\n setUrlState(filterGroupPrefix + group, value);\n };\n\n /**\n * Handles what happens when a specific filter item (checkbox)\n * is clicked\n *\n * @param {CheckboxClickEvent} e\n * @listens CheckboxClickEvent\n */\n var handleCheckBoxChange = function handleCheckBoxChange(filterId, itemId, isChecked) {\n if (isXorFilter && isChecked) {\n clearAllFilters();\n }\n\n setFilters(function (prevFilters) {\n return prevFilters.map(function (filter) {\n if (filter.id !== filterId) return filter;\n\n return _extends({}, filter, {\n items: filter.items.map(function (item) {\n return _extends({}, item, {\n selected: item.id === itemId ? !item.selected : item.selected\n });\n })\n });\n });\n });\n setCurrentPage(1);\n changeUrlState(filterId, itemId, isChecked);\n };\n\n /**\n * Shows/Hides Mobile Filter Panel\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleMobileFiltersToggle = function handleMobileFiltersToggle() {\n return setShowMobileFilters(function (prev) {\n return !prev;\n });\n };\n\n /**\n * When a card's bookmark icon is clicked, save the card\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleCardBookmarking = function handleCardBookmarking(id) {\n // Update bookmarked IDs\n var cardIsBookmarked = bookmarkedCardIds.find(function (card) {\n return card === id;\n });\n\n if (cardIsBookmarked) {\n setBookmarkedCardIds(function (prev) {\n return prev.filter(function (el) {\n return el !== id;\n });\n });\n } else {\n setBookmarkedCardIds(function (prev) {\n return [].concat(_toConsumableArray(prev), [id]);\n });\n }\n };\n\n /**\n * Will show or hide all saved bookmarks when clicked\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleShowBookmarksFilterClick = function handleShowBookmarksFilterClick(e) {\n e.stopPropagation();\n setShowBookmarks(function (prev) {\n return !prev;\n });\n setCurrentPage(1);\n };\n\n /**\n * If top filter panel, toggle or hide more button\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleShowAllTopFilters = function handleShowAllTopFilters() {\n setShowLimitedFiltersQty(function (prev) {\n return !prev;\n });\n };\n\n /**\n * On window click, all dropdowns should hide\n *\n * @param {ClickEvent} e\n * @listens ClickEvent\n */\n var handleWindowClick = function handleWindowClick() {\n setOpenDropdown(null);\n };\n\n /**\n * Handles escape for mobile filter dialog\n *\n * @param event\n */\n var handleMobileFilterEscape = function handleMobileFilterEscape(event) {\n if (event.key !== 'Escape' && event.key !== 'Esc') return;\n\n setShowMobileFilters(false);\n };\n\n /**\n **** Effects ****\n */\n\n /**\n * Sets authored filters as state\n * @returns {Void} - an updated state\n */\n\n (0, _react.useEffect)(function () {\n setFilters(authoredFilters.map(function (filterGroup) {\n return _extends({}, filterGroup, {\n opened: DESKTOP_SCREEN_SIZE ? filterGroup.openedOnLoad : false,\n items: filterGroup.items.map(function (filterItem) {\n return _extends({}, filterItem, {\n selected: false\n });\n })\n });\n }));\n }, []);\n\n /**\n * Sets filters from url as state\n * @returns {Void} - an updated state\n */\n (0, _react.useEffect)(function () {\n setFilters(function (origin) {\n return origin.map(function (filter) {\n var group = filter.group,\n items = filter.items;\n\n var urlStateValue = urlState[filterGroupPrefix + group];\n\n if (!urlStateValue) return filter;\n /* istanbul ignore next */\n var urlStateArray = urlStateValue.split(',');\n return _extends({}, filter, {\n opened: true,\n /* istanbul ignore next */\n items: items.map(function (item) {\n return _extends({}, item, {\n selected: urlStateArray.includes(String(item.label))\n });\n })\n });\n });\n });\n var urlSearchValue = urlState[searchPrefix];\n if (urlSearchValue) {\n setSearchQuery(urlSearchValue[0]);\n }\n }, []);\n\n (0, _react.useEffect)(function () {\n setRandomSortId(Math.floor(Math.random() * 10e12));\n }, []);\n\n /**\n * Trigger after button load more click\n * @returns {Void} - an updated url page\n */\n (0, _react.useEffect)(function () {\n setUrlState('page', currentPage === 1 ? '' : currentPage);\n }, [currentPage]);\n\n var removeEmptyFilters = function removeEmptyFilters(allFilters, cardsFromJson) {\n var _ref3;\n\n var tags = (_ref3 = []).concat.apply(_ref3, _toConsumableArray(cardsFromJson.map(function (card) {\n return card.tags.map(function (tag) {\n return tag.id;\n });\n })));\n\n var timingTags = [_constants.EVENT_TIMING_IDS.LIVE, _constants.EVENT_TIMING_IDS.ONDEMAND, _constants.EVENT_TIMING_IDS.UPCOMING];\n\n return allFilters.map(function (filter) {\n return _extends({}, filter, {\n /* istanbul ignore next */\n items: filter.items.filter(function (item) {\n return tags.includes(item.id) || tags.includes(item.label) || tags.toString().includes('/' + item.id) // ***** FIX HERE *****\n || timingTags.includes(item.id);\n })\n });\n }).filter(function (filter) {\n return filter.items.length > 0;\n });\n };\n\n /**\n * This handles getting Cards, there are some conditions:\n * - If target is not enabled a simple request is made without mods or delay.\n * - If target is enabled & tVisitor API is present add values from Visitor\n * - If target is enabled & the Visitor API is not present setTimeout with\n * counter to recheck for the Visitor API. If 20 attempts are made w/o\n * success fail the request.\n * @returns {Void} - an updated state\n */\n (0, _react.useEffect)(function () {\n if (isLazy && visibleStamp || isLazy && !hasFetched) {\n return;\n }\n var _window = window,\n visitorPromise = _window.__satelliteLoadedPromise;\n\n\n var collectionEndpoint = getConfig('collection', 'endpoint');\n var fallbackEndpoint = getConfig('collection', 'fallbackEndpoint');\n\n var r = new RegExp('^(?:[a-z]+:)?//', 'i');\n var collectionEndpointURI = void 0;\n if (r.test(collectionEndpoint)) {\n collectionEndpointURI = new URL(collectionEndpoint);\n } else {\n collectionEndpointURI = new URL(collectionEndpoint, window.location.origin);\n }\n\n if (!fallbackEndpoint) {\n collectionEndpointURI.searchParams.set('flatFile', false);\n collectionEndpoint = collectionEndpointURI.toString();\n }\n\n setLoading(true);\n\n /**\n * @func getCards\n * @desc wraps fetch with function to make it reusable\n *\n * @param {String} endPoint, URL with params for card request\n * @returns {Void} - an updated state\n */\n function getCards() {\n var endPoint = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : collectionEndpoint;\n\n var start = Date.now();\n return window.fetch(endPoint, {\n credentials: 'include',\n headers: headers\n }).then(function (resp) {\n var ok = resp.ok,\n status = resp.status,\n statusText = resp.statusText,\n url = resp.url;\n\n\n if (ok) {\n return resp.json().then(function (json) {\n var validData = !!Object.keys(json).length;\n\n if (validData) return json;\n\n (0, _lana.logLana)({ message: 'no valid response data from ' + endPoint, tags: 'collection' });\n /* istanbul ignore next */\n return Promise.reject(new Error('no valid reponse data'));\n });\n }\n (0, _lana.logLana)({ message: 'failure for call to ' + url, tags: 'collection', errorMessage: status + ': ' + statusText });\n return Promise.reject(new Error(status + ': ' + statusText + ', failure for call to ' + url));\n }).then(function (payload) {\n (0, _lana.logLana)({ message: 'response took ' + (Date.now() - start) / 1000 + 's', tags: 'collection' });\n setLoading(false);\n setIsFirstLoad(true);\n if (!(0, _general.getByPath)(payload, 'cards.length')) {\n (0, _lana.logLana)({ message: 'no cards return by query to this endpoint: ' + endPoint, tags: 'collection' });\n return;\n }\n if (payload.isHashed && !hashedRef.current) {\n hashedRef.current = true;\n var TAG_HASH_LENGTH = 6;\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = authoredFilters[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var group = _step.value;\n\n group.id = rollingHash(group.id, TAG_HASH_LENGTH);\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = group.items[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var filterItem = _step3.value;\n\n var _getParentChild = getParentChild(filterItem.id),\n _getParentChild2 = _slicedToArray(_getParentChild, 2),\n parent = _getParentChild2[0],\n child = _getParentChild2[1];\n\n filterItem.id = rollingHash(parent, TAG_HASH_LENGTH) + '/' + rollingHash(child, TAG_HASH_LENGTH);\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n var temp = [];\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = hideCtaTags[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var tag = _step2.value;\n\n var _getParentChild3 = getParentChild(tag),\n _getParentChild4 = _slicedToArray(_getParentChild3, 2),\n parent = _getParentChild4[0],\n child = _getParentChild4[1];\n\n if (parent !== '' && child !== '') {\n temp.push(rollingHash(parent, TAG_HASH_LENGTH) + '/' + rollingHash(child, TAG_HASH_LENGTH));\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n hideCtaTags = temp;\n }\n setCardCount(payload.totalCount ? payload.totalCount : payload.cards.length);\n\n var _removeDuplicateCards = new _JsonProcessor2.default(payload.cards).removeDuplicateCards().addCardMetaData(_constants.TRUNCATE_TEXT_QTY, onlyShowBookmarks, bookmarkedCardIds, hideCtaIds, hideCtaTags),\n _removeDuplicateCards2 = _removeDuplicateCards.processedCards,\n processedCards = _removeDuplicateCards2 === undefined ? [] : _removeDuplicateCards2;\n\n if (isCategoriesContainer) {\n setFilters(function (prevFilters) {\n return prevFilters.map(function (filter) {\n var group = filter.group,\n items = filter.items;\n\n var urlStateValue = urlState[filterGroupPrefix + group];\n if (!urlStateValue) return filter;\n var urlStateArray = urlStateValue.split(',');\n return _extends({}, filter, {\n opened: true,\n items: items.map(function (item) {\n return _extends({}, item, {\n selected: urlStateArray.includes(String(item.label))\n });\n })\n });\n });\n });\n } else {\n setFilters(function () {\n return authoredFilters.map(function (filter) {\n var group = filter.group,\n items = filter.items;\n\n var urlStateValue = urlState[filterGroupPrefix + group];\n if (!urlStateValue) return filter;\n var urlStateArray = urlStateValue.split(',');\n return _extends({}, filter, {\n opened: true,\n items: items.map(function (item) {\n return _extends({}, item, {\n selected: urlStateArray.includes(String(item.label))\n });\n })\n });\n });\n });\n }\n\n var transitions = (0, _general.getTransitions)(processedCards);\n if (sortOption.sort.toLowerCase() === 'eventsort') {\n while (transitions.size() > 0) {\n setTimeout(function () {\n nextTransition();\n }, transitions.dequeue().priority + _constants.ONE_SECOND_DELAY);\n }\n }\n\n setCards(processedCards);\n if (!showEmptyFilters) {\n setFilters(function (prevFilters) {\n return removeEmptyFilters(prevFilters, processedCards);\n });\n }\n setTimeout(function () {\n if (!scrollElementRef.current) return;\n if (processedCards.length === 0) return;\n if (currentPage === 1) return;\n var cardsToshow = processedCards.slice(0, resultsPerPage * currentPage);\n var getLastPageID = resultsPerPage * currentPage - resultsPerPage;\n /* istanbul ignore if */\n if (cardsToshow.length < getLastPageID) return;\n var lastID = scrollElementRef.current.children[getLastPageID];\n lastID.scrollIntoView();\n }, 100);\n }).catch(function () {\n if (endPoint === collectionEndpoint && fallbackEndpoint) {\n getCards(fallbackEndpoint);\n return;\n }\n (0, _lana.logLana)({ message: 'failed to return processed cards', tags: 'collection' });\n setLoading(false);\n setApiFailure(true);\n });\n }\n /**\n * @func getVisitorData\n * @desc wraps fetching Visitor API data in a function for reuse, also if\n * last used session is checked, update currentEntityId with targetValueRevealID\n *\n * @param {Promise} visitorApi, window.__satelliteLoadedPromise when accessed\n * @returns {Void} - an updated state, thru calling getCards\n */\n /* istanbul ignore next */\n function getVisitorData(visitorApi) {\n var collectionURI = new URL(collectionEndpoint);\n\n if (useLastViewedSession) {\n var targetRevealId = localStorage.getItem('targetValueRevealID');\n if (targetRevealId) {\n collectionURI.searchParams.set('currentEntityId', targetRevealId);\n }\n }\n\n visitorApi.then(function (result) {\n if (window.alloy && window.edgeConfigId) {\n window.alloy('getIdentity').then(function (res) {\n collectionURI.searchParams.set('mcgvid', res.identity.ECID);\n collectionURI.searchParams.set('mboxMCGLH', res.edge.regionId);\n getCards(collectionURI.toString());\n });\n } else {\n var visitor = result.getVisitorId();\n collectionURI.searchParams.set('mcgvid', visitor.getMarketingCloudVisitorID());\n collectionURI.searchParams.set('sdid', visitor.getSupplementalDataID());\n collectionURI.searchParams.set('mboxAAMB', visitor.getAudienceManagerBlob());\n collectionURI.searchParams.set('mboxMCGLH', visitor.getAudienceManagerLocationHint());\n getCards(collectionURI.toString());\n }\n });\n }\n\n /**\n * @func visitorRetry\n * @desc Visitor API is late loading often, this sets a recursive call\n * in a setTimeout to run 20 times, and then fail the request.\n *\n * @returns {Void} - an updated state, thru calling getVisitorData which\n * calls getCards\n */\n /* istanbul ignore next */\n function visitorRetry() {\n var retryCount = 0;\n\n var timedRetry = function timedRetry() {\n setTimeout(function () {\n if (retryCount >= 20) {\n setLoading(false);\n\n setApiFailure(true);\n\n return;\n }\n\n var _window2 = window,\n visitorPromiseRetry = _window2.__satelliteLoadedPromise;\n\n\n if (visitorPromiseRetry) {\n getVisitorData(visitorPromiseRetry);\n }\n\n if (!visitorPromiseRetry && retryCount < 20) {\n timedRetry();\n }\n\n retryCount += 1;\n }, 100);\n };\n\n timedRetry();\n }\n /* istanbul ignore if */\n if (targetEnabled && visitorPromise) {\n getVisitorData(visitorPromise);\n }\n /* istanbul ignore if */\n if (targetEnabled && !visitorPromise) {\n visitorRetry();\n }\n\n if (!targetEnabled && !partialLoadWithBackgroundFetch) {\n getCards();\n }\n if (!targetEnabled && partialLoadWithBackgroundFetch) {\n var collectionEndpointUrl = new URL(collectionEndpoint);\n collectionEndpointUrl.searchParams.set('partialLoadCount', String(partialLoadCount));\n setIsPartialLoad(true);\n getCards(collectionEndpointUrl.toString()).then(function () {\n getCards().then(function () {\n setIsPartialLoad(false);\n });\n });\n }\n }, [visibleStamp, hasFetched]);\n\n /**\n * Saves cards to local storage and updates card w/ bookmarked data\n * @returns {Void} - an updated state\n */\n (0, _react.useEffect)(function () {\n (0, _general.saveBookmarksToLocalStorage)(bookmarkedCardIds);\n setCards((0, _Helpers.getUpdatedCardBookmarkData)(cards, bookmarkedCardIds));\n }, [bookmarkedCardIds]);\n\n /**\n * Handles clearing state on showBookmarks\n * @returns {Void} - an updated state\n */\n (0, _react.useEffect)(function () {\n if (showBookmarks) {\n clearAllFilters();\n setSearchQuery('');\n }\n }, [showBookmarks]);\n\n /**\n * Handles focus and escape on mobile filter toggle\n * @returns {Void}\n */\n (0, _react.useEffect)(function () {\n if (showMobileFilters) {\n if (filterItemRef && filterItemRef.current) {\n filterItemRef.current.focusMobTitle();\n }\n document.addEventListener('keydown', handleMobileFilterEscape);\n } else {\n if (filterInfoRef && filterInfoRef.current) {\n filterInfoRef.current.focus();\n }\n document.removeEventListener('keydown', handleMobileFilterEscape);\n }\n\n return function () {\n document.removeEventListener('keydown', handleMobileFilterEscape);\n };\n }, [showMobileFilters]);\n\n var box = (0, _react.useRef)();\n\n (0, _react.useEffect)(function () {\n /* istanbul ignore if */\n if (box && !visibleStamp && isLazy) {\n var io = new IntersectionObserver(function (entries) {\n if (entries[0].intersectionRatio <= 0) return;\n setHasFetched(true);\n setVisibleStamp(new Date().getTime());\n });\n io.observe(box.current);\n }\n }, [box]);\n\n /**\n **** Derived State ****\n */\n\n /**\n * Array of filters chosen by the user\n * @type {Array}\n */\n var activeFilterIds = (0, _Helpers.getActiveFilterIds)(filters);\n\n /**\n * Array of filters panels (groupings) created by the author\n * @type {Array}\n */\n var activePanels = (0, _Helpers.getActivePanels)(activeFilterIds) || new Set();\n\n /**\n * Instance of CardFilterer class that handles returning subset of cards\n * based off user interactions\n *\n * @type {Object}\n */\n var cardFilterer = new _CardFilterer2.default(cards, randomSortId, sampleSize, reservoirSize, featuredCards);\n\n /**\n * @type {Function} getFilteredCollection\n * @desc Closure around CardFilterer for reuse within context\n * @returns {Object}\n * */\n var getFilteredCollection = function getFilteredCollection() {\n return cardFilterer.sortCards(sortOption, sanitizedEventFilter, featuredCards, hideCtaIds, isFirstLoad).keepBookmarkedCardsOnly(onlyShowBookmarks, bookmarkedCardIds, showBookmarks).keepCardsWithinDateRange().filterCards(activeFilterIds, activePanels, filterLogic, _constants.FILTER_TYPES, currCategories).truncateList(totalCardLimit).searchCards(searchQuery, searchFields, cardStyle).removeCards(inclusionIds);\n };\n\n /**\n * @type {Array} filteredCards: Filtered cards based off current state of page\n * @type {Number} nextTransitionMs: Number for timed event sort transition\n */\n /* eslint-disable no-unused-vars */\n\n var _getFilteredCollectio = getFilteredCollection(),\n _getFilteredCollectio2 = _getFilteredCollectio.filteredCards,\n filteredCards = _getFilteredCollectio2 === undefined ? [] : _getFilteredCollectio2,\n _getFilteredCollectio3 = _getFilteredCollectio.nextTransitionMs,\n nextTransitionMs = _getFilteredCollectio3 === undefined ? 0 : _getFilteredCollectio3;\n\n /**\n * Subset of cards to show the user\n * @type {Array}\n */\n\n\n var gridCards = timedCollection.length ? timedCollection : filteredCards;\n var gridCardLen = gridCards.length;\n if (isPartialLoad) {\n gridCardLen = cardCount;\n }\n\n /**\n * Total pages (used by Paginator Component)\n * @type {Number}\n */\n var totalPages = (0, _Helpers.getTotalPages)(resultsPerPage, gridCardLen);\n\n /**\n * Number of cards to show (used by Load More component)\n * @type {Number}\n */\n var numCardsToShow = (0, _Helpers.getNumCardsToShow)(resultsPerPage, currentPage, gridCardLen);\n\n /**\n * How many filters were selected - (used by Left Filter Panel)\n * @type {Number}\n */\n var selectedFiltersItemsQty = (0, _consonant.getNumSelectedFilterItems)(filters);\n\n /**\n * Conditions to Display A Form Of Pagination\n * @type {Boolean}\n */\n var displayPagination = (0, _Helpers.shouldDisplayPaginator)(paginationIsEnabled, totalCardLimit, gridCardLen);\n /**\n * Conditions to display the Load More Button\n * @type {Boolean}\n */\n var displayLoadMore = displayPagination && paginationType === 'loadMore';\n\n /**\n * Conditions to display the Paginator Component\n * @type {Boolean}\n */\n var displayPaginator = displayPagination && paginationType === 'paginator';\n\n /**\n * Conditions to display the Left Filter Panel Component\n * @type {Boolean}\n */\n var displayLeftFilterPanel = filterPanelEnabled && filterPanelType === _constants.FILTER_PANEL.LEFT;\n\n /**\n * Whether at lease one card was returned by Card Filterer\n * @type {Boolean}\n */\n var atLeastOneCard = gridCardLen > 0;\n\n /**\n * Where to place the Sort Popup (either left or right)\n * @type {String} - Location of Sort Popup in Top Filter Panel View\n */\n var topPanelSortPopupLocation = filters.length > 0 && windowWidth < _constants.TABLET_MIN_WIDTH ? _constants.SORT_POPUP_LOCATION.LEFT : _constants.SORT_POPUP_LOCATION.RIGHT;\n\n /**\n * How Long Paginator Component Should Be\n * @type {Number} - Location of Sort Popup in Top Filter Panel View\n */\n var paginatorCount = DESKTOP_SCREEN_SIZE ? _constants.PAGINATION_COUNT.DESKTOP : _constants.PAGINATION_COUNT.MOBILE;\n\n /**\n * Whether we are using the top filter panel or not\n * @type {Boolean}\n */\n var isTopFilterPanel = filterPanelType === _constants.FILTER_PANEL.TOP;\n\n /**\n * Whether we are using the top filter panel or not\n * @type {Boolean}\n */\n var isLeftFilterPanel = filterPanelType === _constants.FILTER_PANEL.LEFT;\n\n /**\n * Ui options that cause grid to rerender necessitate the aria attribute being set\n * @type {Boolean}\n */\n var isGridAreaLive = filterPanelEnabled || searchEnabled || sortEnabled || paginationIsEnabled;\n\n var filterNames = '';\n filters.forEach(function (el) {\n el.items.filter(function (item) {\n return item.selected;\n }).forEach(function (item) {\n filterNames += item.label + ', ';\n });\n });\n\n /**\n **** Class names ****\n */\n\n /**\n * Class name for the authored theme:\n * light, dark, darkest;\n * @type {String}\n */\n var themeClass = (0, _classnames2.default)({\n 'consonant-u-themeLight': authoredMode === _constants.THEME_TYPE.LIGHT,\n 'consonant-u-themeDark': authoredMode === _constants.THEME_TYPE.DARK,\n 'consonant-u-themeDarkest': authoredMode === _constants.THEME_TYPE.DARKEST\n });\n\n /**\n * @param {*} filterList\n * @param {*} categoryList\n * @returns List of categories for the top pills\n * Prepends the \"All Topics\" pill to the list of categories\n */\n function getAuthoredCategories(filterList, categoryList) {\n var categoryIds = filterList.filter(function (filter) {\n return filter.id.includes('caas:product-categories');\n }).map(function (item) {\n return item.id;\n });\n\n // Sorts category list based on authored order\n var selectedCategories = categoryIds.map(function (id) {\n return categoryList && categoryList.filter(function (category) {\n return category.id === id;\n })[0];\n });\n\n return [{\n group: 'All Topics',\n title: 'All Topics',\n id: '',\n items: []\n }].concat(_toConsumableArray(selectedCategories));\n }\n\n /**\n * @returns List of all products from all categories for the 'All products' menu\n * Prepends the \"All products\" label to the list of categories\n */\n function getAllCategoryProducts() {\n if (!authoredCategories) return [];\n var allCategories = [];\n var _iteratorNormalCompletion4 = true;\n var _didIteratorError4 = false;\n var _iteratorError4 = undefined;\n\n try {\n for (var _iterator4 = authoredCategories[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n var category = _step4.value;\n\n if (category && category.items) {\n var _iteratorNormalCompletion5 = true;\n var _didIteratorError5 = false;\n var _iteratorError5 = undefined;\n\n try {\n for (var _iterator5 = category.items[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n var item = _step5.value;\n\n item.fromCategory = true;\n }\n } catch (err) {\n _didIteratorError5 = true;\n _iteratorError5 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion5 && _iterator5.return) {\n _iterator5.return();\n }\n } finally {\n if (_didIteratorError5) {\n throw _iteratorError5;\n }\n }\n }\n\n allCategories = allCategories.concat(category.items);\n }\n }\n } catch (err) {\n _didIteratorError4 = true;\n _iteratorError4 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion4 && _iterator4.return) {\n _iterator4.return();\n }\n } finally {\n if (_didIteratorError4) {\n throw _iteratorError4;\n }\n }\n }\n\n return {\n group: 'All products',\n id: 'caas:all-products',\n items: allCategories\n };\n }\n\n /**\n * @param {*} selectedCategories\n * @param {*} groupId\n * Sets the categories and filters based on the selected category\n */\n function categoryHandler(selectedCategories, groupId) {\n var temp = [];\n var _iteratorNormalCompletion6 = true;\n var _didIteratorError6 = false;\n var _iteratorError6 = undefined;\n\n try {\n for (var _iterator6 = selectedCategories[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n var category = _step6.value;\n\n temp.push(category.id);\n }\n } catch (err) {\n _didIteratorError6 = true;\n _iteratorError6 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion6 && _iterator6.return) {\n _iterator6.return();\n }\n } finally {\n if (_didIteratorError6) {\n throw _iteratorError6;\n }\n }\n }\n\n setCategories(temp);\n setFilters(function (prevFilters) {\n prevFilters.pop();\n var newGroup = authoredCategories.filter(function (category) {\n return category.id === groupId;\n })[0];\n if (!newGroup.items.length) {\n var nextFilters = prevFilters.concat(getAllCategoryProducts());\n return nextFilters;\n }\n prevFilters.push(newGroup);\n return prevFilters;\n });\n setSelectedCategory(groupId);\n setCurrentPage(1);\n }\n\n /**\n * @param {*} category\n * @returns The Authored icon for the category if exists,\n * otherwise returns the default icon from the tags or an empty string\n */\n function getCategoryIcon(category) {\n var authoredIcon = authoredFilters.filter(function (filter) {\n return filter.id === category.id;\n }).map(function (filter) {\n return filter.icon;\n }).toString();\n return authoredIcon || category.icon || '';\n }\n\n var collectionStr = collectionIdentifier ? collectionIdentifier + ' | ' : '';\n var filterStr = selectedFiltersItemsQty ? filterNames : 'No Filters';\n var searchQueryStr = searchQuery || 'None';\n var collectionAnalytics = collectionStr + 'Card Collection | Filters: ' + filterStr + '| Search Query: ' + searchQueryStr;\n /**\n * Class name for the consonant wrapper:\n * whether consonant wrapper contains left filter;\n * @type {String}\n */\n var wrapperClass = (0, _classnames2.default)({\n 'consonant-Wrapper': true,\n 'consonant-Wrapper--32MarginContainer': authoredLayoutContainer === _constants.LAYOUT_CONTAINER.SIZE_100_VW_32_MARGIN,\n 'consonant-Wrapper--83PercentContainier': authoredLayoutContainer === _constants.LAYOUT_CONTAINER.SIZE_83_VW,\n 'consonant-Wrapper--1200MaxWidth': authoredLayoutContainer === _constants.LAYOUT_CONTAINER.SIZE_1200_PX,\n 'consonant-Wrapper--1600MaxWidth': authoredLayoutContainer === _constants.LAYOUT_CONTAINER.SIZE_1600_PX,\n 'consonant-Wrapper--1200MaxWidth Categories': isCategoriesContainer,\n 'consonant-Wrapper--carousel': isCarouselContainer,\n 'consonant-Wrapper--withLeftFilter': filterPanelEnabled && isLeftFilterPanel\n });\n\n (0, _react.useEffect)(function () {\n if (isCategoriesContainer) {\n setFilters(function (prevFilters) {\n var nextFilters = prevFilters.concat(getAllCategoryProducts());\n return nextFilters;\n });\n }\n }, []);\n\n return _react2.default.createElement(\n _contexts.ConfigContext.Provider,\n { value: config },\n _react2.default.createElement(\n _contexts.ExpandableContext.Provider,\n { value: { value: openDropdown, setValue: setOpenDropdown } },\n _react2.default.createElement(\n 'section',\n {\n ref: box,\n role: 'group',\n 'aria-label': title || 'Card Collection',\n 'daa-lh': collectionAnalytics,\n 'daa-im': String(trackImpressions),\n onClick: handleWindowClick,\n className: wrapperClass + ' ' + themeClass },\n _react2.default.createElement(\n 'div',\n { className: 'consonant-Wrapper-inner' },\n isCategoriesContainer && _react2.default.createElement(\n _react.Fragment,\n null,\n _react2.default.createElement(\n 'h2',\n { 'data-testid': 'consonant-TopFilters-categoriesTitle', className: 'consonant-TopFilters-categoriesTitle' },\n title\n ),\n _react2.default.createElement(\n 'div',\n { className: 'filters-category' },\n authoredCategories.map(function (category) {\n if (!category) return null;\n var selected = '';\n if (category.id === selectedCategory) {\n selected = 'selected';\n }\n return _react2.default.createElement(\n 'button',\n {\n key: category.id,\n onClick: function onClick() {\n categoryHandler(category.items, category.id);\n },\n 'data-selected': selected,\n 'data-testid': 'category-button-' + category.id,\n 'data-group': category.group.replaceAll(' ', '').toLowerCase() },\n _react2.default.createElement('img', { className: 'filters-category--icon', src: getCategoryIcon(category), alt: category.icon && 'Category icon' }),\n category.title\n );\n })\n )\n ),\n displayLeftFilterPanel && isStandardContainer && _react2.default.createElement(\n 'div',\n { className: 'consonant-Wrapper-leftFilterWrapper' },\n _react2.default.createElement(_Panel4.default, {\n filters: filters,\n selectedFiltersQty: selectedFiltersItemsQty,\n windowWidth: windowWidth,\n onFilterClick: handleFilterGroupClick,\n onClearAllFilters: resetFiltersSearchAndBookmarks,\n onClearFilterItems: clearFilterItem,\n onCheckboxClick: handleCheckBoxChange,\n onMobileFiltersToggleClick: handleMobileFiltersToggle,\n onSelectedFilterClick: handleCheckBoxChange,\n showMobileFilters: showMobileFilters,\n resQty: gridCardLen,\n bookmarkComponent: _react2.default.createElement(_Bookmarks2.default, {\n showBookmarks: showBookmarks,\n onClick: handleShowBookmarksFilterClick,\n savedCardsCount: bookmarkedCardIds.length }),\n searchComponent: _react2.default.createElement(_Search2.default, {\n placeholderText: leftPanelSearchPlaceholder,\n name: 'filtersSideSearch',\n value: searchQuery,\n autofocus: false,\n onSearch: handleSearchInputChange }),\n ref: filterItemRef })\n ),\n _react2.default.createElement(\n 'div',\n { className: 'consonant-Wrapper-collection' + (isLoading ? ' is-loading' : '') },\n isTopFilterPanel && isStandardContainer && _react2.default.createElement(_Panel2.default, {\n filterPanelEnabled: filterPanelEnabled,\n filters: filters,\n windowWidth: windowWidth,\n resQty: gridCardLen,\n onCheckboxClick: handleCheckBoxChange,\n onFilterClick: handleFilterGroupClick,\n onClearFilterItems: clearFilterItem,\n categories: currCategories,\n onClearAllFilters: resetFiltersSearchAndBookmarks,\n showLimitedFiltersQty: showLimitedFiltersQty,\n searchComponent: _react2.default.createElement(_Search2.default, {\n placeholderText: topPanelSearchPlaceholder,\n name: 'filtersTopSearch',\n value: searchQuery,\n autofocus: DESKTOP_SCREEN_SIZE,\n onSearch: handleSearchInputChange }),\n sortComponent: _react2.default.createElement(_Popup2.default, {\n opened: sortOpened,\n id: 'sort',\n val: sortOption,\n values: sortOptions,\n onSelect: handleSortChange,\n name: 'filtersTopSelect',\n autoWidth: true,\n optionsAlignment: topPanelSortPopupLocation }),\n onShowAllClick: handleShowAllTopFilters }),\n isLeftFilterPanel && isStandardContainer && _react2.default.createElement(_Info.Info, {\n enabled: filterPanelEnabled,\n filtersQty: filters.length,\n filters: filters,\n cardsQty: gridCardLen,\n selectedFiltersQty: selectedFiltersItemsQty,\n windowWidth: windowWidth,\n onMobileFiltersToggleClick: handleMobileFiltersToggle,\n searchComponent: _react2.default.createElement(_Search2.default, {\n placeholderText: searchPlaceholderText,\n name: 'searchFiltersInfo',\n value: searchQuery,\n autofocus: false,\n onSearch: handleSearchInputChange }),\n sortComponent: _react2.default.createElement(_Popup2.default, {\n opened: sortOpened,\n id: 'sort',\n val: sortOption,\n values: sortOptions,\n onSelect: handleSortChange,\n autoWidth: false,\n optionsAlignment: 'right' }),\n sortOptions: sortOptions,\n ref: filterInfoRef }),\n atLeastOneCard && isStandardContainer && _react2.default.createElement(\n _react.Fragment,\n null,\n _react2.default.createElement(_Grid2.default, {\n resultsPerPage: resultsPerPage,\n pages: currentPage,\n cards: gridCards,\n forwardedRef: scrollElementRef,\n onCardBookmark: handleCardBookmarking,\n isAriaLiveActive: isGridAreaLive }),\n displayLoadMore && _react2.default.createElement(_LoadMore2.default, {\n onClick: onLoadMoreClick,\n show: numCardsToShow,\n total: gridCardLen }),\n displayPaginator && _react2.default.createElement(_Paginator2.default, {\n pageCount: paginatorCount,\n currentPageNumber: currentPage,\n totalPages: totalPages,\n showItemsPerPage: resultsPerPage,\n totalResults: gridCardLen,\n onClick: setCurrentPage })\n ),\n atLeastOneCard && isCarouselContainer && !(cardStyle === 'custom-card') && _react2.default.createElement(_CardsCarousel2.default, {\n resQty: gridCardLen,\n cards: gridCards,\n role: 'tablist',\n onCardBookmark: handleCardBookmarking }),\n atLeastOneCard && isCarouselContainer && cardStyle === 'custom-card' && _react2.default.createElement(_View2.default, {\n title: 'Not Supported',\n description: 'Using custom cards within a carousel layout is currently not supported. Please re-author the component',\n replaceValue: '' }),\n isLoading && !atLeastOneCard && _react2.default.createElement(_Loader2.default, {\n size: _constants.LOADER_SIZE.BIG,\n hidden: !totalCardLimit,\n absolute: true }),\n !isApiFailure && !atLeastOneCard && !isLoading && _react2.default.createElement(_View2.default, {\n title: noResultsTitle,\n description: noResultsDescription,\n replaceValue: searchQuery }),\n isApiFailure && _react2.default.createElement(_View2.default, {\n title: apiFailureTitle,\n description: apiFailureDescription,\n replaceValue: '' })\n )\n )\n )\n )\n );\n};\n\nContainer.propTypes = {\n config: (0, _propTypes.shape)(_config.configType)\n};\n\nContainer.defaultProps = {\n config: {}\n};\n\nexports.default = Container;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZWFjdC9zcmMvanMvY29tcG9uZW50cy9Db25zb25hbnQvQ29udGFpbmVyL0NvbnRhaW5lci5qc3g/YzY0MCJdLCJuYW1lcyI6WyJDb250YWluZXIiLCJwcm9wcyIsImNvbmZpZyIsImdldENvbmZpZyIsImZpbHRlckdyb3VwUHJlZml4Iiwic2VhcmNoUHJlZml4IiwiQ0FSRF9IQVNIX0xFTkdUSCIsImZpbHRlclBhbmVsRW5hYmxlZCIsImZpbHRlclBhbmVsVHlwZSIsInBhZ2luYXRpb25UeXBlIiwicGFnaW5hdGlvbklzRW5hYmxlZCIsInJlc3VsdHNQZXJQYWdlIiwib25seVNob3dCb29rbWFya3MiLCJhdXRob3JlZEZpbHRlcnMiLCJmaWx0ZXJMb2dpYyIsInRvTG93ZXJDYXNlIiwidHJpbSIsInRvdGFsQ2FyZExpbWl0Iiwic2FtcGxlU2l6ZSIsInJlc2Vydm9pclNpemUiLCJzZWFyY2hGaWVsZHMiLCJzb3J0T3B0aW9ucyIsImRlZmF1bHRTb3J0IiwiZGVmYXVsdFNvcnRPcHRpb24iLCJmZWF0dXJlZENhcmRzIiwidG9TdHJpbmciLCJyZXBsYWNlIiwic3BsaXQiLCJjb25jYXQiLCJtYXAiLCJyb2xsaW5nSGFzaCIsImlkIiwiaGlkZUN0YUlkcyIsImhpZGVDdGFUYWdzIiwibGVmdFBhbmVsU2VhcmNoUGxhY2Vob2xkZXIiLCJ0b3BQYW5lbFNlYXJjaFBsYWNlaG9sZGVyIiwic2VhcmNoUGxhY2Vob2xkZXJUZXh0Iiwibm9SZXN1bHRzVGl0bGUiLCJub1Jlc3VsdHNEZXNjcmlwdGlvbiIsImFwaUZhaWx1cmVUaXRsZSIsImFwaUZhaWx1cmVEZXNjcmlwdGlvbiIsImlzTGF6eSIsInRyYWNrSW1wcmVzc2lvbnMiLCJjb2xsZWN0aW9uSWRlbnRpZmllciIsInRhcmdldEVuYWJsZWQiLCJ1c2VMYXN0Vmlld2VkU2Vzc2lvbiIsImF1dGhvcmVkTW9kZSIsImF1dGhvcmVkTGF5b3V0Q29udGFpbmVyIiwic2hvd0VtcHR5RmlsdGVycyIsImV2ZW50RmlsdGVyIiwic2VhcmNoRW5hYmxlZCIsInNvcnRFbmFibGVkIiwiY2FyZFN0eWxlIiwidGl0bGUiLCJoZWFkZXJzIiwicGFydGlhbExvYWRXaXRoQmFja2dyb3VuZEZldGNoIiwicGFydGlhbExvYWRDb3VudCIsIkRFU0tUT1BfU0NSRUVOX1NJWkUiLCJ3aW5kb3ciLCJpbm5lcldpZHRoIiwiREVTS1RPUF9NSU5fV0lEVEgiLCJpc1hvckZpbHRlciIsIkZJTFRFUl9UWVBFUyIsIlhPUiIsImlzQ2Fyb3VzZWxDb250YWluZXIiLCJMQVlPVVRfQ09OVEFJTkVSIiwiQ0FST1VTRUwiLCJpc1N0YW5kYXJkQ29udGFpbmVyIiwiaXNDYXRlZ29yaWVzQ29udGFpbmVyIiwiQ0FURUdPUklFUyIsImNhdGVnb3JpZXMiLCJhdXRob3JlZENhdGVnb3JpZXMiLCJnZXRBdXRob3JlZENhdGVnb3JpZXMiLCJzYW5pdGl6ZWRFdmVudEZpbHRlciIsInRpbWVkQ29sbGVjdGlvbiIsInNldFRpbWVkQ29sbGVjdGlvbiIsInRyYW5zaXRpb24iLCJzZXRUcmFuc2l0aW9uIiwiY2FyZENvdW50Iiwic2V0Q2FyZENvdW50IiwiaXNQYXJ0aWFsTG9hZCIsInNldElzUGFydGlhbExvYWQiLCJoYXNoZWRSZWYiLCJSZWFjdCIsInVzZVN0YXRlIiwidXBkYXRlU3RhdGUiLCJzY3JvbGxFbGVtZW50UmVmIiwibmV4dFRyYW5zaXRpb24iLCJ1c2VDYWxsYmFjayIsInVybFN0YXRlIiwic2V0VXJsU3RhdGUiLCJjbGVhclVybFN0YXRlIiwib3BlbkRyb3Bkb3duIiwic2V0T3BlbkRyb3Bkb3duIiwiYm9va21hcmtlZENhcmRJZHMiLCJzZXRCb29rbWFya2VkQ2FyZElkcyIsImluY2x1c2lvbklkcyIsInBhZ2UiLCJjdXJyZW50UGFnZSIsInNldEN1cnJlbnRQYWdlIiwiZmlsdGVycyIsInNldEZpbHRlcnMiLCJjdXJyQ2F0ZWdvcmllcyIsInNldENhdGVnb3JpZXMiLCJzZWFyY2hRdWVyeSIsInNldFNlYXJjaFF1ZXJ5Iiwic2VsZWN0ZWRDYXRlZ29yeSIsInNldFNlbGVjdGVkQ2F0ZWdvcnkiLCJzb3J0T3BlbmVkIiwic2V0U29ydE9wZW5lZCIsInNvcnRPcHRpb24iLCJzZXRTb3J0T3B0aW9uIiwic29ydCIsIlNPUlRfVFlQRVMiLCJSQU5ET00iLCJ3aW5kb3dXaWR0aCIsIndpZHRoIiwic2hvd01vYmlsZUZpbHRlcnMiLCJzZXRTaG93TW9iaWxlRmlsdGVycyIsInNob3dCb29rbWFya3MiLCJzZXRTaG93Qm9va21hcmtzIiwic2hvd0xpbWl0ZWRGaWx0ZXJzUXR5Iiwic2V0U2hvd0xpbWl0ZWRGaWx0ZXJzUXR5IiwiY2FyZHMiLCJzZXRDYXJkcyIsImlzTG9hZGluZyIsInNldExvYWRpbmciLCJpc0FwaUZhaWx1cmUiLCJzZXRBcGlGYWlsdXJlIiwicmFuZG9tU29ydElkIiwic2V0UmFuZG9tU29ydElkIiwiaXNGaXJzdExvYWQiLCJzZXRJc0ZpcnN0TG9hZCIsInZpc2libGVTdGFtcCIsInNldFZpc2libGVTdGFtcCIsImhhc0ZldGNoZWQiLCJzZXRIYXNGZXRjaGVkIiwiZmlsdGVySXRlbVJlZiIsImZpbHRlckluZm9SZWYiLCJnZXRQYXJlbnRDaGlsZCIsImkiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJzIiwibCIsIkJBU0UiLCJNT0QiLCJoYXNoIiwiYmFzZVBvd2VyIiwiY2hhckNvZGVBdCIsImdldEFsbEZpbHRlcnNDbGVhcmVkU3RhdGUiLCJmaWx0ZXJHcm91cHMiLCJmaWx0ZXJHcm91cCIsIml0ZW1zIiwiZmlsdGVySXRlbSIsInNlbGVjdGVkIiwiZ2V0RmlsdGVySXRlbUNsZWFyZWRTdGF0ZSIsImNsZWFyRmlsdGVySXRlbSIsImdyb3VwIiwicHJldkZpbHRlcnMiLCJmaWx0ZXJDbGVhcmVkU3RhdGUiLCJ1cmxQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJsb2NhdGlvbiIsInNlYXJjaCIsImZvckVhY2giLCJ2YWx1ZSIsImtleSIsImNoRmlsdGVyIiwiaW5kZXhPZiIsImluY2x1ZGVzIiwiY2xlYXJBbGxGaWx0ZXJzIiwiYWxsRmlsdGVyc0NsZWFyZWRTdGF0ZSIsInJlc2V0RmlsdGVyc1NlYXJjaEFuZEJvb2ttYXJrcyIsIm9uTG9hZE1vcmVDbGljayIsInByZXZTdGF0ZSIsInNjcm9sbFRvIiwicGFnZVlPZmZzZXQiLCJoYW5kbGVTb3J0Q2hhbmdlIiwib3B0aW9uIiwiaGFuZGxlU2VhcmNoSW5wdXRDaGFuZ2UiLCJ2YWwiLCJoYW5kbGVGaWx0ZXJHcm91cENsaWNrIiwiZmlsdGVySWQiLCJvcGVuZWQiLCJlbCIsImNoYW5nZVVybFN0YXRlIiwiaXRlbUlkIiwiaXNDaGVja2VkIiwiZmluZCIsImxhYmVsIiwidXJsU3RhdGVWYWx1ZSIsImZpbHRlciIsIml0ZW0iLCJoYW5kbGVDaGVja0JveENoYW5nZSIsImhhbmRsZU1vYmlsZUZpbHRlcnNUb2dnbGUiLCJwcmV2IiwiaGFuZGxlQ2FyZEJvb2ttYXJraW5nIiwiY2FyZElzQm9va21hcmtlZCIsImNhcmQiLCJoYW5kbGVTaG93Qm9va21hcmtzRmlsdGVyQ2xpY2siLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwiaGFuZGxlU2hvd0FsbFRvcEZpbHRlcnMiLCJoYW5kbGVXaW5kb3dDbGljayIsImhhbmRsZU1vYmlsZUZpbHRlckVzY2FwZSIsImV2ZW50Iiwib3BlbmVkT25Mb2FkIiwib3JpZ2luIiwidXJsU3RhdGVBcnJheSIsIlN0cmluZyIsInVybFNlYXJjaFZhbHVlIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwicmVtb3ZlRW1wdHlGaWx0ZXJzIiwiYWxsRmlsdGVycyIsImNhcmRzRnJvbUpzb24iLCJ0YWdzIiwidGFnIiwidGltaW5nVGFncyIsIkVWRU5UX1RJTUlOR19JRFMiLCJMSVZFIiwiT05ERU1BTkQiLCJVUENPTUlORyIsInZpc2l0b3JQcm9taXNlIiwiX19zYXRlbGxpdGVMb2FkZWRQcm9taXNlIiwiY29sbGVjdGlvbkVuZHBvaW50IiwiZmFsbGJhY2tFbmRwb2ludCIsInIiLCJSZWdFeHAiLCJjb2xsZWN0aW9uRW5kcG9pbnRVUkkiLCJ0ZXN0IiwiVVJMIiwic2VhcmNoUGFyYW1zIiwic2V0IiwiZ2V0Q2FyZHMiLCJlbmRQb2ludCIsInN0YXJ0IiwiRGF0ZSIsIm5vdyIsImZldGNoIiwiY3JlZGVudGlhbHMiLCJ0aGVuIiwicmVzcCIsIm9rIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInVybCIsImpzb24iLCJ2YWxpZERhdGEiLCJPYmplY3QiLCJrZXlzIiwibWVzc2FnZSIsIlByb21pc2UiLCJyZWplY3QiLCJFcnJvciIsImVycm9yTWVzc2FnZSIsInBheWxvYWQiLCJpc0hhc2hlZCIsImN1cnJlbnQiLCJUQUdfSEFTSF9MRU5HVEgiLCJwYXJlbnQiLCJjaGlsZCIsInRlbXAiLCJwdXNoIiwidG90YWxDb3VudCIsIkpzb25Qcm9jZXNzb3IiLCJyZW1vdmVEdXBsaWNhdGVDYXJkcyIsImFkZENhcmRNZXRhRGF0YSIsIlRSVU5DQVRFX1RFWFRfUVRZIiwicHJvY2Vzc2VkQ2FyZHMiLCJ0cmFuc2l0aW9ucyIsInNpemUiLCJzZXRUaW1lb3V0IiwiZGVxdWV1ZSIsInByaW9yaXR5IiwiT05FX1NFQ09ORF9ERUxBWSIsImNhcmRzVG9zaG93Iiwic2xpY2UiLCJnZXRMYXN0UGFnZUlEIiwibGFzdElEIiwiY2hpbGRyZW4iLCJzY3JvbGxJbnRvVmlldyIsImNhdGNoIiwiZ2V0VmlzaXRvckRhdGEiLCJ2aXNpdG9yQXBpIiwiY29sbGVjdGlvblVSSSIsInRhcmdldFJldmVhbElkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsInJlc3VsdCIsImFsbG95IiwiZWRnZUNvbmZpZ0lkIiwicmVzIiwiaWRlbnRpdHkiLCJFQ0lEIiwiZWRnZSIsInJlZ2lvbklkIiwidmlzaXRvciIsImdldFZpc2l0b3JJZCIsImdldE1hcmtldGluZ0Nsb3VkVmlzaXRvcklEIiwiZ2V0U3VwcGxlbWVudGFsRGF0YUlEIiwiZ2V0QXVkaWVuY2VNYW5hZ2VyQmxvYiIsImdldEF1ZGllbmNlTWFuYWdlckxvY2F0aW9uSGludCIsInZpc2l0b3JSZXRyeSIsInJldHJ5Q291bnQiLCJ0aW1lZFJldHJ5IiwidmlzaXRvclByb21pc2VSZXRyeSIsImNvbGxlY3Rpb25FbmRwb2ludFVybCIsImZvY3VzTW9iVGl0bGUiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJmb2N1cyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJib3giLCJpbyIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwiZW50cmllcyIsImludGVyc2VjdGlvblJhdGlvIiwiZ2V0VGltZSIsIm9ic2VydmUiLCJhY3RpdmVGaWx0ZXJJZHMiLCJhY3RpdmVQYW5lbHMiLCJTZXQiLCJjYXJkRmlsdGVyZXIiLCJDYXJkRmlsdGVyZXIiLCJnZXRGaWx0ZXJlZENvbGxlY3Rpb24iLCJzb3J0Q2FyZHMiLCJrZWVwQm9va21hcmtlZENhcmRzT25seSIsImtlZXBDYXJkc1dpdGhpbkRhdGVSYW5nZSIsImZpbHRlckNhcmRzIiwidHJ1bmNhdGVMaXN0Iiwic2VhcmNoQ2FyZHMiLCJyZW1vdmVDYXJkcyIsImZpbHRlcmVkQ2FyZHMiLCJuZXh0VHJhbnNpdGlvbk1zIiwiZ3JpZENhcmRzIiwiZ3JpZENhcmRMZW4iLCJ0b3RhbFBhZ2VzIiwibnVtQ2FyZHNUb1Nob3ciLCJzZWxlY3RlZEZpbHRlcnNJdGVtc1F0eSIsImRpc3BsYXlQYWdpbmF0aW9uIiwiZGlzcGxheUxvYWRNb3JlIiwiZGlzcGxheVBhZ2luYXRvciIsImRpc3BsYXlMZWZ0RmlsdGVyUGFuZWwiLCJGSUxURVJfUEFORUwiLCJMRUZUIiwiYXRMZWFzdE9uZUNhcmQiLCJ0b3BQYW5lbFNvcnRQb3B1cExvY2F0aW9uIiwiVEFCTEVUX01JTl9XSURUSCIsIlNPUlRfUE9QVVBfTE9DQVRJT04iLCJSSUdIVCIsInBhZ2luYXRvckNvdW50IiwiUEFHSU5BVElPTl9DT1VOVCIsIkRFU0tUT1AiLCJNT0JJTEUiLCJpc1RvcEZpbHRlclBhbmVsIiwiVE9QIiwiaXNMZWZ0RmlsdGVyUGFuZWwiLCJpc0dyaWRBcmVhTGl2ZSIsImZpbHRlck5hbWVzIiwidGhlbWVDbGFzcyIsIlRIRU1FX1RZUEUiLCJMSUdIVCIsIkRBUksiLCJEQVJLRVNUIiwiZmlsdGVyTGlzdCIsImNhdGVnb3J5TGlzdCIsImNhdGVnb3J5SWRzIiwic2VsZWN0ZWRDYXRlZ29yaWVzIiwiY2F0ZWdvcnkiLCJnZXRBbGxDYXRlZ29yeVByb2R1Y3RzIiwiYWxsQ2F0ZWdvcmllcyIsImZyb21DYXRlZ29yeSIsImNhdGVnb3J5SGFuZGxlciIsImdyb3VwSWQiLCJwb3AiLCJuZXdHcm91cCIsIm5leHRGaWx0ZXJzIiwiZ2V0Q2F0ZWdvcnlJY29uIiwiYXV0aG9yZWRJY29uIiwiaWNvbiIsImNvbGxlY3Rpb25TdHIiLCJmaWx0ZXJTdHIiLCJzZWFyY2hRdWVyeVN0ciIsImNvbGxlY3Rpb25BbmFseXRpY3MiLCJ3cmFwcGVyQ2xhc3MiLCJTSVpFXzEwMF9WV18zMl9NQVJHSU4iLCJTSVpFXzgzX1ZXIiwiU0laRV8xMjAwX1BYIiwiU0laRV8xNjAwX1BYIiwic2V0VmFsdWUiLCJyZXBsYWNlQWxsIiwiTE9BREVSX1NJWkUiLCJCSUciLCJwcm9wVHlwZXMiLCJjb25maWdUeXBlIiwiZGVmYXVsdFByb3BzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7Ozs7QUFPQTs7OztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOztBQVFBOztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBZUE7O0FBSUE7O0FBTUE7Ozs7OztBQVVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JBLElBQU1BLFlBQVksU0FBWkEsU0FBWSxDQUFDQyxLQUFELEVBQVc7QUFBQSxRQUNqQkMsTUFEaUIsR0FDTkQsS0FETSxDQUNqQkMsTUFEaUI7O0FBRXpCLFFBQU1DLFlBQVksaUNBQWlCRCxNQUFqQixDQUFsQjtBQUNBLFFBQU1FLG9CQUFvQixLQUExQjtBQUNBLFFBQU1DLGVBQWUsS0FB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R0FGaEI7QUFJSSwwQ0FBYSxFQUpqQixHQWpHSjtBQXVHTXlFLHFDQUFhLENBQUMrTixjQUFkLElBQ0YsOEJBQUMsZ0JBQUQ7QUFDSSxrQ0FBTThDLHVCQUFZQyxHQUR0QjtBQUVJLG9DQUFRLENBQUMxWCxjQUZiO0FBR0ksMENBSEosR0F4R0o7QUE2R00seUJBQUM4RyxZQUFELElBQWlCLENBQUM2TixjQUFsQixJQUFvQyxDQUFDL04sU0FBckMsSUFDRiw4QkFBQyxjQUFEO0FBQ0ksbUNBQU94RixjQURYO0FBRUkseUNBQWFDLG9CQUZqQjtBQUdJLDBDQUFja0UsV0FIbEIsR0E5R0o7QUFtSE11Qix3Q0FDRiw4QkFBQyxjQUFEO0FBQ0ksbUNBQU94RixlQURYO0FBRUkseUNBQWFDLHFCQUZqQjtBQUdJLDBDQUFhLEVBSGpCO0FBcEhKO0FBL0RKO0FBUko7QUFISjtBQURKLEtBREo7QUEyTUgsQ0E3OENEOztBQSs4Q0F4QyxVQUFVNFksU0FBVixHQUFzQjtBQUNsQjFZLFlBQVEsc0JBQU0yWSxrQkFBTjtBQURVLENBQXRCOztBQUlBN1ksVUFBVThZLFlBQVYsR0FBeUI7QUFDckI1WSxZQUFRO0FBRGEsQ0FBekI7O2tCQUllRixTIiwiZmlsZSI6IjEwOC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICAgIEZyYWdtZW50LFxuICAgIHVzZUVmZmVjdCxcbiAgICB1c2VSZWYsXG4gICAgdXNlU3RhdGUsXG4gICAgY3JlYXRlUmVmLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IHNoYXBlIH0gZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgJ3doYXR3Zy1mZXRjaCc7XG5pbXBvcnQgeyBsb2dMYW5hIH0gZnJvbSAnLi4vSGVscGVycy9sYW5hJztcbmltcG9ydCBQb3B1cCBmcm9tICcuLi9Tb3J0L1BvcHVwJztcbmltcG9ydCBTZWFyY2ggZnJvbSAnLi4vU2VhcmNoL1NlYXJjaCc7XG5pbXBvcnQgTG9hZGVyIGZyb20gJy4uL0xvYWRlci9Mb2FkZXInO1xuaW1wb3J0IHtcbiAgICBnZXRCeVBhdGgsXG4gICAgc2FuaXRpemVFdmVudEZpbHRlcixcbiAgICBzYXZlQm9va21hcmtzVG9Mb2NhbFN0b3JhZ2UsXG4gICAgcmVhZEJvb2ttYXJrc0Zyb21Mb2NhbFN0b3JhZ2UsXG4gICAgcmVhZEluY2x1c2lvbnNGcm9tTG9jYWxTdG9yYWdlLFxuICAgIGdldFRyYW5zaXRpb25zLFxufSBmcm9tICcuLi9IZWxwZXJzL2dlbmVyYWwnO1xuaW1wb3J0IHsgY29uZmlnVHlwZSB9IGZyb20gJy4uL3R5cGVzL2NvbmZpZyc7XG5pbXBvcnQgQ2FyZHNDYXJvdXNlbCBmcm9tICcuLi9DYXJkc0Nhcm91c2VsL0NhcmRzQ2Fyb3VzZWwnO1xuaW1wb3J0IE5vUmVzdWx0c1ZpZXcgZnJvbSAnLi4vTm9SZXN1bHRzL1ZpZXcnO1xuaW1wb3J0IExvYWRNb3JlIGZyb20gJy4uL1BhZ2luYXRpb24vTG9hZE1vcmUnO1xuaW1wb3J0IEJvb2ttYXJrcyBmcm9tICcuLi9Cb29rbWFya3MvQm9va21hcmtzJztcbmltcG9ydCBQYWdpbmF0b3IgZnJvbSAnLi4vUGFnaW5hdGlvbi9QYWdpbmF0b3InO1xuaW1wb3J0IEdyaWQgZnJvbSAnLi4vR3JpZC9HcmlkJztcbmltcG9ydCBDYXJkRmlsdGVyZXIgZnJvbSAnLi4vSGVscGVycy9DYXJkRmlsdGVyZXInO1xuaW1wb3J0IEZpbHRlcnNQYW5lbFRvcCBmcm9tICcuLi9GaWx0ZXJzL1RvcC9QYW5lbCc7XG5pbXBvcnQgTGVmdEZpbHRlclBhbmVsIGZyb20gJy4uL0ZpbHRlcnMvTGVmdC9QYW5lbCc7XG5pbXBvcnQgSnNvblByb2Nlc3NvciBmcm9tICcuLi9IZWxwZXJzL0pzb25Qcm9jZXNzb3InO1xuaW1wb3J0IHsgdXNlV2luZG93RGltZW5zaW9ucywgdXNlVVJMU3RhdGUgfSBmcm9tICcuLi9IZWxwZXJzL2hvb2tzJztcbmltcG9ydCB7IEluZm8gYXMgTGVmdEluZm8gfSBmcm9tICcuLi9GaWx0ZXJzL0xlZnQvSW5mbyc7XG5pbXBvcnQge1xuICAgIERFU0tUT1BfTUlOX1dJRFRILFxuICAgIEZJTFRFUl9UWVBFUyxcbiAgICBGSUxURVJfUEFORUwsXG4gICAgTE9BREVSX1NJWkUsXG4gICAgUEFHSU5BVElPTl9DT1VOVCxcbiAgICBUQUJMRVRfTUlOX1dJRFRILFxuICAgIFRSVU5DQVRFX1RFWFRfUVRZLFxuICAgIFNPUlRfUE9QVVBfTE9DQVRJT04sXG4gICAgVEhFTUVfVFlQRSxcbiAgICBMQVlPVVRfQ09OVEFJTkVSLFxuICAgIE9ORV9TRUNPTkRfREVMQVksXG4gICAgU09SVF9UWVBFUyxcbiAgICBFVkVOVF9USU1JTkdfSURTLFxufSBmcm9tICcuLi9IZWxwZXJzL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIENvbmZpZ0NvbnRleHQsXG4gICAgRXhwYW5kYWJsZUNvbnRleHQsXG59IGZyb20gJy4uL0hlbHBlcnMvY29udGV4dHMnO1xuaW1wb3J0IHtcbiAgICBnZXREZWZhdWx0U29ydE9wdGlvbixcbiAgICBnZXROdW1TZWxlY3RlZEZpbHRlckl0ZW1zLFxuICAgIG1ha2VDb25maWdHZXR0ZXIsXG59IGZyb20gJy4uL0hlbHBlcnMvY29uc29uYW50JztcblxuaW1wb3J0IHtcbiAgICBzaG91bGREaXNwbGF5UGFnaW5hdG9yLFxuICAgIGdldE51bUNhcmRzVG9TaG93LFxuICAgIGdldFRvdGFsUGFnZXMsXG4gICAgZ2V0QWN0aXZlRmlsdGVySWRzLFxuICAgIGdldEFjdGl2ZVBhbmVscyxcbiAgICBnZXRVcGRhdGVkQ2FyZEJvb2ttYXJrRGF0YSxcbn0gZnJvbSAnLi4vSGVscGVycy9IZWxwZXJzJztcblxuXG4vKipcbiAqIENvbnNvbmFudCBDYXJkIENvbGxlY3Rpb25cbiAqIENvbmZpZyBpcyBpbXBsaWNpdGx5IHBvcHVsYXRlZCBieSBhdXRob3JzXG4gKlxuICogQGNvbXBvbmVudFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGNvbmZpZyA9IHtcbiAgICBjb2xsZWN0aW9uOiB7fSxcbiAgICBmZWF0dXJlZENhcmRzOiBbe31dLFxuICAgIGZpbHRlclBhbmVsOiB7fSxcbiAgICBoaWRlQ3RhSWRzOiBbe31dLFxuICAgIGhpZGVDdGFUYWdzOiBbe31dLFxuICAgIHNvcnQ6IHt9LFxuICAgIHBhZ2luYXRpb246IHt9LFxuICAgIGJvb2ttYXJrczoge30sXG4gICAgc2VhcmNoOiB7fSxcbiAgICBsYW5ndWFnZTogJydcbiAqIH1cbiAqIHJldHVybiAoXG4gKiAgIDxDb250YWluZXIgY29uZmlnPXtjb25maWd9Lz5cbiAqIClcbiAqL1xuY29uc3QgQ29udGFpbmVyID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IHByb3BzO1xuICAgIGNvbnN0IGdldENvbmZpZyA9IG1ha2VDb25maWdHZXR0ZXIoY29uZmlnKTtcbiAgICBjb25zdCBmaWx0ZXJHcm91cFByZWZpeCA9ICdjaF8nO1xuICAgIGNvbnN0IHNlYXJjaFByZWZpeCA9ICdzaF8nO1xuICAgIGNvbnN0IENBUkRfSEFTSF9MRU5HVEggPSAxMDtcblxuICAgIC8qKlxuICAgICAqKioqIEF1dGhvcmVkIENvbmZpZ3MgKioqKlxuICAgICAqL1xuICAgIGNvbnN0IGZpbHRlclBhbmVsRW5hYmxlZCA9IGdldENvbmZpZygnZmlsdGVyUGFuZWwnLCAnZW5hYmxlZCcpO1xuICAgIGNvbnN0IGZpbHRlclBhbmVsVHlwZSA9IGdldENvbmZpZygnZmlsdGVyUGFuZWwnLCAndHlwZScpO1xuICAgIGNvbnN0IHBhZ2luYXRpb25UeXBlID0gZ2V0Q29uZmlnKCdwYWdpbmF0aW9uJywgJ3R5cGUnKTtcbiAgICBjb25zdCBwYWdpbmF0aW9uSXNFbmFibGVkID0gZ2V0Q29uZmlnKCdwYWdpbmF0aW9uJywgJ2VuYWJsZWQnKTtcbiAgICBjb25zdCByZXN1bHRzUGVyUGFnZSA9IGdldENvbmZpZygnY29sbGVjdGlvbicsICdyZXN1bHRzUGVyUGFnZScpO1xuICAgIGNvbnN0IG9ubHlTaG93Qm9va21hcmtzID0gZ2V0Q29uZmlnKCdib29rbWFya3MnLCAnbGVmdEZpbHRlclBhbmVsLmJvb2ttYXJrT25seUNvbGxlY3Rpb24nKTtcbiAgICBjb25zdCBhdXRob3JlZEZpbHRlcnMgPSBnZXRDb25maWcoJ2ZpbHRlclBhbmVsJywgJ2ZpbHRlcnMnKTtcbiAgICBjb25zdCBmaWx0ZXJMb2dpYyA9IGdldENvbmZpZygnZmlsdGVyUGFuZWwnLCAnZmlsdGVyTG9naWMnKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBsZXQgdG90YWxDYXJkTGltaXQgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAndG90YWxDYXJkc1RvU2hvdycpO1xuICAgIGNvbnN0IHNhbXBsZVNpemUgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAncmVzZXJ2b2lyLnNhbXBsZScpO1xuICAgIGNvbnN0IHJlc2Vydm9pclNpemUgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAncmVzZXJ2b2lyLnBvb2wnKTtcbiAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSBnZXRDb25maWcoJ3NlYXJjaCcsICdzZWFyY2hGaWVsZHMnKTtcbiAgICBjb25zdCBzb3J0T3B0aW9ucyA9IGdldENvbmZpZygnc29ydCcsICdvcHRpb25zJyk7XG4gICAgY29uc3QgZGVmYXVsdFNvcnQgPSBnZXRDb25maWcoJ3NvcnQnLCAnZGVmYXVsdFNvcnQnKTtcbiAgICBjb25zdCBkZWZhdWx0U29ydE9wdGlvbiA9IGdldERlZmF1bHRTb3J0T3B0aW9uKGNvbmZpZywgZGVmYXVsdFNvcnQpO1xuICAgIGxldCBmZWF0dXJlZENhcmRzID0gZ2V0Q29uZmlnKCdmZWF0dXJlZENhcmRzJywgJycpXG4gICAgICAgIC50b1N0cmluZygpXG4gICAgICAgIC5yZXBsYWNlKC9cXFt8XFxdL2csICcnKVxuICAgICAgICAucmVwbGFjZSgvYC9nLCAnJylcbiAgICAgICAgLnNwbGl0KCcsJyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lLG1heC1sZW5cbiAgICBmZWF0dXJlZENhcmRzID0gZmVhdHVyZWRDYXJkcy5jb25jYXQoZmVhdHVyZWRDYXJkcy5tYXAoaWQgPT4gcm9sbGluZ0hhc2goaWQsIENBUkRfSEFTSF9MRU5HVEgpKSk7XG4gICAgbGV0IGhpZGVDdGFJZHMgPSBnZXRDb25maWcoJ2hpZGVDdGFJZHMnLCAnJylcbiAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgLnJlcGxhY2UoL1xcW3xcXF0vZywgJycpXG4gICAgICAgIC5yZXBsYWNlKC9gL2csICcnKVxuICAgICAgICAuc3BsaXQoJywnKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICBoaWRlQ3RhSWRzID0gaGlkZUN0YUlkcy5jb25jYXQoaGlkZUN0YUlkcy5tYXAoaWQgPT4gcm9sbGluZ0hhc2goaWQsIENBUkRfSEFTSF9MRU5HVEgpKSk7XG4gICAgbGV0IGhpZGVDdGFUYWdzID0gZ2V0Q29uZmlnKCdoaWRlQ3RhVGFncycsICcnKVxuICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAucmVwbGFjZSgvXFxbfFxcXS9nLCAnJylcbiAgICAgICAgLnJlcGxhY2UoL2AvZywgJycpXG4gICAgICAgIC5zcGxpdCgnLCcpO1xuICAgIGNvbnN0IGxlZnRQYW5lbFNlYXJjaFBsYWNlaG9sZGVyID0gZ2V0Q29uZmlnKCdzZWFyY2gnLCAnaTE4bi5sZWZ0RmlsdGVyUGFuZWwuc2VhcmNoUGxhY2Vob2xkZXJUZXh0Jyk7XG4gICAgY29uc3QgdG9wUGFuZWxTZWFyY2hQbGFjZWhvbGRlciA9IGdldENvbmZpZygnc2VhcmNoJywgJ2kxOG4udG9wRmlsdGVyUGFuZWwuc2VhcmNoUGxhY2Vob2xkZXJUZXh0Jyk7XG4gICAgY29uc3Qgc2VhcmNoUGxhY2Vob2xkZXJUZXh0ID0gZ2V0Q29uZmlnKCdzZWFyY2gnLCAnaTE4bi5maWx0ZXJJbmZvLnNlYXJjaFBsYWNlaG9sZGVyVGV4dCcpO1xuICAgIGNvbnN0IG5vUmVzdWx0c1RpdGxlID0gZ2V0Q29uZmlnKCdzZWFyY2gnLCAnaTE4bi5ub1Jlc3VsdHNUaXRsZScpO1xuICAgIGNvbnN0IG5vUmVzdWx0c0Rlc2NyaXB0aW9uID0gZ2V0Q29uZmlnKCdzZWFyY2gnLCAnaTE4bi5ub1Jlc3VsdHNEZXNjcmlwdGlvbicpO1xuICAgIGNvbnN0IGFwaUZhaWx1cmVUaXRsZSA9IGdldENvbmZpZygnY29sbGVjdGlvbicsICdpMThuLm9uRXJyb3JUaXRsZScpO1xuICAgIGNvbnN0IGFwaUZhaWx1cmVEZXNjcmlwdGlvbiA9IGdldENvbmZpZygnY29sbGVjdGlvbicsICdpMThuLm9uRXJyb3JEZXNjcmlwdGlvbicpO1xuICAgIGNvbnN0IGlzTGF6eSA9IGdldENvbmZpZygnY29sbGVjdGlvbicsICdsYXp5bG9hZCcpO1xuICAgIGNvbnN0IHRyYWNrSW1wcmVzc2lvbnMgPSBnZXRDb25maWcoJ2FuYWx5dGljcycsICd0cmFja0ltcHJlc3Npb25zJyk7XG4gICAgY29uc3QgY29sbGVjdGlvbklkZW50aWZpZXIgPSBnZXRDb25maWcoJ2FuYWx5dGljcycsICdjb2xsZWN0aW9uSWRlbnRpZmllcicpO1xuICAgIGNvbnN0IHRhcmdldEVuYWJsZWQgPSBnZXRDb25maWcoJ3RhcmdldCcsICdlbmFibGVkJyk7XG4gICAgY29uc3QgdXNlTGFzdFZpZXdlZFNlc3Npb24gPSBnZXRDb25maWcoJ3RhcmdldCcsICdsYXN0Vmlld2VkU2Vzc2lvbicpO1xuICAgIGNvbnN0IGF1dGhvcmVkTW9kZSA9IGdldENvbmZpZygnY29sbGVjdGlvbicsICdtb2RlJyk7XG4gICAgY29uc3QgYXV0aG9yZWRMYXlvdXRDb250YWluZXIgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAnbGF5b3V0LmNvbnRhaW5lcicpO1xuICAgIGNvbnN0IHNob3dFbXB0eUZpbHRlcnMgPSBnZXRDb25maWcoJ2ZpbHRlclBhbmVsJywgJ3Nob3dFbXB0eUZpbHRlcnMnKTtcbiAgICBjb25zdCBldmVudEZpbHRlciA9IGdldENvbmZpZygnZmlsdGVyUGFuZWwnLCAnZXZlbnRGaWx0ZXInKTtcbiAgICBjb25zdCBzZWFyY2hFbmFibGVkID0gZ2V0Q29uZmlnKCdzZWFyY2gnLCAnZW5hYmxlZCcpO1xuICAgIGNvbnN0IHNvcnRFbmFibGVkID0gZ2V0Q29uZmlnKCdzb3J0JywgJ2VuYWJsZWQnKTtcbiAgICBjb25zdCBjYXJkU3R5bGUgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAnY2FyZFN0eWxlJyk7XG4gICAgY29uc3QgdGl0bGUgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAnaTE4bi50aXRsZScpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBnZXRDb25maWcoJ2hlYWRlcnMnLCAnJyk7XG4gICAgY29uc3QgcGFydGlhbExvYWRXaXRoQmFja2dyb3VuZEZldGNoID0gZ2V0Q29uZmlnKCdjb2xsZWN0aW9uJywgJ3BhcnRpYWxMb2FkV2l0aEJhY2tncm91bmRGZXRjaC5lbmFibGVkJyk7XG4gICAgY29uc3QgcGFydGlhbExvYWRDb3VudCA9IGdldENvbmZpZygnY29sbGVjdGlvbicsICdwYXJ0aWFsTG9hZFdpdGhCYWNrZ3JvdW5kRmV0Y2gucGFydGlhbExvYWRDb3VudCcpO1xuICAgIC8qKlxuICAgICAqKioqIENvbnN0YW50cyAqKioqXG4gICAgICovXG4gICAgY29uc3QgREVTS1RPUF9TQ1JFRU5fU0laRSA9IHdpbmRvdy5pbm5lcldpZHRoID49IERFU0tUT1BfTUlOX1dJRFRIO1xuICAgIGNvbnN0IGlzWG9yRmlsdGVyID0gZmlsdGVyTG9naWMudG9Mb3dlckNhc2UoKS50cmltKCkgPT09IEZJTFRFUl9UWVBFUy5YT1I7XG4gICAgY29uc3QgaXNDYXJvdXNlbENvbnRhaW5lciA9IGF1dGhvcmVkTGF5b3V0Q29udGFpbmVyID09PSBMQVlPVVRfQ09OVEFJTkVSLkNBUk9VU0VMO1xuICAgIGNvbnN0IGlzU3RhbmRhcmRDb250YWluZXIgPSBhdXRob3JlZExheW91dENvbnRhaW5lciAhPT0gTEFZT1VUX0NPTlRBSU5FUi5DQVJPVVNFTDtcbiAgICBjb25zdCBpc0NhdGVnb3JpZXNDb250YWluZXIgPSBhdXRob3JlZExheW91dENvbnRhaW5lciA9PT0gTEFZT1VUX0NPTlRBSU5FUi5DQVRFR09SSUVTO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgY29uc3QgY2F0ZWdvcmllcyA9IGdldENvbmZpZygnZmlsdGVyUGFuZWwnLCAnY2F0ZWdvcmllcycpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZSwgbWF4LWxlblxuICAgIGNvbnN0IGF1dGhvcmVkQ2F0ZWdvcmllcyA9IGlzQ2F0ZWdvcmllc0NvbnRhaW5lciA/IGdldEF1dGhvcmVkQ2F0ZWdvcmllcyhhdXRob3JlZEZpbHRlcnMsIGNhdGVnb3JpZXMpIDogW107XG4gICAgY29uc3Qgc2FuaXRpemVkRXZlbnRGaWx0ZXIgPSBldmVudEZpbHRlciA/IHNhbml0aXplRXZlbnRGaWx0ZXIoZXZlbnRGaWx0ZXIpIDogW107XG5cbiAgICAvKipcbiAgICAgKioqKiBIb29rcyAqKioqXG4gICAgICovXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge0FycmF5fSB0aW1lZENvbGxlY3Rpb24gLSByZXN1bHQgb2YgVGltZWQgRXZlbnQgU29ydFxuICAgICAqIEBkZXNjcmlwdGlvbiDigJQgQXMgYW4gYWx0ZXJuYXRpdmUvaXRlcmF0aW9uIG9uIGZpbHRlcmVkIGNhcmRzIGZvciB0aW1lZFxuICAgICAqIGNvbGxlY3Rpb25zXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBzZXRUaW1lZENvbGxlY3Rpb25cbiAgICAgKiBAZGVzY3JpcHRpb24gLSBTZXRzIHRpbWVkQ29sbGVjdGlvbiBhZnRlciBzZXRUaW1lb3V0IHRyaWdnZXJzXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W0FycmF5LCBGdW5jdGlvbl19IHRpbWVkQ29sbGVjdGlvblxuICAgICAqL1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gICAgY29uc3QgW3RpbWVkQ29sbGVjdGlvbiwgc2V0VGltZWRDb2xsZWN0aW9uXSA9IHVzZVN0YXRlKFtdKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7TnVtYmVyfSB0cmFuc2l0aW9uIC0gTVMgdG8gbmV4dCB0cmFuc2l0aW9uXG4gICAgICogQGRlc2NyaXB0aW9uIOKAlCAgc2V0IGJ5IGV2ZW50U29ydCwgZnJvbSBjYXJkRmlsdGVyZXQubmV4dFRyYW5zaXRpb25Nc1xuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gc2V0VHJhbnNpdGlvblxuICAgICAqIEBkZXNjcmlwdGlvbiAtIG5leHQgVHJhbnNpdGlvbiB0cmlnZ2VyXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W051bWJlciwgRnVuY3Rpb25dfSB0cmFuc2l0aW9uXG4gICAgICovXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbiAgICBjb25zdCBbdHJhbnNpdGlvbiwgc2V0VHJhbnNpdGlvbl0gPSB1c2VTdGF0ZSgwKTtcblxuICAgIGNvbnN0IFtjYXJkQ291bnQsIHNldENhcmRDb3VudF0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbaXNQYXJ0aWFsTG9hZCwgc2V0SXNQYXJ0aWFsTG9hZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgaGFzaGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcblxuICAgIGNvbnN0IFssIHVwZGF0ZVN0YXRlXSA9IFJlYWN0LnVzZVN0YXRlKCk7XG4gICAgY29uc3Qgc2Nyb2xsRWxlbWVudFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBuZXh0VHJhbnNpdGlvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHVwZGF0ZVN0YXRlKHt9KSwgW10pO1xuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtPYmplY3R9IHVybFN0YXRlXG4gICAgICogQGRlc2NyaXB0aW9uIOKAlCBvYmplY3Qgd2l0aCB1cmwgcXVlcnkgdmFsdWVzXG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IHNldFVybFN0YXRlXG4gICAgICogQGRlc2NyaXB0aW9uIC0gc2V0IHVybCBxdWVyeSB2YWx1ZSBieSBrZXlcbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gY2xlYXJVcmxTdGF0ZVxuICAgICAqIEBkZXNjcmlwdGlvbiAtIGNsZWFyIHdob2xlIHVybCBxdWVyeSBzdGF0ZVxuICAgICAqXG4gICAgICogQHR5cGUge1tPYmplY3QsIEZ1bmN0aW9uLCBGdW5jdGlvbl19IE9wZW5Ecm9wZG93blxuICAgICAqL1xuICAgIGNvbnN0IFt1cmxTdGF0ZSwgc2V0VXJsU3RhdGUsIGNsZWFyVXJsU3RhdGVdID0gdXNlVVJMU3RhdGUoKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtOdW1iZXJ9IE9wZW5Ecm9wZG93blN0YXRlIC0gSWQgb2YgYSBzZWxlY3RlZCBkcm9wZG93blxuICAgICAqIEBkZXNjcmlwdGlvbiDigJQgUGFzc2VkIGluIENvbnRleHQgUHJvdmlkZXIgU28gQWxsIE5lc3RlZCBDb21wb25lbnRzIGNhbiBiZSBpbiBzeW5jXG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IE9wZW5Ecm9wZG93blN0YXRlU2V0dGVyXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W051bWJlciwgRnVuY3Rpb25dfSBPcGVuRHJvcGRvd25cbiAgICAgKi9cbiAgICBjb25zdCBbb3BlbkRyb3Bkb3duLCBzZXRPcGVuRHJvcGRvd25dID0gdXNlU3RhdGUobnVsbCk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7QXJyYXl9IEJvb2ttYXJrZWRDYXJkSWRzU3RhdGUg4oCUIEluaXRpYWlsemVkIEZyb20gTG9jYWwgU3RvcmFnZVxuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBCb29rbWFya2VkQ2FyZElkc1NldHRlciDigJQgU2V0cyBpbnRlcm5hbCBzdGF0ZSBvZiBzYXZlZCBib29rbWFya3NcbiAgICAgKlxuICAgICAqIEB0eXBlIHtbQXJyYXksIEZ1bmN0aW9uXX0gQm9va21hcmtlZENhcmRJZHNcbiAgICAgKi9cbiAgICBjb25zdCBbYm9va21hcmtlZENhcmRJZHMsIHNldEJvb2ttYXJrZWRDYXJkSWRzXSA9IHVzZVN0YXRlKHJlYWRCb29rbWFya3NGcm9tTG9jYWxTdG9yYWdlKCkpO1xuICAgIGNvbnN0IFtpbmNsdXNpb25JZHNdID0gdXNlU3RhdGUocmVhZEluY2x1c2lvbnNGcm9tTG9jYWxTdG9yYWdlKCkpO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge051bWJlcn0gQ3VycmVudFBhZ2VTdGF0ZSDigJQgSW5pdGlhbGl6ZWQgdG8gdGhlIGZpcnN0IHBhZ2VcbiAgICAgKiBAZGVzY3JpcHRpb24gU2FtZSBwYWdlIHN0YXRlIGZvciAnTG9hZCBNb3JlJyBvciAnUGFnaW5hdG9yJ1xuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBDdXJyZW50UGFnZVN0YXRlU2V0dGVyIOKAlCBTZXRzIHBhZ2UgYXMgdXNlciBuYXZpZ2F0ZXMgdGhyb3VnaCBwYWdlc1xuICAgICAqXG4gICAgICogQHR5cGUge1tOdW1iZXIsIEZ1bmN0aW9uXX0gQ3VycmVudFBhZ2VcbiAgICAgKi9cbiAgICBjb25zdCBbY3VycmVudFBhZ2UsIHNldEN1cnJlbnRQYWdlXSA9IHVzZVN0YXRlKCt1cmxTdGF0ZS5wYWdlIHx8IDEpO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge0FycmF5fSBGaWx0ZXJzU3RhdGUg4oCUIENvbnRhaW5zIEZpbHRlcnMgRm9yIEZpbHRlciBQYW5lbFxuICAgICAqIEBkZXNjcmlwdGlvbiBTYW1lIEZpbHRlciBzdGF0ZSBmb3IgTGVmdCBvciBUb3BcbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gRmlsdGVyc1N0YXRlU2V0dGVyIOKAlCBTZXRzIEF1dGhvcmVkIEZpbHRlcnMgYXMgU3RhdGVcbiAgICAgKlxuICAgICAqIEB0eXBlIHtbQXJyYXksIEZ1bmN0aW9uXX0gRmlsdGVyc1xuICAgICAqL1xuICAgIGNvbnN0IFtmaWx0ZXJzLCBzZXRGaWx0ZXJzXSA9IHVzZVN0YXRlKFtdKTtcbiAgICAvLyB3aW5kb3cuZmlsdGVycyA9IGZpbHRlcnM7XG4gICAgY29uc3QgW2N1cnJDYXRlZ29yaWVzLCBzZXRDYXRlZ29yaWVzXSA9IHVzZVN0YXRlKFtdKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtTdHJpbmd9IFNlYXJjaFF1ZXJ5U3RhdGUg4oCUIFdpbGwgYmUgdXNlZCB0byBzZWFyY2ggdGhyb3VnaCBjYXJkc1xuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gU2VhcmNoUXVlcnlTdGF0ZVNldHRlciDigJQgU2V0cyB1c2VyIHNlYXJjaCBxdWVyeVxuICAgICAqXG4gICAgICogQHR5cGUge1tTdHJpbmcsIEZ1bmN0aW9uXX0gU2VhcmNoUXVlcnlcbiAgICAgKi9cbiAgICBjb25zdCBbc2VhcmNoUXVlcnksIHNldFNlYXJjaFF1ZXJ5XSA9IHVzZVN0YXRlKCcnKTtcbiAgICBjb25zdCBbc2VsZWN0ZWRDYXRlZ29yeSwgc2V0U2VsZWN0ZWRDYXRlZ29yeV0gPSB1c2VTdGF0ZSgnJyk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7U3RyaW5nfSBTb3J0T3BlbmVkU3RhdGUg4oCUIFRvZ2dsZXMgU29ydCBQb3B1cCBPcGVuZWQgT3IgQ2xvc2VkXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBTb3J0T3BlbmVkU3RhdGVTZXR0ZXIg4oCUIFNldHMgU29ydCBPcHRpb25cbiAgICAgKlxuICAgICAqIEB0eXBlIHtbQm9vbGVhbiwgRnVuY3Rpb25dfSBTb3J0T3BlbmVkXG4gICAgICovXG4gICAgY29uc3QgW3NvcnRPcGVuZWQsIHNldFNvcnRPcGVuZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge1N0cmluZ30gU29ydE9wdGlvblN0YXRlIOKAlCBDYW4gYmUgb25lIG9mIGEgcmFuZ2Ugb2YgdHlwZXNcbiAgICAgKiBAZGVzY3JpcHRpb24gJ1RpdGxlIChBLVopJywgJ1RpdGxlIChaLUEpLCBEYXRlIChOZXcgdG8gT2xkKSwgRGF0ZSAoT2xkIHRvIE5ldyksIEZlYXR1cmVkXG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IFNvcnRPcHRpb25TdGF0ZVNldHRlciDigJQgU2V0cyBTb3J0IE9wdGlvblxuICAgICAqXG4gICAgICogQHR5cGUge1tTdHJpbmcsIEZ1bmN0aW9uXX0gU29ydE9wdGlvblxuICAgICAqL1xuICAgIGNvbnN0IFtzb3J0T3B0aW9uLCBzZXRTb3J0T3B0aW9uXSA9IHVzZVN0YXRlKGRlZmF1bHRTb3J0T3B0aW9uKTtcblxuICAgIGlmIChzb3J0T3B0aW9uLnNvcnQgPT09IFNPUlRfVFlQRVMuUkFORE9NKSB7XG4gICAgICAgIHRvdGFsQ2FyZExpbWl0ID0gc2FtcGxlU2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7Qm9vbGVhbn0gV2luZG93V2lkdGhTdGF0ZSDigJQgQ2FuIGVpdGhlciBiZSB0cnVlIG9yIGZhbHNlXG4gICAgICogQGRlc2NyaXB0aW9uIFVzZWQgdG8gdG9nZ2xlIGJldHdlZW4gbW9iaWxlIGFuZCBkZXNrdG9wIGxheW91dHNcbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gV2luZG93V2lkdGhTdGF0ZVNldHRlciDigJQgVXBkYXRlcyB3aW5kb3cgd2lkdGhcbiAgICAgKlxuICAgICAqIEB0eXBlIHtbTnVtYmVyXX0gV2luZG93V2lkdGhcbiAgICAgKi9cbiAgICBjb25zdCB7IHdpZHRoOiB3aW5kb3dXaWR0aCB9ID0gdXNlV2luZG93RGltZW5zaW9ucygpO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge0Jvb2xlYW59IFNob3dNb2JpbGVGaWx0ZXJzU3RhdGUg4oCUIENhbiBlaXRoZXIgYmUgdHJ1ZSBvciBmYWxzZVxuICAgICAqIEBkZXNjcmlwdGlvbiBXaGVuIHRydWUgbW9iaWxlIGZpbHRlcnMgd2lsbCBhcHBlYXIgb24gdGhlIHBhZ2VcbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gU2hvd01vYmlsZUZpbHRlcnNTdGF0ZVNldHRlclxuICAgICAqIEBkZXNjcmlwdGlvbiBUb2dnbGVzIG1vYmlsZSBmaWx0ZXIgaGVhZGVyL2Zvb3RlciB0byBzaG93IG9yIGhpZGVcbiAgICAgKlxuICAgICAqIEB0eXBlIHtbQm9vbGVhbiwgRnVuY3Rpb25dfSBTaG93TW9iaWxlRmlsdGVyc1xuICAgICAqL1xuICAgIGNvbnN0IFtzaG93TW9iaWxlRmlsdGVycywgc2V0U2hvd01vYmlsZUZpbHRlcnNdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogQHR5cGVkZWYge0Jvb2xlYW59IFNob3dCb29rbWFya1N0YXRlIOKAlCBDYW4gZWl0aGVyIGJlIHRydWUgb3IgZmFsc2VcbiAgICAgKiBAZGVzY3JpcHRpb24gRm9yIFRvcCBGaWx0ZXIgUGFuZWwsIHRoZXJlIGlzIGEgbGltaXQgdG8gaG93IG1hbnkgZmlsdGVyIGdyb3VwcyBjYW4gc2hvd1xuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBTaG93Qm9va21hcmtTdGF0ZVNldHRlciDigJQgU2V0cyBsaW1pdCBvbiBmaWx0ZXIgcXVhbnRpdHlcbiAgICAgKiBAZGVzY3JpcHRpb24gV2hlbiBvdmVyIGFsbG93ZWQgRmlsdGVyIEdyb3VwIFF1YW50aXR5IC0gQSBcIk1vcmUgK1wiIGJ1dHRvbiBhcHBlYXJzXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W0Jvb2xlYW4sIEZ1bmN0aW9uXX0gU2hvd0Jvb2ttYXJrc1xuICAgICAqL1xuICAgIGNvbnN0IFtzaG93Qm9va21hcmtzLCBzZXRTaG93Qm9va21hcmtzXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtCb29sZWFufSBMaW1pdEZpbHRlclF1YW50aXR5U3RhdGUg4oCUIENhbiBlaXRoZXIgYmUgdHJ1ZSBvciBmYWxzZVxuICAgICAqIEBkZXNjcmlwdGlvbiBGb3IgVG9wIEZpbHRlciBQYW5lbCwgdGhlcmUgaXMgYSBsaW1pdCB0byBob3cgbWFueSBmaWx0ZXIgZ3JvdXBzIGNhbiBzaG93XG4gICAgICpcbiAgICAgKiBAdHlwZWRlZiB7RnVuY3Rpb259IExpbWl0RmlsdGVyUXVhbnRpdHlTdGF0ZVNldHRlciDigJQgU2V0cyBsaW1pdCBvbiBmaWx0ZXIgcXVhbnRpdHlcbiAgICAgKiBAZGVzY3JpcHRpb24gV2hlbiBvdmVyIGFsbG93ZWQgRmlsdGVyIEdyb3VwIFF1YW50aXR5IC0gQSBcIk1vcmUgK1wiIGJ1dHRvbiBhcHBlYXJzXG4gICAgICpcbiAgICAgKiBAdHlwZSB7W0Jvb2xlYW4sIEZ1bmN0aW9uXX0gTGltaXRGaWx0ZXJRdWFudGl0eVxuICAgICAqL1xuICAgIGNvbnN0IFtzaG93TGltaXRlZEZpbHRlcnNRdHksIHNldFNob3dMaW1pdGVkRmlsdGVyc1F0eV0gPSB1c2VTdGF0ZShmaWx0ZXJQYW5lbFR5cGUgPT09ICd0b3AnKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtBcnJheX0gQ2FyZFN0YXRlXG4gICAgICogQGRlc2NyaXB0aW9uIHNldHMgY2FyZHMgcmV0cmlldmVkIGVpdGhlciBzZXJ2ZXIgc2lkZSByZW5kZXIgb3IgQVBJIGNhbGxcbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gQ2FyZFN0YXRlU2V0dGVyXG4gICAgICogQGRlc2NyaXB0aW9uIEUuZy4gUmVuZGVyIEZlYXR1cmVkIENhcmRzIFNlcnZlciBzaWRlLCBXaGlsZSBjb2xsZWN0aW9uIGNhcmRzIGZyb20gQVBJIGNhbGxcbiAgICAgKlxuICAgICAqIEB0eXBlIHtbQXJyYXksIEZ1bmN0aW9uXX0gQ2FyZHNcbiAgICAgKi9cbiAgICBjb25zdCBbY2FyZHMsIHNldENhcmRzXSA9IHVzZVN0YXRlKFtdKTtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlZGVmIHtCb29sZWFufSBMb2FkaW5nU3RhdGUg4oCUIENhbiBlaXRoZXIgYmUgdHJ1ZSBvciBmYWxzZVxuICAgICAqIEBkZXNjcmlwdGlvbiBXaGVuIHRydWUgYSBsb2FkaW5nIHNwaW5uZXIgd2lsbCBhcHBlYXIgb24gdGhlIHBhZ2VcbiAgICAgKlxuICAgICAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gTG9hZGluZ1N0YXRlU2V0dGVyIOKAlCBTZXRzIGxvYWRlciB0cnVlIG9yIGZhbHNlXG4gICAgICogQGRlc2NyaXB0aW9uIFRydWUgd2hpbGUgd2FpdGluZyBmb3IgQVBJIHJlc3BvbnNlLiBGYWxzZSBvbiBjYXJkcyByZXRyaWV2ZWQgb3IgYXBpIGZhaWx1cmVcbiAgICAgKlxuICAgICAqIEB0eXBlIHtbQm9vbGVhbiwgRnVuY3Rpb25dfSBMb2FkaW5nXG4gICAgICovXG4gICAgY29uc3QgW2lzTG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZWRlZiB7Qm9vbGVhbn0gQXBpRmFpbHVyZVN0YXRlIOKAlCBDYW4gZWl0aGVyIGJlIHRydWUgb3IgZmFsc2VcbiAgICAgKiBAZGVzY3JpcHRpb24gV2hlbiB0cnVlIGFuIEFQSSBlcnJvciBoYXMgb2NjdXJlZFxuICAgICAqXG4gICAgICogQHR5cGVkZWYge0Z1bmN0aW9ufSBBcGlGYWlsdXJlU3RhdGVTZXR0ZXIg4oCUIFNldHMgQVBJIGZhaWx1cmUgZmxhZyB0cnVlIG9yIGZhbHNlXG4gICAgICogQGRlc2NyaXB0aW9uIFRydWUgd2hlbiByZXRyaWV2ZWQgb3IgYXBpIGZhaWx1cmUuIEZhbHNlIG90aGVyd2lzZVxuICAgICAqXG4gICAgICogQHR5cGUge1tCb29sZWFuLCBGdW5jdGlvbl19IEFwaUZhaWx1cmVcbiAgICAgKi9cbiAgICBjb25zdCBbaXNBcGlGYWlsdXJlLCBzZXRBcGlGYWlsdXJlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbcmFuZG9tU29ydElkLCBzZXRSYW5kb21Tb3J0SWRdID0gdXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW2lzRmlyc3RMb2FkLCBzZXRJc0ZpcnN0TG9hZF0gPSB1c2VTdGF0ZSh0cnVlKTtcbiAgICBjb25zdCBbdmlzaWJsZVN0YW1wLCBzZXRWaXNpYmxlU3RhbXBdID0gdXNlU3RhdGUoKTtcbiAgICBjb25zdCBbaGFzRmV0Y2hlZCwgc2V0SGFzRmV0Y2hlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgRE9NIHJlZmVyZW5jZSB0byBmaXJzdCBmaWx0ZXIgaXRlbVxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IC0gZmlsdGVyIGl0ZW0gRE9NIHJlZmVyZW5jZVxuICAgICAqL1xuICAgIGNvbnN0IGZpbHRlckl0ZW1SZWYgPSBjcmVhdGVSZWYoKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBET00gcmVmZXJlbmNlIHRvIGZpbHRlciBpbmZvIGJ1dHRvblxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IC0gZmlsdGVyIGluZm8gRE9NIHJlZmVyZW5jZVxuICAgICAqL1xuICAgIGNvbnN0IGZpbHRlckluZm9SZWYgPSBjcmVhdGVSZWYoKTtcblxuICAgIC8qKlxuICAgICAqKioqIEhlbHBlciBNZXRob2RzICoqKipcbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIGdldFBhcmVudENoaWxkKGlkKSB7XG4gICAgICAgIGxldCBpID0gaWQubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaWRbaV0gIT09ICcvJyAmJiBpID49IDApIHtcbiAgICAgICAgICAgIGktLTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2lkLnN1YnN0cmluZygwLCBpKSwgaWQuc3Vic3RyaW5nKGkgKyAxKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcm9sbGluZ0hhc2gocywgbCkge1xuICAgICAgICBpZiAoIXMpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBCQVNFID0gNTM7XG4gICAgICAgIGNvbnN0IE1PRCA9IDEwICoqIGwgKyA3O1xuICAgICAgICBsZXQgaGFzaCA9IDA7XG4gICAgICAgIGxldCBiYXNlUG93ZXIgPSAxO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGhhc2ggPSAoaGFzaCArIChzLmNoYXJDb2RlQXQoaSkgLSA5NyArIDEpICogYmFzZVBvd2VyKSAlIE1PRDtcbiAgICAgICAgICAgIGJhc2VQb3dlciA9IChiYXNlUG93ZXIgKiBCQVNFKSAlIE1PRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKChoYXNoICsgTU9EKSAlIE1PRCkudG9TdHJpbmcoMzYpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvciBhIGdpdmVuIGdyb3VwIG9mIGZpbHRlcnMsIGl0IHdpbGwgdW5zZWxlY3QgYWxsIG9mIHRoZW1cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBmaWx0ZXJHcm91cHMgLSBhIGdyb3VwIG9mIGZpbHRlcnNcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IGZpdGxlckdyb3VwcyAtIHRoZSB1cGRhdGVkIGdyb3VwIG9mIGZpbHRlcnNcbiAgICAgKi9cbiAgICBjb25zdCBnZXRBbGxGaWx0ZXJzQ2xlYXJlZFN0YXRlID0gZmlsdGVyR3JvdXBzID0+IGZpbHRlckdyb3Vwcy5tYXAoZmlsdGVyR3JvdXAgPT4gKHtcbiAgICAgICAgLi4uZmlsdGVyR3JvdXAsXG4gICAgICAgIGl0ZW1zOiBmaWx0ZXJHcm91cC5pdGVtcy5tYXAoZmlsdGVySXRlbSA9PiAoe1xuICAgICAgICAgICAgLi4uZmlsdGVySXRlbSxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgfSkpLFxuICAgIH0pKTtcblxuICAgIC8qKlxuICAgICAqIEZvciBhIGdpdmVuIGdyb3VwIG9mIGZpbHRlcnMsIGl0IHdpbGwgdW5zZWxlY3QgdGhlIG9uZSB3aXRoIGEgZ2l2ZW4gaWRcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gaWQgLSB0aGUgaWQgb2YgYW4gaW5kaXZpZHVhbCBmaWx0ZXIgaXRlbVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGZpbHRlckdyb3VwcyAtIGEgZ3JvdXAgb2YgZmlsdGVyc1xuICAgICAqIEByZXR1cm5zIHtBcnJheX0gZml0bGVyR3JvdXBzIC0gdGhlIHVwZGF0ZWQgZ3JvdXAgb2YgZmlsdGVyc1xuICAgICAqL1xuICAgIGNvbnN0IGdldEZpbHRlckl0ZW1DbGVhcmVkU3RhdGUgPSAoaWQsIGZpbHRlckdyb3VwcykgPT4gZmlsdGVyR3JvdXBzLm1hcCgoZmlsdGVyR3JvdXApID0+IHtcbiAgICAgICAgaWYgKGZpbHRlckdyb3VwLmlkICE9PSBpZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlckdyb3VwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5maWx0ZXJHcm91cCxcbiAgICAgICAgICAgIGl0ZW1zOiBmaWx0ZXJHcm91cC5pdGVtcy5tYXAoZmlsdGVySXRlbSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLmZpbHRlckl0ZW0sXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogV2lsbCB1bmNoZWNrIGEgZmlsdGVyIHdpdGggYSBnaXZlbiBpZFxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBpZCAtIHRoZSBpZCBvZiBhbiBpbmRpdmlkdWFsIGZpbHRlciBpdGVtXG4gICAgICogQHJldHVybnMge1ZvaWR9IC0gYW4gdXBkYXRlZCBzdGF0ZVxuICAgICAqL1xuICAgIGNvbnN0IGNsZWFyRmlsdGVySXRlbSA9IChpZCwgZ3JvdXAgPSAnJykgPT4ge1xuICAgICAgICBzZXRGaWx0ZXJzKChwcmV2RmlsdGVycykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyQ2xlYXJlZFN0YXRlID0gZ2V0RmlsdGVySXRlbUNsZWFyZWRTdGF0ZShpZCwgcHJldkZpbHRlcnMpO1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlckNsZWFyZWRTdGF0ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICAgICAgY2xlYXJVcmxTdGF0ZSgpO1xuICAgICAgICAvLyBhY3R1YWxseSBjbGVhciB0aGUgdXJsIHN0YXRlXG4gICAgICAgIHVybFBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaEZpbHRlciA9IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ2NoXycsICcnKS5yZXBsYWNlKC8gL2csICctJyk7XG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoZmlsdGVyR3JvdXBQcmVmaXgpICE9PSAwXG4gICAgICAgICAgICAgICAgJiYgIWlkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoY2hGaWx0ZXIpXG4gICAgICAgICAgICAgICAgfHwgIWdyb3VwLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvIC9nLCAnLScpLmluY2x1ZGVzKGNoRmlsdGVyKSkge1xuICAgICAgICAgICAgICAgIHNldFVybFN0YXRlKGtleSwgdmFsdWUucmVwbGFjZSgvJTIwL2csICcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogV2lsbCB1bmNoZWNrIGFsbCBmaWx0ZXIgaXRlbXNcbiAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHN0YXRlXG4gICAgICovXG4gICAgY29uc3QgY2xlYXJBbGxGaWx0ZXJzID0gKCkgPT4ge1xuICAgICAgICBzZXRGaWx0ZXJzKChwcmV2RmlsdGVycykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWxsRmlsdGVyc0NsZWFyZWRTdGF0ZSA9IGdldEFsbEZpbHRlcnNDbGVhcmVkU3RhdGUocHJldkZpbHRlcnMpO1xuICAgICAgICAgICAgcmV0dXJuIGFsbEZpbHRlcnNDbGVhcmVkU3RhdGU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG5cbiAgICAgICAgY2xlYXJVcmxTdGF0ZSgpO1xuICAgICAgICB1cmxQYXJhbXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKGZpbHRlckdyb3VwUHJlZml4KSAhPT0gMCkgc2V0VXJsU3RhdGUoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgZmlsdGVycywgYW5kIHNlYXJjaCB0byBlbXB0eS4gSGlkZXMgYm9va21hcmsgZmlsdGVyXG4gICAgICogQHJldHVybnMge1ZvaWR9IC0gYW4gdXBkYXRlZCBzdGF0ZVxuICAgICAqL1xuICAgIGNvbnN0IHJlc2V0RmlsdGVyc1NlYXJjaEFuZEJvb2ttYXJrcyA9ICgpID0+IHtcbiAgICAgICAgY2xlYXJBbGxGaWx0ZXJzKCk7XG4gICAgICAgIHNldFNlYXJjaFF1ZXJ5KCcnKTtcbiAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICAgICAgY2xlYXJVcmxTdGF0ZSgpO1xuICAgICAgICB1cmxQYXJhbXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKGZpbHRlckdyb3VwUHJlZml4KSA9PT0gLTFcbiAgICAgICAgICAgICAgICAmJiBrZXkuaW5kZXhPZihzZWFyY2hQcmVmaXgpID09PSAtMSkgc2V0VXJsU3RhdGUoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBzZXRTaG93Qm9va21hcmtzKGZhbHNlKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICoqKiogRVZFTlQgSEFORExFUlMgKioqKlxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogT24gTG9hZCBNb3JlIEJ1dHRvbiBDbGljaywgSW5jcmVtZW50IFBhZ2UgQ3VvbnRlciBCeSAxXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NsaWNrRXZlbnR9IGVcbiAgICAgKiBAbGlzdGVucyBDbGlja0V2ZW50XG4gICAgICovXG4gICAgY29uc3Qgb25Mb2FkTW9yZUNsaWNrID0gKCkgPT4ge1xuICAgICAgICBzZXRDdXJyZW50UGFnZShwcmV2U3RhdGUgPT4gcHJldlN0YXRlICsgMSk7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCB3aW5kb3cucGFnZVlPZmZzZXQpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUYWtlcyBzb3J0IHVzZXIgc2VsZWN0cyBhbmQgc2V0cyBpdCBzbyBjYXJkcyBhcmUgc29ydGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NsaWNrRXZlbnR9IGUgLSBUaGUgb2JzZXJ2YWJsZSBldmVudC5cbiAgICAgKiBAbGlzdGVucyBDbGlja0V2ZW50XG4gICAgICovXG4gICAgY29uc3QgaGFuZGxlU29ydENoYW5nZSA9IChvcHRpb24pID0+IHtcbiAgICAgICAgc2V0U29ydE9wdGlvbihvcHRpb24pO1xuICAgICAgICBzZXRTb3J0T3BlbmVkKGZhbHNlKTtcbiAgICAgICAgc2V0SXNGaXJzdExvYWQoZmFsc2UpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIHdoZW5ldmVyIHRoZSBzZWFyY2ggYm94IGlzIGNsaWNrZWQgb3IgaW5wdXQgZmllbGRcbiAgICAgKiBjaGFuZ2VzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NsaWNrRXZlbnQsIENoYW5nZUV2ZW50fSBlXG4gICAgICogQGxpc3RlbnMgQ2xpY2tFdmVudCwgQ2hhbmdlRXZlbnRcbiAgICAgKi9cbiAgICBjb25zdCBoYW5kbGVTZWFyY2hJbnB1dENoYW5nZSA9ICh2YWwpID0+IHtcbiAgICAgICAgc2V0U2VhcmNoUXVlcnkodmFsKTtcbiAgICAgICAgc2V0Q3VycmVudFBhZ2UoMSk7XG4gICAgICAgIHNldFVybFN0YXRlKHNlYXJjaFByZWZpeCwgdmFsKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyB3aGVuIGEgZ3JvdXAgb2YgZmlsdGVycyBpcyBjbGlja2VkLiBCZWhhdmlvciBzaG91bGQgYmVcbiAgICAgKiB0byB0b2dnbGUgZ3JvdXAgb3BlbiBvciBjbG9zZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q2xpY2tFdmVudH0gZSAtIFRoZSBvYnNlcnZhYmxlIGV2ZW50LlxuICAgICAqIEBsaXN0ZW5zIENsaWNrRXZlbnRcbiAgICAgKi9cbiAgICBjb25zdCBoYW5kbGVGaWx0ZXJHcm91cENsaWNrID0gKGZpbHRlcklkKSA9PiB7XG4gICAgICAgIHNldEZpbHRlcnMoKHByZXZGaWx0ZXJzKSA9PiB7XG4gICAgICAgICAgICBsZXQgb3BlbmVkO1xuICAgICAgICAgICAgcmV0dXJuIHByZXZGaWx0ZXJzLm1hcCgoZWwpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZWwuaWQgPT09IGZpbHRlcklkKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wZW5lZCA9ICFlbC5vcGVuZWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgICAgICAgICAgIG9wZW5lZCA9IGVsLm9wZW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uZWwsIG9wZW5lZCB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBXaWxsIGZpbmQgYW5kIHNldCBuZWVkZWQgZmlsdGVyIHRvIHVybFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZpbHRlcklkIC0gc2VsZWN0ZWQgZmlsdGVyIGdyb3VwIGlkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1JZCAtIHNlbGVjdGVkIGZpbHRlciBpdGVtIGlkXG4gICAgICogQHBhcmFtIHtib29sZWFufSBpc0NoZWNrZWRcbiAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHVybFxuICAgICAqL1xuICAgIGNvbnN0IGNoYW5nZVVybFN0YXRlID0gKGZpbHRlcklkLCBpdGVtSWQsIGlzQ2hlY2tlZCkgPT4ge1xuICAgICAgICBjb25zdCB7IGdyb3VwLCBpdGVtcyB9ID0gZmlsdGVycy5maW5kKCh7IGlkIH0pID0+IGlkID09PSBmaWx0ZXJJZCk7XG4gICAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IGl0ZW1zLmZpbmQoKHsgaWQgfSkgPT4gaWQgPT09IGl0ZW1JZCk7XG5cbiAgICAgICAgbGV0IHVybFN0YXRlVmFsdWUgPSB1cmxTdGF0ZVtmaWx0ZXJHcm91cFByZWZpeCArIGdyb3VwXSB8fCBbXTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuICAgICAgICBpZiAodHlwZW9mIHVybFN0YXRlVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB1cmxTdGF0ZVZhbHVlID0gdXJsU3RhdGVWYWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBpc0NoZWNrZWRcbiAgICAgICAgICAgID8gWy4uLnVybFN0YXRlVmFsdWUsIGxhYmVsXVxuICAgICAgICAgICAgOiB1cmxTdGF0ZVZhbHVlLmZpbHRlcihpdGVtID0+IGl0ZW0gIT09IGxhYmVsKTtcblxuICAgICAgICBzZXRVcmxTdGF0ZShmaWx0ZXJHcm91cFByZWZpeCArIGdyb3VwLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgd2hhdCBoYXBwZW5zIHdoZW4gYSBzcGVjaWZpYyBmaWx0ZXIgaXRlbSAoY2hlY2tib3gpXG4gICAgICogaXMgY2xpY2tlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHtDaGVja2JveENsaWNrRXZlbnR9IGVcbiAgICAgKiBAbGlzdGVucyBDaGVja2JveENsaWNrRXZlbnRcbiAgICAgKi9cbiAgICBjb25zdCBoYW5kbGVDaGVja0JveENoYW5nZSA9IChmaWx0ZXJJZCwgaXRlbUlkLCBpc0NoZWNrZWQpID0+IHtcbiAgICAgICAgaWYgKGlzWG9yRmlsdGVyICYmIGlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgY2xlYXJBbGxGaWx0ZXJzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRGaWx0ZXJzKHByZXZGaWx0ZXJzID0+IHByZXZGaWx0ZXJzLm1hcCgoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyLmlkICE9PSBmaWx0ZXJJZCkgcmV0dXJuIGZpbHRlcjtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgICAgICAgICAgaXRlbXM6IGZpbHRlci5pdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogaXRlbS5pZCA9PT0gaXRlbUlkID8gIWl0ZW0uc2VsZWN0ZWQgOiBpdGVtLnNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKTtcbiAgICAgICAgc2V0Q3VycmVudFBhZ2UoMSk7XG4gICAgICAgIGNoYW5nZVVybFN0YXRlKGZpbHRlcklkLCBpdGVtSWQsIGlzQ2hlY2tlZCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFNob3dzL0hpZGVzIE1vYmlsZSBGaWx0ZXIgUGFuZWxcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q2xpY2tFdmVudH0gZVxuICAgICAqIEBsaXN0ZW5zIENsaWNrRXZlbnRcbiAgICAgKi9cbiAgICBjb25zdCBoYW5kbGVNb2JpbGVGaWx0ZXJzVG9nZ2xlID0gKCkgPT4gc2V0U2hvd01vYmlsZUZpbHRlcnMocHJldiA9PiAhcHJldik7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGEgY2FyZCdzIGJvb2ttYXJrIGljb24gaXMgY2xpY2tlZCwgc2F2ZSB0aGUgY2FyZFxuICAgICAqXG4gICAgICogQHBhcmFtIHtDbGlja0V2ZW50fSBlXG4gICAgICogQGxpc3RlbnMgQ2xpY2tFdmVudFxuICAgICAqL1xuICAgIGNvbnN0IGhhbmRsZUNhcmRCb29rbWFya2luZyA9IChpZCkgPT4ge1xuICAgICAgICAvLyBVcGRhdGUgYm9va21hcmtlZCBJRHNcbiAgICAgICAgY29uc3QgY2FyZElzQm9va21hcmtlZCA9IGJvb2ttYXJrZWRDYXJkSWRzLmZpbmQoY2FyZCA9PiBjYXJkID09PSBpZCk7XG5cbiAgICAgICAgaWYgKGNhcmRJc0Jvb2ttYXJrZWQpIHtcbiAgICAgICAgICAgIHNldEJvb2ttYXJrZWRDYXJkSWRzKHByZXYgPT4gcHJldi5maWx0ZXIoZWwgPT4gZWwgIT09IGlkKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRCb29rbWFya2VkQ2FyZElkcyhwcmV2ID0+IFsuLi5wcmV2LCBpZF0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFdpbGwgc2hvdyAgb3IgaGlkZSBhbGwgc2F2ZWQgYm9va21hcmtzIHdoZW4gY2xpY2tlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHtDbGlja0V2ZW50fSBlXG4gICAgICogQGxpc3RlbnMgQ2xpY2tFdmVudFxuICAgICAqL1xuICAgIGNvbnN0IGhhbmRsZVNob3dCb29rbWFya3NGaWx0ZXJDbGljayA9IChlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHNldFNob3dCb29rbWFya3MocHJldiA9PiAhcHJldik7XG4gICAgICAgIHNldEN1cnJlbnRQYWdlKDEpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJZiB0b3AgZmlsdGVyIHBhbmVsLCB0b2dnbGUgb3IgaGlkZSBtb3JlIGJ1dHRvblxuICAgICAqXG4gICAgICogQHBhcmFtIHtDbGlja0V2ZW50fSBlXG4gICAgICogQGxpc3RlbnMgQ2xpY2tFdmVudFxuICAgICAqL1xuICAgIGNvbnN0IGhhbmRsZVNob3dBbGxUb3BGaWx0ZXJzID0gKCkgPT4ge1xuICAgICAgICBzZXRTaG93TGltaXRlZEZpbHRlcnNRdHkocHJldiA9PiAhcHJldik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE9uIHdpbmRvdyBjbGljaywgYWxsIGRyb3Bkb3ducyBzaG91bGQgaGlkZVxuICAgICAqXG4gICAgICogQHBhcmFtIHtDbGlja0V2ZW50fSBlXG4gICAgICogQGxpc3RlbnMgQ2xpY2tFdmVudFxuICAgICAqL1xuICAgIGNvbnN0IGhhbmRsZVdpbmRvd0NsaWNrID0gKCkgPT4ge1xuICAgICAgICBzZXRPcGVuRHJvcGRvd24obnVsbCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgZXNjYXBlIGZvciBtb2JpbGUgZmlsdGVyIGRpYWxvZ1xuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50XG4gICAgICovXG4gICAgY29uc3QgaGFuZGxlTW9iaWxlRmlsdGVyRXNjYXBlID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudC5rZXkgIT09ICdFc2NhcGUnICYmIGV2ZW50LmtleSAhPT0gJ0VzYycpIHJldHVybjtcblxuICAgICAgICBzZXRTaG93TW9iaWxlRmlsdGVycyhmYWxzZSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqKioqIEVmZmVjdHMgKioqKlxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogU2V0cyBhdXRob3JlZCBmaWx0ZXJzIGFzIHN0YXRlXG4gICAgICogQHJldHVybnMge1ZvaWR9IC0gYW4gdXBkYXRlZCBzdGF0ZVxuICAgICAqL1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0RmlsdGVycyhhdXRob3JlZEZpbHRlcnMubWFwKGZpbHRlckdyb3VwID0+ICh7XG4gICAgICAgICAgICAuLi5maWx0ZXJHcm91cCxcbiAgICAgICAgICAgIG9wZW5lZDogREVTS1RPUF9TQ1JFRU5fU0laRSA/IGZpbHRlckdyb3VwLm9wZW5lZE9uTG9hZCA6IGZhbHNlLFxuICAgICAgICAgICAgaXRlbXM6IGZpbHRlckdyb3VwLml0ZW1zLm1hcChmaWx0ZXJJdGVtID0+ICh7XG4gICAgICAgICAgICAgICAgLi4uZmlsdGVySXRlbSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICB9KSksXG4gICAgICAgIH0pKSk7XG4gICAgfSwgW10pO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyBmaWx0ZXJzIGZyb20gdXJsIGFzIHN0YXRlXG4gICAgICogQHJldHVybnMge1ZvaWR9IC0gYW4gdXBkYXRlZCBzdGF0ZVxuICAgICAqL1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldEZpbHRlcnMob3JpZ2luID0+IG9yaWdpbi5tYXAoKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBncm91cCwgaXRlbXMgfSA9IGZpbHRlcjtcbiAgICAgICAgICAgIGNvbnN0IHVybFN0YXRlVmFsdWUgPSB1cmxTdGF0ZVtmaWx0ZXJHcm91cFByZWZpeCArIGdyb3VwXTtcblxuICAgICAgICAgICAgaWYgKCF1cmxTdGF0ZVZhbHVlKSByZXR1cm4gZmlsdGVyO1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG4gICAgICAgICAgICBjb25zdCB1cmxTdGF0ZUFycmF5ID0gdXJsU3RhdGVWYWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgICAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICAgICAgaXRlbXM6IGl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiB1cmxTdGF0ZUFycmF5LmluY2x1ZGVzKFN0cmluZyhpdGVtLmxhYmVsKSksXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkpO1xuICAgICAgICBjb25zdCB1cmxTZWFyY2hWYWx1ZSA9IHVybFN0YXRlW3NlYXJjaFByZWZpeF07XG4gICAgICAgIGlmICh1cmxTZWFyY2hWYWx1ZSkge1xuICAgICAgICAgICAgc2V0U2VhcmNoUXVlcnkodXJsU2VhcmNoVmFsdWVbMF0pO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0UmFuZG9tU29ydElkKE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiAxMGUxMikpKTtcbiAgICB9LCBbXSk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIGFmdGVyIGJ1dHRvbiBsb2FkIG1vcmUgY2xpY2tcbiAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHVybCBwYWdlXG4gICAgICovXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0VXJsU3RhdGUoJ3BhZ2UnLCBjdXJyZW50UGFnZSA9PT0gMSA/ICcnIDogY3VycmVudFBhZ2UpO1xuICAgIH0sIFtjdXJyZW50UGFnZV0pO1xuXG4gICAgY29uc3QgcmVtb3ZlRW1wdHlGaWx0ZXJzID0gKGFsbEZpbHRlcnMsIGNhcmRzRnJvbUpzb24pID0+IHtcbiAgICAgICAgY29uc3QgdGFncyA9IFtdLmNvbmNhdCguLi5jYXJkc0Zyb21Kc29uLm1hcChjYXJkID0+IGNhcmQudGFncy5tYXAodGFnID0+IHRhZy5pZCkpKTtcblxuICAgICAgICBjb25zdCB0aW1pbmdUYWdzID0gW1xuICAgICAgICAgICAgRVZFTlRfVElNSU5HX0lEUy5MSVZFLFxuICAgICAgICAgICAgRVZFTlRfVElNSU5HX0lEUy5PTkRFTUFORCxcbiAgICAgICAgICAgIEVWRU5UX1RJTUlOR19JRFMuVVBDT01JTkcsXG4gICAgICAgIF07XG5cbiAgICAgICAgcmV0dXJuIGFsbEZpbHRlcnMubWFwKGZpbHRlciA9PiAoe1xuICAgICAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIGl0ZW1zOiBmaWx0ZXIuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gdGFncy5pbmNsdWRlcyhpdGVtLmlkKVxuICAgICAgICAgICAgfHwgdGFncy5pbmNsdWRlcyhpdGVtLmxhYmVsKVxuICAgICAgICAgICAgfHwgdGFncy50b1N0cmluZygpLmluY2x1ZGVzKGAvJHtpdGVtLmlkfWApIC8vICoqKioqIEZJWCAgSEVSRSAqKioqKlxuICAgICAgICAgICAgfHwgdGltaW5nVGFncy5pbmNsdWRlcyhpdGVtLmlkKSksXG4gICAgICAgIH0pKS5maWx0ZXIoZmlsdGVyID0+IGZpbHRlci5pdGVtcy5sZW5ndGggPiAwKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBoYW5kbGVzIGdldHRpbmcgQ2FyZHMsIHRoZXJlIGFyZSBzb21lIGNvbmRpdGlvbnM6XG4gICAgICogLSBJZiB0YXJnZXQgaXMgbm90IGVuYWJsZWQgYSBzaW1wbGUgcmVxdWVzdCBpcyBtYWRlIHdpdGhvdXQgbW9kcyBvciBkZWxheS5cbiAgICAgKiAtIElmIHRhcmdldCBpcyBlbmFibGVkICYgdFZpc2l0b3IgQVBJIGlzIHByZXNlbnQgYWRkIHZhbHVlcyBmcm9tIFZpc2l0b3JcbiAgICAgKiAtIElmIHRhcmdldCBpcyBlbmFibGVkICYgdGhlIFZpc2l0b3IgQVBJIGlzIG5vdCBwcmVzZW50IHNldFRpbWVvdXQgd2l0aFxuICAgICAqIGNvdW50ZXIgdG8gcmVjaGVjayBmb3IgdGhlIFZpc2l0b3IgQVBJLiBJZiAyMCBhdHRlbXB0cyBhcmUgbWFkZSB3L29cbiAgICAgKiBzdWNjZXNzIGZhaWwgdGhlIHJlcXVlc3QuXG4gICAgICogQHJldHVybnMge1ZvaWR9IC0gYW4gdXBkYXRlZCBzdGF0ZVxuICAgICAqL1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICgoaXNMYXp5ICYmIHZpc2libGVTdGFtcCkgfHwgKGlzTGF6eSAmJiAhaGFzRmV0Y2hlZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IF9fc2F0ZWxsaXRlTG9hZGVkUHJvbWlzZTogdmlzaXRvclByb21pc2UgfSA9IHdpbmRvdztcblxuICAgICAgICBsZXQgY29sbGVjdGlvbkVuZHBvaW50ID0gZ2V0Q29uZmlnKCdjb2xsZWN0aW9uJywgJ2VuZHBvaW50Jyk7XG4gICAgICAgIGNvbnN0IGZhbGxiYWNrRW5kcG9pbnQgPSBnZXRDb25maWcoJ2NvbGxlY3Rpb24nLCAnZmFsbGJhY2tFbmRwb2ludCcpO1xuXG4gICAgICAgIGNvbnN0IHIgPSBuZXcgUmVnRXhwKCdeKD86W2Etel0rOik/Ly8nLCAnaScpO1xuICAgICAgICBsZXQgY29sbGVjdGlvbkVuZHBvaW50VVJJO1xuICAgICAgICBpZiAoci50ZXN0KGNvbGxlY3Rpb25FbmRwb2ludCkpIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25FbmRwb2ludFVSSSA9IG5ldyBVUkwoY29sbGVjdGlvbkVuZHBvaW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25FbmRwb2ludFVSSSA9IG5ldyBVUkwoY29sbGVjdGlvbkVuZHBvaW50LCB3aW5kb3cubG9jYXRpb24ub3JpZ2luKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZmFsbGJhY2tFbmRwb2ludCkge1xuICAgICAgICAgICAgY29sbGVjdGlvbkVuZHBvaW50VVJJLnNlYXJjaFBhcmFtcy5zZXQoJ2ZsYXRGaWxlJywgZmFsc2UpO1xuICAgICAgICAgICAgY29sbGVjdGlvbkVuZHBvaW50ID0gY29sbGVjdGlvbkVuZHBvaW50VVJJLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZnVuYyBnZXRDYXJkc1xuICAgICAgICAgKiBAZGVzYyB3cmFwcyBmZXRjaCB3aXRoIGZ1bmN0aW9uIHRvIG1ha2UgaXQgcmV1c2FibGVcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGVuZFBvaW50LCBVUkwgd2l0aCBwYXJhbXMgZm9yIGNhcmQgcmVxdWVzdFxuICAgICAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHN0YXRlXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBnZXRDYXJkcyhlbmRQb2ludCA9IGNvbGxlY3Rpb25FbmRwb2ludCkge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5mZXRjaChlbmRQb2ludCwge1xuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlc3ApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICB9ID0gcmVzcDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwLmpzb24oKS50aGVuKChqc29uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWREYXRhID0gISFPYmplY3Qua2V5cyhqc29uKS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWREYXRhKSByZXR1cm4ganNvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ0xhbmEoeyBtZXNzYWdlOiBgbm8gdmFsaWQgcmVzcG9uc2UgZGF0YSBmcm9tICR7ZW5kUG9pbnR9YCwgdGFnczogJ2NvbGxlY3Rpb24nIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignbm8gdmFsaWQgcmVwb25zZSBkYXRhJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbG9nTGFuYSh7IG1lc3NhZ2U6IGBmYWlsdXJlIGZvciBjYWxsIHRvICR7dXJsfWAsIHRhZ3M6ICdjb2xsZWN0aW9uJywgZXJyb3JNZXNzYWdlOiBgJHtzdGF0dXN9OiAke3N0YXR1c1RleHR9YCB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgJHtzdGF0dXN9OiAke3N0YXR1c1RleHR9LCBmYWlsdXJlIGZvciBjYWxsIHRvICR7dXJsfWApKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKChwYXlsb2FkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0xhbmEoeyBtZXNzYWdlOiBgcmVzcG9uc2UgdG9vayAkeyhEYXRlLm5vdygpIC0gc3RhcnQpIC8gMTAwMH1zYCwgdGFnczogJ2NvbGxlY3Rpb24nIH0pO1xuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0SXNGaXJzdExvYWQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZ2V0QnlQYXRoKHBheWxvYWQsICdjYXJkcy5sZW5ndGgnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nTGFuYSh7IG1lc3NhZ2U6IGBubyBjYXJkcyByZXR1cm4gYnkgcXVlcnkgdG8gdGhpcyBlbmRwb2ludDogJHtlbmRQb2ludH1gLCB0YWdzOiAnY29sbGVjdGlvbicgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuaXNIYXNoZWQgJiYgIWhhc2hlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUQUdfSEFTSF9MRU5HVEggPSA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiBhdXRob3JlZEZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cC5pZCA9IHJvbGxpbmdIYXNoKGdyb3VwLmlkLCBUQUdfSEFTSF9MRU5HVEgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsdGVySXRlbSBvZiBncm91cC5pdGVtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbcGFyZW50LCBjaGlsZF0gPSBnZXRQYXJlbnRDaGlsZChmaWx0ZXJJdGVtLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVySXRlbS5pZCA9IGAke3JvbGxpbmdIYXNoKHBhcmVudCwgVEFHX0hBU0hfTEVOR1RIKX0vJHtyb2xsaW5nSGFzaChjaGlsZCwgVEFHX0hBU0hfTEVOR1RIKX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdGFnIG9mIGhpZGVDdGFUYWdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgW3BhcmVudCwgY2hpbGRdID0gZ2V0UGFyZW50Q2hpbGQodGFnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50ICE9PSAnJyAmJiBjaGlsZCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKGAke3JvbGxpbmdIYXNoKHBhcmVudCwgVEFHX0hBU0hfTEVOR1RIKX0vJHtyb2xsaW5nSGFzaChjaGlsZCwgVEFHX0hBU0hfTEVOR1RIKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ3RhVGFncyA9IHRlbXA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2V0Q2FyZENvdW50KHBheWxvYWQudG90YWxDb3VudCA/IHBheWxvYWQudG90YWxDb3VudCA6IHBheWxvYWQuY2FyZHMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBwcm9jZXNzZWRDYXJkcyA9IFtdIH0gPSBuZXcgSnNvblByb2Nlc3NvcihwYXlsb2FkLmNhcmRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUR1cGxpY2F0ZUNhcmRzKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDYXJkTWV0YURhdGEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVTkNBVEVfVEVYVF9RVFksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seVNob3dCb29rbWFya3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9va21hcmtlZENhcmRJZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUN0YUlkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ3RhVGFncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0NhdGVnb3JpZXNDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpbHRlcnMocHJldkZpbHRlcnMgPT4gcHJldkZpbHRlcnMubWFwKChmaWx0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGdyb3VwLCBpdGVtcyB9ID0gZmlsdGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybFN0YXRlVmFsdWUgPSB1cmxTdGF0ZVtmaWx0ZXJHcm91cFByZWZpeCArIGdyb3VwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVybFN0YXRlVmFsdWUpIHJldHVybiBmaWx0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsU3RhdGVBcnJheSA9IHVybFN0YXRlVmFsdWUuc3BsaXQoJywnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5lZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IGl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHVybFN0YXRlQXJyYXkuaW5jbHVkZXMoU3RyaW5nKGl0ZW0ubGFiZWwpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRGaWx0ZXJzKCgpID0+IGF1dGhvcmVkRmlsdGVycy5tYXAoKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZ3JvdXAsIGl0ZW1zIH0gPSBmaWx0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsU3RhdGVWYWx1ZSA9IHVybFN0YXRlW2ZpbHRlckdyb3VwUHJlZml4ICsgZ3JvdXBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXJsU3RhdGVWYWx1ZSkgcmV0dXJuIGZpbHRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxTdGF0ZUFycmF5ID0gdXJsU3RhdGVWYWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogaXRlbXMubWFwKGl0ZW0gPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogdXJsU3RhdGVBcnJheS5pbmNsdWRlcyhTdHJpbmcoaXRlbS5sYWJlbCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zaXRpb25zID0gZ2V0VHJhbnNpdGlvbnMocHJvY2Vzc2VkQ2FyZHMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc29ydE9wdGlvbi5zb3J0LnRvTG93ZXJDYXNlKCkgPT09ICdldmVudHNvcnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJhbnNpdGlvbnMuc2l6ZSgpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0VHJhbnNpdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRyYW5zaXRpb25zLmRlcXVldWUoKS5wcmlvcml0eSArIE9ORV9TRUNPTkRfREVMQVkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0Q2FyZHMocHJvY2Vzc2VkQ2FyZHMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3dFbXB0eUZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpbHRlcnMocHJldkZpbHRlcnMgPT4gcmVtb3ZlRW1wdHlGaWx0ZXJzKHByZXZGaWx0ZXJzLCBwcm9jZXNzZWRDYXJkcykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzY3JvbGxFbGVtZW50UmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzZWRDYXJkcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UGFnZSA9PT0gMSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZHNUb3Nob3cgPSBwcm9jZXNzZWRDYXJkcy5zbGljZSgwLCByZXN1bHRzUGVyUGFnZSAqIGN1cnJlbnRQYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldExhc3RQYWdlSUQgPSAocmVzdWx0c1BlclBhZ2UgKiBjdXJyZW50UGFnZSkgLSByZXN1bHRzUGVyUGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhcmRzVG9zaG93Lmxlbmd0aCA8IGdldExhc3RQYWdlSUQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RJRCA9IHNjcm9sbEVsZW1lbnRSZWYuY3VycmVudC5jaGlsZHJlbltnZXRMYXN0UGFnZUlEXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RJRC5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVuZFBvaW50ID09PSBjb2xsZWN0aW9uRW5kcG9pbnQgJiYgZmFsbGJhY2tFbmRwb2ludCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q2FyZHMoZmFsbGJhY2tFbmRwb2ludCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbG9nTGFuYSh7IG1lc3NhZ2U6ICdmYWlsZWQgdG8gcmV0dXJuIHByb2Nlc3NlZCBjYXJkcycsIHRhZ3M6ICdjb2xsZWN0aW9uJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHNldEFwaUZhaWx1cmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBmdW5jIGdldFZpc2l0b3JEYXRhXG4gICAgICAgICAqIEBkZXNjIHdyYXBzIGZldGNoaW5nIFZpc2l0b3IgQVBJIGRhdGEgaW4gYSBmdW5jdGlvbiBmb3IgcmV1c2UsIGFsc28gaWZcbiAgICAgICAgICogbGFzdCB1c2VkIHNlc3Npb24gaXMgY2hlY2tlZCwgdXBkYXRlIGN1cnJlbnRFbnRpdHlJZCB3aXRoIHRhcmdldFZhbHVlUmV2ZWFsSURcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtQcm9taXNlfSB2aXNpdG9yQXBpLCB3aW5kb3cuX19zYXRlbGxpdGVMb2FkZWRQcm9taXNlIHdoZW4gYWNjZXNzZWRcbiAgICAgICAgICogQHJldHVybnMge1ZvaWR9IC0gYW4gdXBkYXRlZCBzdGF0ZSwgdGhydSBjYWxsaW5nIGdldENhcmRzXG4gICAgICAgICAqL1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBmdW5jdGlvbiBnZXRWaXNpdG9yRGF0YSh2aXNpdG9yQXBpKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uVVJJID0gbmV3IFVSTChjb2xsZWN0aW9uRW5kcG9pbnQpO1xuXG4gICAgICAgICAgICBpZiAodXNlTGFzdFZpZXdlZFNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRSZXZlYWxJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0YXJnZXRWYWx1ZVJldmVhbElEJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldFJldmVhbElkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25VUkkuc2VhcmNoUGFyYW1zLnNldCgnY3VycmVudEVudGl0eUlkJywgdGFyZ2V0UmV2ZWFsSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmlzaXRvckFwaS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LmFsbG95ICYmIHdpbmRvdy5lZGdlQ29uZmlnSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmFsbG95KCdnZXRJZGVudGl0eScpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblVSSS5zZWFyY2hQYXJhbXMuc2V0KCdtY2d2aWQnLCByZXMuaWRlbnRpdHkuRUNJRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblVSSS5zZWFyY2hQYXJhbXMuc2V0KCdtYm94TUNHTEgnLCByZXMuZWRnZS5yZWdpb25JZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q2FyZHMoY29sbGVjdGlvblVSSS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZpc2l0b3IgPSByZXN1bHQuZ2V0VmlzaXRvcklkKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25VUkkuc2VhcmNoUGFyYW1zLnNldCgnbWNndmlkJywgdmlzaXRvci5nZXRNYXJrZXRpbmdDbG91ZFZpc2l0b3JJRCgpKTtcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblVSSS5zZWFyY2hQYXJhbXMuc2V0KCdzZGlkJywgdmlzaXRvci5nZXRTdXBwbGVtZW50YWxEYXRhSUQoKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25VUkkuc2VhcmNoUGFyYW1zLnNldCgnbWJveEFBTUInLCB2aXNpdG9yLmdldEF1ZGllbmNlTWFuYWdlckJsb2IoKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25VUkkuc2VhcmNoUGFyYW1zLnNldCgnbWJveE1DR0xIJywgdmlzaXRvci5nZXRBdWRpZW5jZU1hbmFnZXJMb2NhdGlvbkhpbnQoKSk7XG4gICAgICAgICAgICAgICAgICAgIGdldENhcmRzKGNvbGxlY3Rpb25VUkkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQGZ1bmMgdmlzaXRvclJldHJ5XG4gICAgICAgICAqIEBkZXNjIFZpc2l0b3IgQVBJIGlzIGxhdGUgbG9hZGluZyBvZnRlbiwgdGhpcyBzZXRzIGEgcmVjdXJzaXZlIGNhbGxcbiAgICAgICAgICogaW4gYSBzZXRUaW1lb3V0IHRvIHJ1biAyMCB0aW1lcywgYW5kIHRoZW4gZmFpbCB0aGUgcmVxdWVzdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybnMge1ZvaWR9IC0gYW4gdXBkYXRlZCBzdGF0ZSwgdGhydSBjYWxsaW5nIGdldFZpc2l0b3JEYXRhIHdoaWNoXG4gICAgICAgICAqIGNhbGxzIGdldENhcmRzXG4gICAgICAgICAqL1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBmdW5jdGlvbiB2aXNpdG9yUmV0cnkoKSB7XG4gICAgICAgICAgICBsZXQgcmV0cnlDb3VudCA9IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbWVkUmV0cnkgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeUNvdW50ID49IDIwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXBpRmFpbHVyZSh0cnVlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBfX3NhdGVsbGl0ZUxvYWRlZFByb21pc2U6IHZpc2l0b3JQcm9taXNlUmV0cnkgfSA9IHdpbmRvdztcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmlzaXRvclByb21pc2VSZXRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VmlzaXRvckRhdGEodmlzaXRvclByb21pc2VSZXRyeSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXZpc2l0b3JQcm9taXNlUmV0cnkgJiYgcmV0cnlDb3VudCA8IDIwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lZFJldHJ5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXRyeUNvdW50ICs9IDE7XG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRpbWVkUmV0cnkoKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHRhcmdldEVuYWJsZWQgJiYgdmlzaXRvclByb21pc2UpIHtcbiAgICAgICAgICAgIGdldFZpc2l0b3JEYXRhKHZpc2l0b3JQcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHRhcmdldEVuYWJsZWQgJiYgIXZpc2l0b3JQcm9taXNlKSB7XG4gICAgICAgICAgICB2aXNpdG9yUmV0cnkoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGFyZ2V0RW5hYmxlZCAmJiAhcGFydGlhbExvYWRXaXRoQmFja2dyb3VuZEZldGNoKSB7XG4gICAgICAgICAgICBnZXRDYXJkcygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFyZ2V0RW5hYmxlZCAmJiBwYXJ0aWFsTG9hZFdpdGhCYWNrZ3JvdW5kRmV0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25FbmRwb2ludFVybCA9IG5ldyBVUkwoY29sbGVjdGlvbkVuZHBvaW50KTtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25FbmRwb2ludFVybC5zZWFyY2hQYXJhbXMuc2V0KCdwYXJ0aWFsTG9hZENvdW50JywgU3RyaW5nKHBhcnRpYWxMb2FkQ291bnQpKTtcbiAgICAgICAgICAgIHNldElzUGFydGlhbExvYWQodHJ1ZSk7XG4gICAgICAgICAgICBnZXRDYXJkcyhjb2xsZWN0aW9uRW5kcG9pbnRVcmwudG9TdHJpbmcoKSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZ2V0Q2FyZHMoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0SXNQYXJ0aWFsTG9hZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFt2aXNpYmxlU3RhbXAsIGhhc0ZldGNoZWRdKTtcblxuICAgIC8qKlxuICAgICAqIFNhdmVzIGNhcmRzIHRvIGxvY2FsIHN0b3JhZ2UgYW5kIHVwZGF0ZXMgY2FyZCB3LyBib29rbWFya2VkIGRhdGFcbiAgICAgKiBAcmV0dXJucyB7Vm9pZH0gLSBhbiB1cGRhdGVkIHN0YXRlXG4gICAgICovXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2F2ZUJvb2ttYXJrc1RvTG9jYWxTdG9yYWdlKGJvb2ttYXJrZWRDYXJkSWRzKTtcbiAgICAgICAgc2V0Q2FyZHMoZ2V0VXBkYXRlZENhcmRCb29rbWFya0RhdGEoY2FyZHMsIGJvb2ttYXJrZWRDYXJkSWRzKSk7XG4gICAgfSwgW2Jvb2ttYXJrZWRDYXJkSWRzXSk7XG5cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgY2xlYXJpbmcgc3RhdGUgb24gc2hvd0Jvb2ttYXJrc1xuICAgICAqIEByZXR1cm5zIHtWb2lkfSAtIGFuIHVwZGF0ZWQgc3RhdGVcbiAgICAgKi9cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoc2hvd0Jvb2ttYXJrcykge1xuICAgICAgICAgICAgY2xlYXJBbGxGaWx0ZXJzKCk7XG4gICAgICAgICAgICBzZXRTZWFyY2hRdWVyeSgnJyk7XG4gICAgICAgIH1cbiAgICB9LCBbc2hvd0Jvb2ttYXJrc10pO1xuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBmb2N1cyBhbmQgZXNjYXBlIG9uIG1vYmlsZSBmaWx0ZXIgdG9nZ2xlXG4gICAgICogQHJldHVybnMge1ZvaWR9XG4gICAgICovXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHNob3dNb2JpbGVGaWx0ZXJzKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVySXRlbVJlZiAmJiBmaWx0ZXJJdGVtUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJJdGVtUmVmLmN1cnJlbnQuZm9jdXNNb2JUaXRsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZU1vYmlsZUZpbHRlckVzY2FwZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVySW5mb1JlZiAmJiBmaWx0ZXJJbmZvUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJJbmZvUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVNb2JpbGVGaWx0ZXJFc2NhcGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVNb2JpbGVGaWx0ZXJFc2NhcGUpO1xuICAgICAgICB9O1xuICAgIH0sIFtzaG93TW9iaWxlRmlsdGVyc10pO1xuXG4gICAgY29uc3QgYm94ID0gdXNlUmVmKCk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGJveCAmJiAhdmlzaWJsZVN0YW1wICYmIGlzTGF6eSkge1xuICAgICAgICAgICAgY29uc3QgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZW50cmllc1swXS5pbnRlcnNlY3Rpb25SYXRpbyA8PSAwKSByZXR1cm47XG4gICAgICAgICAgICAgICAgc2V0SGFzRmV0Y2hlZCh0cnVlKTtcbiAgICAgICAgICAgICAgICBzZXRWaXNpYmxlU3RhbXAobmV3IERhdGUoKS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpby5vYnNlcnZlKGJveC5jdXJyZW50KTtcbiAgICAgICAgfVxuICAgIH0sIFtib3hdKTtcblxuICAgIC8qKlxuICAgICAqKioqIERlcml2ZWQgU3RhdGUgKioqKlxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgb2YgZmlsdGVycyBjaG9zZW4gYnkgdGhlIHVzZXJcbiAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICovXG4gICAgY29uc3QgYWN0aXZlRmlsdGVySWRzID0gZ2V0QWN0aXZlRmlsdGVySWRzKGZpbHRlcnMpO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgb2YgZmlsdGVycyBwYW5lbHMgKGdyb3VwaW5ncykgY3JlYXRlZCBieSB0aGUgYXV0aG9yXG4gICAgICogQHR5cGUge0FycmF5fVxuICAgICAqL1xuICAgIGNvbnN0IGFjdGl2ZVBhbmVscyA9IGdldEFjdGl2ZVBhbmVscyhhY3RpdmVGaWx0ZXJJZHMpIHx8IG5ldyBTZXQoKTtcblxuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIENhcmRGaWx0ZXJlciBjbGFzcyB0aGF0IGhhbmRsZXMgcmV0dXJuaW5nIHN1YnNldCBvZiBjYXJkc1xuICAgICAqIGJhc2VkIG9mZiB1c2VyIGludGVyYWN0aW9uc1xuICAgICAqXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKi9cbiAgICBjb25zdCBjYXJkRmlsdGVyZXIgPSBuZXcgQ2FyZEZpbHRlcmVyKFxuICAgICAgICBjYXJkcyxcbiAgICAgICAgcmFuZG9tU29ydElkLFxuICAgICAgICBzYW1wbGVTaXplLFxuICAgICAgICByZXNlcnZvaXJTaXplLFxuICAgICAgICBmZWF0dXJlZENhcmRzLFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259IGdldEZpbHRlcmVkQ29sbGVjdGlvblxuICAgICAqIEBkZXNjIENsb3N1cmUgYXJvdW5kIENhcmRGaWx0ZXJlciBmb3IgcmV1c2Ugd2l0aGluIGNvbnRleHRcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICAqICovXG4gICAgY29uc3QgZ2V0RmlsdGVyZWRDb2xsZWN0aW9uID0gKCkgPT4gY2FyZEZpbHRlcmVyXG4gICAgICAgIC5zb3J0Q2FyZHMoc29ydE9wdGlvbiwgc2FuaXRpemVkRXZlbnRGaWx0ZXIsIGZlYXR1cmVkQ2FyZHMsIGhpZGVDdGFJZHMsIGlzRmlyc3RMb2FkKVxuICAgICAgICAua2VlcEJvb2ttYXJrZWRDYXJkc09ubHkob25seVNob3dCb29rbWFya3MsIGJvb2ttYXJrZWRDYXJkSWRzLCBzaG93Qm9va21hcmtzKVxuICAgICAgICAua2VlcENhcmRzV2l0aGluRGF0ZVJhbmdlKClcbiAgICAgICAgLmZpbHRlckNhcmRzKGFjdGl2ZUZpbHRlcklkcywgYWN0aXZlUGFuZWxzLCBmaWx0ZXJMb2dpYywgRklMVEVSX1RZUEVTLCBjdXJyQ2F0ZWdvcmllcylcbiAgICAgICAgLnRydW5jYXRlTGlzdCh0b3RhbENhcmRMaW1pdClcbiAgICAgICAgLnNlYXJjaENhcmRzKHNlYXJjaFF1ZXJ5LCBzZWFyY2hGaWVsZHMsIGNhcmRTdHlsZSlcbiAgICAgICAgLnJlbW92ZUNhcmRzKGluY2x1c2lvbklkcyk7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7QXJyYXl9IGZpbHRlcmVkQ2FyZHM6IEZpbHRlcmVkIGNhcmRzIGJhc2VkIG9mZiBjdXJyZW50IHN0YXRlIG9mIHBhZ2VcbiAgICAgKiBAdHlwZSB7TnVtYmVyfSBuZXh0VHJhbnNpdGlvbk1zOiBOdW1iZXIgZm9yIHRpbWVkIGV2ZW50IHNvcnQgdHJhbnNpdGlvblxuICAgICAqL1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gICAgY29uc3QgeyBmaWx0ZXJlZENhcmRzID0gW10sIG5leHRUcmFuc2l0aW9uTXMgPSAwIH0gPSBnZXRGaWx0ZXJlZENvbGxlY3Rpb24oKTtcblxuICAgIC8qKlxuICAgICAqIFN1YnNldCBvZiBjYXJkcyB0byBzaG93IHRoZSB1c2VyXG4gICAgICogQHR5cGUge0FycmF5fVxuICAgICAqL1xuICAgIGNvbnN0IGdyaWRDYXJkcyA9IHRpbWVkQ29sbGVjdGlvbi5sZW5ndGggPyB0aW1lZENvbGxlY3Rpb24gOiBmaWx0ZXJlZENhcmRzO1xuICAgIGxldCBncmlkQ2FyZExlbiA9IGdyaWRDYXJkcy5sZW5ndGg7XG4gICAgaWYgKGlzUGFydGlhbExvYWQpIHtcbiAgICAgICAgZ3JpZENhcmRMZW4gPSBjYXJkQ291bnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG90YWwgcGFnZXMgKHVzZWQgYnkgUGFnaW5hdG9yIENvbXBvbmVudClcbiAgICAgKiBAdHlwZSB7TnVtYmVyfVxuICAgICAqL1xuICAgIGNvbnN0IHRvdGFsUGFnZXMgPSBnZXRUb3RhbFBhZ2VzKHJlc3VsdHNQZXJQYWdlLCBncmlkQ2FyZExlbik7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgY2FyZHMgdG8gc2hvdyAodXNlZCBieSBMb2FkIE1vcmUgY29tcG9uZW50KVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgY29uc3QgbnVtQ2FyZHNUb1Nob3cgPSBnZXROdW1DYXJkc1RvU2hvdyhyZXN1bHRzUGVyUGFnZSwgY3VycmVudFBhZ2UsIGdyaWRDYXJkTGVuKTtcblxuICAgIC8qKlxuICAgICAqIEhvdyBtYW55IGZpbHRlcnMgd2VyZSBzZWxlY3RlZCAtICh1c2VkIGJ5IExlZnQgRmlsdGVyIFBhbmVsKVxuICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICovXG4gICAgY29uc3Qgc2VsZWN0ZWRGaWx0ZXJzSXRlbXNRdHkgPSBnZXROdW1TZWxlY3RlZEZpbHRlckl0ZW1zKGZpbHRlcnMpO1xuXG4gICAgLyoqXG4gICAgICogQ29uZGl0aW9ucyB0byBEaXNwbGF5IEEgRm9ybSBPZiBQYWdpbmF0aW9uXG4gICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICovXG4gICAgY29uc3QgZGlzcGxheVBhZ2luYXRpb24gPSBzaG91bGREaXNwbGF5UGFnaW5hdG9yKFxuICAgICAgICBwYWdpbmF0aW9uSXNFbmFibGVkLFxuICAgICAgICB0b3RhbENhcmRMaW1pdCxcbiAgICAgICAgZ3JpZENhcmRMZW4sXG4gICAgKTtcbiAgICAvKipcbiAgICAgKiBDb25kaXRpb25zIHRvIGRpc3BsYXkgdGhlIExvYWQgTW9yZSBCdXR0b25cbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBjb25zdCBkaXNwbGF5TG9hZE1vcmUgPSBkaXNwbGF5UGFnaW5hdGlvbiAmJiBwYWdpbmF0aW9uVHlwZSA9PT0gJ2xvYWRNb3JlJztcblxuICAgIC8qKlxuICAgICAqIENvbmRpdGlvbnMgdG8gZGlzcGxheSB0aGUgUGFnaW5hdG9yIENvbXBvbmVudFxuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqL1xuICAgIGNvbnN0IGRpc3BsYXlQYWdpbmF0b3IgPSBkaXNwbGF5UGFnaW5hdGlvbiAmJiBwYWdpbmF0aW9uVHlwZSA9PT0gJ3BhZ2luYXRvcic7XG5cbiAgICAvKipcbiAgICAgKiBDb25kaXRpb25zIHRvIGRpc3BsYXkgdGhlIExlZnQgRmlsdGVyIFBhbmVsIENvbXBvbmVudFxuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqL1xuICAgIGNvbnN0IGRpc3BsYXlMZWZ0RmlsdGVyUGFuZWwgPSBmaWx0ZXJQYW5lbEVuYWJsZWQgJiYgZmlsdGVyUGFuZWxUeXBlID09PSBGSUxURVJfUEFORUwuTEVGVDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgYXQgbGVhc2Ugb25lIGNhcmQgd2FzIHJldHVybmVkIGJ5IENhcmQgRmlsdGVyZXJcbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBjb25zdCBhdExlYXN0T25lQ2FyZCA9IGdyaWRDYXJkTGVuID4gMDtcblxuICAgIC8qKlxuICAgICAqIFdoZXJlIHRvIHBsYWNlIHRoZSBTb3J0IFBvcHVwIChlaXRoZXIgbGVmdCBvciByaWdodClcbiAgICAgKiBAdHlwZSB7U3RyaW5nfSAtIExvY2F0aW9uIG9mIFNvcnQgUG9wdXAgaW4gVG9wIEZpbHRlciBQYW5lbCBWaWV3XG4gICAgICovXG4gICAgY29uc3QgdG9wUGFuZWxTb3J0UG9wdXBMb2NhdGlvbiA9IGZpbHRlcnMubGVuZ3RoID4gMCAmJiB3aW5kb3dXaWR0aCA8IFRBQkxFVF9NSU5fV0lEVEggP1xuICAgICAgICBTT1JUX1BPUFVQX0xPQ0FUSU9OLkxFRlQgOiBTT1JUX1BPUFVQX0xPQ0FUSU9OLlJJR0hUO1xuXG4gICAgLyoqXG4gICAgICogSG93IExvbmcgUGFnaW5hdG9yIENvbXBvbmVudCBTaG91bGQgQmVcbiAgICAgKiBAdHlwZSB7TnVtYmVyfSAtIExvY2F0aW9uIG9mIFNvcnQgUG9wdXAgaW4gVG9wIEZpbHRlciBQYW5lbCBWaWV3XG4gICAgICovXG4gICAgY29uc3QgcGFnaW5hdG9yQ291bnQgPSBERVNLVE9QX1NDUkVFTl9TSVpFID8gUEFHSU5BVElPTl9DT1VOVC5ERVNLVE9QIDogUEFHSU5BVElPTl9DT1VOVC5NT0JJTEU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgdG9wIGZpbHRlciBwYW5lbCBvciBub3RcbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICBjb25zdCBpc1RvcEZpbHRlclBhbmVsID0gZmlsdGVyUGFuZWxUeXBlID09PSBGSUxURVJfUEFORUwuVE9QO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIHRvcCBmaWx0ZXIgcGFuZWwgb3Igbm90XG4gICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICovXG4gICAgY29uc3QgaXNMZWZ0RmlsdGVyUGFuZWwgPSBmaWx0ZXJQYW5lbFR5cGUgPT09IEZJTFRFUl9QQU5FTC5MRUZUO1xuXG4gICAgLyoqXG4gICAgICogVWkgb3B0aW9ucyB0aGF0IGNhdXNlIGdyaWQgdG8gcmVyZW5kZXIgbmVjZXNzaXRhdGUgdGhlIGFyaWEgYXR0cmlidXRlIGJlaW5nIHNldFxuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqL1xuICAgIGNvbnN0IGlzR3JpZEFyZWFMaXZlID1cbiAgICAgICAgZmlsdGVyUGFuZWxFbmFibGVkIHx8XG4gICAgICAgIHNlYXJjaEVuYWJsZWQgfHxcbiAgICAgICAgc29ydEVuYWJsZWQgfHxcbiAgICAgICAgcGFnaW5hdGlvbklzRW5hYmxlZDtcblxuICAgIGxldCBmaWx0ZXJOYW1lcyA9ICcnO1xuICAgIGZpbHRlcnMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgZWwuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgZmlsdGVyTmFtZXMgKz0gYCR7aXRlbS5sYWJlbH0sIGA7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICoqKiogQ2xhc3MgbmFtZXMgKioqKlxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQ2xhc3MgbmFtZSBmb3IgdGhlIGF1dGhvcmVkIHRoZW1lOlxuICAgICAqIGxpZ2h0LCBkYXJrLCBkYXJrZXN0O1xuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICovXG4gICAgY29uc3QgdGhlbWVDbGFzcyA9IGNsYXNzTmFtZXMoe1xuICAgICAgICAnY29uc29uYW50LXUtdGhlbWVMaWdodCc6IGF1dGhvcmVkTW9kZSA9PT0gVEhFTUVfVFlQRS5MSUdIVCxcbiAgICAgICAgJ2NvbnNvbmFudC11LXRoZW1lRGFyayc6IGF1dGhvcmVkTW9kZSA9PT0gVEhFTUVfVFlQRS5EQVJLLFxuICAgICAgICAnY29uc29uYW50LXUtdGhlbWVEYXJrZXN0JzogYXV0aG9yZWRNb2RlID09PSBUSEVNRV9UWVBFLkRBUktFU1QsXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0geyp9IGZpbHRlckxpc3RcbiAgICAgKiBAcGFyYW0geyp9IGNhdGVnb3J5TGlzdFxuICAgICAqIEByZXR1cm5zIExpc3Qgb2YgY2F0ZWdvcmllcyBmb3IgdGhlIHRvcCBwaWxsc1xuICAgICAqICAgICAgICAgIFByZXBlbmRzIHRoZSBcIkFsbCBUb3BpY3NcIiBwaWxsIHRvIHRoZSBsaXN0IG9mIGNhdGVnb3JpZXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRBdXRob3JlZENhdGVnb3JpZXMoZmlsdGVyTGlzdCwgY2F0ZWdvcnlMaXN0KSB7XG4gICAgICAgIGNvbnN0IGNhdGVnb3J5SWRzID0gZmlsdGVyTGlzdFxuICAgICAgICAgICAgLmZpbHRlcihmaWx0ZXIgPT4gZmlsdGVyLmlkLmluY2x1ZGVzKCdjYWFzOnByb2R1Y3QtY2F0ZWdvcmllcycpKVxuICAgICAgICAgICAgLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xuXG4gICAgICAgIC8vIFNvcnRzIGNhdGVnb3J5IGxpc3QgYmFzZWQgb24gYXV0aG9yZWQgb3JkZXJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDYXRlZ29yaWVzID0gY2F0ZWdvcnlJZHNcbiAgICAgICAgICAgIC5tYXAoaWQgPT4gY2F0ZWdvcnlMaXN0ICYmIGNhdGVnb3J5TGlzdC5maWx0ZXIoY2F0ZWdvcnkgPT4gY2F0ZWdvcnkuaWQgPT09IGlkKVswXSk7XG5cbiAgICAgICAgcmV0dXJuIFt7XG4gICAgICAgICAgICBncm91cDogJ0FsbCBUb3BpY3MnLFxuICAgICAgICAgICAgdGl0bGU6ICdBbGwgVG9waWNzJyxcbiAgICAgICAgICAgIGlkOiAnJyxcbiAgICAgICAgICAgIGl0ZW1zOiBbXSxcbiAgICAgICAgfSwgLi4uc2VsZWN0ZWRDYXRlZ29yaWVzXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBMaXN0IG9mIGFsbCBwcm9kdWN0cyBmcm9tIGFsbCBjYXRlZ29yaWVzIGZvciB0aGUgJ0FsbCBwcm9kdWN0cycgbWVudVxuICAgICAqICAgICAgICAgIFByZXBlbmRzIHRoZSBcIkFsbCBwcm9kdWN0c1wiIGxhYmVsIHRvIHRoZSBsaXN0IG9mIGNhdGVnb3JpZXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRBbGxDYXRlZ29yeVByb2R1Y3RzKCkge1xuICAgICAgICBpZiAoIWF1dGhvcmVkQ2F0ZWdvcmllcykgcmV0dXJuIFtdO1xuICAgICAgICBsZXQgYWxsQ2F0ZWdvcmllcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGF1dGhvcmVkQ2F0ZWdvcmllcykge1xuICAgICAgICAgICAgaWYgKGNhdGVnb3J5ICYmIGNhdGVnb3J5Lml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNhdGVnb3J5Lml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZnJvbUNhdGVnb3J5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWxsQ2F0ZWdvcmllcyA9IGFsbENhdGVnb3JpZXMuY29uY2F0KGNhdGVnb3J5Lml0ZW1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBncm91cDogJ0FsbCBwcm9kdWN0cycsXG4gICAgICAgICAgICBpZDogJ2NhYXM6YWxsLXByb2R1Y3RzJyxcbiAgICAgICAgICAgIGl0ZW1zOiBhbGxDYXRlZ29yaWVzLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Kn0gc2VsZWN0ZWRDYXRlZ29yaWVzXG4gICAgICogQHBhcmFtIHsqfSBncm91cElkXG4gICAgICogU2V0cyB0aGUgY2F0ZWdvcmllcyBhbmQgZmlsdGVycyBiYXNlZCBvbiB0aGUgc2VsZWN0ZWQgY2F0ZWdvcnlcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXRlZ29yeUhhbmRsZXIoc2VsZWN0ZWRDYXRlZ29yaWVzLCBncm91cElkKSB7XG4gICAgICAgIGNvbnN0IHRlbXAgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBzZWxlY3RlZENhdGVnb3JpZXMpIHtcbiAgICAgICAgICAgIHRlbXAucHVzaChjYXRlZ29yeS5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q2F0ZWdvcmllcyh0ZW1wKTtcbiAgICAgICAgc2V0RmlsdGVycygocHJldkZpbHRlcnMpID0+IHtcbiAgICAgICAgICAgIHByZXZGaWx0ZXJzLnBvcCgpO1xuICAgICAgICAgICAgY29uc3QgbmV3R3JvdXAgPSBhdXRob3JlZENhdGVnb3JpZXMuZmlsdGVyKGNhdGVnb3J5ID0+IGNhdGVnb3J5LmlkID09PSBncm91cElkKVswXTtcbiAgICAgICAgICAgIGlmICghbmV3R3JvdXAuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEZpbHRlcnMgPSBwcmV2RmlsdGVycy5jb25jYXQoZ2V0QWxsQ2F0ZWdvcnlQcm9kdWN0cygpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dEZpbHRlcnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2RmlsdGVycy5wdXNoKG5ld0dyb3VwKTtcbiAgICAgICAgICAgIHJldHVybiBwcmV2RmlsdGVycztcbiAgICAgICAgfSk7XG4gICAgICAgIHNldFNlbGVjdGVkQ2F0ZWdvcnkoZ3JvdXBJZCk7XG4gICAgICAgIHNldEN1cnJlbnRQYWdlKDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Kn0gY2F0ZWdvcnlcbiAgICAgKiBAcmV0dXJucyBUaGUgQXV0aG9yZWQgaWNvbiBmb3IgdGhlIGNhdGVnb3J5IGlmIGV4aXN0cyxcbiAgICAgKiAgICAgICAgICBvdGhlcndpc2UgcmV0dXJucyB0aGUgZGVmYXVsdCBpY29uIGZyb20gdGhlIHRhZ3Mgb3IgYW4gZW1wdHkgc3RyaW5nXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0Q2F0ZWdvcnlJY29uKGNhdGVnb3J5KSB7XG4gICAgICAgIGNvbnN0IGF1dGhvcmVkSWNvbiA9IGF1dGhvcmVkRmlsdGVyc1xuICAgICAgICAgICAgLmZpbHRlcihmaWx0ZXIgPT4gZmlsdGVyLmlkID09PSBjYXRlZ29yeS5pZClcbiAgICAgICAgICAgIC5tYXAoZmlsdGVyID0+IGZpbHRlci5pY29uKVxuICAgICAgICAgICAgLnRvU3RyaW5nKCk7XG4gICAgICAgIHJldHVybiBhdXRob3JlZEljb24gfHwgY2F0ZWdvcnkuaWNvbiB8fCAnJztcbiAgICB9XG5cbiAgICBjb25zdCBjb2xsZWN0aW9uU3RyID0gY29sbGVjdGlvbklkZW50aWZpZXIgPyBgJHtjb2xsZWN0aW9uSWRlbnRpZmllcn0gfCBgIDogJyc7XG4gICAgY29uc3QgZmlsdGVyU3RyID0gc2VsZWN0ZWRGaWx0ZXJzSXRlbXNRdHkgPyBmaWx0ZXJOYW1lcyA6ICdObyBGaWx0ZXJzJztcbiAgICBjb25zdCBzZWFyY2hRdWVyeVN0ciA9IHNlYXJjaFF1ZXJ5IHx8ICdOb25lJztcbiAgICBjb25zdCBjb2xsZWN0aW9uQW5hbHl0aWNzID0gYCR7Y29sbGVjdGlvblN0cn1DYXJkIENvbGxlY3Rpb24gfCBGaWx0ZXJzOiAke2ZpbHRlclN0cn18IFNlYXJjaCBRdWVyeTogJHtzZWFyY2hRdWVyeVN0cn1gO1xuICAgIC8qKlxuICAgICAqIENsYXNzIG5hbWUgZm9yIHRoZSBjb25zb25hbnQgd3JhcHBlcjpcbiAgICAgKiB3aGV0aGVyIGNvbnNvbmFudCB3cmFwcGVyIGNvbnRhaW5zIGxlZnQgZmlsdGVyO1xuICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICovXG4gICAgY29uc3Qgd3JhcHBlckNsYXNzID0gY2xhc3NOYW1lcyh7XG4gICAgICAgICdjb25zb25hbnQtV3JhcHBlcic6IHRydWUsXG4gICAgICAgICdjb25zb25hbnQtV3JhcHBlci0tMzJNYXJnaW5Db250YWluZXInOiBhdXRob3JlZExheW91dENvbnRhaW5lciA9PT0gTEFZT1VUX0NPTlRBSU5FUi5TSVpFXzEwMF9WV18zMl9NQVJHSU4sXG4gICAgICAgICdjb25zb25hbnQtV3JhcHBlci0tODNQZXJjZW50Q29udGFpbmllcic6IGF1dGhvcmVkTGF5b3V0Q29udGFpbmVyID09PSBMQVlPVVRfQ09OVEFJTkVSLlNJWkVfODNfVlcsXG4gICAgICAgICdjb25zb25hbnQtV3JhcHBlci0tMTIwME1heFdpZHRoJzogYXV0aG9yZWRMYXlvdXRDb250YWluZXIgPT09IExBWU9VVF9DT05UQUlORVIuU0laRV8xMjAwX1BYLFxuICAgICAgICAnY29uc29uYW50LVdyYXBwZXItLTE2MDBNYXhXaWR0aCc6IGF1dGhvcmVkTGF5b3V0Q29udGFpbmVyID09PSBMQVlPVVRfQ09OVEFJTkVSLlNJWkVfMTYwMF9QWCxcbiAgICAgICAgJ2NvbnNvbmFudC1XcmFwcGVyLS0xMjAwTWF4V2lkdGggQ2F0ZWdvcmllcyc6IGlzQ2F0ZWdvcmllc0NvbnRhaW5lcixcbiAgICAgICAgJ2NvbnNvbmFudC1XcmFwcGVyLS1jYXJvdXNlbCc6IGlzQ2Fyb3VzZWxDb250YWluZXIsXG4gICAgICAgICdjb25zb25hbnQtV3JhcHBlci0td2l0aExlZnRGaWx0ZXInOiBmaWx0ZXJQYW5lbEVuYWJsZWQgJiYgaXNMZWZ0RmlsdGVyUGFuZWwsXG4gICAgfSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoaXNDYXRlZ29yaWVzQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBzZXRGaWx0ZXJzKChwcmV2RmlsdGVycykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRGaWx0ZXJzID0gcHJldkZpbHRlcnMuY29uY2F0KGdldEFsbENhdGVnb3J5UHJvZHVjdHMoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHRGaWx0ZXJzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Q29uZmlnQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29uZmlnfT5cbiAgICAgICAgICAgIDxFeHBhbmRhYmxlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17eyB2YWx1ZTogb3BlbkRyb3Bkb3duLCBzZXRWYWx1ZTogc2V0T3BlbkRyb3Bkb3duIH19ID5cbiAgICAgICAgICAgICAgICB7LyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW4gKi99XG4gICAgICAgICAgICAgICAgey8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc3gtYTExeS9uby1ub25pbnRlcmFjdGl2ZS1lbGVtZW50LWludGVyYWN0aW9ucyxqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovfVxuICAgICAgICAgICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIHJlZj17Ym94fVxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0aXRsZSB8fCAnQ2FyZCBDb2xsZWN0aW9uJ31cbiAgICAgICAgICAgICAgICAgICAgZGFhLWxoPXtjb2xsZWN0aW9uQW5hbHl0aWNzfVxuICAgICAgICAgICAgICAgICAgICBkYWEtaW09e1N0cmluZyh0cmFja0ltcHJlc3Npb25zKX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlV2luZG93Q2xpY2t9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7d3JhcHBlckNsYXNzfSAke3RoZW1lQ2xhc3N9YH0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29uc29uYW50LVdyYXBwZXItaW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsgaXNDYXRlZ29yaWVzQ29udGFpbmVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGRhdGEtdGVzdGlkPVwiY29uc29uYW50LVRvcEZpbHRlcnMtY2F0ZWdvcmllc1RpdGxlXCIgY2xhc3NOYW1lPVwiY29uc29uYW50LVRvcEZpbHRlcnMtY2F0ZWdvcmllc1RpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsdGVycy1jYXRlZ29yeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JlZENhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2F0ZWdvcnkpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXRlZ29yeS5pZCA9PT0gc2VsZWN0ZWRDYXRlZ29yeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9ICdzZWxlY3RlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17Y2F0ZWdvcnkuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnlIYW5kbGVyKGNhdGVnb3J5Lml0ZW1zLCBjYXRlZ29yeS5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1zZWxlY3RlZD17c2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YGNhdGVnb3J5LWJ1dHRvbi0ke2NhdGVnb3J5LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWdyb3VwPXtjYXRlZ29yeS5ncm91cC5yZXBsYWNlQWxsKCcgJywgJycpLnRvTG93ZXJDYXNlKCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzc05hbWU9XCJmaWx0ZXJzLWNhdGVnb3J5LS1pY29uXCIgc3JjPXtnZXRDYXRlZ29yeUljb24oY2F0ZWdvcnkpfSBhbHQ9e2NhdGVnb3J5Lmljb24gJiYgJ0NhdGVnb3J5IGljb24nfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2NhdGVnb3J5LnRpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZGlzcGxheUxlZnRGaWx0ZXJQYW5lbCAmJiBpc1N0YW5kYXJkQ29udGFpbmVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnNvbmFudC1XcmFwcGVyLWxlZnRGaWx0ZXJXcmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExlZnRGaWx0ZXJQYW5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzPXtmaWx0ZXJzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEZpbHRlcnNRdHk9e3NlbGVjdGVkRmlsdGVyc0l0ZW1zUXR5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dXaWR0aD17d2luZG93V2lkdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRmlsdGVyQ2xpY2s9e2hhbmRsZUZpbHRlckdyb3VwQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xlYXJBbGxGaWx0ZXJzPXtyZXNldEZpbHRlcnNTZWFyY2hBbmRCb29rbWFya3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xlYXJGaWx0ZXJJdGVtcz17Y2xlYXJGaWx0ZXJJdGVtfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoZWNrYm94Q2xpY2s9e2hhbmRsZUNoZWNrQm94Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1vYmlsZUZpbHRlcnNUb2dnbGVDbGljaz17aGFuZGxlTW9iaWxlRmlsdGVyc1RvZ2dsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RlZEZpbHRlckNsaWNrPXtoYW5kbGVDaGVja0JveENoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd01vYmlsZUZpbHRlcnM9e3Nob3dNb2JpbGVGaWx0ZXJzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNRdHk9e2dyaWRDYXJkTGVufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29rbWFya0NvbXBvbmVudD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm9va21hcmtzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Jvb2ttYXJrcz17c2hvd0Jvb2ttYXJrc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTaG93Qm9va21hcmtzRmlsdGVyQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWRDYXJkc0NvdW50PXtib29rbWFya2VkQ2FyZElkcy5sZW5ndGh9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoQ29tcG9uZW50PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlclRleHQ9e2xlZnRQYW5lbFNlYXJjaFBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmaWx0ZXJzU2lkZVNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3NlYXJjaFF1ZXJ5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9mb2N1cz17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWFyY2g9e2hhbmRsZVNlYXJjaElucHV0Q2hhbmdlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZj17ZmlsdGVySXRlbVJlZn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Bjb25zb25hbnQtV3JhcHBlci1jb2xsZWN0aW9uJHtpc0xvYWRpbmcgPyAnIGlzLWxvYWRpbmcnIDogJyd9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpc1RvcEZpbHRlclBhbmVsICYmIGlzU3RhbmRhcmRDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmlsdGVyc1BhbmVsVG9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhbmVsRW5hYmxlZD17ZmlsdGVyUGFuZWxFbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzPXtmaWx0ZXJzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dXaWR0aD17d2luZG93V2lkdGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1F0eT17Z3JpZENhcmRMZW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tib3hDbGljaz17aGFuZGxlQ2hlY2tCb3hDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRmlsdGVyQ2xpY2s9e2hhbmRsZUZpbHRlckdyb3VwQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xlYXJGaWx0ZXJJdGVtcz17Y2xlYXJGaWx0ZXJJdGVtfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzPXtjdXJyQ2F0ZWdvcmllc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGVhckFsbEZpbHRlcnM9e3Jlc2V0RmlsdGVyc1NlYXJjaEFuZEJvb2ttYXJrc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0xpbWl0ZWRGaWx0ZXJzUXR5PXtzaG93TGltaXRlZEZpbHRlcnNRdHl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaENvbXBvbmVudD17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VhcmNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJUZXh0PXt0b3BQYW5lbFNlYXJjaFBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmaWx0ZXJzVG9wU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c2VhcmNoUXVlcnl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2ZvY3VzPXtERVNLVE9QX1NDUkVFTl9TSVpFfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VhcmNoPXtoYW5kbGVTZWFyY2hJbnB1dENoYW5nZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0Q29tcG9uZW50PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxQb3B1cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5lZD17c29ydE9wZW5lZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInNvcnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbD17c29ydE9wdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9e3NvcnRPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VsZWN0PXtoYW5kbGVTb3J0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmaWx0ZXJzVG9wU2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zQWxpZ25tZW50PXt0b3BQYW5lbFNvcnRQb3B1cExvY2F0aW9ufSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uU2hvd0FsbENsaWNrPXtoYW5kbGVTaG93QWxsVG9wRmlsdGVyc30gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpc0xlZnRGaWx0ZXJQYW5lbCAmJiBpc1N0YW5kYXJkQ29udGFpbmVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExlZnRJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ9e2ZpbHRlclBhbmVsRW5hYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyc1F0eT17ZmlsdGVycy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnM9e2ZpbHRlcnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRzUXR5PXtncmlkQ2FyZExlbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJzUXR5PXtzZWxlY3RlZEZpbHRlcnNJdGVtc1F0eX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93V2lkdGg9e3dpbmRvd1dpZHRofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbk1vYmlsZUZpbHRlcnNUb2dnbGVDbGljaz17aGFuZGxlTW9iaWxlRmlsdGVyc1RvZ2dsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoQ29tcG9uZW50PXsoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VhcmNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJUZXh0PXtzZWFyY2hQbGFjZWhvbGRlclRleHR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInNlYXJjaEZpbHRlcnNJbmZvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17c2VhcmNoUXVlcnl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2ZvY3VzPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlYXJjaD17aGFuZGxlU2VhcmNoSW5wdXRDaGFuZ2V9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRDb21wb25lbnQ9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFBvcHVwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbmVkPXtzb3J0T3BlbmVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic29ydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsPXtzb3J0T3B0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17c29ydE9wdGlvbnN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q9e2hhbmRsZVNvcnRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1dpZHRoPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zQWxpZ25tZW50PVwicmlnaHRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRPcHRpb25zPXtzb3J0T3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmPXtmaWx0ZXJJbmZvUmVmfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGF0TGVhc3RPbmVDYXJkICYmIGlzU3RhbmRhcmRDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxHcmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzUGVyUGFnZT17cmVzdWx0c1BlclBhZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlcz17Y3VycmVudFBhZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkcz17Z3JpZENhcmRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZGVkUmVmPXtzY3JvbGxFbGVtZW50UmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYXJkQm9va21hcms9e2hhbmRsZUNhcmRCb29rbWFya2luZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXJpYUxpdmVBY3RpdmU9e2lzR3JpZEFyZWFMaXZlfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGlzcGxheUxvYWRNb3JlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMb2FkTW9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17b25Mb2FkTW9yZUNsaWNrfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdz17bnVtQ2FyZHNUb1Nob3d9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbD17Z3JpZENhcmRMZW59IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Rpc3BsYXlQYWdpbmF0b3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFBhZ2luYXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUNvdW50PXtwYWdpbmF0b3JDb3VudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlTnVtYmVyPXtjdXJyZW50UGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsUGFnZXM9e3RvdGFsUGFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93SXRlbXNQZXJQYWdlPXtyZXN1bHRzUGVyUGFnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsUmVzdWx0cz17Z3JpZENhcmRMZW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtzZXRDdXJyZW50UGFnZX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRnJhZ21lbnQ+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYXRMZWFzdE9uZUNhcmQgJiYgaXNDYXJvdXNlbENvbnRhaW5lciAmJiAhKGNhcmRTdHlsZSA9PT0gJ2N1c3RvbS1jYXJkJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2FyZHNDYXJvdXNlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNRdHk9e2dyaWRDYXJkTGVufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkcz17Z3JpZENhcmRzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwidGFibGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FyZEJvb2ttYXJrPXtoYW5kbGVDYXJkQm9va21hcmtpbmd9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYXRMZWFzdE9uZUNhcmQgJiYgaXNDYXJvdXNlbENvbnRhaW5lciAmJiAoY2FyZFN0eWxlID09PSAnY3VzdG9tLWNhcmQnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOb1Jlc3VsdHNWaWV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiTm90IFN1cHBvcnRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPVwiVXNpbmcgY3VzdG9tIGNhcmRzIHdpdGhpbiBhIGNhcm91c2VsIGxheW91dCBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4gUGxlYXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlLWF1dGhvciB0aGUgY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVZhbHVlPVwiXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpc0xvYWRpbmcgJiYgIWF0TGVhc3RPbmVDYXJkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPExvYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPXtMT0FERVJfU0laRS5CSUd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlbj17IXRvdGFsQ2FyZExpbWl0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICFpc0FwaUZhaWx1cmUgJiYgIWF0TGVhc3RPbmVDYXJkICYmICFpc0xvYWRpbmcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Tm9SZXN1bHRzVmlld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17bm9SZXN1bHRzVGl0bGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtub1Jlc3VsdHNEZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVZhbHVlPXtzZWFyY2hRdWVyeX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBpc0FwaUZhaWx1cmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Tm9SZXN1bHRzVmlld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17YXBpRmFpbHVyZVRpdGxlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17YXBpRmFpbHVyZURlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlVmFsdWU9XCJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8L0V4cGFuZGFibGVDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICA8L0NvbmZpZ0NvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbn07XG5cbkNvbnRhaW5lci5wcm9wVHlwZXMgPSB7XG4gICAgY29uZmlnOiBzaGFwZShjb25maWdUeXBlKSxcbn07XG5cbkNvbnRhaW5lci5kZWZhdWx0UHJvcHMgPSB7XG4gICAgY29uZmlnOiB7fSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvbnRhaW5lcjtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3JlYWN0L3NyYy9qcy9jb21wb25lbnRzL0NvbnNvbmFudC9Db250YWluZXIvQ29udGFpbmVyLmpzeCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///108\n"); /***/ }), /* 109 */ diff --git a/package.json b/package.json index 5c31712a..bd5b40f6 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "build": "webpack", "postbuild": "minify dist/main.js > dist/main.min.js", "lint": "eslint react/src/js/components/Consonant --fix", + "release": "HUSKY_SKIP_HOOKS=1 release-it --ci", "test:coverage": "jest --coverage", "test:unit": "jest", "test:e2e-local": "wdio run wdio.local.conf.js env=LOCAL", @@ -99,6 +100,7 @@ "eslint-plugin-react": "^7.18.3", "eslint-plugin-react-hooks": "^4.1.2", "extract-text-webpack-plugin": "^3.0.1", + "husky": "^4.3.8", "ignore-loader": "^0.1.2", "inject-loader": "^3.0.1", "jest": "^24.0.0", @@ -127,6 +129,13 @@ "wdio-chromedriver-service": "^8.0.1", "webpack": "^3.9.1" }, + "husky": { + "hooks": { + "prepare-commit-msg": "exec < /dev/tty && npx cz --hook || true", + "pre-commit": "npm run build && git add . && enforce-branch-name '.*'", + "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" + } + }, "config": { "commitizen": { "path": "./node_modules/cz-conventional-changelog" diff --git a/react/src/js/components/Consonant/Container/Container.jsx b/react/src/js/components/Consonant/Container/Container.jsx index 7b4ea505..e0aecf11 100644 --- a/react/src/js/components/Consonant/Container/Container.jsx +++ b/react/src/js/components/Consonant/Container/Container.jsx @@ -170,7 +170,6 @@ const Container = (props) => { const categories = getConfig('filterPanel', 'categories'); // eslint-disable-next-line no-use-before-define, max-len const authoredCategories = isCategoriesContainer ? getAuthoredCategories(authoredFilters, categories) : []; - // eslint-disable-next-line no-use-before-define const sanitizedEventFilter = eventFilter ? sanitizeEventFilter(eventFilter) : []; /** diff --git a/wdio.local.conf.js b/wdio.local.conf.js index a14a1b9a..c95e2eae 100644 --- a/wdio.local.conf.js +++ b/wdio.local.conf.js @@ -16,5 +16,6 @@ exports.config = { ], }, }], + logLevel: 'error', // Other configurations... };