diff --git a/passbook/static/static/dist/main.js b/passbook/static/static/dist/main.js
index 7f3dd8b93..9bf3d4815 100644
--- a/passbook/static/static/dist/main.js
+++ b/passbook/static/static/dist/main.js
@@ -189,14 +189,14 @@ found at http://polymer.github.io/PATENTS.txt
                         0,
                         0,
                         0
-                    )!important}`,Sn,Pn,pn]}loadContent(){this._url&&(this.loading=!0,fetch(this._url).then((n=>n.text())).then((n=>{this.querySelector("[slot=body]").innerHTML=n})).then((()=>{this.querySelectorAll("a:not(.pb-root-link)").forEach((n=>{if(""!==n.href)try{const e=new URL(n.href),t=e.search||"";n.href=`#${e.pathname}${t}`}catch(e){n.href="#"+n.href}})),this.querySelectorAll("[role=pb-refresh]").forEach((n=>{n.addEventListener("click",(n=>{this.loadContent()}))})),this.querySelectorAll("form").forEach((n=>{n.addEventListener("submit",(e=>{e.preventDefault();const t=new FormData(n),o=new URLSearchParams(t).toString();window.location.hash=`#${this._url}?${o}`}))})),setTimeout((()=>{this.loading=!1}),100)})))}render(){return A`${this.loading?A`<div class="pf-c-backdrop"><div class="pf-l-bullseye"><div class="pf-l-bullseye__item"><span class="pf-c-spinner pf-m-xl" role="progressbar" aria-valuetext="Loading..."><span class="pf-c-spinner__clipper"></span> <span class="pf-c-spinner__lead-ball"></span> <span class="pf-c-spinner__tail-ball"></span></span></div></div></div>`:""}<slot name="body"></slot>`}};var Wn;n([$()],zn.prototype,"url",null),n([$()],zn.prototype,"loading",void 0),zn=n([X("pb-site-shell")],zn),function(n){n.redirect="redirect",n.template="template"}(Wn||(Wn={}));let Rn=class extends tn{constructor(){super(...arguments),this.flowBodyUrl=""}createRenderRoot(){return this}firstUpdated(){fetch(this.flowBodyUrl).then((n=>{if(!n.ok)throw Error(n.statusText);return n})).then((n=>n.json())).then((n=>{this.updateCard(n)})).catch((n=>{this.errorMessage(n)}))}async updateCard(n){switch(n.type){case Wn.redirect:window.location.assign(n.to);break;case Wn.template:this.flowBody=n.body,await this.requestUpdate(),this.checkAutofocus(),an(),this.loadFormCode(),this.setFormSubmitHandlers();default:console.log("passbook/flows: unexpected data type "+n.type)}}loadFormCode(){this.querySelectorAll("script").forEach((n=>{let e=document.createElement("script");e.src=n.src,document.head.appendChild(e)}))}checkAutofocus(){const n=this.querySelector("[autofocus]");null!==n&&n.focus()}updateFormAction(n){for(let e=0;e<n.elements.length;e++){if(n.elements[e].value===n.action)return console.log("passbook/flows: Found Form action URL in form elements, not changing form action."),!1}return n.action=this.flowBodyUrl,console.log("passbook/flows: updated form.action "+this.flowBodyUrl),!0}checkAutosubmit(n){if("autosubmit"in n.attributes)return n.submit()}setFormSubmitHandlers(){this.querySelectorAll("form").forEach((n=>{console.log("passbook/flows: Checking for autosubmit attribute "+n),this.checkAutosubmit(n),console.log("passbook/flows: Setting action for form "+n),this.updateFormAction(n),console.log("passbook/flows: Adding handler for form "+n),n.addEventListener("submit",(e=>{e.preventDefault();let t=new FormData(n);this.flowBody=void 0,fetch(this.flowBodyUrl,{method:"post",body:t}).then((n=>n.json())).then((n=>{this.updateCard(n)})).catch((n=>{this.errorMessage(n)}))})),n.classList.add("pb-flow-wrapped")}))}errorMessage(n){this.flowBody=`\n            <style>\n                .pb-exception {\n                    font-family: monospace;\n                    overflow-x: scroll;\n                }\n            </style>\n            <header class="pf-c-login__main-header">\n                <h1 class="pf-c-title pf-m-3xl">\n                    Whoops!\n                </h1>\n            </header>\n            <div class="pf-c-login__main-body">\n                <h3>\n                    Something went wrong! Please try again later.\n                </h3>\n                <pre class="pb-exception">${n}</pre>\n            </div>`}loading(){return A`<div class="pf-c-login__main-body pb-loading"><span class="pf-c-spinner" role="progressbar" aria-valuetext="Loading..."><span class="pf-c-spinner__clipper"></span> <span class="pf-c-spinner__lead-ball"></span> <span class="pf-c-spinner__tail-ball"></span></span></div>`}render(){return this.flowBody?A([this.flowBody]):this.loading()}};n([$()],Rn.prototype,"flowBodyUrl",void 0),n([$()],Rn.prototype,"flowBody",void 0),Rn=n([X("pb-flow-shell-card")],Rn);const Fn=new CSSStyleSheet;Fn.replaceSync('@charset "UTF-8";\n.pf-t-light, .pf-c-accordion, .pf-c-alert, .pf-c-banner.pf-m-info, .pf-c-banner.pf-m-warning, .pf-c-calendar-month, .pf-c-chip, .pf-c-chip-group, .pf-c-context-selector__menu, .pf-c-data-list, .pf-c-form-control, .pf-c-input-group, .pf-c-menu, .pf-c-page__sidebar.pf-m-light, .pf-c-select, .pf-c-table {\n  --pf-global--Color--100: var(--pf-global--Color--dark-100);\n  --pf-global--Color--200: var(--pf-global--Color--dark-200);\n  --pf-global--BorderColor--100: var(--pf-global--BorderColor--dark-100);\n  --pf-global--primary-color--100: var(--pf-global--primary-color--dark-100);\n  --pf-global--link--Color: var(--pf-global--link--Color--dark);\n  --pf-global--link--Color--hover: var(--pf-global--link--Color--dark--hover);\n  --pf-global--BackgroundColor--100: var(--pf-global--BackgroundColor--light-100); }\n\n.pf-t-dark, .pf-c-about-modal-box, .pf-c-banner, .pf-c-login__header, .pf-c-login__footer, .pf-c-page__header, .pf-c-page__main-section[class*="pf-m-dark-"], .pf-c-wizard__header {\n  --pf-global--Color--100: var(--pf-global--Color--light-100);\n  --pf-global--Color--200: var(--pf-global--Color--light-200);\n  --pf-global--BorderColor--100: var(--pf-global--BorderColor--light-100);\n  --pf-global--primary-color--100: var(--pf-global--primary-color--light-100);\n  --pf-global--link--Color: var(--pf-global--link--Color--light);\n  --pf-global--link--Color--hover: var(--pf-global--link--Color--light);\n  --pf-global--BackgroundColor--100: var(--pf-global--BackgroundColor--dark-100); }\n  .pf-t-dark .pf-c-card, .pf-c-about-modal-box .pf-c-card, .pf-c-banner .pf-c-card, .pf-c-login__header .pf-c-card, .pf-c-login__footer .pf-c-card, .pf-c-page__header .pf-c-card, .pf-c-page__main-section[class*="pf-m-dark-"] .pf-c-card, .pf-c-wizard__header .pf-c-card {\n    --pf-c-card--BackgroundColor: var(--pf-global--BackgroundColor--dark-transparent-200); }\n  .pf-t-dark .pf-c-button, .pf-c-about-modal-box .pf-c-button, .pf-c-banner .pf-c-button, .pf-c-login__header .pf-c-button, .pf-c-login__footer .pf-c-button, .pf-c-page__header .pf-c-button, .pf-c-page__main-section[class*="pf-m-dark-"] .pf-c-button, .pf-c-wizard__header .pf-c-button {\n    --pf-c-button--m-primary--Color: var(--pf-global--primary-color--dark-100);\n    --pf-c-button--m-primary--hover--Color: var(--pf-global--primary-color--dark-100);\n    --pf-c-button--m-primary--focus--Color: var(--pf-global--primary-color--dark-100);\n    --pf-c-button--m-primary--active--Color: var(--pf-global--primary-color--dark-100);\n    --pf-c-button--m-primary--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n    --pf-c-button--m-primary--hover--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n    --pf-c-button--m-primary--focus--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n    --pf-c-button--m-primary--active--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n    --pf-c-button--m-secondary--Color: var(--pf-global--Color--light-100);\n    --pf-c-button--m-secondary--hover--Color: var(--pf-global--Color--light-100);\n    --pf-c-button--m-secondary--focus--Color: var(--pf-global--Color--light-100);\n    --pf-c-button--m-secondary--active--Color: var(--pf-global--Color--light-100);\n    --pf-c-button--m-secondary--BorderColor: var(--pf-global--Color--light-100);\n    --pf-c-button--m-secondary--hover--BorderColor: var(--pf-global--Color--light-100);\n    --pf-c-button--m-secondary--focus--BorderColor: var(--pf-global--Color--light-100);\n    --pf-c-button--m-secondary--active--BorderColor: var(--pf-global--Color--light-100); }\n\n.pf-c-data-list__item-action, .pf-c-page__header-tools-group, .pf-c-page__header-tools-item, .pf-c-table tr > * {\n  --pf-hidden-visible--visible--Visibility: visible;\n  --pf-hidden-visible--hidden--Display: none;\n  --pf-hidden-visible--hidden--Visibility: hidden;\n  --pf-hidden-visible--Display: var(--pf-hidden-visible--visible--Display);\n  --pf-hidden-visible--Visibility: var(--pf-hidden-visible--visible--Visibility);\n  display: var(--pf-hidden-visible--Display);\n  visibility: var(--pf-hidden-visible--Visibility); }\n  .pf-m-hidden.pf-c-data-list__item-action, .pf-m-hidden.pf-c-page__header-tools-group, .pf-m-hidden.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-hidden {\n    --pf-hidden-visible--Display: var(--pf-hidden-visible--hidden--Display);\n    --pf-hidden-visible--Visibility: var(--pf-hidden-visible--hidden--Visibility); }\n  @media screen and (min-width: 576px) {\n    .pf-m-hidden-on-sm.pf-c-data-list__item-action, .pf-m-hidden-on-sm.pf-c-page__header-tools-group, .pf-m-hidden-on-sm.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-hidden-on-sm {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--hidden--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--hidden--Visibility); }\n    .pf-m-visible-on-sm.pf-c-data-list__item-action, .pf-m-visible-on-sm.pf-c-page__header-tools-group, .pf-m-visible-on-sm.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-visible-on-sm {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--visible--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--visible--Visibility); } }\n  @media screen and (min-width: 768px) {\n    .pf-m-hidden-on-md.pf-c-data-list__item-action, .pf-m-hidden-on-md.pf-c-page__header-tools-group, .pf-m-hidden-on-md.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-hidden-on-md {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--hidden--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--hidden--Visibility); }\n    .pf-m-visible-on-md.pf-c-data-list__item-action, .pf-m-visible-on-md.pf-c-page__header-tools-group, .pf-m-visible-on-md.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-visible-on-md {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--visible--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--visible--Visibility); } }\n  @media screen and (min-width: 992px) {\n    .pf-m-hidden-on-lg.pf-c-data-list__item-action, .pf-m-hidden-on-lg.pf-c-page__header-tools-group, .pf-m-hidden-on-lg.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-hidden-on-lg {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--hidden--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--hidden--Visibility); }\n    .pf-m-visible-on-lg.pf-c-data-list__item-action, .pf-m-visible-on-lg.pf-c-page__header-tools-group, .pf-m-visible-on-lg.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-visible-on-lg {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--visible--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--visible--Visibility); } }\n  @media screen and (min-width: 1200px) {\n    .pf-m-hidden-on-xl.pf-c-data-list__item-action, .pf-m-hidden-on-xl.pf-c-page__header-tools-group, .pf-m-hidden-on-xl.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-hidden-on-xl {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--hidden--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--hidden--Visibility); }\n    .pf-m-visible-on-xl.pf-c-data-list__item-action, .pf-m-visible-on-xl.pf-c-page__header-tools-group, .pf-m-visible-on-xl.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-visible-on-xl {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--visible--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--visible--Visibility); } }\n  @media screen and (min-width: 1450px) {\n    .pf-m-hidden-on-2xl.pf-c-data-list__item-action, .pf-m-hidden-on-2xl.pf-c-page__header-tools-group, .pf-m-hidden-on-2xl.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-hidden-on-2xl {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--hidden--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--hidden--Visibility); }\n    .pf-m-visible-on-2xl.pf-c-data-list__item-action, .pf-m-visible-on-2xl.pf-c-page__header-tools-group, .pf-m-visible-on-2xl.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-visible-on-2xl {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--visible--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--visible--Visibility); } }\n\n:root {\n  --pf-global--palette--black-100: #fafafa;\n  --pf-global--palette--black-150: #f5f5f5;\n  --pf-global--palette--black-200: #f0f0f0;\n  --pf-global--palette--black-300: #d2d2d2;\n  --pf-global--palette--black-400: #b8bbbe;\n  --pf-global--palette--black-500: #8a8d90;\n  --pf-global--palette--black-600: #6a6e73;\n  --pf-global--palette--black-700: #4f5255;\n  --pf-global--palette--black-800: #3c3f42;\n  --pf-global--palette--black-850: #212427;\n  --pf-global--palette--black-900: #151515;\n  --pf-global--palette--black-1000: #030303;\n  --pf-global--palette--blue-50: #e7f1fa;\n  --pf-global--palette--blue-100: #bee1f4;\n  --pf-global--palette--blue-200: #73bcf7;\n  --pf-global--palette--blue-300: #2b9af3;\n  --pf-global--palette--blue-400: #06c;\n  --pf-global--palette--blue-500: #004080;\n  --pf-global--palette--blue-600: #002952;\n  --pf-global--palette--blue-700: #001223;\n  --pf-global--palette--cyan-50: #f2f9f9;\n  --pf-global--palette--cyan-100: #a2d9d9;\n  --pf-global--palette--cyan-200: #73c5c5;\n  --pf-global--palette--cyan-300: #009596;\n  --pf-global--palette--cyan-400: #005f60;\n  --pf-global--palette--cyan-500: #003737;\n  --pf-global--palette--cyan-600: #002323;\n  --pf-global--palette--cyan-700: #000f0f;\n  --pf-global--palette--gold-50: #fdf7e7;\n  --pf-global--palette--gold-100: #f9e0a2;\n  --pf-global--palette--gold-200: #f6d173;\n  --pf-global--palette--gold-300: #f4c145;\n  --pf-global--palette--gold-400: #f0ab00;\n  --pf-global--palette--gold-500: #c58c00;\n  --pf-global--palette--gold-600: #795600;\n  --pf-global--palette--gold-700: #3d2c00;\n  --pf-global--palette--green-50: #f3faf2;\n  --pf-global--palette--green-100: #bde5b8;\n  --pf-global--palette--green-200: #95d58e;\n  --pf-global--palette--green-300: #6ec664;\n  --pf-global--palette--green-400: #5ba352;\n  --pf-global--palette--green-500: #3e8635;\n  --pf-global--palette--green-600: #1e4f18;\n  --pf-global--palette--green-700: #0f280d;\n  --pf-global--palette--light-blue-100: #beedf9;\n  --pf-global--palette--light-blue-200: #7cdbf3;\n  --pf-global--palette--light-blue-300: #35caed;\n  --pf-global--palette--light-blue-400: #00b9e4;\n  --pf-global--palette--light-blue-500: #008bad;\n  --pf-global--palette--light-blue-600: #005c73;\n  --pf-global--palette--light-blue-700: #002d39;\n  --pf-global--palette--light-green-100: #e4f5bc;\n  --pf-global--palette--light-green-200: #c8eb79;\n  --pf-global--palette--light-green-300: #ace12e;\n  --pf-global--palette--light-green-400: #92d400;\n  --pf-global--palette--light-green-500: #6ca100;\n  --pf-global--palette--light-green-600: #486b00;\n  --pf-global--palette--light-green-700: #253600;\n  --pf-global--palette--orange-100: #f4b678;\n  --pf-global--palette--orange-200: #ef9234;\n  --pf-global--palette--orange-300: #ec7a08;\n  --pf-global--palette--orange-400: #c46100;\n  --pf-global--palette--orange-500: #8f4700;\n  --pf-global--palette--orange-600: #773d00;\n  --pf-global--palette--orange-700: #3b1f00;\n  --pf-global--palette--purple-50: #f2f0fc;\n  --pf-global--palette--purple-100: #cbc1ff;\n  --pf-global--palette--purple-200: #b2a3ff;\n  --pf-global--palette--purple-300: #a18fff;\n  --pf-global--palette--purple-400: #8476d1;\n  --pf-global--palette--purple-500: #6753ac;\n  --pf-global--palette--purple-600: #40199a;\n  --pf-global--palette--purple-700: #1f0066;\n  --pf-global--palette--red-50: #faeae8;\n  --pf-global--palette--red-100: #c9190b;\n  --pf-global--palette--red-200: #a30000;\n  --pf-global--palette--red-300: #7d1007;\n  --pf-global--palette--red-400: #470000;\n  --pf-global--palette--red-500: #2c0000;\n  --pf-global--palette--white: #fff;\n  --pf-global--BackgroundColor--100: #fff;\n  --pf-global--BackgroundColor--200: #f0f0f0;\n  --pf-global--BackgroundColor--light-100: #fff;\n  --pf-global--BackgroundColor--light-200: #fafafa;\n  --pf-global--BackgroundColor--light-300: #f0f0f0;\n  --pf-global--BackgroundColor--dark-100: #151515;\n  --pf-global--BackgroundColor--dark-200: #3c3f42;\n  --pf-global--BackgroundColor--dark-300: #212427;\n  --pf-global--BackgroundColor--dark-400: #4f5255;\n  --pf-global--BackgroundColor--dark-transparent-100: rgba(3, 3, 3, 0.62);\n  --pf-global--BackgroundColor--dark-transparent-200: rgba(3, 3, 3, 0.32);\n  --pf-global--Color--100: #151515;\n  --pf-global--Color--200: #6a6e73;\n  --pf-global--Color--300: #3c3f42;\n  --pf-global--Color--400: #8a8d90;\n  --pf-global--Color--light-100: #fff;\n  --pf-global--Color--light-200: #f0f0f0;\n  --pf-global--Color--light-300: #d2d2d2;\n  --pf-global--Color--dark-100: #151515;\n  --pf-global--Color--dark-200: #6a6e73;\n  --pf-global--active-color--100: #06c;\n  --pf-global--active-color--200: #bee1f4;\n  --pf-global--active-color--300: #2b9af3;\n  --pf-global--active-color--400: #73bcf7;\n  --pf-global--disabled-color--100: #6a6e73;\n  --pf-global--disabled-color--200: #d2d2d2;\n  --pf-global--disabled-color--300: #f0f0f0;\n  --pf-global--primary-color--100: #06c;\n  --pf-global--primary-color--200: #004080;\n  --pf-global--primary-color--light-100: #73bcf7;\n  --pf-global--primary-color--dark-100: #06c;\n  --pf-global--secondary-color--100: #6a6e73;\n  --pf-global--default-color--100: #73c5c5;\n  --pf-global--default-color--200: #009596;\n  --pf-global--default-color--300: #003737;\n  --pf-global--success-color--100: #3e8635;\n  --pf-global--success-color--200: #1e4f18;\n  --pf-global--info-color--100: #2b9af3;\n  --pf-global--info-color--200: #002952;\n  --pf-global--warning-color--100: #f0ab00;\n  --pf-global--warning-color--200: #795600;\n  --pf-global--danger-color--100: #c9190b;\n  --pf-global--danger-color--200: #a30000;\n  --pf-global--danger-color--300: #470000;\n  --pf-global--BoxShadow--sm: 0 0.0625rem 0.125rem 0 rgba(3, 3, 3, 0.12), 0 0 0.125rem 0 rgba(3, 3, 3, 0.06);\n  --pf-global--BoxShadow--sm-top: 0 -0.125rem 0.25rem -0.0625rem rgba(3, 3, 3, 0.16);\n  --pf-global--BoxShadow--sm-right: 0.125rem 0 0.25rem -0.0625rem rgba(3, 3, 3, 0.16);\n  --pf-global--BoxShadow--sm-bottom: 0 0.125rem 0.25rem -0.0625rem rgba(3, 3, 3, 0.16);\n  --pf-global--BoxShadow--sm-left: -0.125rem 0 0.25rem -0.0625rem rgba(3, 3, 3, 0.16);\n  --pf-global--BoxShadow--md: 0 0.25rem 0.5rem 0rem rgba(3, 3, 3, 0.12), 0 0 0.25rem 0 rgba(3, 3, 3, 0.06);\n  --pf-global--BoxShadow--md-top: 0 -0.5rem 0.5rem -0.375rem rgba(3, 3, 3, 0.18);\n  --pf-global--BoxShadow--md-right: 0.5rem 0 0.5rem -0.375rem rgba(3, 3, 3, 0.18);\n  --pf-global--BoxShadow--md-bottom: 0 0.5rem 0.5rem -0.375rem rgba(3, 3, 3, 0.18);\n  --pf-global--BoxShadow--md-left: -0.5rem 0 0.5rem -0.375rem rgba(3, 3, 3, 0.18);\n  --pf-global--BoxShadow--lg: 0 0.5rem 1rem 0 rgba(3, 3, 3, 0.16), 0 0 0.375rem 0 rgba(3, 3, 3, 0.08);\n  --pf-global--BoxShadow--lg-top: 0 -0.75rem 0.75rem -0.5rem rgba(3, 3, 3, 0.18);\n  --pf-global--BoxShadow--lg-right: 0.75rem 0 0.75rem -0.5rem rgba(3, 3, 3, 0.18);\n  --pf-global--BoxShadow--lg-bottom: 0 0.75rem 0.75rem -0.5rem rgba(3, 3, 3, 0.18);\n  --pf-global--BoxShadow--lg-left: -0.75rem 0 0.75rem -0.5rem rgba(3, 3, 3, 0.18);\n  --pf-global--BoxShadow--xl: 0 1rem 2rem 0 rgba(3, 3, 3, 0.16), 0 0 0.5rem 0 rgba(3, 3, 3, 0.1);\n  --pf-global--BoxShadow--xl-top: 0 -1rem 1rem -0.5rem rgba(3, 3, 3, 0.2);\n  --pf-global--BoxShadow--xl-right: 1rem 0 1rem -0.5rem rgba(3, 3, 3, 0.2);\n  --pf-global--BoxShadow--xl-bottom: 0 1rem 1rem -0.5rem rgba(3, 3, 3, 0.2);\n  --pf-global--BoxShadow--xl-left: -1rem 0 1rem -0.5rem rgba(3, 3, 3, 0.2);\n  --pf-global--BoxShadow--inset: inset 0 0 0.625rem 0 rgba(3, 3, 3, 0.25);\n  --pf-global--font-path: "./assets/fonts";\n  --pf-global--fonticon-path: "./assets/pficon";\n  --pf-global--spacer--xs: 0.25rem;\n  --pf-global--spacer--sm: 0.5rem;\n  --pf-global--spacer--md: 1rem;\n  --pf-global--spacer--lg: 1.5rem;\n  --pf-global--spacer--xl: 2rem;\n  --pf-global--spacer--2xl: 3rem;\n  --pf-global--spacer--3xl: 4rem;\n  --pf-global--spacer--4xl: 5rem;\n  --pf-global--spacer--form-element: 0.375rem;\n  --pf-global--gutter: 1rem;\n  --pf-global--gutter--md: 1.5rem;\n  --pf-global--ZIndex--xs: 100;\n  --pf-global--ZIndex--sm: 200;\n  --pf-global--ZIndex--md: 300;\n  --pf-global--ZIndex--lg: 400;\n  --pf-global--ZIndex--xl: 500;\n  --pf-global--ZIndex--2xl: 600;\n  --pf-global--breakpoint--xs: 0;\n  --pf-global--breakpoint--sm: 576px;\n  --pf-global--breakpoint--md: 768px;\n  --pf-global--breakpoint--lg: 992px;\n  --pf-global--breakpoint--xl: 1200px;\n  --pf-global--breakpoint--2xl: 1450px;\n  --pf-global--link--Color: #06c;\n  --pf-global--link--Color--hover: #004080;\n  --pf-global--link--Color--light: #2b9af3;\n  --pf-global--link--Color--light--hover: #73bcf7;\n  --pf-global--link--Color--dark: #06c;\n  --pf-global--link--Color--dark--hover: #004080;\n  --pf-global--link--TextDecoration: none;\n  --pf-global--link--TextDecoration--hover: underline;\n  --pf-global--BorderWidth--sm: 1px;\n  --pf-global--BorderWidth--md: 2px;\n  --pf-global--BorderWidth--lg: 3px;\n  --pf-global--BorderWidth--xl: 4px;\n  --pf-global--BorderColor--100: #d2d2d2;\n  --pf-global--BorderColor--200: #8a8d90;\n  --pf-global--BorderColor--300: #f0f0f0;\n  --pf-global--BorderColor--dark-100: #d2d2d2;\n  --pf-global--BorderColor--light-100: #b8bbbe;\n  --pf-global--BorderRadius--sm: 3px;\n  --pf-global--BorderRadius--lg: 30em;\n  --pf-global--icon--Color--light: #6a6e73;\n  --pf-global--icon--Color--dark: #151515;\n  --pf-global--icon--FontSize--sm: 0.625rem;\n  --pf-global--icon--FontSize--md: 1.125rem;\n  --pf-global--icon--FontSize--lg: 1.5rem;\n  --pf-global--icon--FontSize--xl: 3.375rem;\n  --pf-global--FontFamily--sans-serif: "RedHatText", "Overpass", overpass, helvetica, arial, sans-serif;\n  --pf-global--FontFamily--heading--sans-serif: "RedHatDisplay", "Overpass", overpass, helvetica, arial, sans-serif;\n  --pf-global--FontFamily--monospace: "Liberation Mono", consolas, "SFMono-Regular", menlo, monaco, "Courier New", monospace;\n  --pf-global--FontFamily--overpass--sans-serif: "overpass", overpass, "open sans", -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";\n  --pf-global--FontFamily--overpass--monospace: "overpass-mono", overpass-mono, "SFMono-Regular", menlo, monaco, consolas, "Liberation Mono", "Courier New", monospace;\n  --pf-global--FontSize--4xl: 2.25rem;\n  --pf-global--FontSize--3xl: 1.75rem;\n  --pf-global--FontSize--2xl: 1.5rem;\n  --pf-global--FontSize--xl: 1.25rem;\n  --pf-global--FontSize--lg: 1.125rem;\n  --pf-global--FontSize--md: 1rem;\n  --pf-global--FontSize--sm: 0.875rem;\n  --pf-global--FontSize--xs: 0.75rem;\n  --pf-global--FontWeight--light: 300;\n  --pf-global--FontWeight--normal: 400;\n  --pf-global--FontWeight--semi-bold: 700;\n  --pf-global--FontWeight--overpass--semi-bold: 500;\n  --pf-global--FontWeight--bold: 700;\n  --pf-global--FontWeight--overpass--bold: 600;\n  --pf-global--LineHeight--sm: 1.3;\n  --pf-global--LineHeight--md: 1.5;\n  --pf-global--ListStyle: disc outside;\n  --pf-global--Transition: all 250ms cubic-bezier(0.42, 0, 0.58, 1);\n  --pf-global--TimingFunction: cubic-bezier(0.645, 0.045, 0.355, 1);\n  --pf-global--TransitionDuration: 250ms;\n  --pf-global--arrow--width: 0.9375rem;\n  --pf-global--arrow--width-lg: 1.5625rem;\n  --pf-global--target-size--MinWidth: 44px;\n  --pf-global--target-size--MinHeight: 44px; }\n\n.pf-m-overpass-font {\n  --pf-global--FontFamily--sans-serif: var(--pf-global--FontFamily--overpass--sans-serif);\n  --pf-global--FontFamily--heading--sans-serif: var(--pf-global--FontFamily--sans-serif);\n  --pf-global--FontFamily--monospace: var(--pf-global--FontFamily--overpass--monospace);\n  --pf-global--FontWeight--semi-bold: var(--pf-global--FontWeight--overpass--semi-bold);\n  --pf-global--FontWeight--bold: var(--pf-global--FontWeight--overpass--bold); }\n\n@font-face {\n  font-family: "RedHatDisplay";\n  src: url("./assets/fonts/RedHatDisplay/RedHatDisplay-Regular.eot");\n  src: url("./assets/fonts/RedHatDisplay/RedHatDisplay-Regular.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/RedHatDisplay/RedHatDisplay-Regular.woff") format("woff");\n  font-style: normal;\n  font-weight: 300;\n  text-rendering: optimizeLegibility; }\n\n@font-face {\n  font-family: "RedHatDisplay";\n  src: url("./assets/fonts/RedHatDisplay/RedHatDisplay-Medium.eot");\n  src: url("./assets/fonts/RedHatDisplay/RedHatDisplay-Medium.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/RedHatDisplay/RedHatDisplay-Medium.woff") format("woff");\n  font-style: normal;\n  font-weight: 400;\n  text-rendering: optimizeLegibility; }\n\n@font-face {\n  font-family: "RedHatDisplay";\n  src: url("./assets/fonts/RedHatDisplay/RedHatDisplay-Bold.eot");\n  src: url("./assets/fonts/RedHatDisplay/RedHatDisplay-Bold.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/RedHatDisplay/RedHatDisplay-Bold.woff") format("woff");\n  font-style: normal;\n  font-weight: 700;\n  text-rendering: optimizeLegibility; }\n\n@font-face {\n  font-family: "RedHatText";\n  src: url("./assets/fonts/RedHatText/RedHatText-Regular.eot");\n  src: url("./assets/fonts/RedHatText/RedHatText-Regular.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/RedHatText/RedHatText-Regular.woff") format("woff");\n  font-style: normal;\n  font-weight: 400;\n  text-rendering: optimizeLegibility; }\n\n@font-face {\n  font-family: "RedHatText";\n  src: url("./assets/fonts/RedHatText/RedHatText-Medium.eot");\n  src: url("./assets/fonts/RedHatText/RedHatText-Medium.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/RedHatText/RedHatText-Medium.woff") format("woff");\n  font-style: normal;\n  font-weight: 700;\n  text-rendering: optimizeLegibility; }\n\n@font-face {\n  font-family: "overpass";\n  font-style: normal;\n  font-weight: 200;\n  src: url("./assets/fonts/overpass-webfont/overpass-thin.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-thin.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-thin.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-thin.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-thin.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: italic;\n  font-weight: 200;\n  src: url("./assets/fonts/overpass-webfont/overpass-thin-italic.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-thin-italic.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-thin-italic.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-thin-italic.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-thin-italic.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: normal;\n  font-weight: 300;\n  src: url("./assets/fonts/overpass-webfont/overpass-extralight.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-extralight.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-extralight.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-extralight.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-extralight.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: italic;\n  font-weight: 300;\n  src: url("./assets/fonts/overpass-webfont/overpass-extralight-italic.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-extralight-italic.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-extralight-italic.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-extralight-italic.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-extralight-italic.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: normal;\n  font-weight: 400;\n  src: url("./assets/fonts/overpass-webfont/overpass-light.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-light.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-light.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-light.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-light.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: italic;\n  font-weight: 400;\n  src: url("./assets/fonts/overpass-webfont/overpass-light-italic.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-light-italic.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-light-italic.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-light-italic.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-light-italic.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: normal;\n  font-weight: 500;\n  src: url("./assets/fonts/overpass-webfont/overpass-regular.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-regular.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-regular.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-regular.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-regular.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: italic;\n  font-weight: 500;\n  src: url("./assets/fonts/overpass-webfont/overpass-italic.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-italic.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-italic.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-italic.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-italic.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: normal;\n  font-weight: 600;\n  src: url("./assets/fonts/overpass-webfont/overpass-semibold.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-semibold.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-semibold.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-semibold.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-semibold.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: italic;\n  font-weight: 600;\n  src: url("./assets/fonts/overpass-webfont/overpass-semibold-italic.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-semibold-italic.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-semibold-italic.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-semibold-italic.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-semibold-italic.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: normal;\n  font-weight: 700;\n  src: url("./assets/fonts/overpass-webfont/overpass-bold.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-bold.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-bold.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-bold.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-bold.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: italic;\n  font-weight: 700;\n  src: url("./assets/fonts/overpass-webfont/overpass-bold-italic.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-bold-italic.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-bold-italic.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-bold-italic.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-bold-italic.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: normal;\n  font-weight: 800;\n  src: url("./assets/fonts/overpass-webfont/overpass-extrabold.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-extrabold.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-extrabold.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-extrabold.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-extrabold.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: italic;\n  font-weight: 800;\n  src: url("./assets/fonts/overpass-webfont/overpass-extrabold-italic.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-extrabold-italic.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-extrabold-italic.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-extrabold-italic.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-extrabold-italic.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: normal;\n  font-weight: 900;\n  src: url("./assets/fonts/overpass-webfont/overpass-heavy.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-heavy.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-heavy.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-heavy.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-heavy.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: italic;\n  font-weight: 900;\n  src: url("./assets/fonts/overpass-webfont/overpass-heavy-italic.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-heavy-italic.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-heavy-italic.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-heavy-italic.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-heavy-italic.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass-mono";\n  font-style: normal;\n  font-weight: 300;\n  src: url("./assets/fonts/overpass-mono-webfont/overpass-mono-light.eot");\n  src: url("./assets/fonts/overpass-mono-webfont/overpass-mono-light.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-light.woff2") format("woff2"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-light.woff") format("woff"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-light.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass-mono";\n  font-style: normal;\n  font-weight: 400;\n  src: url("./assets/fonts/overpass-mono-webfont/overpass-mono-regular.eot");\n  src: url("./assets/fonts/overpass-mono-webfont/overpass-mono-regular.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-regular.woff2") format("woff2"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-regular.woff") format("woff"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-regular.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass-mono";\n  font-style: normal;\n  font-weight: 500;\n  src: url("./assets/fonts/overpass-mono-webfont/overpass-mono-semibold.eot");\n  src: url("./assets/fonts/overpass-mono-webfont/overpass-mono-semibold.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-semibold.woff2") format("woff2"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-semibold.woff") format("woff"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-semibold.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass-mono";\n  font-style: normal;\n  font-weight: 600;\n  src: url("./assets/fonts/overpass-mono-webfont/overpass-mono-bold.eot");\n  src: url("./assets/fonts/overpass-mono-webfont/overpass-mono-bold.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-bold.woff2") format("woff2"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-bold.woff") format("woff"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-bold.ttf") format("truetype"); }\n\n[class*="pf-c-"], [class*="pf-c-"]::before, [class*="pf-c-"]::after {\n  padding: 0;\n  margin: 0;\n  background-color: transparent; }\n\nhtml {\n  font-size: unset !important; }\n\n.pf-screen-reader {\n  position: fixed;\n  top: 0;\n  left: 0;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border: 0; }\n\nhtml,\nbody,\np,\nol,\nul,\nli,\ndl,\ndt,\ndd,\nblockquote,\nfigure,\nfieldset,\nlegend,\ntextarea,\npre,\niframe,\nhr,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  padding: 0;\n  margin: 0; }\n\nhtml,\nbody {\n  height: 100%; }\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-size: 100%;\n  font-weight: var(--pf-global--FontWeight--normal); }\n\nul {\n  list-style: none; }\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: 100%;\n  line-height: var(--pf-global--LineHeight--md);\n  color: var(--pf-global--Color--100); }\n\nimg,\nembed,\niframe,\nobject,\naudio,\nvideo {\n  max-width: 100%;\n  height: auto; }\n\niframe {\n  border: 0; }\n\ntable {\n  border-spacing: 0;\n  border-collapse: collapse; }\n\ntd,\nth {\n  padding: 0;\n  text-align: left; }\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box; }\n\nhtml {\n  font-family: sans-serif;\n  line-height: 1.15; }\n\nbody {\n  font-family: var(--pf-global--FontFamily--sans-serif);\n  font-size: var(--pf-global--FontSize--md);\n  font-weight: var(--pf-global--FontWeight--normal);\n  line-height: var(--pf-global--LineHeight--md);\n  text-align: left;\n  background-color: var(--pf-global--BackgroundColor--100); }\n\na {\n  font-weight: var(--pf-global--link--FontWeight);\n  color: var(--pf-global--link--Color);\n  text-decoration: var(--pf-global--link--TextDecoration); }\n  a:hover {\n    --pf-global--link--Color: var(--pf-global--link--Color--hover);\n    --pf-global--link--TextDecoration: var(--pf-global--link--TextDecoration--hover); }\n\nbutton,\na {\n  cursor: pointer; }\n\nbutton::-moz-focus-inner,\n[type="button"]::-moz-focus-inner,\n[type="reset"]::-moz-focus-inner,\n[type="submit"]::-moz-focus-inner {\n  padding: 0;\n  border-style: none; }\n\nbutton:-moz-focusring,\n[type="button"]:-moz-focusring,\n[type="reset"]:-moz-focusring,\n[type="submit"]:-moz-focusring {\n  outline: 1px dotted ButtonText; }\n\n.pf-m-overpass-font a {\n  font-weight: var(--pf-global--FontWeight--semi-bold); }\n\n.pf-t-dark.pf-m-transparent {\n  background-color: transparent; }\n\n.pf-t-dark.pf-m-transparent-100 {\n  background-color: rgba(3, 3, 3, 0.42); }\n\n.pf-t-dark.pf-m-transparent-200 {\n  background-color: rgba(3, 3, 3, 0.6); }\n\n.pf-t-dark.pf-m-opaque-100 {\n  background-color: #3c3f42; }\n\n.pf-t-dark.pf-m-opaque-200 {\n  background-color: #151515; }\n\n.pf-t-light.pf-m-transparent {\n  background-color: transparent; }\n\n.pf-t-light.pf-m-opaque-100 {\n  background-color: #fff; }\n\n.pf-t-light.pf-m-opaque-200 {\n  background-color: #fafafa; }\n\n.pf-t-light.pf-m-opaque-300 {\n  background-color: #f0f0f0; }\n\n* .fa,\n* .fas,\n* .far,\n* .fal,\n* .fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n* .fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n* .fa-xs {\n  font-size: .75em; }\n\n* .fa-sm {\n  font-size: .875em; }\n\n* .fa-1x {\n  font-size: 1em; }\n\n* .fa-2x {\n  font-size: 2em; }\n\n* .fa-3x {\n  font-size: 3em; }\n\n* .fa-4x {\n  font-size: 4em; }\n\n* .fa-5x {\n  font-size: 5em; }\n\n* .fa-6x {\n  font-size: 6em; }\n\n* .fa-7x {\n  font-size: 7em; }\n\n* .fa-8x {\n  font-size: 8em; }\n\n* .fa-9x {\n  font-size: 9em; }\n\n* .fa-10x {\n  font-size: 10em; }\n\n* .fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n* .fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  * .fa-ul > li {\n    position: relative; }\n\n* .fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n* .fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n* .fa-pull-left {\n  float: left; }\n\n* .fa-pull-right {\n  float: right; }\n\n* .fa.fa-pull-left,\n* .fas.fa-pull-left,\n* .far.fa-pull-left,\n* .fal.fa-pull-left,\n* .fab.fa-pull-left {\n  margin-right: .3em; }\n\n* .fa.fa-pull-right,\n* .fas.fa-pull-right,\n* .far.fa-pull-right,\n* .fal.fa-pull-right,\n* .fab.fa-pull-right {\n  margin-left: .3em; }\n\n* .fa-spin {\n  animation: fa-spin 2s infinite linear; }\n\n* .fa-pulse {\n  animation: fa-spin 1s infinite steps(8); }\n\n@keyframes fa-spin {\n  0% {\n    transform: rotate(0deg); }\n  100% {\n    transform: rotate(360deg); } }\n\n* .fa-rotate-90 {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";\n  transform: rotate(90deg); }\n\n* .fa-rotate-180 {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";\n  transform: rotate(180deg); }\n\n* .fa-rotate-270 {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";\n  transform: rotate(270deg); }\n\n* .fa-flip-horizontal {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";\n  transform: scale(-1, 1); }\n\n* .fa-flip-vertical {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";\n  transform: scale(1, -1); }\n\n* .fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";\n  transform: scale(-1, -1); }\n\n* :root .fa-rotate-90,\n* :root .fa-rotate-180,\n* :root .fa-rotate-270,\n* :root .fa-flip-horizontal,\n* :root .fa-flip-vertical {\n  filter: none; }\n\n* .fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2.5em; }\n\n* .fa-stack-1x,\n* .fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n* .fa-stack-1x {\n  line-height: inherit; }\n\n\n* .fa-stack-2x {\n  font-size: 2em; }\n\n* .fa-inverse {\n  color: #fff; }\n\n* .fa-500px:before {\n  content: "\\f26e"; }\n\n* .fa-accessible-icon:before {\n  content: "\\f368"; }\n\n* .fa-accusoft:before {\n  content: "\\f369"; }\n\n* .fa-acquisitions-incorporated:before {\n  content: "\\f6af"; }\n\n* .fa-ad:before {\n  content: "\\f641"; }\n\n* .fa-address-book:before {\n  content: "\\f2b9"; }\n\n* .fa-address-card:before {\n  content: "\\f2bb"; }\n\n* .fa-adjust:before {\n  content: "\\f042"; }\n\n* .fa-adn:before {\n  content: "\\f170"; }\n\n* .fa-adobe:before {\n  content: "\\f778"; }\n\n* .fa-adversal:before {\n  content: "\\f36a"; }\n\n* .fa-affiliatetheme:before {\n  content: "\\f36b"; }\n\n* .fa-air-freshener:before {\n  content: "\\f5d0"; }\n\n* .fa-algolia:before {\n  content: "\\f36c"; }\n\n* .fa-align-center:before {\n  content: "\\f037"; }\n\n* .fa-align-justify:before {\n  content: "\\f039"; }\n\n* .fa-align-left:before {\n  content: "\\f036"; }\n\n* .fa-align-right:before {\n  content: "\\f038"; }\n\n* .fa-alipay:before {\n  content: "\\f642"; }\n\n* .fa-allergies:before {\n  content: "\\f461"; }\n\n* .fa-amazon:before {\n  content: "\\f270"; }\n\n* .fa-amazon-pay:before {\n  content: "\\f42c"; }\n\n* .fa-ambulance:before {\n  content: "\\f0f9"; }\n\n* .fa-american-sign-language-interpreting:before {\n  content: "\\f2a3"; }\n\n* .fa-amilia:before {\n  content: "\\f36d"; }\n\n* .fa-anchor:before {\n  content: "\\f13d"; }\n\n* .fa-android:before {\n  content: "\\f17b"; }\n\n* .fa-angellist:before {\n  content: "\\f209"; }\n\n* .fa-angle-double-down:before {\n  content: "\\f103"; }\n\n* .fa-angle-double-left:before {\n  content: "\\f100"; }\n\n* .fa-angle-double-right:before {\n  content: "\\f101"; }\n\n* .fa-angle-double-up:before {\n  content: "\\f102"; }\n\n* .fa-angle-down:before {\n  content: "\\f107"; }\n\n* .fa-angle-left:before {\n  content: "\\f104"; }\n\n* .fa-angle-right:before {\n  content: "\\f105"; }\n\n* .fa-angle-up:before {\n  content: "\\f106"; }\n\n* .fa-angry:before {\n  content: "\\f556"; }\n\n* .fa-angrycreative:before {\n  content: "\\f36e"; }\n\n* .fa-angular:before {\n  content: "\\f420"; }\n\n* .fa-ankh:before {\n  content: "\\f644"; }\n\n* .fa-app-store:before {\n  content: "\\f36f"; }\n\n* .fa-app-store-ios:before {\n  content: "\\f370"; }\n\n* .fa-apper:before {\n  content: "\\f371"; }\n\n* .fa-apple:before {\n  content: "\\f179"; }\n\n* .fa-apple-alt:before {\n  content: "\\f5d1"; }\n\n* .fa-apple-pay:before {\n  content: "\\f415"; }\n\n* .fa-archive:before {\n  content: "\\f187"; }\n\n* .fa-archway:before {\n  content: "\\f557"; }\n\n* .fa-arrow-alt-circle-down:before {\n  content: "\\f358"; }\n\n* .fa-arrow-alt-circle-left:before {\n  content: "\\f359"; }\n\n* .fa-arrow-alt-circle-right:before {\n  content: "\\f35a"; }\n\n* .fa-arrow-alt-circle-up:before {\n  content: "\\f35b"; }\n\n* .fa-arrow-circle-down:before {\n  content: "\\f0ab"; }\n\n* .fa-arrow-circle-left:before {\n  content: "\\f0a8"; }\n\n* .fa-arrow-circle-right:before {\n  content: "\\f0a9"; }\n\n* .fa-arrow-circle-up:before {\n  content: "\\f0aa"; }\n\n* .fa-arrow-down:before {\n  content: "\\f063"; }\n\n* .fa-arrow-left:before {\n  content: "\\f060"; }\n\n* .fa-arrow-right:before {\n  content: "\\f061"; }\n\n* .fa-arrow-up:before {\n  content: "\\f062"; }\n\n* .fa-arrows-alt:before {\n  content: "\\f0b2"; }\n\n* .fa-arrows-alt-h:before {\n  content: "\\f337"; }\n\n* .fa-arrows-alt-v:before {\n  content: "\\f338"; }\n\n* .fa-artstation:before {\n  content: "\\f77a"; }\n\n* .fa-assistive-listening-systems:before {\n  content: "\\f2a2"; }\n\n* .fa-asterisk:before {\n  content: "\\f069"; }\n\n* .fa-asymmetrik:before {\n  content: "\\f372"; }\n\n* .fa-at:before {\n  content: "\\f1fa"; }\n\n* .fa-atlas:before {\n  content: "\\f558"; }\n\n* .fa-atlassian:before {\n  content: "\\f77b"; }\n\n* .fa-atom:before {\n  content: "\\f5d2"; }\n\n* .fa-audible:before {\n  content: "\\f373"; }\n\n* .fa-audio-description:before {\n  content: "\\f29e"; }\n\n* .fa-autoprefixer:before {\n  content: "\\f41c"; }\n\n* .fa-avianex:before {\n  content: "\\f374"; }\n\n* .fa-aviato:before {\n  content: "\\f421"; }\n\n* .fa-award:before {\n  content: "\\f559"; }\n\n* .fa-aws:before {\n  content: "\\f375"; }\n\n* .fa-baby:before {\n  content: "\\f77c"; }\n\n* .fa-baby-carriage:before {\n  content: "\\f77d"; }\n\n* .fa-backspace:before {\n  content: "\\f55a"; }\n\n* .fa-backward:before {\n  content: "\\f04a"; }\n\n* .fa-balance-scale:before {\n  content: "\\f24e"; }\n\n* .fa-ban:before {\n  content: "\\f05e"; }\n\n* .fa-band-aid:before {\n  content: "\\f462"; }\n\n* .fa-bandcamp:before {\n  content: "\\f2d5"; }\n\n* .fa-barcode:before {\n  content: "\\f02a"; }\n\n* .fa-bars:before {\n  content: "\\f0c9"; }\n\n* .fa-baseball-ball:before {\n  content: "\\f433"; }\n\n* .fa-basketball-ball:before {\n  content: "\\f434"; }\n\n* .fa-bath:before {\n  content: "\\f2cd"; }\n\n* .fa-battery-empty:before {\n  content: "\\f244"; }\n\n* .fa-battery-full:before {\n  content: "\\f240"; }\n\n* .fa-battery-half:before {\n  content: "\\f242"; }\n\n* .fa-battery-quarter:before {\n  content: "\\f243"; }\n\n* .fa-battery-three-quarters:before {\n  content: "\\f241"; }\n\n* .fa-bed:before {\n  content: "\\f236"; }\n\n* .fa-beer:before {\n  content: "\\f0fc"; }\n\n* .fa-behance:before {\n  content: "\\f1b4"; }\n\n* .fa-behance-square:before {\n  content: "\\f1b5"; }\n\n* .fa-bell:before {\n  content: "\\f0f3"; }\n\n* .fa-bell-slash:before {\n  content: "\\f1f6"; }\n\n* .fa-bezier-curve:before {\n  content: "\\f55b"; }\n\n* .fa-bible:before {\n  content: "\\f647"; }\n\n* .fa-bicycle:before {\n  content: "\\f206"; }\n\n* .fa-bimobject:before {\n  content: "\\f378"; }\n\n* .fa-binoculars:before {\n  content: "\\f1e5"; }\n\n* .fa-biohazard:before {\n  content: "\\f780"; }\n\n* .fa-birthday-cake:before {\n  content: "\\f1fd"; }\n\n* .fa-bitbucket:before {\n  content: "\\f171"; }\n\n* .fa-bitcoin:before {\n  content: "\\f379"; }\n\n* .fa-bity:before {\n  content: "\\f37a"; }\n\n* .fa-black-tie:before {\n  content: "\\f27e"; }\n\n* .fa-blackberry:before {\n  content: "\\f37b"; }\n\n* .fa-blender:before {\n  content: "\\f517"; }\n\n* .fa-blender-phone:before {\n  content: "\\f6b6"; }\n\n* .fa-blind:before {\n  content: "\\f29d"; }\n\n* .fa-blog:before {\n  content: "\\f781"; }\n\n* .fa-blogger:before {\n  content: "\\f37c"; }\n\n* .fa-blogger-b:before {\n  content: "\\f37d"; }\n\n* .fa-bluetooth:before {\n  content: "\\f293"; }\n\n* .fa-bluetooth-b:before {\n  content: "\\f294"; }\n\n* .fa-bold:before {\n  content: "\\f032"; }\n\n* .fa-bolt:before {\n  content: "\\f0e7"; }\n\n* .fa-bomb:before {\n  content: "\\f1e2"; }\n\n* .fa-bone:before {\n  content: "\\f5d7"; }\n\n* .fa-bong:before {\n  content: "\\f55c"; }\n\n* .fa-book:before {\n  content: "\\f02d"; }\n\n* .fa-book-dead:before {\n  content: "\\f6b7"; }\n\n* .fa-book-open:before {\n  content: "\\f518"; }\n\n* .fa-book-reader:before {\n  content: "\\f5da"; }\n\n* .fa-bookmark:before {\n  content: "\\f02e"; }\n\n* .fa-bowling-ball:before {\n  content: "\\f436"; }\n\n* .fa-box:before {\n  content: "\\f466"; }\n\n* .fa-box-open:before {\n  content: "\\f49e"; }\n\n* .fa-boxes:before {\n  content: "\\f468"; }\n\n* .fa-braille:before {\n  content: "\\f2a1"; }\n\n* .fa-brain:before {\n  content: "\\f5dc"; }\n\n* .fa-briefcase:before {\n  content: "\\f0b1"; }\n\n* .fa-briefcase-medical:before {\n  content: "\\f469"; }\n\n* .fa-broadcast-tower:before {\n  content: "\\f519"; }\n\n* .fa-broom:before {\n  content: "\\f51a"; }\n\n* .fa-brush:before {\n  content: "\\f55d"; }\n\n* .fa-btc:before {\n  content: "\\f15a"; }\n\n* .fa-bug:before {\n  content: "\\f188"; }\n\n* .fa-building:before {\n  content: "\\f1ad"; }\n\n* .fa-bullhorn:before {\n  content: "\\f0a1"; }\n\n* .fa-bullseye:before {\n  content: "\\f140"; }\n\n* .fa-burn:before {\n  content: "\\f46a"; }\n\n* .fa-buromobelexperte:before {\n  content: "\\f37f"; }\n\n* .fa-bus:before {\n  content: "\\f207"; }\n\n* .fa-bus-alt:before {\n  content: "\\f55e"; }\n\n* .fa-business-time:before {\n  content: "\\f64a"; }\n\n* .fa-buysellads:before {\n  content: "\\f20d"; }\n\n* .fa-calculator:before {\n  content: "\\f1ec"; }\n\n* .fa-calendar:before {\n  content: "\\f133"; }\n\n* .fa-calendar-alt:before {\n  content: "\\f073"; }\n\n* .fa-calendar-check:before {\n  content: "\\f274"; }\n\n* .fa-calendar-day:before {\n  content: "\\f783"; }\n\n* .fa-calendar-minus:before {\n  content: "\\f272"; }\n\n* .fa-calendar-plus:before {\n  content: "\\f271"; }\n\n* .fa-calendar-times:before {\n  content: "\\f273"; }\n\n* .fa-calendar-week:before {\n  content: "\\f784"; }\n\n* .fa-camera:before {\n  content: "\\f030"; }\n\n* .fa-camera-retro:before {\n  content: "\\f083"; }\n\n* .fa-campground:before {\n  content: "\\f6bb"; }\n\n* .fa-canadian-maple-leaf:before {\n  content: "\\f785"; }\n\n* .fa-candy-cane:before {\n  content: "\\f786"; }\n\n* .fa-cannabis:before {\n  content: "\\f55f"; }\n\n* .fa-capsules:before {\n  content: "\\f46b"; }\n\n* .fa-car:before {\n  content: "\\f1b9"; }\n\n* .fa-car-alt:before {\n  content: "\\f5de"; }\n\n* .fa-car-battery:before {\n  content: "\\f5df"; }\n\n* .fa-car-crash:before {\n  content: "\\f5e1"; }\n\n* .fa-car-side:before {\n  content: "\\f5e4"; }\n\n* .fa-caret-down:before {\n  content: "\\f0d7"; }\n\n* .fa-caret-left:before {\n  content: "\\f0d9"; }\n\n* .fa-caret-right:before {\n  content: "\\f0da"; }\n\n* .fa-caret-square-down:before {\n  content: "\\f150"; }\n\n* .fa-caret-square-left:before {\n  content: "\\f191"; }\n\n* .fa-caret-square-right:before {\n  content: "\\f152"; }\n\n* .fa-caret-square-up:before {\n  content: "\\f151"; }\n\n* .fa-caret-up:before {\n  content: "\\f0d8"; }\n\n* .fa-carrot:before {\n  content: "\\f787"; }\n\n* .fa-cart-arrow-down:before {\n  content: "\\f218"; }\n\n* .fa-cart-plus:before {\n  content: "\\f217"; }\n\n* .fa-cash-register:before {\n  content: "\\f788"; }\n\n* .fa-cat:before {\n  content: "\\f6be"; }\n\n* .fa-cc-amazon-pay:before {\n  content: "\\f42d"; }\n\n* .fa-cc-amex:before {\n  content: "\\f1f3"; }\n\n* .fa-cc-apple-pay:before {\n  content: "\\f416"; }\n\n* .fa-cc-diners-club:before {\n  content: "\\f24c"; }\n\n* .fa-cc-discover:before {\n  content: "\\f1f2"; }\n\n* .fa-cc-jcb:before {\n  content: "\\f24b"; }\n\n* .fa-cc-mastercard:before {\n  content: "\\f1f1"; }\n\n* .fa-cc-paypal:before {\n  content: "\\f1f4"; }\n\n* .fa-cc-stripe:before {\n  content: "\\f1f5"; }\n\n* .fa-cc-visa:before {\n  content: "\\f1f0"; }\n\n* .fa-centercode:before {\n  content: "\\f380"; }\n\n* .fa-centos:before {\n  content: "\\f789"; }\n\n* .fa-certificate:before {\n  content: "\\f0a3"; }\n\n* .fa-chair:before {\n  content: "\\f6c0"; }\n\n* .fa-chalkboard:before {\n  content: "\\f51b"; }\n\n* .fa-chalkboard-teacher:before {\n  content: "\\f51c"; }\n\n* .fa-charging-station:before {\n  content: "\\f5e7"; }\n\n* .fa-chart-area:before {\n  content: "\\f1fe"; }\n\n* .fa-chart-bar:before {\n  content: "\\f080"; }\n\n* .fa-chart-line:before {\n  content: "\\f201"; }\n\n* .fa-chart-pie:before {\n  content: "\\f200"; }\n\n* .fa-check:before {\n  content: "\\f00c"; }\n\n* .fa-check-circle:before {\n  content: "\\f058"; }\n\n* .fa-check-double:before {\n  content: "\\f560"; }\n\n* .fa-check-square:before {\n  content: "\\f14a"; }\n\n* .fa-chess:before {\n  content: "\\f439"; }\n\n* .fa-chess-bishop:before {\n  content: "\\f43a"; }\n\n* .fa-chess-board:before {\n  content: "\\f43c"; }\n\n* .fa-chess-king:before {\n  content: "\\f43f"; }\n\n* .fa-chess-knight:before {\n  content: "\\f441"; }\n\n* .fa-chess-pawn:before {\n  content: "\\f443"; }\n\n* .fa-chess-queen:before {\n  content: "\\f445"; }\n\n* .fa-chess-rook:before {\n  content: "\\f447"; }\n\n* .fa-chevron-circle-down:before {\n  content: "\\f13a"; }\n\n* .fa-chevron-circle-left:before {\n  content: "\\f137"; }\n\n* .fa-chevron-circle-right:before {\n  content: "\\f138"; }\n\n* .fa-chevron-circle-up:before {\n  content: "\\f139"; }\n\n* .fa-chevron-down:before {\n  content: "\\f078"; }\n\n* .fa-chevron-left:before {\n  content: "\\f053"; }\n\n* .fa-chevron-right:before {\n  content: "\\f054"; }\n\n* .fa-chevron-up:before {\n  content: "\\f077"; }\n\n* .fa-child:before {\n  content: "\\f1ae"; }\n\n* .fa-chrome:before {\n  content: "\\f268"; }\n\n* .fa-church:before {\n  content: "\\f51d"; }\n\n* .fa-circle:before {\n  content: "\\f111"; }\n\n* .fa-circle-notch:before {\n  content: "\\f1ce"; }\n\n* .fa-city:before {\n  content: "\\f64f"; }\n\n* .fa-clipboard:before {\n  content: "\\f328"; }\n\n* .fa-clipboard-check:before {\n  content: "\\f46c"; }\n\n* .fa-clipboard-list:before {\n  content: "\\f46d"; }\n\n* .fa-clock:before {\n  content: "\\f017"; }\n\n* .fa-clone:before {\n  content: "\\f24d"; }\n\n* .fa-closed-captioning:before {\n  content: "\\f20a"; }\n\n* .fa-cloud:before {\n  content: "\\f0c2"; }\n\n* .fa-cloud-download-alt:before {\n  content: "\\f381"; }\n\n* .fa-cloud-meatball:before {\n  content: "\\f73b"; }\n\n* .fa-cloud-moon:before {\n  content: "\\f6c3"; }\n\n* .fa-cloud-moon-rain:before {\n  content: "\\f73c"; }\n\n* .fa-cloud-rain:before {\n  content: "\\f73d"; }\n\n* .fa-cloud-showers-heavy:before {\n  content: "\\f740"; }\n\n* .fa-cloud-sun:before {\n  content: "\\f6c4"; }\n\n* .fa-cloud-sun-rain:before {\n  content: "\\f743"; }\n\n* .fa-cloud-upload-alt:before {\n  content: "\\f382"; }\n\n* .fa-cloudscale:before {\n  content: "\\f383"; }\n\n* .fa-cloudsmith:before {\n  content: "\\f384"; }\n\n* .fa-cloudversify:before {\n  content: "\\f385"; }\n\n* .fa-cocktail:before {\n  content: "\\f561"; }\n\n* .fa-code:before {\n  content: "\\f121"; }\n\n* .fa-code-branch:before {\n  content: "\\f126"; }\n\n* .fa-codepen:before {\n  content: "\\f1cb"; }\n\n* .fa-codiepie:before {\n  content: "\\f284"; }\n\n* .fa-coffee:before {\n  content: "\\f0f4"; }\n\n* .fa-cog:before {\n  content: "\\f013"; }\n\n* .fa-cogs:before {\n  content: "\\f085"; }\n\n* .fa-coins:before {\n  content: "\\f51e"; }\n\n* .fa-columns:before {\n  content: "\\f0db"; }\n\n* .fa-comment:before {\n  content: "\\f075"; }\n\n* .fa-comment-alt:before {\n  content: "\\f27a"; }\n\n* .fa-comment-dollar:before {\n  content: "\\f651"; }\n\n* .fa-comment-dots:before {\n  content: "\\f4ad"; }\n\n* .fa-comment-slash:before {\n  content: "\\f4b3"; }\n\n* .fa-comments:before {\n  content: "\\f086"; }\n\n* .fa-comments-dollar:before {\n  content: "\\f653"; }\n\n* .fa-compact-disc:before {\n  content: "\\f51f"; }\n\n* .fa-compass:before {\n  content: "\\f14e"; }\n\n* .fa-compress:before {\n  content: "\\f066"; }\n\n* .fa-compress-arrows-alt:before {\n  content: "\\f78c"; }\n\n* .fa-concierge-bell:before {\n  content: "\\f562"; }\n\n* .fa-confluence:before {\n  content: "\\f78d"; }\n\n* .fa-connectdevelop:before {\n  content: "\\f20e"; }\n\n* .fa-contao:before {\n  content: "\\f26d"; }\n\n* .fa-cookie:before {\n  content: "\\f563"; }\n\n* .fa-cookie-bite:before {\n  content: "\\f564"; }\n\n* .fa-copy:before {\n  content: "\\f0c5"; }\n\n* .fa-copyright:before {\n  content: "\\f1f9"; }\n\n* .fa-couch:before {\n  content: "\\f4b8"; }\n\n* .fa-cpanel:before {\n  content: "\\f388"; }\n\n* .fa-creative-commons:before {\n  content: "\\f25e"; }\n\n* .fa-creative-commons-by:before {\n  content: "\\f4e7"; }\n\n* .fa-creative-commons-nc:before {\n  content: "\\f4e8"; }\n\n* .fa-creative-commons-nc-eu:before {\n  content: "\\f4e9"; }\n\n* .fa-creative-commons-nc-jp:before {\n  content: "\\f4ea"; }\n\n* .fa-creative-commons-nd:before {\n  content: "\\f4eb"; }\n\n* .fa-creative-commons-pd:before {\n  content: "\\f4ec"; }\n\n* .fa-creative-commons-pd-alt:before {\n  content: "\\f4ed"; }\n\n* .fa-creative-commons-remix:before {\n  content: "\\f4ee"; }\n\n* .fa-creative-commons-sa:before {\n  content: "\\f4ef"; }\n\n* .fa-creative-commons-sampling:before {\n  content: "\\f4f0"; }\n\n* .fa-creative-commons-sampling-plus:before {\n  content: "\\f4f1"; }\n\n* .fa-creative-commons-share:before {\n  content: "\\f4f2"; }\n\n* .fa-creative-commons-zero:before {\n  content: "\\f4f3"; }\n\n* .fa-credit-card:before {\n  content: "\\f09d"; }\n\n* .fa-critical-role:before {\n  content: "\\f6c9"; }\n\n* .fa-crop:before {\n  content: "\\f125"; }\n\n* .fa-crop-alt:before {\n  content: "\\f565"; }\n\n* .fa-cross:before {\n  content: "\\f654"; }\n\n* .fa-crosshairs:before {\n  content: "\\f05b"; }\n\n* .fa-crow:before {\n  content: "\\f520"; }\n\n* .fa-crown:before {\n  content: "\\f521"; }\n\n* .fa-css3:before {\n  content: "\\f13c"; }\n\n* .fa-css3-alt:before {\n  content: "\\f38b"; }\n\n* .fa-cube:before {\n  content: "\\f1b2"; }\n\n* .fa-cubes:before {\n  content: "\\f1b3"; }\n\n* .fa-cut:before {\n  content: "\\f0c4"; }\n\n* .fa-cuttlefish:before {\n  content: "\\f38c"; }\n\n* .fa-d-and-d:before {\n  content: "\\f38d"; }\n\n* .fa-d-and-d-beyond:before {\n  content: "\\f6ca"; }\n\n* .fa-dashcube:before {\n  content: "\\f210"; }\n\n* .fa-database:before {\n  content: "\\f1c0"; }\n\n* .fa-deaf:before {\n  content: "\\f2a4"; }\n\n* .fa-delicious:before {\n  content: "\\f1a5"; }\n\n* .fa-democrat:before {\n  content: "\\f747"; }\n\n* .fa-deploydog:before {\n  content: "\\f38e"; }\n\n* .fa-deskpro:before {\n  content: "\\f38f"; }\n\n* .fa-desktop:before {\n  content: "\\f108"; }\n\n* .fa-dev:before {\n  content: "\\f6cc"; }\n\n* .fa-deviantart:before {\n  content: "\\f1bd"; }\n\n* .fa-dharmachakra:before {\n  content: "\\f655"; }\n\n* .fa-dhl:before {\n  content: "\\f790"; }\n\n* .fa-diagnoses:before {\n  content: "\\f470"; }\n\n* .fa-diaspora:before {\n  content: "\\f791"; }\n\n* .fa-dice:before {\n  content: "\\f522"; }\n\n* .fa-dice-d20:before {\n  content: "\\f6cf"; }\n\n* .fa-dice-d6:before {\n  content: "\\f6d1"; }\n\n* .fa-dice-five:before {\n  content: "\\f523"; }\n\n* .fa-dice-four:before {\n  content: "\\f524"; }\n\n* .fa-dice-one:before {\n  content: "\\f525"; }\n\n* .fa-dice-six:before {\n  content: "\\f526"; }\n\n* .fa-dice-three:before {\n  content: "\\f527"; }\n\n* .fa-dice-two:before {\n  content: "\\f528"; }\n\n* .fa-digg:before {\n  content: "\\f1a6"; }\n\n* .fa-digital-ocean:before {\n  content: "\\f391"; }\n\n* .fa-digital-tachograph:before {\n  content: "\\f566"; }\n\n* .fa-directions:before {\n  content: "\\f5eb"; }\n\n* .fa-discord:before {\n  content: "\\f392"; }\n\n* .fa-discourse:before {\n  content: "\\f393"; }\n\n* .fa-divide:before {\n  content: "\\f529"; }\n\n* .fa-dizzy:before {\n  content: "\\f567"; }\n\n* .fa-dna:before {\n  content: "\\f471"; }\n\n* .fa-dochub:before {\n  content: "\\f394"; }\n\n* .fa-docker:before {\n  content: "\\f395"; }\n\n* .fa-dog:before {\n  content: "\\f6d3"; }\n\n* .fa-dollar-sign:before {\n  content: "\\f155"; }\n\n* .fa-dolly:before {\n  content: "\\f472"; }\n\n* .fa-dolly-flatbed:before {\n  content: "\\f474"; }\n\n* .fa-donate:before {\n  content: "\\f4b9"; }\n\n* .fa-door-closed:before {\n  content: "\\f52a"; }\n\n* .fa-door-open:before {\n  content: "\\f52b"; }\n\n* .fa-dot-circle:before {\n  content: "\\f192"; }\n\n* .fa-dove:before {\n  content: "\\f4ba"; }\n\n* .fa-download:before {\n  content: "\\f019"; }\n\n* .fa-draft2digital:before {\n  content: "\\f396"; }\n\n* .fa-drafting-compass:before {\n  content: "\\f568"; }\n\n* .fa-dragon:before {\n  content: "\\f6d5"; }\n\n* .fa-draw-polygon:before {\n  content: "\\f5ee"; }\n\n* .fa-dribbble:before {\n  content: "\\f17d"; }\n\n* .fa-dribbble-square:before {\n  content: "\\f397"; }\n\n* .fa-dropbox:before {\n  content: "\\f16b"; }\n\n* .fa-drum:before {\n  content: "\\f569"; }\n\n* .fa-drum-steelpan:before {\n  content: "\\f56a"; }\n\n* .fa-drumstick-bite:before {\n  content: "\\f6d7"; }\n\n* .fa-drupal:before {\n  content: "\\f1a9"; }\n\n* .fa-dumbbell:before {\n  content: "\\f44b"; }\n\n* .fa-dumpster:before {\n  content: "\\f793"; }\n\n* .fa-dumpster-fire:before {\n  content: "\\f794"; }\n\n* .fa-dungeon:before {\n  content: "\\f6d9"; }\n\n* .fa-dyalog:before {\n  content: "\\f399"; }\n\n* .fa-earlybirds:before {\n  content: "\\f39a"; }\n\n* .fa-ebay:before {\n  content: "\\f4f4"; }\n\n* .fa-edge:before {\n  content: "\\f282"; }\n\n* .fa-edit:before {\n  content: "\\f044"; }\n\n* .fa-eject:before {\n  content: "\\f052"; }\n\n* .fa-elementor:before {\n  content: "\\f430"; }\n\n* .fa-ellipsis-h:before {\n  content: "\\f141"; }\n\n* .fa-ellipsis-v:before {\n  content: "\\f142"; }\n\n* .fa-ello:before {\n  content: "\\f5f1"; }\n\n* .fa-ember:before {\n  content: "\\f423"; }\n\n* .fa-empire:before {\n  content: "\\f1d1"; }\n\n* .fa-envelope:before {\n  content: "\\f0e0"; }\n\n* .fa-envelope-open:before {\n  content: "\\f2b6"; }\n\n* .fa-envelope-open-text:before {\n  content: "\\f658"; }\n\n* .fa-envelope-square:before {\n  content: "\\f199"; }\n\n* .fa-envira:before {\n  content: "\\f299"; }\n\n* .fa-equals:before {\n  content: "\\f52c"; }\n\n* .fa-eraser:before {\n  content: "\\f12d"; }\n\n* .fa-erlang:before {\n  content: "\\f39d"; }\n\n* .fa-ethereum:before {\n  content: "\\f42e"; }\n\n* .fa-ethernet:before {\n  content: "\\f796"; }\n\n* .fa-etsy:before {\n  content: "\\f2d7"; }\n\n* .fa-euro-sign:before {\n  content: "\\f153"; }\n\n* .fa-exchange-alt:before {\n  content: "\\f362"; }\n\n* .fa-exclamation:before {\n  content: "\\f12a"; }\n\n* .fa-exclamation-circle:before {\n  content: "\\f06a"; }\n\n* .fa-exclamation-triangle:before {\n  content: "\\f071"; }\n\n* .fa-expand:before {\n  content: "\\f065"; }\n\n* .fa-expand-arrows-alt:before {\n  content: "\\f31e"; }\n\n* .fa-expeditedssl:before {\n  content: "\\f23e"; }\n\n* .fa-external-link-alt:before {\n  content: "\\f35d"; }\n\n* .fa-external-link-square-alt:before {\n  content: "\\f360"; }\n\n* .fa-eye:before {\n  content: "\\f06e"; }\n\n* .fa-eye-dropper:before {\n  content: "\\f1fb"; }\n\n* .fa-eye-slash:before {\n  content: "\\f070"; }\n\n* .fa-facebook:before {\n  content: "\\f09a"; }\n\n* .fa-facebook-f:before {\n  content: "\\f39e"; }\n\n* .fa-facebook-messenger:before {\n  content: "\\f39f"; }\n\n* .fa-facebook-square:before {\n  content: "\\f082"; }\n\n* .fa-fantasy-flight-games:before {\n  content: "\\f6dc"; }\n\n* .fa-fast-backward:before {\n  content: "\\f049"; }\n\n* .fa-fast-forward:before {\n  content: "\\f050"; }\n\n* .fa-fax:before {\n  content: "\\f1ac"; }\n\n* .fa-feather:before {\n  content: "\\f52d"; }\n\n* .fa-feather-alt:before {\n  content: "\\f56b"; }\n\n* .fa-fedex:before {\n  content: "\\f797"; }\n\n* .fa-fedora:before {\n  content: "\\f798"; }\n\n* .fa-female:before {\n  content: "\\f182"; }\n\n* .fa-fighter-jet:before {\n  content: "\\f0fb"; }\n\n* .fa-figma:before {\n  content: "\\f799"; }\n\n* .fa-file:before {\n  content: "\\f15b"; }\n\n* .fa-file-alt:before {\n  content: "\\f15c"; }\n\n* .fa-file-archive:before {\n  content: "\\f1c6"; }\n\n* .fa-file-audio:before {\n  content: "\\f1c7"; }\n\n* .fa-file-code:before {\n  content: "\\f1c9"; }\n\n* .fa-file-contract:before {\n  content: "\\f56c"; }\n\n* .fa-file-csv:before {\n  content: "\\f6dd"; }\n\n* .fa-file-download:before {\n  content: "\\f56d"; }\n\n* .fa-file-excel:before {\n  content: "\\f1c3"; }\n\n* .fa-file-export:before {\n  content: "\\f56e"; }\n\n* .fa-file-image:before {\n  content: "\\f1c5"; }\n\n* .fa-file-import:before {\n  content: "\\f56f"; }\n\n* .fa-file-invoice:before {\n  content: "\\f570"; }\n\n* .fa-file-invoice-dollar:before {\n  content: "\\f571"; }\n\n* .fa-file-medical:before {\n  content: "\\f477"; }\n\n* .fa-file-medical-alt:before {\n  content: "\\f478"; }\n\n* .fa-file-pdf:before {\n  content: "\\f1c1"; }\n\n* .fa-file-powerpoint:before {\n  content: "\\f1c4"; }\n\n* .fa-file-prescription:before {\n  content: "\\f572"; }\n\n* .fa-file-signature:before {\n  content: "\\f573"; }\n\n* .fa-file-upload:before {\n  content: "\\f574"; }\n\n* .fa-file-video:before {\n  content: "\\f1c8"; }\n\n* .fa-file-word:before {\n  content: "\\f1c2"; }\n\n* .fa-fill:before {\n  content: "\\f575"; }\n\n* .fa-fill-drip:before {\n  content: "\\f576"; }\n\n* .fa-film:before {\n  content: "\\f008"; }\n\n* .fa-filter:before {\n  content: "\\f0b0"; }\n\n* .fa-fingerprint:before {\n  content: "\\f577"; }\n\n* .fa-fire:before {\n  content: "\\f06d"; }\n\n* .fa-fire-alt:before {\n  content: "\\f7e4"; }\n\n* .fa-fire-extinguisher:before {\n  content: "\\f134"; }\n\n* .fa-firefox:before {\n  content: "\\f269"; }\n\n* .fa-first-aid:before {\n  content: "\\f479"; }\n\n* .fa-first-order:before {\n  content: "\\f2b0"; }\n\n* .fa-first-order-alt:before {\n  content: "\\f50a"; }\n\n* .fa-firstdraft:before {\n  content: "\\f3a1"; }\n\n* .fa-fish:before {\n  content: "\\f578"; }\n\n* .fa-fist-raised:before {\n  content: "\\f6de"; }\n\n* .fa-flag:before {\n  content: "\\f024"; }\n\n* .fa-flag-checkered:before {\n  content: "\\f11e"; }\n\n* .fa-flag-usa:before {\n  content: "\\f74d"; }\n\n* .fa-flask:before {\n  content: "\\f0c3"; }\n\n* .fa-flickr:before {\n  content: "\\f16e"; }\n\n* .fa-flipboard:before {\n  content: "\\f44d"; }\n\n* .fa-flushed:before {\n  content: "\\f579"; }\n\n* .fa-fly:before {\n  content: "\\f417"; }\n\n* .fa-folder:before {\n  content: "\\f07b"; }\n\n* .fa-folder-minus:before {\n  content: "\\f65d"; }\n\n* .fa-folder-open:before {\n  content: "\\f07c"; }\n\n* .fa-folder-plus:before {\n  content: "\\f65e"; }\n\n* .fa-font:before {\n  content: "\\f031"; }\n\n* .fa-font-awesome:before {\n  content: "\\f2b4"; }\n\n* .fa-font-awesome-alt:before {\n  content: "\\f35c"; }\n\n* .fa-font-awesome-flag:before {\n  content: "\\f425"; }\n\n* .fa-font-awesome-logo-full:before {\n  content: "\\f4e6"; }\n\n* .fa-fonticons:before {\n  content: "\\f280"; }\n\n* .fa-fonticons-fi:before {\n  content: "\\f3a2"; }\n\n* .fa-football-ball:before {\n  content: "\\f44e"; }\n\n* .fa-fort-awesome:before {\n  content: "\\f286"; }\n\n* .fa-fort-awesome-alt:before {\n  content: "\\f3a3"; }\n\n* .fa-forumbee:before {\n  content: "\\f211"; }\n\n* .fa-forward:before {\n  content: "\\f04e"; }\n\n* .fa-foursquare:before {\n  content: "\\f180"; }\n\n* .fa-free-code-camp:before {\n  content: "\\f2c5"; }\n\n* .fa-freebsd:before {\n  content: "\\f3a4"; }\n\n* .fa-frog:before {\n  content: "\\f52e"; }\n\n* .fa-frown:before {\n  content: "\\f119"; }\n\n* .fa-frown-open:before {\n  content: "\\f57a"; }\n\n* .fa-fulcrum:before {\n  content: "\\f50b"; }\n\n* .fa-funnel-dollar:before {\n  content: "\\f662"; }\n\n* .fa-futbol:before {\n  content: "\\f1e3"; }\n\n* .fa-galactic-republic:before {\n  content: "\\f50c"; }\n\n* .fa-galactic-senate:before {\n  content: "\\f50d"; }\n\n* .fa-gamepad:before {\n  content: "\\f11b"; }\n\n* .fa-gas-pump:before {\n  content: "\\f52f"; }\n\n* .fa-gavel:before {\n  content: "\\f0e3"; }\n\n* .fa-gem:before {\n  content: "\\f3a5"; }\n\n* .fa-genderless:before {\n  content: "\\f22d"; }\n\n* .fa-get-pocket:before {\n  content: "\\f265"; }\n\n* .fa-gg:before {\n  content: "\\f260"; }\n\n* .fa-gg-circle:before {\n  content: "\\f261"; }\n\n* .fa-ghost:before {\n  content: "\\f6e2"; }\n\n* .fa-gift:before {\n  content: "\\f06b"; }\n\n* .fa-gifts:before {\n  content: "\\f79c"; }\n\n* .fa-git:before {\n  content: "\\f1d3"; }\n\n* .fa-git-square:before {\n  content: "\\f1d2"; }\n\n* .fa-github:before {\n  content: "\\f09b"; }\n\n* .fa-github-alt:before {\n  content: "\\f113"; }\n\n* .fa-github-square:before {\n  content: "\\f092"; }\n\n* .fa-gitkraken:before {\n  content: "\\f3a6"; }\n\n* .fa-gitlab:before {\n  content: "\\f296"; }\n\n* .fa-gitter:before {\n  content: "\\f426"; }\n\n* .fa-glass-cheers:before {\n  content: "\\f79f"; }\n\n* .fa-glass-martini:before {\n  content: "\\f000"; }\n\n* .fa-glass-martini-alt:before {\n  content: "\\f57b"; }\n\n* .fa-glass-whiskey:before {\n  content: "\\f7a0"; }\n\n* .fa-glasses:before {\n  content: "\\f530"; }\n\n* .fa-glide:before {\n  content: "\\f2a5"; }\n\n* .fa-glide-g:before {\n  content: "\\f2a6"; }\n\n* .fa-globe:before {\n  content: "\\f0ac"; }\n\n* .fa-globe-africa:before {\n  content: "\\f57c"; }\n\n* .fa-globe-americas:before {\n  content: "\\f57d"; }\n\n* .fa-globe-asia:before {\n  content: "\\f57e"; }\n\n* .fa-globe-europe:before {\n  content: "\\f7a2"; }\n\n* .fa-gofore:before {\n  content: "\\f3a7"; }\n\n* .fa-golf-ball:before {\n  content: "\\f450"; }\n\n* .fa-goodreads:before {\n  content: "\\f3a8"; }\n\n* .fa-goodreads-g:before {\n  content: "\\f3a9"; }\n\n* .fa-google:before {\n  content: "\\f1a0"; }\n\n* .fa-google-drive:before {\n  content: "\\f3aa"; }\n\n* .fa-google-play:before {\n  content: "\\f3ab"; }\n\n* .fa-google-plus:before {\n  content: "\\f2b3"; }\n\n* .fa-google-plus-g:before {\n  content: "\\f0d5"; }\n\n* .fa-google-plus-square:before {\n  content: "\\f0d4"; }\n\n* .fa-google-wallet:before {\n  content: "\\f1ee"; }\n\n* .fa-gopuram:before {\n  content: "\\f664"; }\n\n* .fa-graduation-cap:before {\n  content: "\\f19d"; }\n\n* .fa-gratipay:before {\n  content: "\\f184"; }\n\n* .fa-grav:before {\n  content: "\\f2d6"; }\n\n* .fa-greater-than:before {\n  content: "\\f531"; }\n\n* .fa-greater-than-equal:before {\n  content: "\\f532"; }\n\n* .fa-grimace:before {\n  content: "\\f57f"; }\n\n* .fa-grin:before {\n  content: "\\f580"; }\n\n* .fa-grin-alt:before {\n  content: "\\f581"; }\n\n* .fa-grin-beam:before {\n  content: "\\f582"; }\n\n* .fa-grin-beam-sweat:before {\n  content: "\\f583"; }\n\n* .fa-grin-hearts:before {\n  content: "\\f584"; }\n\n* .fa-grin-squint:before {\n  content: "\\f585"; }\n\n* .fa-grin-squint-tears:before {\n  content: "\\f586"; }\n\n* .fa-grin-stars:before {\n  content: "\\f587"; }\n\n* .fa-grin-tears:before {\n  content: "\\f588"; }\n\n* .fa-grin-tongue:before {\n  content: "\\f589"; }\n\n* .fa-grin-tongue-squint:before {\n  content: "\\f58a"; }\n\n* .fa-grin-tongue-wink:before {\n  content: "\\f58b"; }\n\n* .fa-grin-wink:before {\n  content: "\\f58c"; }\n\n* .fa-grip-horizontal:before {\n  content: "\\f58d"; }\n\n* .fa-grip-lines:before {\n  content: "\\f7a4"; }\n\n* .fa-grip-lines-vertical:before {\n  content: "\\f7a5"; }\n\n* .fa-grip-vertical:before {\n  content: "\\f58e"; }\n\n* .fa-gripfire:before {\n  content: "\\f3ac"; }\n\n* .fa-grunt:before {\n  content: "\\f3ad"; }\n\n* .fa-guitar:before {\n  content: "\\f7a6"; }\n\n* .fa-gulp:before {\n  content: "\\f3ae"; }\n\n* .fa-h-square:before {\n  content: "\\f0fd"; }\n\n* .fa-hacker-news:before {\n  content: "\\f1d4"; }\n\n* .fa-hacker-news-square:before {\n  content: "\\f3af"; }\n\n* .fa-hackerrank:before {\n  content: "\\f5f7"; }\n\n* .fa-hammer:before {\n  content: "\\f6e3"; }\n\n* .fa-hamsa:before {\n  content: "\\f665"; }\n\n* .fa-hand-holding:before {\n  content: "\\f4bd"; }\n\n* .fa-hand-holding-heart:before {\n  content: "\\f4be"; }\n\n* .fa-hand-holding-usd:before {\n  content: "\\f4c0"; }\n\n* .fa-hand-lizard:before {\n  content: "\\f258"; }\n\n* .fa-hand-paper:before {\n  content: "\\f256"; }\n\n* .fa-hand-peace:before {\n  content: "\\f25b"; }\n\n* .fa-hand-point-down:before {\n  content: "\\f0a7"; }\n\n* .fa-hand-point-left:before {\n  content: "\\f0a5"; }\n\n* .fa-hand-point-right:before {\n  content: "\\f0a4"; }\n\n* .fa-hand-point-up:before {\n  content: "\\f0a6"; }\n\n* .fa-hand-pointer:before {\n  content: "\\f25a"; }\n\n* .fa-hand-rock:before {\n  content: "\\f255"; }\n\n* .fa-hand-scissors:before {\n  content: "\\f257"; }\n\n* .fa-hand-spock:before {\n  content: "\\f259"; }\n\n* .fa-hands:before {\n  content: "\\f4c2"; }\n\n* .fa-hands-helping:before {\n  content: "\\f4c4"; }\n\n* .fa-handshake:before {\n  content: "\\f2b5"; }\n\n* .fa-hanukiah:before {\n  content: "\\f6e6"; }\n\n* .fa-hashtag:before {\n  content: "\\f292"; }\n\n* .fa-hat-wizard:before {\n  content: "\\f6e8"; }\n\n* .fa-haykal:before {\n  content: "\\f666"; }\n\n* .fa-hdd:before {\n  content: "\\f0a0"; }\n\n* .fa-heading:before {\n  content: "\\f1dc"; }\n\n* .fa-headphones:before {\n  content: "\\f025"; }\n\n* .fa-headphones-alt:before {\n  content: "\\f58f"; }\n\n* .fa-headset:before {\n  content: "\\f590"; }\n\n* .fa-heart:before {\n  content: "\\f004"; }\n\n* .fa-heart-broken:before {\n  content: "\\f7a9"; }\n\n* .fa-heartbeat:before {\n  content: "\\f21e"; }\n\n* .fa-helicopter:before {\n  content: "\\f533"; }\n\n* .fa-highlighter:before {\n  content: "\\f591"; }\n\n* .fa-hiking:before {\n  content: "\\f6ec"; }\n\n* .fa-hippo:before {\n  content: "\\f6ed"; }\n\n* .fa-hips:before {\n  content: "\\f452"; }\n\n* .fa-hire-a-helper:before {\n  content: "\\f3b0"; }\n\n* .fa-history:before {\n  content: "\\f1da"; }\n\n* .fa-hockey-puck:before {\n  content: "\\f453"; }\n\n* .fa-holly-berry:before {\n  content: "\\f7aa"; }\n\n* .fa-home:before {\n  content: "\\f015"; }\n\n* .fa-hooli:before {\n  content: "\\f427"; }\n\n* .fa-hornbill:before {\n  content: "\\f592"; }\n\n* .fa-horse:before {\n  content: "\\f6f0"; }\n\n* .fa-horse-head:before {\n  content: "\\f7ab"; }\n\n* .fa-hospital:before {\n  content: "\\f0f8"; }\n\n* .fa-hospital-alt:before {\n  content: "\\f47d"; }\n\n* .fa-hospital-symbol:before {\n  content: "\\f47e"; }\n\n* .fa-hot-tub:before {\n  content: "\\f593"; }\n\n* .fa-hotel:before {\n  content: "\\f594"; }\n\n* .fa-hotjar:before {\n  content: "\\f3b1"; }\n\n* .fa-hourglass:before {\n  content: "\\f254"; }\n\n* .fa-hourglass-end:before {\n  content: "\\f253"; }\n\n* .fa-hourglass-half:before {\n  content: "\\f252"; }\n\n* .fa-hourglass-start:before {\n  content: "\\f251"; }\n\n* .fa-house-damage:before {\n  content: "\\f6f1"; }\n\n* .fa-houzz:before {\n  content: "\\f27c"; }\n\n* .fa-hryvnia:before {\n  content: "\\f6f2"; }\n\n* .fa-html5:before {\n  content: "\\f13b"; }\n\n* .fa-hubspot:before {\n  content: "\\f3b2"; }\n\n* .fa-i-cursor:before {\n  content: "\\f246"; }\n\n* .fa-icicles:before {\n  content: "\\f7ad"; }\n\n* .fa-id-badge:before {\n  content: "\\f2c1"; }\n\n* .fa-id-card:before {\n  content: "\\f2c2"; }\n\n* .fa-id-card-alt:before {\n  content: "\\f47f"; }\n\n* .fa-igloo:before {\n  content: "\\f7ae"; }\n\n* .fa-image:before {\n  content: "\\f03e"; }\n\n* .fa-images:before {\n  content: "\\f302"; }\n\n* .fa-imdb:before {\n  content: "\\f2d8"; }\n\n* .fa-inbox:before {\n  content: "\\f01c"; }\n\n* .fa-indent:before {\n  content: "\\f03c"; }\n\n* .fa-industry:before {\n  content: "\\f275"; }\n\n* .fa-infinity:before {\n  content: "\\f534"; }\n\n* .fa-info:before {\n  content: "\\f129"; }\n\n* .fa-info-circle:before {\n  content: "\\f05a"; }\n\n* .fa-instagram:before {\n  content: "\\f16d"; }\n\n* .fa-intercom:before {\n  content: "\\f7af"; }\n\n* .fa-internet-explorer:before {\n  content: "\\f26b"; }\n\n* .fa-invision:before {\n  content: "\\f7b0"; }\n\n* .fa-ioxhost:before {\n  content: "\\f208"; }\n\n* .fa-italic:before {\n  content: "\\f033"; }\n\n* .fa-itunes:before {\n  content: "\\f3b4"; }\n\n* .fa-itunes-note:before {\n  content: "\\f3b5"; }\n\n* .fa-java:before {\n  content: "\\f4e4"; }\n\n* .fa-jedi:before {\n  content: "\\f669"; }\n\n* .fa-jedi-order:before {\n  content: "\\f50e"; }\n\n* .fa-jenkins:before {\n  content: "\\f3b6"; }\n\n* .fa-jira:before {\n  content: "\\f7b1"; }\n\n* .fa-joget:before {\n  content: "\\f3b7"; }\n\n* .fa-joint:before {\n  content: "\\f595"; }\n\n* .fa-joomla:before {\n  content: "\\f1aa"; }\n\n* .fa-journal-whills:before {\n  content: "\\f66a"; }\n\n* .fa-js:before {\n  content: "\\f3b8"; }\n\n* .fa-js-square:before {\n  content: "\\f3b9"; }\n\n* .fa-jsfiddle:before {\n  content: "\\f1cc"; }\n\n* .fa-kaaba:before {\n  content: "\\f66b"; }\n\n* .fa-kaggle:before {\n  content: "\\f5fa"; }\n\n* .fa-key:before {\n  content: "\\f084"; }\n\n* .fa-keybase:before {\n  content: "\\f4f5"; }\n\n* .fa-keyboard:before {\n  content: "\\f11c"; }\n\n* .fa-keycdn:before {\n  content: "\\f3ba"; }\n\n* .fa-khanda:before {\n  content: "\\f66d"; }\n\n* .fa-kickstarter:before {\n  content: "\\f3bb"; }\n\n* .fa-kickstarter-k:before {\n  content: "\\f3bc"; }\n\n* .fa-kiss:before {\n  content: "\\f596"; }\n\n* .fa-kiss-beam:before {\n  content: "\\f597"; }\n\n* .fa-kiss-wink-heart:before {\n  content: "\\f598"; }\n\n* .fa-kiwi-bird:before {\n  content: "\\f535"; }\n\n* .fa-korvue:before {\n  content: "\\f42f"; }\n\n* .fa-landmark:before {\n  content: "\\f66f"; }\n\n* .fa-language:before {\n  content: "\\f1ab"; }\n\n* .fa-laptop:before {\n  content: "\\f109"; }\n\n* .fa-laptop-code:before {\n  content: "\\f5fc"; }\n\n* .fa-laravel:before {\n  content: "\\f3bd"; }\n\n* .fa-lastfm:before {\n  content: "\\f202"; }\n\n* .fa-lastfm-square:before {\n  content: "\\f203"; }\n\n* .fa-laugh:before {\n  content: "\\f599"; }\n\n* .fa-laugh-beam:before {\n  content: "\\f59a"; }\n\n* .fa-laugh-squint:before {\n  content: "\\f59b"; }\n\n* .fa-laugh-wink:before {\n  content: "\\f59c"; }\n\n* .fa-layer-group:before {\n  content: "\\f5fd"; }\n\n* .fa-leaf:before {\n  content: "\\f06c"; }\n\n* .fa-leanpub:before {\n  content: "\\f212"; }\n\n* .fa-lemon:before {\n  content: "\\f094"; }\n\n* .fa-less:before {\n  content: "\\f41d"; }\n\n* .fa-less-than:before {\n  content: "\\f536"; }\n\n* .fa-less-than-equal:before {\n  content: "\\f537"; }\n\n* .fa-level-down-alt:before {\n  content: "\\f3be"; }\n\n* .fa-level-up-alt:before {\n  content: "\\f3bf"; }\n\n* .fa-life-ring:before {\n  content: "\\f1cd"; }\n\n* .fa-lightbulb:before {\n  content: "\\f0eb"; }\n\n* .fa-line:before {\n  content: "\\f3c0"; }\n\n* .fa-link:before {\n  content: "\\f0c1"; }\n\n* .fa-linkedin:before {\n  content: "\\f08c"; }\n\n* .fa-linkedin-in:before {\n  content: "\\f0e1"; }\n\n* .fa-linode:before {\n  content: "\\f2b8"; }\n\n* .fa-linux:before {\n  content: "\\f17c"; }\n\n* .fa-lira-sign:before {\n  content: "\\f195"; }\n\n* .fa-list:before {\n  content: "\\f03a"; }\n\n* .fa-list-alt:before {\n  content: "\\f022"; }\n\n* .fa-list-ol:before {\n  content: "\\f0cb"; }\n\n* .fa-list-ul:before {\n  content: "\\f0ca"; }\n\n* .fa-location-arrow:before {\n  content: "\\f124"; }\n\n* .fa-lock:before {\n  content: "\\f023"; }\n\n* .fa-lock-open:before {\n  content: "\\f3c1"; }\n\n* .fa-long-arrow-alt-down:before {\n  content: "\\f309"; }\n\n* .fa-long-arrow-alt-left:before {\n  content: "\\f30a"; }\n\n* .fa-long-arrow-alt-right:before {\n  content: "\\f30b"; }\n\n* .fa-long-arrow-alt-up:before {\n  content: "\\f30c"; }\n\n* .fa-low-vision:before {\n  content: "\\f2a8"; }\n\n* .fa-luggage-cart:before {\n  content: "\\f59d"; }\n\n* .fa-lyft:before {\n  content: "\\f3c3"; }\n\n* .fa-magento:before {\n  content: "\\f3c4"; }\n\n* .fa-magic:before {\n  content: "\\f0d0"; }\n\n* .fa-magnet:before {\n  content: "\\f076"; }\n\n* .fa-mail-bulk:before {\n  content: "\\f674"; }\n\n* .fa-mailchimp:before {\n  content: "\\f59e"; }\n\n* .fa-male:before {\n  content: "\\f183"; }\n\n* .fa-mandalorian:before {\n  content: "\\f50f"; }\n\n* .fa-map:before {\n  content: "\\f279"; }\n\n* .fa-map-marked:before {\n  content: "\\f59f"; }\n\n* .fa-map-marked-alt:before {\n  content: "\\f5a0"; }\n\n* .fa-map-marker:before {\n  content: "\\f041"; }\n\n* .fa-map-marker-alt:before {\n  content: "\\f3c5"; }\n\n* .fa-map-pin:before {\n  content: "\\f276"; }\n\n* .fa-map-signs:before {\n  content: "\\f277"; }\n\n* .fa-markdown:before {\n  content: "\\f60f"; }\n\n* .fa-marker:before {\n  content: "\\f5a1"; }\n\n* .fa-mars:before {\n  content: "\\f222"; }\n\n* .fa-mars-double:before {\n  content: "\\f227"; }\n\n* .fa-mars-stroke:before {\n  content: "\\f229"; }\n\n* .fa-mars-stroke-h:before {\n  content: "\\f22b"; }\n\n* .fa-mars-stroke-v:before {\n  content: "\\f22a"; }\n\n* .fa-mask:before {\n  content: "\\f6fa"; }\n\n* .fa-mastodon:before {\n  content: "\\f4f6"; }\n\n* .fa-maxcdn:before {\n  content: "\\f136"; }\n\n* .fa-medal:before {\n  content: "\\f5a2"; }\n\n* .fa-medapps:before {\n  content: "\\f3c6"; }\n\n* .fa-medium:before {\n  content: "\\f23a"; }\n\n* .fa-medium-m:before {\n  content: "\\f3c7"; }\n\n* .fa-medkit:before {\n  content: "\\f0fa"; }\n\n* .fa-medrt:before {\n  content: "\\f3c8"; }\n\n* .fa-meetup:before {\n  content: "\\f2e0"; }\n\n* .fa-megaport:before {\n  content: "\\f5a3"; }\n\n* .fa-meh:before {\n  content: "\\f11a"; }\n\n* .fa-meh-blank:before {\n  content: "\\f5a4"; }\n\n* .fa-meh-rolling-eyes:before {\n  content: "\\f5a5"; }\n\n* .fa-memory:before {\n  content: "\\f538"; }\n\n* .fa-mendeley:before {\n  content: "\\f7b3"; }\n\n* .fa-menorah:before {\n  content: "\\f676"; }\n\n* .fa-mercury:before {\n  content: "\\f223"; }\n\n* .fa-meteor:before {\n  content: "\\f753"; }\n\n* .fa-microchip:before {\n  content: "\\f2db"; }\n\n* .fa-microphone:before {\n  content: "\\f130"; }\n\n* .fa-microphone-alt:before {\n  content: "\\f3c9"; }\n\n* .fa-microphone-alt-slash:before {\n  content: "\\f539"; }\n\n* .fa-microphone-slash:before {\n  content: "\\f131"; }\n\n* .fa-microscope:before {\n  content: "\\f610"; }\n\n* .fa-microsoft:before {\n  content: "\\f3ca"; }\n\n* .fa-minus:before {\n  content: "\\f068"; }\n\n* .fa-minus-circle:before {\n  content: "\\f056"; }\n\n* .fa-minus-square:before {\n  content: "\\f146"; }\n\n* .fa-mitten:before {\n  content: "\\f7b5"; }\n\n* .fa-mix:before {\n  content: "\\f3cb"; }\n\n* .fa-mixcloud:before {\n  content: "\\f289"; }\n\n* .fa-mizuni:before {\n  content: "\\f3cc"; }\n\n* .fa-mobile:before {\n  content: "\\f10b"; }\n\n* .fa-mobile-alt:before {\n  content: "\\f3cd"; }\n\n* .fa-modx:before {\n  content: "\\f285"; }\n\n* .fa-monero:before {\n  content: "\\f3d0"; }\n\n* .fa-money-bill:before {\n  content: "\\f0d6"; }\n\n* .fa-money-bill-alt:before {\n  content: "\\f3d1"; }\n\n* .fa-money-bill-wave:before {\n  content: "\\f53a"; }\n\n* .fa-money-bill-wave-alt:before {\n  content: "\\f53b"; }\n\n* .fa-money-check:before {\n  content: "\\f53c"; }\n\n* .fa-money-check-alt:before {\n  content: "\\f53d"; }\n\n* .fa-monument:before {\n  content: "\\f5a6"; }\n\n* .fa-moon:before {\n  content: "\\f186"; }\n\n* .fa-mortar-pestle:before {\n  content: "\\f5a7"; }\n\n* .fa-mosque:before {\n  content: "\\f678"; }\n\n* .fa-motorcycle:before {\n  content: "\\f21c"; }\n\n* .fa-mountain:before {\n  content: "\\f6fc"; }\n\n* .fa-mouse-pointer:before {\n  content: "\\f245"; }\n\n* .fa-mug-hot:before {\n  content: "\\f7b6"; }\n\n* .fa-music:before {\n  content: "\\f001"; }\n\n* .fa-napster:before {\n  content: "\\f3d2"; }\n\n* .fa-neos:before {\n  content: "\\f612"; }\n\n* .fa-network-wired:before {\n  content: "\\f6ff"; }\n\n* .fa-neuter:before {\n  content: "\\f22c"; }\n\n* .fa-newspaper:before {\n  content: "\\f1ea"; }\n\n* .fa-nimblr:before {\n  content: "\\f5a8"; }\n\n* .fa-nintendo-switch:before {\n  content: "\\f418"; }\n\n* .fa-node:before {\n  content: "\\f419"; }\n\n* .fa-node-js:before {\n  content: "\\f3d3"; }\n\n* .fa-not-equal:before {\n  content: "\\f53e"; }\n\n* .fa-notes-medical:before {\n  content: "\\f481"; }\n\n* .fa-npm:before {\n  content: "\\f3d4"; }\n\n* .fa-ns8:before {\n  content: "\\f3d5"; }\n\n* .fa-nutritionix:before {\n  content: "\\f3d6"; }\n\n* .fa-object-group:before {\n  content: "\\f247"; }\n\n* .fa-object-ungroup:before {\n  content: "\\f248"; }\n\n* .fa-odnoklassniki:before {\n  content: "\\f263"; }\n\n* .fa-odnoklassniki-square:before {\n  content: "\\f264"; }\n\n* .fa-oil-can:before {\n  content: "\\f613"; }\n\n* .fa-old-republic:before {\n  content: "\\f510"; }\n\n* .fa-om:before {\n  content: "\\f679"; }\n\n* .fa-opencart:before {\n  content: "\\f23d"; }\n\n* .fa-openid:before {\n  content: "\\f19b"; }\n\n* .fa-opera:before {\n  content: "\\f26a"; }\n\n* .fa-optin-monster:before {\n  content: "\\f23c"; }\n\n* .fa-osi:before {\n  content: "\\f41a"; }\n\n* .fa-otter:before {\n  content: "\\f700"; }\n\n* .fa-outdent:before {\n  content: "\\f03b"; }\n\n* .fa-page4:before {\n  content: "\\f3d7"; }\n\n* .fa-pagelines:before {\n  content: "\\f18c"; }\n\n* .fa-paint-brush:before {\n  content: "\\f1fc"; }\n\n* .fa-paint-roller:before {\n  content: "\\f5aa"; }\n\n* .fa-palette:before {\n  content: "\\f53f"; }\n\n* .fa-palfed:before {\n  content: "\\f3d8"; }\n\n* .fa-pallet:before {\n  content: "\\f482"; }\n\n* .fa-paper-plane:before {\n  content: "\\f1d8"; }\n\n* .fa-paperclip:before {\n  content: "\\f0c6"; }\n\n* .fa-parachute-box:before {\n  content: "\\f4cd"; }\n\n* .fa-paragraph:before {\n  content: "\\f1dd"; }\n\n* .fa-parking:before {\n  content: "\\f540"; }\n\n* .fa-passport:before {\n  content: "\\f5ab"; }\n\n* .fa-pastafarianism:before {\n  content: "\\f67b"; }\n\n* .fa-paste:before {\n  content: "\\f0ea"; }\n\n* .fa-patreon:before {\n  content: "\\f3d9"; }\n\n* .fa-pause:before {\n  content: "\\f04c"; }\n\n* .fa-pause-circle:before {\n  content: "\\f28b"; }\n\n* .fa-paw:before {\n  content: "\\f1b0"; }\n\n* .fa-paypal:before {\n  content: "\\f1ed"; }\n\n* .fa-peace:before {\n  content: "\\f67c"; }\n\n* .fa-pen:before {\n  content: "\\f304"; }\n\n* .fa-pen-alt:before {\n  content: "\\f305"; }\n\n* .fa-pen-fancy:before {\n  content: "\\f5ac"; }\n\n* .fa-pen-nib:before {\n  content: "\\f5ad"; }\n\n* .fa-pen-square:before {\n  content: "\\f14b"; }\n\n* .fa-pencil-alt:before {\n  content: "\\f303"; }\n\n* .fa-pencil-ruler:before {\n  content: "\\f5ae"; }\n\n* .fa-penny-arcade:before {\n  content: "\\f704"; }\n\n* .fa-people-carry:before {\n  content: "\\f4ce"; }\n\n* .fa-percent:before {\n  content: "\\f295"; }\n\n* .fa-percentage:before {\n  content: "\\f541"; }\n\n* .fa-periscope:before {\n  content: "\\f3da"; }\n\n* .fa-person-booth:before {\n  content: "\\f756"; }\n\n* .fa-phabricator:before {\n  content: "\\f3db"; }\n\n* .fa-phoenix-framework:before {\n  content: "\\f3dc"; }\n\n* .fa-phoenix-squadron:before {\n  content: "\\f511"; }\n\n* .fa-phone:before {\n  content: "\\f095"; }\n\n* .fa-phone-slash:before {\n  content: "\\f3dd"; }\n\n* .fa-phone-square:before {\n  content: "\\f098"; }\n\n* .fa-phone-volume:before {\n  content: "\\f2a0"; }\n\n* .fa-php:before {\n  content: "\\f457"; }\n\n* .fa-pied-piper:before {\n  content: "\\f2ae"; }\n\n* .fa-pied-piper-alt:before {\n  content: "\\f1a8"; }\n\n* .fa-pied-piper-hat:before {\n  content: "\\f4e5"; }\n\n* .fa-pied-piper-pp:before {\n  content: "\\f1a7"; }\n\n* .fa-piggy-bank:before {\n  content: "\\f4d3"; }\n\n* .fa-pills:before {\n  content: "\\f484"; }\n\n* .fa-pinterest:before {\n  content: "\\f0d2"; }\n\n* .fa-pinterest-p:before {\n  content: "\\f231"; }\n\n* .fa-pinterest-square:before {\n  content: "\\f0d3"; }\n\n* .fa-place-of-worship:before {\n  content: "\\f67f"; }\n\n* .fa-plane:before {\n  content: "\\f072"; }\n\n* .fa-plane-arrival:before {\n  content: "\\f5af"; }\n\n* .fa-plane-departure:before {\n  content: "\\f5b0"; }\n\n* .fa-play:before {\n  content: "\\f04b"; }\n\n* .fa-play-circle:before {\n  content: "\\f144"; }\n\n* .fa-playstation:before {\n  content: "\\f3df"; }\n\n* .fa-plug:before {\n  content: "\\f1e6"; }\n\n* .fa-plus:before {\n  content: "\\f067"; }\n\n* .fa-plus-circle:before {\n  content: "\\f055"; }\n\n* .fa-plus-square:before {\n  content: "\\f0fe"; }\n\n* .fa-podcast:before {\n  content: "\\f2ce"; }\n\n* .fa-poll:before {\n  content: "\\f681"; }\n\n* .fa-poll-h:before {\n  content: "\\f682"; }\n\n* .fa-poo:before {\n  content: "\\f2fe"; }\n\n* .fa-poo-storm:before {\n  content: "\\f75a"; }\n\n* .fa-poop:before {\n  content: "\\f619"; }\n\n* .fa-portrait:before {\n  content: "\\f3e0"; }\n\n* .fa-pound-sign:before {\n  content: "\\f154"; }\n\n* .fa-power-off:before {\n  content: "\\f011"; }\n\n* .fa-pray:before {\n  content: "\\f683"; }\n\n* .fa-praying-hands:before {\n  content: "\\f684"; }\n\n* .fa-prescription:before {\n  content: "\\f5b1"; }\n\n* .fa-prescription-bottle:before {\n  content: "\\f485"; }\n\n* .fa-prescription-bottle-alt:before {\n  content: "\\f486"; }\n\n* .fa-print:before {\n  content: "\\f02f"; }\n\n* .fa-procedures:before {\n  content: "\\f487"; }\n\n* .fa-product-hunt:before {\n  content: "\\f288"; }\n\n* .fa-project-diagram:before {\n  content: "\\f542"; }\n\n* .fa-pushed:before {\n  content: "\\f3e1"; }\n\n* .fa-puzzle-piece:before {\n  content: "\\f12e"; }\n\n* .fa-python:before {\n  content: "\\f3e2"; }\n\n* .fa-qq:before {\n  content: "\\f1d6"; }\n\n* .fa-qrcode:before {\n  content: "\\f029"; }\n\n* .fa-question:before {\n  content: "\\f128"; }\n\n* .fa-question-circle:before {\n  content: "\\f059"; }\n\n* .fa-quidditch:before {\n  content: "\\f458"; }\n\n* .fa-quinscape:before {\n  content: "\\f459"; }\n\n* .fa-quora:before {\n  content: "\\f2c4"; }\n\n* .fa-quote-left:before {\n  content: "\\f10d"; }\n\n* .fa-quote-right:before {\n  content: "\\f10e"; }\n\n* .fa-quran:before {\n  content: "\\f687"; }\n\n* .fa-r-project:before {\n  content: "\\f4f7"; }\n\n* .fa-radiation:before {\n  content: "\\f7b9"; }\n\n* .fa-radiation-alt:before {\n  content: "\\f7ba"; }\n\n* .fa-rainbow:before {\n  content: "\\f75b"; }\n\n* .fa-random:before {\n  content: "\\f074"; }\n\n* .fa-raspberry-pi:before {\n  content: "\\f7bb"; }\n\n* .fa-ravelry:before {\n  content: "\\f2d9"; }\n\n* .fa-react:before {\n  content: "\\f41b"; }\n\n* .fa-reacteurope:before {\n  content: "\\f75d"; }\n\n* .fa-readme:before {\n  content: "\\f4d5"; }\n\n* .fa-rebel:before {\n  content: "\\f1d0"; }\n\n* .fa-receipt:before {\n  content: "\\f543"; }\n\n* .fa-recycle:before {\n  content: "\\f1b8"; }\n\n* .fa-red-river:before {\n  content: "\\f3e3"; }\n\n* .fa-reddit:before {\n  content: "\\f1a1"; }\n\n* .fa-reddit-alien:before {\n  content: "\\f281"; }\n\n* .fa-reddit-square:before {\n  content: "\\f1a2"; }\n\n* .fa-redhat:before {\n  content: "\\f7bc"; }\n\n* .fa-redo:before {\n  content: "\\f01e"; }\n\n* .fa-redo-alt:before {\n  content: "\\f2f9"; }\n\n* .fa-registered:before {\n  content: "\\f25d"; }\n\n* .fa-renren:before {\n  content: "\\f18b"; }\n\n* .fa-reply:before {\n  content: "\\f3e5"; }\n\n* .fa-reply-all:before {\n  content: "\\f122"; }\n\n* .fa-replyd:before {\n  content: "\\f3e6"; }\n\n* .fa-republican:before {\n  content: "\\f75e"; }\n\n* .fa-researchgate:before {\n  content: "\\f4f8"; }\n\n* .fa-resolving:before {\n  content: "\\f3e7"; }\n\n* .fa-restroom:before {\n  content: "\\f7bd"; }\n\n* .fa-retweet:before {\n  content: "\\f079"; }\n\n* .fa-rev:before {\n  content: "\\f5b2"; }\n\n* .fa-ribbon:before {\n  content: "\\f4d6"; }\n\n* .fa-ring:before {\n  content: "\\f70b"; }\n\n* .fa-road:before {\n  content: "\\f018"; }\n\n* .fa-robot:before {\n  content: "\\f544"; }\n\n* .fa-rocket:before {\n  content: "\\f135"; }\n\n* .fa-rocketchat:before {\n  content: "\\f3e8"; }\n\n* .fa-rockrms:before {\n  content: "\\f3e9"; }\n\n* .fa-route:before {\n  content: "\\f4d7"; }\n\n* .fa-rss:before {\n  content: "\\f09e"; }\n\n* .fa-rss-square:before {\n  content: "\\f143"; }\n\n* .fa-ruble-sign:before {\n  content: "\\f158"; }\n\n* .fa-ruler:before {\n  content: "\\f545"; }\n\n* .fa-ruler-combined:before {\n  content: "\\f546"; }\n\n* .fa-ruler-horizontal:before {\n  content: "\\f547"; }\n\n* .fa-ruler-vertical:before {\n  content: "\\f548"; }\n\n* .fa-running:before {\n  content: "\\f70c"; }\n\n* .fa-rupee-sign:before {\n  content: "\\f156"; }\n\n* .fa-sad-cry:before {\n  content: "\\f5b3"; }\n\n* .fa-sad-tear:before {\n  content: "\\f5b4"; }\n\n* .fa-safari:before {\n  content: "\\f267"; }\n\n* .fa-sass:before {\n  content: "\\f41e"; }\n\n* .fa-satellite:before {\n  content: "\\f7bf"; }\n\n* .fa-satellite-dish:before {\n  content: "\\f7c0"; }\n\n* .fa-save:before {\n  content: "\\f0c7"; }\n\n* .fa-schlix:before {\n  content: "\\f3ea"; }\n\n* .fa-school:before {\n  content: "\\f549"; }\n\n* .fa-screwdriver:before {\n  content: "\\f54a"; }\n\n* .fa-scribd:before {\n  content: "\\f28a"; }\n\n* .fa-scroll:before {\n  content: "\\f70e"; }\n\n* .fa-sd-card:before {\n  content: "\\f7c2"; }\n\n* .fa-search:before {\n  content: "\\f002"; }\n\n* .fa-search-dollar:before {\n  content: "\\f688"; }\n\n* .fa-search-location:before {\n  content: "\\f689"; }\n\n* .fa-search-minus:before {\n  content: "\\f010"; }\n\n* .fa-search-plus:before {\n  content: "\\f00e"; }\n\n* .fa-searchengin:before {\n  content: "\\f3eb"; }\n\n* .fa-seedling:before {\n  content: "\\f4d8"; }\n\n* .fa-sellcast:before {\n  content: "\\f2da"; }\n\n* .fa-sellsy:before {\n  content: "\\f213"; }\n\n* .fa-server:before {\n  content: "\\f233"; }\n\n* .fa-servicestack:before {\n  content: "\\f3ec"; }\n\n* .fa-shapes:before {\n  content: "\\f61f"; }\n\n* .fa-share:before {\n  content: "\\f064"; }\n\n* .fa-share-alt:before {\n  content: "\\f1e0"; }\n\n* .fa-share-alt-square:before {\n  content: "\\f1e1"; }\n\n* .fa-share-square:before {\n  content: "\\f14d"; }\n\n* .fa-shekel-sign:before {\n  content: "\\f20b"; }\n\n* .fa-shield-alt:before {\n  content: "\\f3ed"; }\n\n* .fa-ship:before {\n  content: "\\f21a"; }\n\n* .fa-shipping-fast:before {\n  content: "\\f48b"; }\n\n* .fa-shirtsinbulk:before {\n  content: "\\f214"; }\n\n* .fa-shoe-prints:before {\n  content: "\\f54b"; }\n\n* .fa-shopping-bag:before {\n  content: "\\f290"; }\n\n* .fa-shopping-basket:before {\n  content: "\\f291"; }\n\n* .fa-shopping-cart:before {\n  content: "\\f07a"; }\n\n* .fa-shopware:before {\n  content: "\\f5b5"; }\n\n* .fa-shower:before {\n  content: "\\f2cc"; }\n\n* .fa-shuttle-van:before {\n  content: "\\f5b6"; }\n\n* .fa-sign:before {\n  content: "\\f4d9"; }\n\n* .fa-sign-in-alt:before {\n  content: "\\f2f6"; }\n\n* .fa-sign-language:before {\n  content: "\\f2a7"; }\n\n* .fa-sign-out-alt:before {\n  content: "\\f2f5"; }\n\n* .fa-signal:before {\n  content: "\\f012"; }\n\n* .fa-signature:before {\n  content: "\\f5b7"; }\n\n* .fa-sim-card:before {\n  content: "\\f7c4"; }\n\n* .fa-simplybuilt:before {\n  content: "\\f215"; }\n\n* .fa-sistrix:before {\n  content: "\\f3ee"; }\n\n* .fa-sitemap:before {\n  content: "\\f0e8"; }\n\n* .fa-sith:before {\n  content: "\\f512"; }\n\n* .fa-skating:before {\n  content: "\\f7c5"; }\n\n* .fa-sketch:before {\n  content: "\\f7c6"; }\n\n* .fa-skiing:before {\n  content: "\\f7c9"; }\n\n* .fa-skiing-nordic:before {\n  content: "\\f7ca"; }\n\n* .fa-skull:before {\n  content: "\\f54c"; }\n\n* .fa-skull-crossbones:before {\n  content: "\\f714"; }\n\n* .fa-skyatlas:before {\n  content: "\\f216"; }\n\n* .fa-skype:before {\n  content: "\\f17e"; }\n\n* .fa-slack:before {\n  content: "\\f198"; }\n\n* .fa-slack-hash:before {\n  content: "\\f3ef"; }\n\n* .fa-slash:before {\n  content: "\\f715"; }\n\n* .fa-sleigh:before {\n  content: "\\f7cc"; }\n\n* .fa-sliders-h:before {\n  content: "\\f1de"; }\n\n* .fa-slideshare:before {\n  content: "\\f1e7"; }\n\n* .fa-smile:before {\n  content: "\\f118"; }\n\n* .fa-smile-beam:before {\n  content: "\\f5b8"; }\n\n* .fa-smile-wink:before {\n  content: "\\f4da"; }\n\n* .fa-smog:before {\n  content: "\\f75f"; }\n\n* .fa-smoking:before {\n  content: "\\f48d"; }\n\n* .fa-smoking-ban:before {\n  content: "\\f54d"; }\n\n* .fa-sms:before {\n  content: "\\f7cd"; }\n\n* .fa-snapchat:before {\n  content: "\\f2ab"; }\n\n* .fa-snapchat-ghost:before {\n  content: "\\f2ac"; }\n\n* .fa-snapchat-square:before {\n  content: "\\f2ad"; }\n\n* .fa-snowboarding:before {\n  content: "\\f7ce"; }\n\n* .fa-snowflake:before {\n  content: "\\f2dc"; }\n\n* .fa-snowman:before {\n  content: "\\f7d0"; }\n\n* .fa-snowplow:before {\n  content: "\\f7d2"; }\n\n* .fa-socks:before {\n  content: "\\f696"; }\n\n* .fa-solar-panel:before {\n  content: "\\f5ba"; }\n\n* .fa-sort:before {\n  content: "\\f0dc"; }\n\n* .fa-sort-alpha-down:before {\n  content: "\\f15d"; }\n\n* .fa-sort-alpha-up:before {\n  content: "\\f15e"; }\n\n* .fa-sort-amount-down:before {\n  content: "\\f160"; }\n\n* .fa-sort-amount-up:before {\n  content: "\\f161"; }\n\n* .fa-sort-down:before {\n  content: "\\f0dd"; }\n\n* .fa-sort-numeric-down:before {\n  content: "\\f162"; }\n\n* .fa-sort-numeric-up:before {\n  content: "\\f163"; }\n\n* .fa-sort-up:before {\n  content: "\\f0de"; }\n\n* .fa-soundcloud:before {\n  content: "\\f1be"; }\n\n* .fa-sourcetree:before {\n  content: "\\f7d3"; }\n\n* .fa-spa:before {\n  content: "\\f5bb"; }\n\n* .fa-space-shuttle:before {\n  content: "\\f197"; }\n\n* .fa-speakap:before {\n  content: "\\f3f3"; }\n\n* .fa-spider:before {\n  content: "\\f717"; }\n\n* .fa-spinner:before {\n  content: "\\f110"; }\n\n* .fa-splotch:before {\n  content: "\\f5bc"; }\n\n* .fa-spotify:before {\n  content: "\\f1bc"; }\n\n* .fa-spray-can:before {\n  content: "\\f5bd"; }\n\n* .fa-square:before {\n  content: "\\f0c8"; }\n\n* .fa-square-full:before {\n  content: "\\f45c"; }\n\n* .fa-square-root-alt:before {\n  content: "\\f698"; }\n\n* .fa-squarespace:before {\n  content: "\\f5be"; }\n\n* .fa-stack-exchange:before {\n  content: "\\f18d"; }\n\n* .fa-stack-overflow:before {\n  content: "\\f16c"; }\n\n* .fa-stamp:before {\n  content: "\\f5bf"; }\n\n* .fa-star:before {\n  content: "\\f005"; }\n\n* .fa-star-and-crescent:before {\n  content: "\\f699"; }\n\n* .fa-star-half:before {\n  content: "\\f089"; }\n\n* .fa-star-half-alt:before {\n  content: "\\f5c0"; }\n\n* .fa-star-of-david:before {\n  content: "\\f69a"; }\n\n* .fa-star-of-life:before {\n  content: "\\f621"; }\n\n* .fa-staylinked:before {\n  content: "\\f3f5"; }\n\n* .fa-steam:before {\n  content: "\\f1b6"; }\n\n* .fa-steam-square:before {\n  content: "\\f1b7"; }\n\n* .fa-steam-symbol:before {\n  content: "\\f3f6"; }\n\n* .fa-step-backward:before {\n  content: "\\f048"; }\n\n* .fa-step-forward:before {\n  content: "\\f051"; }\n\n* .fa-stethoscope:before {\n  content: "\\f0f1"; }\n\n* .fa-sticker-mule:before {\n  content: "\\f3f7"; }\n\n* .fa-sticky-note:before {\n  content: "\\f249"; }\n\n* .fa-stop:before {\n  content: "\\f04d"; }\n\n* .fa-stop-circle:before {\n  content: "\\f28d"; }\n\n* .fa-stopwatch:before {\n  content: "\\f2f2"; }\n\n* .fa-store:before {\n  content: "\\f54e"; }\n\n* .fa-store-alt:before {\n  content: "\\f54f"; }\n\n* .fa-strava:before {\n  content: "\\f428"; }\n\n* .fa-stream:before {\n  content: "\\f550"; }\n\n* .fa-street-view:before {\n  content: "\\f21d"; }\n\n* .fa-strikethrough:before {\n  content: "\\f0cc"; }\n\n* .fa-stripe:before {\n  content: "\\f429"; }\n\n* .fa-stripe-s:before {\n  content: "\\f42a"; }\n\n* .fa-stroopwafel:before {\n  content: "\\f551"; }\n\n* .fa-studiovinari:before {\n  content: "\\f3f8"; }\n\n* .fa-stumbleupon:before {\n  content: "\\f1a4"; }\n\n* .fa-stumbleupon-circle:before {\n  content: "\\f1a3"; }\n\n* .fa-subscript:before {\n  content: "\\f12c"; }\n\n* .fa-subway:before {\n  content: "\\f239"; }\n\n* .fa-suitcase:before {\n  content: "\\f0f2"; }\n\n* .fa-suitcase-rolling:before {\n  content: "\\f5c1"; }\n\n* .fa-sun:before {\n  content: "\\f185"; }\n\n* .fa-superpowers:before {\n  content: "\\f2dd"; }\n\n* .fa-superscript:before {\n  content: "\\f12b"; }\n\n* .fa-supple:before {\n  content: "\\f3f9"; }\n\n* .fa-surprise:before {\n  content: "\\f5c2"; }\n\n* .fa-suse:before {\n  content: "\\f7d6"; }\n\n* .fa-swatchbook:before {\n  content: "\\f5c3"; }\n\n* .fa-swimmer:before {\n  content: "\\f5c4"; }\n\n* .fa-swimming-pool:before {\n  content: "\\f5c5"; }\n\n* .fa-synagogue:before {\n  content: "\\f69b"; }\n\n* .fa-sync:before {\n  content: "\\f021"; }\n\n* .fa-sync-alt:before {\n  content: "\\f2f1"; }\n\n* .fa-syringe:before {\n  content: "\\f48e"; }\n\n* .fa-table:before {\n  content: "\\f0ce"; }\n\n* .fa-table-tennis:before {\n  content: "\\f45d"; }\n\n* .fa-tablet:before {\n  content: "\\f10a"; }\n\n* .fa-tablet-alt:before {\n  content: "\\f3fa"; }\n\n* .fa-tablets:before {\n  content: "\\f490"; }\n\n* .fa-tachometer-alt:before {\n  content: "\\f3fd"; }\n\n* .fa-tag:before {\n  content: "\\f02b"; }\n\n* .fa-tags:before {\n  content: "\\f02c"; }\n\n* .fa-tape:before {\n  content: "\\f4db"; }\n\n* .fa-tasks:before {\n  content: "\\f0ae"; }\n\n* .fa-taxi:before {\n  content: "\\f1ba"; }\n\n* .fa-teamspeak:before {\n  content: "\\f4f9"; }\n\n* .fa-teeth:before {\n  content: "\\f62e"; }\n\n* .fa-teeth-open:before {\n  content: "\\f62f"; }\n\n* .fa-telegram:before {\n  content: "\\f2c6"; }\n\n* .fa-telegram-plane:before {\n  content: "\\f3fe"; }\n\n* .fa-temperature-high:before {\n  content: "\\f769"; }\n\n* .fa-temperature-low:before {\n  content: "\\f76b"; }\n\n* .fa-tencent-weibo:before {\n  content: "\\f1d5"; }\n\n* .fa-tenge:before {\n  content: "\\f7d7"; }\n\n* .fa-terminal:before {\n  content: "\\f120"; }\n\n* .fa-text-height:before {\n  content: "\\f034"; }\n\n* .fa-text-width:before {\n  content: "\\f035"; }\n\n* .fa-th:before {\n  content: "\\f00a"; }\n\n* .fa-th-large:before {\n  content: "\\f009"; }\n\n* .fa-th-list:before {\n  content: "\\f00b"; }\n\n* .fa-the-red-yeti:before {\n  content: "\\f69d"; }\n\n* .fa-theater-masks:before {\n  content: "\\f630"; }\n\n* .fa-themeco:before {\n  content: "\\f5c6"; }\n\n* .fa-themeisle:before {\n  content: "\\f2b2"; }\n\n* .fa-thermometer:before {\n  content: "\\f491"; }\n\n* .fa-thermometer-empty:before {\n  content: "\\f2cb"; }\n\n* .fa-thermometer-full:before {\n  content: "\\f2c7"; }\n\n* .fa-thermometer-half:before {\n  content: "\\f2c9"; }\n\n* .fa-thermometer-quarter:before {\n  content: "\\f2ca"; }\n\n* .fa-thermometer-three-quarters:before {\n  content: "\\f2c8"; }\n\n* .fa-think-peaks:before {\n  content: "\\f731"; }\n\n* .fa-thumbs-down:before {\n  content: "\\f165"; }\n\n* .fa-thumbs-up:before {\n  content: "\\f164"; }\n\n* .fa-thumbtack:before {\n  content: "\\f08d"; }\n\n* .fa-ticket-alt:before {\n  content: "\\f3ff"; }\n\n* .fa-times:before {\n  content: "\\f00d"; }\n\n* .fa-times-circle:before {\n  content: "\\f057"; }\n\n* .fa-tint:before {\n  content: "\\f043"; }\n\n* .fa-tint-slash:before {\n  content: "\\f5c7"; }\n\n* .fa-tired:before {\n  content: "\\f5c8"; }\n\n* .fa-toggle-off:before {\n  content: "\\f204"; }\n\n* .fa-toggle-on:before {\n  content: "\\f205"; }\n\n* .fa-toilet:before {\n  content: "\\f7d8"; }\n\n* .fa-toilet-paper:before {\n  content: "\\f71e"; }\n\n* .fa-toolbox:before {\n  content: "\\f552"; }\n\n* .fa-tools:before {\n  content: "\\f7d9"; }\n\n* .fa-tooth:before {\n  content: "\\f5c9"; }\n\n* .fa-torah:before {\n  content: "\\f6a0"; }\n\n* .fa-torii-gate:before {\n  content: "\\f6a1"; }\n\n* .fa-tractor:before {\n  content: "\\f722"; }\n\n* .fa-trade-federation:before {\n  content: "\\f513"; }\n\n* .fa-trademark:before {\n  content: "\\f25c"; }\n\n* .fa-traffic-light:before {\n  content: "\\f637"; }\n\n* .fa-train:before {\n  content: "\\f238"; }\n\n* .fa-tram:before {\n  content: "\\f7da"; }\n\n* .fa-transgender:before {\n  content: "\\f224"; }\n\n* .fa-transgender-alt:before {\n  content: "\\f225"; }\n\n* .fa-trash:before {\n  content: "\\f1f8"; }\n\n* .fa-trash-alt:before {\n  content: "\\f2ed"; }\n\n* .fa-tree:before {\n  content: "\\f1bb"; }\n\n* .fa-trello:before {\n  content: "\\f181"; }\n\n* .fa-tripadvisor:before {\n  content: "\\f262"; }\n\n* .fa-trophy:before {\n  content: "\\f091"; }\n\n* .fa-truck:before {\n  content: "\\f0d1"; }\n\n* .fa-truck-loading:before {\n  content: "\\f4de"; }\n\n* .fa-truck-monster:before {\n  content: "\\f63b"; }\n\n* .fa-truck-moving:before {\n  content: "\\f4df"; }\n\n* .fa-truck-pickup:before {\n  content: "\\f63c"; }\n\n* .fa-tshirt:before {\n  content: "\\f553"; }\n\n* .fa-tty:before {\n  content: "\\f1e4"; }\n\n* .fa-tumblr:before {\n  content: "\\f173"; }\n\n* .fa-tumblr-square:before {\n  content: "\\f174"; }\n\n* .fa-tv:before {\n  content: "\\f26c"; }\n\n* .fa-twitch:before {\n  content: "\\f1e8"; }\n\n* .fa-twitter:before {\n  content: "\\f099"; }\n\n* .fa-twitter-square:before {\n  content: "\\f081"; }\n\n* .fa-typo3:before {\n  content: "\\f42b"; }\n\n* .fa-uber:before {\n  content: "\\f402"; }\n\n* .fa-ubuntu:before {\n  content: "\\f7df"; }\n\n* .fa-uikit:before {\n  content: "\\f403"; }\n\n* .fa-umbrella:before {\n  content: "\\f0e9"; }\n\n* .fa-umbrella-beach:before {\n  content: "\\f5ca"; }\n\n* .fa-underline:before {\n  content: "\\f0cd"; }\n\n* .fa-undo:before {\n  content: "\\f0e2"; }\n\n* .fa-undo-alt:before {\n  content: "\\f2ea"; }\n\n* .fa-uniregistry:before {\n  content: "\\f404"; }\n\n* .fa-universal-access:before {\n  content: "\\f29a"; }\n\n* .fa-university:before {\n  content: "\\f19c"; }\n\n* .fa-unlink:before {\n  content: "\\f127"; }\n\n* .fa-unlock:before {\n  content: "\\f09c"; }\n\n* .fa-unlock-alt:before {\n  content: "\\f13e"; }\n\n* .fa-untappd:before {\n  content: "\\f405"; }\n\n* .fa-upload:before {\n  content: "\\f093"; }\n\n* .fa-ups:before {\n  content: "\\f7e0"; }\n\n* .fa-usb:before {\n  content: "\\f287"; }\n\n* .fa-user:before {\n  content: "\\f007"; }\n\n* .fa-user-alt:before {\n  content: "\\f406"; }\n\n* .fa-user-alt-slash:before {\n  content: "\\f4fa"; }\n\n* .fa-user-astronaut:before {\n  content: "\\f4fb"; }\n\n* .fa-user-check:before {\n  content: "\\f4fc"; }\n\n* .fa-user-circle:before {\n  content: "\\f2bd"; }\n\n* .fa-user-clock:before {\n  content: "\\f4fd"; }\n\n* .fa-user-cog:before {\n  content: "\\f4fe"; }\n\n* .fa-user-edit:before {\n  content: "\\f4ff"; }\n\n* .fa-user-friends:before {\n  content: "\\f500"; }\n\n* .fa-user-graduate:before {\n  content: "\\f501"; }\n\n* .fa-user-injured:before {\n  content: "\\f728"; }\n\n* .fa-user-lock:before {\n  content: "\\f502"; }\n\n* .fa-user-md:before {\n  content: "\\f0f0"; }\n\n* .fa-user-minus:before {\n  content: "\\f503"; }\n\n* .fa-user-ninja:before {\n  content: "\\f504"; }\n\n* .fa-user-plus:before {\n  content: "\\f234"; }\n\n* .fa-user-secret:before {\n  content: "\\f21b"; }\n\n* .fa-user-shield:before {\n  content: "\\f505"; }\n\n* .fa-user-slash:before {\n  content: "\\f506"; }\n\n* .fa-user-tag:before {\n  content: "\\f507"; }\n\n* .fa-user-tie:before {\n  content: "\\f508"; }\n\n* .fa-user-times:before {\n  content: "\\f235"; }\n\n* .fa-users:before {\n  content: "\\f0c0"; }\n\n* .fa-users-cog:before {\n  content: "\\f509"; }\n\n* .fa-usps:before {\n  content: "\\f7e1"; }\n\n* .fa-ussunnah:before {\n  content: "\\f407"; }\n\n* .fa-utensil-spoon:before {\n  content: "\\f2e5"; }\n\n* .fa-utensils:before {\n  content: "\\f2e7"; }\n\n* .fa-vaadin:before {\n  content: "\\f408"; }\n\n* .fa-vector-square:before {\n  content: "\\f5cb"; }\n\n* .fa-venus:before {\n  content: "\\f221"; }\n\n* .fa-venus-double:before {\n  content: "\\f226"; }\n\n* .fa-venus-mars:before {\n  content: "\\f228"; }\n\n* .fa-viacoin:before {\n  content: "\\f237"; }\n\n* .fa-viadeo:before {\n  content: "\\f2a9"; }\n\n* .fa-viadeo-square:before {\n  content: "\\f2aa"; }\n\n* .fa-vial:before {\n  content: "\\f492"; }\n\n* .fa-vials:before {\n  content: "\\f493"; }\n\n* .fa-viber:before {\n  content: "\\f409"; }\n\n* .fa-video:before {\n  content: "\\f03d"; }\n\n* .fa-video-slash:before {\n  content: "\\f4e2"; }\n\n* .fa-vihara:before {\n  content: "\\f6a7"; }\n\n* .fa-vimeo:before {\n  content: "\\f40a"; }\n\n* .fa-vimeo-square:before {\n  content: "\\f194"; }\n\n* .fa-vimeo-v:before {\n  content: "\\f27d"; }\n\n* .fa-vine:before {\n  content: "\\f1ca"; }\n\n* .fa-vk:before {\n  content: "\\f189"; }\n\n* .fa-vnv:before {\n  content: "\\f40b"; }\n\n* .fa-volleyball-ball:before {\n  content: "\\f45f"; }\n\n* .fa-volume-down:before {\n  content: "\\f027"; }\n\n* .fa-volume-mute:before {\n  content: "\\f6a9"; }\n\n* .fa-volume-off:before {\n  content: "\\f026"; }\n\n* .fa-volume-up:before {\n  content: "\\f028"; }\n\n* .fa-vote-yea:before {\n  content: "\\f772"; }\n\n* .fa-vr-cardboard:before {\n  content: "\\f729"; }\n\n* .fa-vuejs:before {\n  content: "\\f41f"; }\n\n* .fa-walking:before {\n  content: "\\f554"; }\n\n* .fa-wallet:before {\n  content: "\\f555"; }\n\n* .fa-warehouse:before {\n  content: "\\f494"; }\n\n* .fa-water:before {\n  content: "\\f773"; }\n\n* .fa-weebly:before {\n  content: "\\f5cc"; }\n\n* .fa-weibo:before {\n  content: "\\f18a"; }\n\n* .fa-weight:before {\n  content: "\\f496"; }\n\n* .fa-weight-hanging:before {\n  content: "\\f5cd"; }\n\n* .fa-weixin:before {\n  content: "\\f1d7"; }\n\n* .fa-whatsapp:before {\n  content: "\\f232"; }\n\n* .fa-whatsapp-square:before {\n  content: "\\f40c"; }\n\n* .fa-wheelchair:before {\n  content: "\\f193"; }\n\n* .fa-whmcs:before {\n  content: "\\f40d"; }\n\n* .fa-wifi:before {\n  content: "\\f1eb"; }\n\n* .fa-wikipedia-w:before {\n  content: "\\f266"; }\n\n* .fa-wind:before {\n  content: "\\f72e"; }\n\n* .fa-window-close:before {\n  content: "\\f410"; }\n\n* .fa-window-maximize:before {\n  content: "\\f2d0"; }\n\n* .fa-window-minimize:before {\n  content: "\\f2d1"; }\n\n* .fa-window-restore:before {\n  content: "\\f2d2"; }\n\n* .fa-windows:before {\n  content: "\\f17a"; }\n\n* .fa-wine-bottle:before {\n  content: "\\f72f"; }\n\n* .fa-wine-glass:before {\n  content: "\\f4e3"; }\n\n* .fa-wine-glass-alt:before {\n  content: "\\f5ce"; }\n\n* .fa-wix:before {\n  content: "\\f5cf"; }\n\n* .fa-wizards-of-the-coast:before {\n  content: "\\f730"; }\n\n* .fa-wolf-pack-battalion:before {\n  content: "\\f514"; }\n\n* .fa-won-sign:before {\n  content: "\\f159"; }\n\n* .fa-wordpress:before {\n  content: "\\f19a"; }\n\n* .fa-wordpress-simple:before {\n  content: "\\f411"; }\n\n* .fa-wpbeginner:before {\n  content: "\\f297"; }\n\n* .fa-wpexplorer:before {\n  content: "\\f2de"; }\n\n* .fa-wpforms:before {\n  content: "\\f298"; }\n\n* .fa-wpressr:before {\n  content: "\\f3e4"; }\n\n* .fa-wrench:before {\n  content: "\\f0ad"; }\n\n* .fa-x-ray:before {\n  content: "\\f497"; }\n\n* .fa-xbox:before {\n  content: "\\f412"; }\n\n* .fa-xing:before {\n  content: "\\f168"; }\n\n* .fa-xing-square:before {\n  content: "\\f169"; }\n\n* .fa-y-combinator:before {\n  content: "\\f23b"; }\n\n* .fa-yahoo:before {\n  content: "\\f19e"; }\n\n* .fa-yandex:before {\n  content: "\\f413"; }\n\n* .fa-yandex-international:before {\n  content: "\\f414"; }\n\n* .fa-yarn:before {\n  content: "\\f7e3"; }\n\n* .fa-yelp:before {\n  content: "\\f1e9"; }\n\n* .fa-yen-sign:before {\n  content: "\\f157"; }\n\n* .fa-yin-yang:before {\n  content: "\\f6ad"; }\n\n* .fa-yoast:before {\n  content: "\\f2b1"; }\n\n* .fa-youtube:before {\n  content: "\\f167"; }\n\n* .fa-youtube-square:before {\n  content: "\\f431"; }\n\n* .fa-zhihu:before {\n  content: "\\f63f"; }\n\n* .sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n* .sr-only-focusable:active, * .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n\n@font-face {\n  font-family: "Font Awesome 5 Free";\n  font-style: normal;\n  font-weight: 900;\n  src: url("./assets/fonts/webfonts/fa-solid-900.eot");\n  src: url("./assets/fonts/webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/webfonts/fa-solid-900.woff2") format("woff2"), url("./assets/fonts/webfonts/fa-solid-900.woff") format("woff"), url("./assets/fonts/webfonts/fa-solid-900.ttf") format("truetype"), url("./assets/fonts/webfonts/fa-solid-900.svg#fontawesome") format("svg"); }\n\n.fa,\n.fas {\n  font-family: "Font Awesome 5 Free";\n  font-weight: 900; }\n\n@font-face {\n  font-family: "pficon";\n  src: url("./assets/pficon/pficon.eot");\n  src: url("./assets/pficon/pficon.eot?#iefix") format("eot"), url("./assets/pficon/pficon.woff2") format("woff2"), url("./assets/pficon/pficon.woff") format("woff"), url("./assets/pficon/pficon.ttf") format("truetype"), url("./assets/pficon/pficon.svg#pficon") format("svg"); }\n\n.pf-icon-aa-circle-o:before, .pf-icon-add-circle-o:before, .pf-icon-ansible-tower:before, .pf-icon-applications:before, .pf-icon-arrow:before, .pf-icon-asleep:before, .pf-icon-attention-bell:before, .pf-icon-automation:before, .pf-icon-bell:before, .pf-icon-blueprint:before, .pf-icon-build:before, .pf-icon-builder-image:before, .pf-icon-bundle:before, .pf-icon-catalog:before, .pf-icon-chat:before, .pf-icon-close:before, .pf-icon-cloud-security:before, .pf-icon-cloud-tenant:before, .pf-icon-cluster:before, .pf-icon-connected:before, .pf-icon-container-node:before, .pf-icon-cpu:before, .pf-icon-degraded:before, .pf-icon-disconnected:before, .pf-icon-domain:before, .pf-icon-edit:before, .pf-icon-enhancement:before, .pf-icon-enterprise:before, .pf-icon-equalizer:before, .pf-icon-error-circle-o:before, .pf-icon-export:before, .pf-icon-filter:before, .pf-icon-flavor:before, .pf-icon-folder-close:before, .pf-icon-folder-open:before, .pf-icon-globe-route:before, .pf-icon-help:before, .pf-icon-history:before, .pf-icon-home:before, .pf-icon-import:before, .pf-icon-in-progress:before, .pf-icon-info:before, .pf-icon-infrastructure:before, .pf-icon-integration:before, .pf-icon-key:before, .pf-icon-locked:before, .pf-icon-maintenance:before, .pf-icon-memory:before, .pf-icon-messages:before, .pf-icon-middleware:before, .pf-icon-migration:before, .pf-icon-module:before, .pf-icon-monitoring:before, .pf-icon-namespaces:before, .pf-icon-network:before, .pf-icon-new-process:before, .pf-icon-not-started:before, .pf-icon-off:before, .pf-icon-ok:before, .pf-icon-on-running:before, .pf-icon-on:before, .pf-icon-openshift:before, .pf-icon-openstack:before, .pf-icon-optimize:before, .pf-icon-orders:before, .pf-icon-os-image:before, .pf-icon-package:before, .pf-icon-paused:before, .pf-icon-pending:before, .pf-icon-pficon-dragdrop:before, .pf-icon-pficon-history:before, .pf-icon-pficon-network-range:before, .pf-icon-pficon-satellite:before, .pf-icon-pficon-sort-common-asc:before, .pf-icon-pficon-sort-common-desc:before, .pf-icon-pficon-template:before, .pf-icon-pficon-vcenter:before, .pf-icon-plugged:before, .pf-icon-port:before, .pf-icon-print:before, .pf-icon-private:before, .pf-icon-process-automation:before, .pf-icon-project:before, .pf-icon-rebalance:before, .pf-icon-rebooting:before, .pf-icon-regions:before, .pf-icon-registry:before, .pf-icon-remove2:before, .pf-icon-replicator:before, .pf-icon-repository:before, .pf-icon-resource-pool:before, .pf-icon-resources-almost-empty:before, .pf-icon-resources-almost-full:before, .pf-icon-resources-empty:before, .pf-icon-resources-full:before, .pf-icon-running:before, .pf-icon-save:before, .pf-icon-screen:before, .pf-icon-security:before, .pf-icon-server-group:before, .pf-icon-server:before, .pf-icon-service-catalog:before, .pf-icon-service:before, .pf-icon-services:before, .pf-icon-spinner:before, .pf-icon-spinner2:before, .pf-icon-storage-domain:before, .pf-icon-tenant:before, .pf-icon-thumb-tack:before, .pf-icon-topology:before, .pf-icon-trend-down:before, .pf-icon-trend-up:before, .pf-icon-unknown:before, .pf-icon-unlocked:before, .pf-icon-unplugged:before, .pf-icon-user:before, .pf-icon-users:before, .pf-icon-virtual-machine:before, .pf-icon-volume:before, .pf-icon-warning-triangle:before, .pf-icon-zone:before {\n  font-family: "pficon";\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  font-style: normal;\n  font-variant: normal;\n  font-weight: normal;\n  text-decoration: none;\n  text-transform: none; }\n\n.pf-icon-aa-circle-o:before {\n  content: ""; }\n\n.pf-icon-add-circle-o:before {\n  content: ""; }\n\n.pf-icon-ansible-tower:before {\n  content: ""; }\n\n.pf-icon-applications:before {\n  content: ""; }\n\n.pf-icon-arrow:before {\n  content: ""; }\n\n.pf-icon-asleep:before {\n  content: ""; }\n\n.pf-icon-attention-bell:before {\n  content: ""; }\n\n.pf-icon-automation:before {\n  content: ""; }\n\n.pf-icon-bell:before {\n  content: ""; }\n\n.pf-icon-blueprint:before {\n  content: ""; }\n\n.pf-icon-build:before {\n  content: ""; }\n\n.pf-icon-builder-image:before {\n  content: ""; }\n\n.pf-icon-bundle:before {\n  content: ""; }\n\n.pf-icon-catalog:before {\n  content: ""; }\n\n.pf-icon-chat:before {\n  content: ""; }\n\n.pf-icon-close:before {\n  content: ""; }\n\n.pf-icon-cloud-security:before {\n  content: ""; }\n\n.pf-icon-cloud-tenant:before {\n  content: ""; }\n\n.pf-icon-cluster:before {\n  content: ""; }\n\n.pf-icon-connected:before {\n  content: ""; }\n\n.pf-icon-container-node:before {\n  content: ""; }\n\n.pf-icon-cpu:before {\n  content: ""; }\n\n.pf-icon-degraded:before {\n  content: ""; }\n\n.pf-icon-disconnected:before {\n  content: ""; }\n\n.pf-icon-domain:before {\n  content: ""; }\n\n.pf-icon-edit:before {\n  content: ""; }\n\n.pf-icon-enhancement:before {\n  content: ""; }\n\n.pf-icon-enterprise:before {\n  content: ""; }\n\n.pf-icon-equalizer:before {\n  content: ""; }\n\n.pf-icon-error-circle-o:before {\n  content: ""; }\n\n.pf-icon-export:before {\n  content: ""; }\n\n.pf-icon-filter:before {\n  content: ""; }\n\n.pf-icon-flavor:before {\n  content: ""; }\n\n.pf-icon-folder-close:before {\n  content: ""; }\n\n.pf-icon-folder-open:before {\n  content: ""; }\n\n.pf-icon-globe-route:before {\n  content: ""; }\n\n.pf-icon-help:before {\n  content: ""; }\n\n.pf-icon-history:before {\n  content: ""; }\n\n.pf-icon-home:before {\n  content: ""; }\n\n.pf-icon-import:before {\n  content: ""; }\n\n.pf-icon-in-progress:before {\n  content: ""; }\n\n.pf-icon-info:before {\n  content: ""; }\n\n.pf-icon-infrastructure:before {\n  content: ""; }\n\n.pf-icon-integration:before {\n  content: ""; }\n\n.pf-icon-key:before {\n  content: ""; }\n\n.pf-icon-locked:before {\n  content: ""; }\n\n.pf-icon-maintenance:before {\n  content: ""; }\n\n.pf-icon-memory:before {\n  content: ""; }\n\n.pf-icon-messages:before {\n  content: ""; }\n\n.pf-icon-middleware:before {\n  content: ""; }\n\n.pf-icon-migration:before {\n  content: ""; }\n\n.pf-icon-module:before {\n  content: ""; }\n\n.pf-icon-monitoring:before {\n  content: ""; }\n\n.pf-icon-namespaces:before {\n  content: ""; }\n\n.pf-icon-network:before {\n  content: ""; }\n\n.pf-icon-new-process:before {\n  content: ""; }\n\n.pf-icon-not-started:before {\n  content: ""; }\n\n.pf-icon-off:before {\n  content: ""; }\n\n.pf-icon-ok:before {\n  content: ""; }\n\n.pf-icon-on-running:before {\n  content: ""; }\n\n.pf-icon-on:before {\n  content: ""; }\n\n.pf-icon-openshift:before {\n  content: ""; }\n\n.pf-icon-openstack:before {\n  content: ""; }\n\n.pf-icon-optimize:before {\n  content: ""; }\n\n.pf-icon-orders:before {\n  content: ""; }\n\n.pf-icon-os-image:before {\n  content: ""; }\n\n.pf-icon-package:before {\n  content: ""; }\n\n.pf-icon-paused:before {\n  content: ""; }\n\n.pf-icon-pending:before {\n  content: ""; }\n\n.pf-icon-pficon-dragdrop:before {\n  content: ""; }\n\n.pf-icon-pficon-history:before {\n  content: ""; }\n\n.pf-icon-pficon-network-range:before {\n  content: ""; }\n\n.pf-icon-pficon-satellite:before {\n  content: ""; }\n\n.pf-icon-pficon-sort-common-asc:before {\n  content: ""; }\n\n.pf-icon-pficon-sort-common-desc:before {\n  content: ""; }\n\n.pf-icon-pficon-template:before {\n  content: ""; }\n\n.pf-icon-pficon-vcenter:before {\n  content: ""; }\n\n.pf-icon-plugged:before {\n  content: ""; }\n\n.pf-icon-port:before {\n  content: ""; }\n\n.pf-icon-print:before {\n  content: ""; }\n\n.pf-icon-private:before {\n  content: ""; }\n\n.pf-icon-process-automation:before {\n  content: ""; }\n\n.pf-icon-project:before {\n  content: ""; }\n\n.pf-icon-rebalance:before {\n  content: ""; }\n\n.pf-icon-rebooting:before {\n  content: ""; }\n\n.pf-icon-regions:before {\n  content: ""; }\n\n.pf-icon-registry:before {\n  content: ""; }\n\n.pf-icon-remove2:before {\n  content: ""; }\n\n.pf-icon-replicator:before {\n  content: ""; }\n\n.pf-icon-repository:before {\n  content: ""; }\n\n.pf-icon-resource-pool:before {\n  content: ""; }\n\n.pf-icon-resources-almost-empty:before {\n  content: ""; }\n\n.pf-icon-resources-almost-full:before {\n  content: ""; }\n\n.pf-icon-resources-empty:before {\n  content: ""; }\n\n.pf-icon-resources-full:before {\n  content: ""; }\n\n.pf-icon-running:before {\n  content: ""; }\n\n.pf-icon-save:before {\n  content: ""; }\n\n.pf-icon-screen:before {\n  content: ""; }\n\n.pf-icon-security:before {\n  content: ""; }\n\n.pf-icon-server-group:before {\n  content: ""; }\n\n.pf-icon-server:before {\n  content: ""; }\n\n.pf-icon-service-catalog:before {\n  content: ""; }\n\n.pf-icon-service:before {\n  content: ""; }\n\n.pf-icon-services:before {\n  content: ""; }\n\n.pf-icon-spinner:before {\n  content: ""; }\n\n.pf-icon-spinner2:before {\n  content: ""; }\n\n.pf-icon-storage-domain:before {\n  content: ""; }\n\n.pf-icon-tenant:before {\n  content: ""; }\n\n.pf-icon-thumb-tack:before {\n  content: ""; }\n\n.pf-icon-topology:before {\n  content: ""; }\n\n.pf-icon-trend-down:before {\n  content: ""; }\n\n.pf-icon-trend-up:before {\n  content: ""; }\n\n.pf-icon-unknown:before {\n  content: ""; }\n\n.pf-icon-unlocked:before {\n  content: ""; }\n\n.pf-icon-unplugged:before {\n  content: ""; }\n\n.pf-icon-user:before {\n  content: ""; }\n\n.pf-icon-users:before {\n  content: ""; }\n\n.pf-icon-virtual-machine:before {\n  content: ""; }\n\n.pf-icon-volume:before {\n  content: ""; }\n\n.pf-icon-warning-triangle:before {\n  content: ""; }\n\n.pf-icon-zone:before {\n  content: ""; }\n\n.pf-c-about-modal-box {\n  --pf-c-about-modal-box--BackgroundColor: var(--pf-global--palette--black-1000);\n  --pf-c-about-modal-box--BoxShadow: 0 0 100px 0 rgba(255, 255, 255, .05);\n  --pf-c-about-modal-box--ZIndex: var(--pf-global--ZIndex--xl);\n  --pf-c-about-modal-box--Height: 100%;\n  --pf-c-about-modal-box--lg--Height: 47.625rem;\n  --pf-c-about-modal-box--lg--MaxHeight: calc(100% - var(--pf-global--spacer--xl));\n  --pf-c-about-modal-box--Width: 100vw;\n  --pf-c-about-modal-box--lg--Width: calc(100% - (var(--pf-global--spacer--3xl) * 2));\n  --pf-c-about-modal-box--lg--MaxWidth: 77rem;\n  --pf-c-about-modal-box--PaddingTop: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box--PaddingBottom: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box--sm--PaddingTop: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box--sm--PaddingRight: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box--sm--PaddingBottom: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box--sm--PaddingLeft: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box--sm--grid-template-columns: 5fr 1fr;\n  --pf-c-about-modal-box--lg--grid-template-columns: 1fr .6fr;\n  --pf-c-about-modal-box__brand--PaddingTop: var(--pf-global--spacer--2xl);\n  --pf-c-about-modal-box__brand--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__brand--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__brand--PaddingBottom: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__brand--sm--PaddingRight: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box__brand--sm--PaddingLeft: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box__brand--sm--PaddingBottom: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box__close--ZIndex: var(--pf-global--ZIndex--2xl);\n  --pf-c-about-modal-box__close--PaddingTop: var(--pf-global--spacer--2xl);\n  --pf-c-about-modal-box__close--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__close--PaddingBottom: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__close--sm--PaddingBottom: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box__close--sm--PaddingRight: 0;\n  --pf-c-about-modal-box__close--lg--PaddingRight: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box__close--c-button--Color: var(--pf-global--Color--100);\n  --pf-c-about-modal-box__close--c-button--FontSize: var(--pf-global--FontSize--xl);\n  --pf-c-about-modal-box__close--c-button--BorderRadius: var(--pf-global--BorderRadius--lg);\n  --pf-c-about-modal-box__close--c-button--Width: calc(var(--pf-c-about-modal-box__close--c-button--FontSize) * 2);\n  --pf-c-about-modal-box__close--c-button--Height: calc(var(--pf-c-about-modal-box__close--c-button--FontSize) * 2);\n  --pf-c-about-modal-box__close--c-button--BackgroundColor: var(--pf-global--palette--black-1000);\n  --pf-c-about-modal-box__close--c-button--hover--BackgroundColor: rgba(3, 3, 3, 0.4);\n  --pf-c-about-modal-box__hero--sm--BackgroundImage: url("./assets/images/pfbg_992@2x.jpg");\n  --pf-c-about-modal-box__hero--sm--BackgroundPosition: top left;\n  --pf-c-about-modal-box__hero--sm--BackgroundSize: cover;\n  --pf-c-about-modal-box__brand-image--Height: 2.5rem;\n  --pf-c-about-modal-box__header--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__header--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-about-modal-box__header--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__header--sm--PaddingRight: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box__header--sm--PaddingLeft: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box__strapline--PaddingTop: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__strapline--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-about-modal-box__strapline--sm--PaddingTop: var(--pf-global--spacer--2xl);\n  --pf-c-about-modal-box__content--MarginTop: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__content--MarginRight: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__content--MarginBottom: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__content--MarginLeft: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__content--sm--MarginTop: var(--pf-global--spacer--2xl);\n  --pf-c-about-modal-box__content--sm--MarginRight: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box__content--sm--MarginBottom: var(--pf-global--spacer--2xl);\n  --pf-c-about-modal-box__content--sm--MarginLeft: var(--pf-global--spacer--3xl);\n  color: var(--pf-global--Color--100);\n  position: relative;\n  z-index: var(--pf-c-about-modal-box--ZIndex);\n  display: grid;\n  grid-template-rows: max-content max-content auto;\n  grid-template-areas: "brand close" "header header" "content content";\n  width: var(--pf-c-about-modal-box--Width);\n  height: var(--pf-c-about-modal-box--Height);\n  overflow-x: hidden;\n  overflow-y: auto;\n  background-color: var(--pf-c-about-modal-box--BackgroundColor);\n  box-shadow: var(--pf-c-about-modal-box--BoxShadow); }\n  @media screen and (min-width: 576px) {\n    .pf-c-about-modal-box {\n      --pf-c-about-modal-box--PaddingTop: var(--pf-c-about-modal-box--sm--PaddingTop);\n      --pf-c-about-modal-box--PaddingRight: var(--pf-c-about-modal-box--sm--PaddingRight);\n      --pf-c-about-modal-box--PaddingBottom: var(--pf-c-about-modal-box--sm--PaddingBottom);\n      --pf-c-about-modal-box--PaddingLeft: var(--pf-c-about-modal-box--sm--PaddingLeft); } }\n  @media screen and (min-width: 576px) {\n    .pf-c-about-modal-box {\n      --pf-c-about-modal-box__brand--PaddingRight: var(--pf-c-about-modal-box__brand--sm--PaddingRight);\n      --pf-c-about-modal-box__brand--PaddingLeft: var(--pf-c-about-modal-box__brand--sm--PaddingLeft);\n      --pf-c-about-modal-box__brand--PaddingBottom: var(--pf-c-about-modal-box__brand--sm--PaddingBottom); } }\n  @media only screen and (min-width: 576px) {\n    .pf-c-about-modal-box {\n      --pf-c-about-modal-box__close--PaddingRight: var(--pf-c-about-modal-box__close--sm--PaddingRight);\n      --pf-c-about-modal-box__close--PaddingBottom: var(--pf-c-about-modal-box__close--sm--PaddingBottom); } }\n  @media only screen and (min-width: 992px) {\n    .pf-c-about-modal-box {\n      --pf-c-about-modal-box__close--PaddingRight: var(--pf-c-about-modal-box__close--lg--PaddingRight); } }\n  @media only screen and (min-width: 576px) {\n    .pf-c-about-modal-box {\n      --pf-c-about-modal-box__header--PaddingRight: var(--pf-c-about-modal-box__header--sm--PaddingRight);\n      --pf-c-about-modal-box__header--PaddingLeft: var(--pf-c-about-modal-box__header--sm--PaddingLeft); } }\n  @media only screen and (min-width: 576px) {\n    .pf-c-about-modal-box {\n      --pf-c-about-modal-box__strapline--PaddingTop: var(--pf-c-about-modal-box__strapline--sm--PaddingTop); } }\n  @media only screen and (min-width: 576px) {\n    .pf-c-about-modal-box {\n      --pf-c-about-modal-box__content--MarginTop: var(--pf-c-about-modal-box__content--sm--MarginTop);\n      --pf-c-about-modal-box__content--MarginRight: var(--pf-c-about-modal-box__content--sm--MarginRight);\n      --pf-c-about-modal-box__content--MarginBottom: var(--pf-c-about-modal-box__content--sm--MarginBottom);\n      --pf-c-about-modal-box__content--MarginLeft: var(--pf-c-about-modal-box__content--sm--MarginLeft); } }\n  @media only screen and (min-width: 576px) {\n    .pf-c-about-modal-box {\n      grid-template-columns: var(--pf-c-about-modal-box--sm--grid-template-columns);\n      grid-template-areas: "brand          hero" "header         hero" "content        hero"; } }\n  @media only screen and (min-width: 992px) {\n    .pf-c-about-modal-box {\n      --pf-c-about-modal-box--Height: var(--pf-c-about-modal-box--lg--Height);\n      --pf-c-about-modal-box--Width: var(--pf-c-about-modal-box--lg--Width);\n      grid-template-columns: var(--pf-c-about-modal-box--lg--grid-template-columns);\n      grid-template-rows: max-content max-content auto;\n      max-width: var(--pf-c-about-modal-box--lg--MaxWidth);\n      max-height: var(--pf-c-about-modal-box--lg--MaxHeight); } }\n\n.pf-c-about-modal-box__brand {\n  grid-area: brand;\n  display: flex;\n  padding: var(--pf-c-about-modal-box__brand--PaddingTop) var(--pf-c-about-modal-box__brand--PaddingRight) var(--pf-c-about-modal-box__brand--PaddingBottom) var(--pf-c-about-modal-box__brand--PaddingLeft); }\n\n.pf-c-about-modal-box__brand-image {\n  height: var(--pf-c-about-modal-box__brand-image--Height); }\n\n.pf-c-about-modal-box__header {\n  grid-area: header;\n  display: flex;\n  flex-direction: column;\n  padding-right: var(--pf-c-about-modal-box__header--PaddingRight);\n  padding-bottom: var(--pf-c-about-modal-box__header--PaddingBottom);\n  padding-left: var(--pf-c-about-modal-box__header--PaddingLeft); }\n\n.pf-c-about-modal-box__strapline {\n  padding-top: var(--pf-c-about-modal-box__strapline--PaddingTop);\n  margin-top: auto;\n  font-size: var(--pf-c-about-modal-box__strapline--FontSize); }\n\n.pf-c-about-modal-box__content {\n  display: flex;\n  flex-direction: column;\n  grid-area: content;\n  margin: var(--pf-c-about-modal-box__content--MarginTop) var(--pf-c-about-modal-box__content--MarginRight) var(--pf-c-about-modal-box__content--MarginBottom) var(--pf-c-about-modal-box__content--MarginLeft);\n  overflow-x: hidden;\n  overflow-y: auto;\n  overscroll-behavior: contain;\n  -webkit-overflow-scrolling: touch;\n  word-break: break-word; }\n  @media screen and (min-width: 576px) {\n    .pf-c-about-modal-box__content {\n      overflow: visible;\n      overscroll-behavior: auto; } }\n\n.pf-c-about-modal-box__close {\n  grid-area: close;\n  position: sticky;\n  top: 0;\n  display: flex;\n  align-items: flex-start;\n  justify-content: flex-end;\n  padding-top: var(--pf-c-about-modal-box__close--PaddingTop);\n  padding-right: var(--pf-c-about-modal-box__close--PaddingRight);\n  padding-bottom: var(--pf-c-about-modal-box__close--PaddingBottom); }\n  @media only screen and (min-width: 576px) {\n    .pf-c-about-modal-box__close {\n      grid-area: 1 / 2;\n      justify-content: center; } }\n  @media only screen and (min-width: 992px) {\n    .pf-c-about-modal-box__close {\n      justify-content: flex-end; } }\n  .pf-c-about-modal-box__close .pf-c-button.pf-m-plain {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: var(--pf-c-about-modal-box__close--c-button--Width);\n    height: var(--pf-c-about-modal-box__close--c-button--Height);\n    font-size: var(--pf-c-about-modal-box__close--c-button--FontSize);\n    color: var(--pf-c-about-modal-box__close--c-button--Color);\n    background-color: var(--pf-c-about-modal-box__close--c-button--BackgroundColor);\n    border-radius: var(--pf-c-about-modal-box__close--c-button--BorderRadius); }\n    .pf-c-about-modal-box__close .pf-c-button.pf-m-plain:hover {\n      --pf-c-about-modal-box__close--c-button--BackgroundColor: var(--pf-c-about-modal-box__close--c-button--hover--BackgroundColor); }\n\n.pf-c-about-modal-box__hero {\n  display: none;\n  visibility: hidden; }\n  @media only screen and (min-width: 576px) {\n    .pf-c-about-modal-box__hero {\n      display: block;\n      visibility: visible;\n      background-image: var(--pf-c-about-modal-box__hero--sm--BackgroundImage);\n      background-repeat: no-repeat;\n      background-attachment: fixed;\n      background-position: var(--pf-c-about-modal-box__hero--sm--BackgroundPosition);\n      background-size: var(--pf-c-about-modal-box__hero--sm--BackgroundSize);\n      grid-area: hero; } }\n\n.pf-c-accordion {\n  --pf-c-accordion--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-accordion__toggle--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-accordion__toggle--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-accordion__toggle--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-accordion__toggle--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-accordion__toggle--before--BackgroundColor: transparent;\n  --pf-c-accordion__toggle--hover--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-accordion__toggle--focus--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-accordion__toggle--active--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-accordion__toggle--before--Width: var(--pf-global--BorderWidth--lg);\n  --pf-c-accordion__toggle--m-expanded--before--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-accordion__toggle-text--MaxWidth: calc(100% - var(--pf-global--spacer--lg));\n  --pf-c-accordion__toggle--hover__toggle-text--Color: var(--pf-global--link--Color);\n  --pf-c-accordion__toggle--active__toggle-text--Color: var(--pf-global--link--Color);\n  --pf-c-accordion__toggle--active__toggle-text--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-accordion__toggle--focus__toggle-text--Color: var(--pf-global--link--Color);\n  --pf-c-accordion__toggle--focus__toggle-text--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-accordion__toggle--m-expanded__toggle-text--Color: var(--pf-global--link--Color);\n  --pf-c-accordion__toggle--m-expanded__toggle-text--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-accordion__toggle-icon--Transition: .2s ease-in 0s;\n  --pf-c-accordion__toggle--m-expanded__toggle-icon--Rotate: 90deg;\n  --pf-c-accordion__expanded-content-body--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-accordion__expanded-content-body--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-accordion__expanded-content-body--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-accordion__expanded-content-body--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-accordion__expanded-content--Color: var(--pf-global--secondary-color--100);\n  --pf-c-accordion__expanded-content--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-accordion__expanded-content-body--before--BackgroundColor: transparent;\n  --pf-c-accordion__expanded-content-body--before--Width: var(--pf-global--BorderWidth--lg);\n  --pf-c-accordion__expanded-content--m-expanded__expanded-content-body--before--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-accordion__expanded-content--m-fixed--MaxHeight: 9.375rem;\n  color: var(--pf-global--Color--100);\n  background-color: var(--pf-c-accordion--BackgroundColor); }\n\n.pf-c-accordion__toggle {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  width: 100%;\n  padding: var(--pf-c-accordion__toggle--PaddingTop) var(--pf-c-accordion__toggle--PaddingRight) var(--pf-c-accordion__toggle--PaddingBottom) var(--pf-c-accordion__toggle--PaddingLeft);\n  border: 0; }\n  .pf-c-accordion__toggle::before {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    width: var(--pf-c-accordion__toggle--before--Width);\n    content: "";\n    background-color: var(--pf-c-accordion__toggle--before--BackgroundColor); }\n  .pf-c-accordion__toggle.pf-m-expanded {\n    --pf-c-accordion__toggle--before--BackgroundColor: var(--pf-c-accordion__toggle--m-expanded--before--BackgroundColor); }\n    .pf-c-accordion__toggle.pf-m-expanded .pf-c-accordion__toggle-text {\n      font-weight: var(--pf-c-accordion__toggle--m-expanded__toggle-text--FontWeight);\n      color: var(--pf-c-accordion__toggle--m-expanded__toggle-text--Color); }\n    .pf-c-accordion__toggle.pf-m-expanded .pf-c-accordion__toggle-icon {\n      transform: rotate(var(--pf-c-accordion__toggle--m-expanded__toggle-icon--Rotate)); }\n  .pf-c-accordion__toggle:hover {\n    background-color: var(--pf-c-accordion__toggle--hover--BackgroundColor); }\n    .pf-c-accordion__toggle:hover .pf-c-accordion__toggle-text {\n      color: var(--pf-c-accordion__toggle--hover__toggle-text--Color); }\n  .pf-c-accordion__toggle:focus {\n    background-color: var(--pf-c-accordion__toggle--focus--BackgroundColor); }\n    .pf-c-accordion__toggle:focus .pf-c-accordion__toggle-text {\n      font-weight: var(--pf-c-accordion__toggle--focus__toggle-text--FontWeight);\n      color: var(--pf-c-accordion__toggle--focus__toggle-text--Color); }\n  .pf-c-accordion__toggle:active {\n    background-color: var(--pf-c-accordion__toggle--active--BackgroundColor); }\n    .pf-c-accordion__toggle:active .pf-c-accordion__toggle-text {\n      font-weight: var(--pf-c-accordion__toggle--active__toggle-text--FontWeight);\n      color: var(--pf-c-accordion__toggle--active__toggle-text--Color); }\n\n.pf-c-accordion__toggle-text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  max-width: var(--pf-c-accordion__toggle-text--MaxWidth); }\n\n.pf-c-accordion__toggle-icon {\n  transition: var(--pf-c-accordion__toggle-icon--Transition); }\n\n.pf-c-accordion__expanded-content {\n  font-size: var(--pf-c-accordion__expanded-content--FontSize);\n  color: var(--pf-c-accordion__expanded-content--Color); }\n  .pf-c-accordion__expanded-content.pf-m-fixed {\n    max-height: var(--pf-c-accordion__expanded-content--m-fixed--MaxHeight);\n    overflow-y: auto; }\n  .pf-c-accordion__expanded-content.pf-m-expanded {\n    --pf-c-accordion__expanded-content-body--before--BackgroundColor: var(--pf-c-accordion__expanded-content--m-expanded__expanded-content-body--before--BackgroundColor); }\n\n.pf-c-accordion__expanded-content-body {\n  position: relative;\n  padding: var(--pf-c-accordion__expanded-content-body--PaddingTop) var(--pf-c-accordion__expanded-content-body--PaddingRight) var(--pf-c-accordion__expanded-content-body--PaddingBottom) var(--pf-c-accordion__expanded-content-body--PaddingLeft); }\n  .pf-c-accordion__expanded-content-body::before {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    width: var(--pf-c-accordion__expanded-content-body--before--Width);\n    content: "";\n    background-color: var(--pf-c-accordion__expanded-content-body--before--BackgroundColor); }\n\n.pf-c-action-list {\n  --pf-c-action-list--m-icon--spacer: 0;\n  --pf-c-action-list--child--spacer-base: var(--pf-global--spacer--md);\n  --pf-c-action-list--group--spacer-base: var(--pf-global--spacer--2xl); }\n\n.pf-c-action-list,\n.pf-c-action-list__group {\n  --pf-c-action-list--child--spacer: var(--pf-c-action-list--child--spacer-base);\n  --pf-c-action-list--group--spacer: var(--pf-c-action-list--group--spacer-base);\n  display: flex;\n  align-items: center; }\n  .pf-c-action-list > * + *,\n  .pf-c-action-list__group > * + * {\n    margin-left: var(--pf-c-action-list--child--spacer); }\n  .pf-c-action-list > * + .pf-c-action-list__group,\n  .pf-c-action-list .pf-c-action-list__group + *,\n  .pf-c-action-list__group > * + .pf-c-action-list__group,\n  .pf-c-action-list__group .pf-c-action-list__group + * {\n    margin-left: var(--pf-c-action-list--group--spacer); }\n  .pf-c-action-list.pf-m-icons,\n  .pf-c-action-list__group.pf-m-icons {\n    --pf-c-action-list--child--spacer: var(--pf-c-action-list--m-icon--spacer); }\n\n.pf-c-alert {\n  --pf-c-alert--BoxShadow: var(--pf-global--BoxShadow--lg);\n  --pf-c-alert--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-alert--GridTemplateColumns: max-content 1fr max-content;\n  --pf-c-alert--BorderTopWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-alert--BorderTopColor: var(--pf-global--default-color--200);\n  --pf-c-alert--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-alert--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-alert--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-alert--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-alert__FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-alert__icon--Color: var(--pf-global--default-color--200);\n  --pf-c-alert__icon--MarginTop: 0.0625rem;\n  --pf-c-alert__icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-alert__icon--FontSize: var(--pf-global--icon--FontSize--md);\n  --pf-c-alert__title--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-alert__title--Color: var(--pf-global--default-color--300);\n  --pf-c-alert__title--max-lines: 1;\n  --pf-c-alert__action--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-alert__action--MarginBottom: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-alert__action--TranslateY: 0.125rem;\n  --pf-c-alert__action--MarginRight: calc(var(--pf-global--spacer--sm) * -1);\n  --pf-c-alert__description--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-alert__action-group--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-alert__description--action-group--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-alert__action-group__c-button--not-last-child--MarginRight: var(--pf-global--spacer--lg);\n  --pf-c-alert--m-success--BorderTopColor: var(--pf-global--success-color--100);\n  --pf-c-alert--m-success__icon--Color: var(--pf-global--success-color--100);\n  --pf-c-alert--m-success__title--Color: var(--pf-global--success-color--200);\n  --pf-c-alert--m-danger--BorderTopColor: var(--pf-global--danger-color--100);\n  --pf-c-alert--m-danger__icon--Color: var(--pf-global--danger-color--100);\n  --pf-c-alert--m-danger__title--Color: var(--pf-global--danger-color--200);\n  --pf-c-alert--m-warning--BorderTopColor: var(--pf-global--warning-color--100);\n  --pf-c-alert--m-warning__icon--Color: var(--pf-global--warning-color--100);\n  --pf-c-alert--m-warning__title--Color: var(--pf-global--warning-color--200);\n  --pf-c-alert--m-info--BorderTopColor: var(--pf-global--info-color--100);\n  --pf-c-alert--m-info__icon--Color: var(--pf-global--info-color--100);\n  --pf-c-alert--m-info__title--Color: var(--pf-global--info-color--200);\n  --pf-c-alert--m-inline--BoxShadow: none;\n  --pf-c-alert--m-inline--BackgroundColor: var(--pf-global--palette--cyan-50);\n  --pf-c-alert--m-inline--m-success--BackgroundColor: var(--pf-global--palette--green-50);\n  --pf-c-alert--m-inline--m-danger--BackgroundColor: var(--pf-global--palette--red-50);\n  --pf-c-alert--m-inline--m-warning--BackgroundColor: var(--pf-global--palette--gold-50);\n  --pf-c-alert--m-inline--m-info--BackgroundColor: var(--pf-global--palette--blue-50);\n  color: var(--pf-global--Color--100);\n  position: relative;\n  display: grid;\n  padding: var(--pf-c-alert--PaddingTop) var(--pf-c-alert--PaddingRight) var(--pf-c-alert--PaddingBottom) var(--pf-c-alert--PaddingLeft);\n  font-size: var(--pf-c-alert__FontSize);\n  background-color: var(--pf-c-alert--BackgroundColor);\n  border-top: var(--pf-c-alert--BorderTopWidth) solid var(--pf-c-alert--BorderTopColor);\n  box-shadow: var(--pf-c-alert--BoxShadow);\n  grid-template-columns: var(--pf-c-alert--GridTemplateColumns);\n  grid-template-areas: "icon title action" ". description description" ". actiongroup actiongroup"; }\n  .pf-c-alert.pf-m-success {\n    --pf-c-alert--BorderTopColor: var(--pf-c-alert--m-success--BorderTopColor);\n    --pf-c-alert__icon--Color: var(--pf-c-alert--m-success__icon--Color);\n    --pf-c-alert__title--Color: var(--pf-c-alert--m-success__title--Color);\n    --pf-c-alert--m-inline--BackgroundColor: var(--pf-c-alert--m-inline--m-success--BackgroundColor); }\n  .pf-c-alert.pf-m-danger {\n    --pf-c-alert--BorderTopColor: var(--pf-c-alert--m-danger--BorderTopColor);\n    --pf-c-alert__icon--Color: var(--pf-c-alert--m-danger__icon--Color);\n    --pf-c-alert__title--Color: var(--pf-c-alert--m-danger__title--Color);\n    --pf-c-alert--m-inline--BackgroundColor: var(--pf-c-alert--m-inline--m-danger--BackgroundColor); }\n  .pf-c-alert.pf-m-warning {\n    --pf-c-alert--BorderTopColor: var(--pf-c-alert--m-warning--BorderTopColor);\n    --pf-c-alert__icon--Color: var(--pf-c-alert--m-warning__icon--Color);\n    --pf-c-alert__title--Color: var(--pf-c-alert--m-warning__title--Color);\n    --pf-c-alert--m-inline--BackgroundColor: var(--pf-c-alert--m-inline--m-warning--BackgroundColor); }\n  .pf-c-alert.pf-m-info {\n    --pf-c-alert--BorderTopColor: var(--pf-c-alert--m-info--BorderTopColor);\n    --pf-c-alert__icon--Color: var(--pf-c-alert--m-info__icon--Color);\n    --pf-c-alert__title--Color: var(--pf-c-alert--m-info__title--Color);\n    --pf-c-alert--m-inline--BackgroundColor: var(--pf-c-alert--m-inline--m-info--BackgroundColor); }\n  .pf-c-alert.pf-m-inline {\n    --pf-c-alert--BoxShadow: var(--pf-c-alert--m-inline--BoxShadow);\n    --pf-c-alert--BackgroundColor: var(--pf-c-alert--m-inline--BackgroundColor); }\n\n.pf-c-alert__icon {\n  grid-area: icon;\n  display: flex;\n  margin-top: var(--pf-c-alert__icon--MarginTop);\n  margin-right: var(--pf-c-alert__icon--MarginRight);\n  font-size: var(--pf-c-alert__icon--FontSize);\n  color: var(--pf-c-alert__icon--Color); }\n\n.pf-c-alert__title {\n  grid-area: title;\n  font-weight: var(--pf-c-alert__title--FontWeight);\n  color: var(--pf-c-alert__title--Color);\n  word-break: break-word; }\n  .pf-c-alert__title.pf-m-truncate {\n    display: -webkit-box;\n    -webkit-box-orient: vertical;\n    -webkit-line-clamp: var(--pf-c-alert__title--max-lines);\n    overflow: hidden; }\n\n.pf-c-alert__description {\n  grid-area: description;\n  padding-top: var(--pf-c-alert__description--PaddingTop);\n  word-break: break-word; }\n  .pf-c-alert__description + .pf-c-alert__action-group {\n    --pf-c-alert__action-group--PaddingTop: var(--pf-c-alert__description--action-group--PaddingTop); }\n\n.pf-c-alert__action {\n  grid-area: action;\n  margin-top: var(--pf-c-alert__action--MarginTop);\n  margin-right: var(--pf-c-alert__action--MarginRight);\n  margin-bottom: var(--pf-c-alert__action--MarginBottom);\n  transform: translateY(var(--pf-c-alert__action--TranslateY)); }\n  .pf-c-alert__action > .pf-c-button {\n    --pf-c-button--LineHeight: 1; }\n\n.pf-c-alert__action-group {\n  grid-area: actiongroup;\n  padding-top: var(--pf-c-alert__action-group--PaddingTop); }\n  .pf-c-alert__action-group > .pf-c-button {\n    --pf-c-button--m-link--m-inline--hover--TextDecoration: none; }\n    .pf-c-alert__action-group > .pf-c-button:not(:last-child) {\n      margin-right: var(--pf-c-alert__action-group__c-button--not-last-child--MarginRight); }\n\n.pf-m-overpass-font .pf-c-alert__title {\n  --pf-c-alert__title--FontWeight: var(--pf-global--FontWeight--normal); }\n\n.pf-c-alert-group {\n  --pf-c-alert-group__item--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-alert-group--m-toast--Top: var(--pf-global--spacer--2xl);\n  --pf-c-alert-group--m-toast--Right: var(--pf-global--spacer--xl);\n  --pf-c-alert-group--m-toast--MaxWidth: 37.5rem;\n  --pf-c-alert-group--m-toast--ZIndex: var(--pf-global--ZIndex--2xl); }\n  .pf-c-alert-group > * + * {\n    margin-top: var(--pf-c-alert-group__item--MarginTop); }\n  .pf-c-alert-group.pf-m-toast {\n    position: fixed;\n    top: var(--pf-c-alert-group--m-toast--Top);\n    right: var(--pf-c-alert-group--m-toast--Right);\n    z-index: var(--pf-c-alert-group--m-toast--ZIndex);\n    width: calc(100% - calc(var(--pf-c-alert-group--m-toast--Right) * 2));\n    max-width: var(--pf-c-alert-group--m-toast--MaxWidth); }\n\n.pf-c-app-launcher {\n  --pf-c-app-launcher__menu--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-app-launcher__menu--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-app-launcher__menu--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher__menu--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher__menu--Top: calc(100% + var(--pf-global--spacer--xs));\n  --pf-c-app-launcher__menu--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-app-launcher--m-top__menu--Top: 0;\n  --pf-c-app-launcher--m-top__menu--TranslateY: calc(-100% - var(--pf-global--spacer--xs));\n  --pf-c-app-launcher__toggle--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-app-launcher__toggle--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-app-launcher__toggle--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-app-launcher__toggle--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-app-launcher__toggle--Color: var(--pf-global--Color--200);\n  --pf-c-app-launcher__toggle--hover--Color: var(--pf-global--Color--100);\n  --pf-c-app-launcher__toggle--active--Color: var(--pf-global--Color--100);\n  --pf-c-app-launcher__toggle--focus--Color: var(--pf-global--Color--100);\n  --pf-c-app-launcher__toggle--disabled--Color: var(--pf-global--disabled-color--200);\n  --pf-c-app-launcher__toggle--m-expanded--Color: var(--pf-global--Color--100);\n  --pf-c-app-launcher__menu-search--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher__menu-search--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-app-launcher__menu-search--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-app-launcher__menu-search--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-app-launcher__menu-search--BottomBorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-app-launcher__menu-search--BottomBorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-app-launcher__menu-search--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher__menu-item--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher__menu-item--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-app-launcher__menu-item--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher__menu-item--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-app-launcher__menu-item--Color: var(--pf-global--Color--dark-100);\n  --pf-c-app-launcher__menu-item--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-app-launcher__menu-item--Width: 100%;\n  --pf-c-app-launcher__menu-item--disabled--Color: var(--pf-global--Color--dark-200);\n  --pf-c-app-launcher__menu-item--hover--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-app-launcher__menu-item--m-link--PaddingRight: 0;\n  --pf-c-app-launcher__menu-item--m-link--hover--BackgroundColor: transparent;\n  --pf-c-app-launcher__menu-item--m-action--Color: var(--pf-global--disabled-color--200);\n  --pf-c-app-launcher__menu-item--m-action--Width: auto;\n  --pf-c-app-launcher__menu-item--m-action--FontSize: var(--pf-global--icon--FontSize--sm);\n  --pf-c-app-launcher__menu-item--m-action--hover--BackgroundColor: transparent;\n  --pf-c-app-launcher__menu-item--hover__menu-item--m-action--Color: var(--pf-global--Color--200);\n  --pf-c-app-launcher__menu-item--m-action--hover--Color: var(--pf-global--Color--100);\n  --pf-c-app-launcher__menu-item--m-favorite__menu-item--m-action--Color: var(--pf-global--palette--gold-400);\n  --pf-c-app-launcher__menu-item-icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher__menu-item-icon--Width: var(--pf-global--icon--FontSize--lg);\n  --pf-c-app-launcher__menu-item-icon--Height: var(--pf-global--icon--FontSize--lg);\n  --pf-c-app-launcher__menu-item-external-icon--Color: var(--pf-global--link--Color);\n  --pf-c-app-launcher__menu-item-external-icon--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-app-launcher__menu-item-external-icon--TranslateY: -0.0625rem;\n  --pf-c-app-launcher__menu-item-external-icon--FontSize: var(--pf-global--icon--FontSize--sm);\n  --pf-c-app-launcher__group--group--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher__group-title--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher__group-title--PaddingRight: var(--pf-c-app-launcher__menu-item--PaddingRight);\n  --pf-c-app-launcher__group-title--PaddingBottom: var(--pf-c-app-launcher__menu-item--PaddingBottom);\n  --pf-c-app-launcher__group-title--PaddingLeft: var(--pf-c-app-launcher__menu-item--PaddingLeft);\n  --pf-c-app-launcher__group-title--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-app-launcher__group-title--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-app-launcher__group-title--Color: var(--pf-global--Color--dark-200);\n  --pf-c-app-launcher--c-divider--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher--c-divider--MarginBottom: var(--pf-global--spacer--sm);\n  position: relative;\n  display: inline-block;\n  max-width: 100%; }\n  .pf-c-app-launcher.pf-m-expanded > .pf-c-app-launcher__toggle {\n    color: var(--pf-c-app-launcher__toggle--m-expanded--Color); }\n  .pf-c-app-launcher .pf-c-divider {\n    margin-top: var(--pf-c-app-launcher--c-divider--MarginTop);\n    margin-bottom: var(--pf-c-app-launcher--c-divider--MarginBottom); }\n    .pf-c-app-launcher .pf-c-divider:last-child {\n      --pf-c-app-launcher--c-divider--MarginBottom: 0; }\n\n.pf-c-app-launcher__toggle {\n  padding: var(--pf-c-app-launcher__toggle--PaddingTop) var(--pf-c-app-launcher__toggle--PaddingRight) var(--pf-c-app-launcher__toggle--PaddingBottom) var(--pf-c-app-launcher__toggle--PaddingLeft);\n  color: var(--pf-c-app-launcher__toggle--Color);\n  border: none; }\n  .pf-c-app-launcher__toggle:hover {\n    --pf-c-app-launcher__toggle--Color: var(--pf-c-app-launcher__toggle--hover--Color); }\n  .pf-c-app-launcher__toggle:active, .pf-c-app-launcher__toggle.pf-m-active {\n    --pf-c-app-launcher__toggle--Color: var(--pf-c-app-launcher__toggle--active--Color); }\n  .pf-c-app-launcher__toggle:focus {\n    --pf-c-app-launcher__toggle--Color: var(--pf-c-app-launcher__toggle--focus--Color); }\n  .pf-c-app-launcher__toggle:disabled {\n    --pf-c-app-launcher__toggle--Color: var(--pf-c-app-launcher__toggle--disabled--Color);\n    pointer-events: none; }\n\n.pf-c-app-launcher__menu {\n  position: absolute;\n  top: var(--pf-c-app-launcher__menu--Top);\n  z-index: var(--pf-c-app-launcher__menu--ZIndex);\n  min-width: 100%;\n  padding-top: var(--pf-c-app-launcher__menu--PaddingTop);\n  padding-bottom: var(--pf-c-app-launcher__menu--PaddingBottom);\n  background-color: var(--pf-c-app-launcher__menu--BackgroundColor);\n  background-clip: padding-box;\n  box-shadow: var(--pf-c-app-launcher__menu--BoxShadow); }\n  .pf-c-app-launcher__menu.pf-m-align-right {\n    right: 0; }\n  .pf-c-app-launcher.pf-m-top .pf-c-app-launcher__menu {\n    --pf-c-app-launcher__menu--Top: var(--pf-c-app-launcher--m-top__menu--Top);\n    transform: translateY(var(--pf-c-app-launcher--m-top__menu--TranslateY)); }\n\n.pf-c-app-launcher__menu-search {\n  padding: var(--pf-c-app-launcher__menu-search--PaddingTop) var(--pf-c-app-launcher__menu-search--PaddingRight) var(--pf-c-app-launcher__menu-search--PaddingBottom) var(--pf-c-app-launcher__menu-search--PaddingLeft);\n  margin-bottom: var(--pf-c-app-launcher__menu-search--MarginBottom);\n  border-bottom: var(--pf-c-app-launcher__menu-search--BottomBorderWidth) solid var(--pf-c-app-launcher__menu-search--BottomBorderColor); }\n\n.pf-c-app-launcher__menu-wrapper {\n  display: flex; }\n  .pf-c-app-launcher__menu-wrapper.pf-m-favorite {\n    --pf-c-app-launcher__menu-item--m-action--Color: var(--pf-c-app-launcher__menu-item--m-favorite__menu-item--m-action--Color); }\n\n.pf-c-app-launcher__menu-item {\n  display: flex;\n  align-items: center;\n  width: var(--pf-c-app-launcher__menu-item--Width);\n  padding: var(--pf-c-app-launcher__menu-item--PaddingTop) var(--pf-c-app-launcher__menu-item--PaddingRight) var(--pf-c-app-launcher__menu-item--PaddingBottom) var(--pf-c-app-launcher__menu-item--PaddingLeft);\n  font-weight: var(--pf-c-app-launcher__menu-item--FontWeight);\n  color: var(--pf-c-app-launcher__menu-item--Color);\n  white-space: nowrap;\n  border: 0; }\n  .pf-c-app-launcher__menu-item:hover, .pf-c-app-launcher__menu-item:focus {\n    --pf-c-app-launcher__menu-item--m-action--Color: var(--pf-c-app-launcher__menu-item--hover__menu-item--m-action--Color);\n    text-decoration: none; }\n  .pf-c-app-launcher__menu-wrapper:hover,\n  .pf-c-app-launcher__menu-wrapper:focus-within,\n  .pf-c-app-launcher__menu-wrapper.pf-m-focus, .pf-c-app-launcher__menu-item:hover, .pf-c-app-launcher__menu-item:focus {\n    background-color: var(--pf-c-app-launcher__menu-item--hover--BackgroundColor); }\n  .pf-c-app-launcher__menu-item:disabled, .pf-c-app-launcher__menu-item.pf-m-disabled {\n    --pf-c-app-launcher__menu-item--Color: var(--pf-c-app-launcher__menu-item--disabled--Color);\n    pointer-events: none; }\n  .pf-c-app-launcher__menu-wrapper:disabled, .pf-c-app-launcher__menu-wrapper.pf-m-disabled, .pf-c-app-launcher__menu-item:disabled, .pf-c-app-launcher__menu-item.pf-m-disabled {\n    background-color: transparent; }\n  .pf-c-app-launcher__menu-wrapper.pf-m-external:hover .pf-c-app-launcher__menu-item-external-icon, .pf-c-app-launcher__menu-wrapper.pf-m-external:focus .pf-c-app-launcher__menu-item-external-icon, .pf-c-app-launcher__menu-item.pf-m-external:hover .pf-c-app-launcher__menu-item-external-icon, .pf-c-app-launcher__menu-item.pf-m-external:focus .pf-c-app-launcher__menu-item-external-icon {\n    opacity: 1; }\n  .pf-c-app-launcher__menu-item.pf-m-link {\n    --pf-c-app-launcher__menu-item--PaddingRight: var(--pf-c-app-launcher__menu-item--m-link--PaddingRight);\n    --pf-c-app-launcher__menu-item--hover--BackgroundColor: var(--pf-c-app-launcher__menu-item--m-link--hover--BackgroundColor); }\n  .pf-c-app-launcher__menu-item.pf-m-action {\n    --pf-c-app-launcher__menu-item--Color: var(--pf-c-app-launcher__menu-item--m-action--Color);\n    --pf-c-app-launcher__menu-item--Width: var(--pf-c-app-launcher__menu-item--m-action--Width);\n    --pf-c-app-launcher__menu-item--hover--BackgroundColor: var(--pf-c-app-launcher__menu-item--m-action--hover--BackgroundColor);\n    font-size: var(--pf-c-app-launcher__menu-item--m-action--FontSize); }\n    .pf-c-app-launcher__menu-item.pf-m-action:hover, .pf-c-app-launcher__menu-item.pf-m-action:focus {\n      --pf-c-app-launcher__menu-item--m-action--Color: var(--pf-c-app-launcher__menu-item--m-action--hover--Color); }\n\n.pf-c-app-launcher__menu-item-icon {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--pf-c-app-launcher__menu-item-icon--Width);\n  height: var(--pf-c-app-launcher__menu-item-icon--Height);\n  margin-right: var(--pf-c-app-launcher__menu-item-icon--MarginRight); }\n  .pf-c-app-launcher__menu-item-icon > * {\n    max-width: 100%;\n    max-height: 100%; }\n\n.pf-c-app-launcher__menu-item-external-icon {\n  padding-left: var(--pf-c-app-launcher__menu-item-external-icon--PaddingLeft);\n  margin-left: auto;\n  font-size: var(--pf-c-app-launcher__menu-item-external-icon--FontSize);\n  color: var(--pf-c-app-launcher__menu-item-external-icon--Color);\n  opacity: 0;\n  transform: translateY(var(--pf-c-app-launcher__menu-item-external-icon--TranslateY)); }\n\n.pf-c-app-launcher__group + .pf-c-app-launcher__group {\n  padding-top: var(--pf-c-app-launcher__group--group--PaddingTop); }\n\n.pf-c-app-launcher__group-title {\n  padding-top: var(--pf-c-app-launcher__group-title--PaddingTop);\n  padding-right: var(--pf-c-app-launcher__group-title--PaddingRight);\n  padding-bottom: var(--pf-c-app-launcher__group-title--PaddingBottom);\n  padding-left: var(--pf-c-app-launcher__group-title--PaddingLeft);\n  font-size: var(--pf-c-app-launcher__group-title--FontSize);\n  font-weight: var(--pf-c-app-launcher__group-title--FontWeight);\n  color: var(--pf-c-app-launcher__group-title--Color); }\n\n.pf-c-avatar {\n  --pf-c-avatar--BorderRadius: var(--pf-global--BorderRadius--lg);\n  --pf-c-avatar--Width: 2.25rem;\n  --pf-c-avatar--Height: 2.25rem;\n  width: var(--pf-c-avatar--Width);\n  height: var(--pf-c-avatar--Height);\n  border-radius: var(--pf-c-avatar--BorderRadius); }\n\n.pf-c-backdrop {\n  --pf-c-backdrop--ZIndex: var(--pf-global--ZIndex--lg);\n  --pf-c-backdrop--BackgroundColor: var(--pf-global--BackgroundColor--dark-transparent-100);\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: var(--pf-c-backdrop--ZIndex);\n  width: 100%;\n  height: 100%;\n  background-color: var(--pf-c-backdrop--BackgroundColor); }\n\n.pf-c-backdrop__open {\n  overflow: hidden; }\n\n.pf-c-background-image {\n  --pf-c-background-image--BackgroundColor: var(--pf-global--BackgroundColor--dark-100);\n  --pf-c-background-image--BackgroundImage: url("./assets/images/pfbg_576.jpg");\n  --pf-c-background-image--BackgroundImage-2x: url("./assets/images/pfbg_576@2x.jpg");\n  --pf-c-background-image--BackgroundImage--sm: url("./assets/images/pfbg_768.jpg");\n  --pf-c-background-image--BackgroundImage--sm-2x: url("./assets/images/pfbg_768@2x.jpg");\n  --pf-c-background-image--BackgroundImage--lg: url("./assets/images/pfbg_2000.jpg");\n  --pf-c-background-image--Filter: url("#image_overlay"); }\n  .pf-c-background-image::before {\n    position: fixed;\n    top: 0;\n    left: 0;\n    z-index: -1;\n    width: 100%;\n    height: 100%;\n    content: "";\n    background-color: var(--pf-c-background-image--BackgroundColor);\n    background-image: var(--pf-c-background-image--BackgroundImage);\n    filter: var(--pf-c-background-image--Filter);\n    background-repeat: no-repeat;\n    background-size: cover; }\n    @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {\n      .pf-c-background-image::before {\n        --pf-c-background-image--BackgroundImage: var(--pf-c-background-image--BackgroundImage-2x); } }\n    @media (min-width: 576px) {\n      .pf-c-background-image::before {\n        --pf-c-background-image--BackgroundImage: var(--pf-c-background-image--BackgroundImage--sm); } }\n    @media (min-width: 576px) and (-webkit-min-device-pixel-ratio: 2), (min-width: 576px) and (min-resolution: 192dpi) {\n      .pf-c-background-image::before {\n        --pf-c-background-image--BackgroundImage: var(--pf-c-background-image--BackgroundImage--sm-2x); } }\n    @media (min-width: 992px) {\n      .pf-c-background-image::before {\n        --pf-c-background-image--BackgroundImage: var(--pf-c-background-image--BackgroundImage--lg); } }\n\n.pf-c-background-image__filter {\n  display: block; }\n\n.pf-c-badge {\n  --pf-c-badge--BorderRadius: var(--pf-global--BorderRadius--lg);\n  --pf-c-badge--FontSize: var(--pf-global--FontSize--xs);\n  --pf-c-badge--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-badge--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-badge--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-badge--Color: var(--pf-global--Color--dark-100);\n  --pf-c-badge--MinWidth: var(--pf-global--spacer--xl);\n  --pf-c-badge--m-read--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-badge--m-read--Color: var(--pf-global--Color--dark-100);\n  --pf-c-badge--m-unread--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-badge--m-unread--Color: var(--pf-global--Color--light-100);\n  display: inline-block;\n  min-width: var(--pf-c-badge--MinWidth);\n  padding-right: var(--pf-c-badge--PaddingRight);\n  padding-left: var(--pf-c-badge--PaddingLeft);\n  font-size: var(--pf-c-badge--FontSize);\n  font-weight: var(--pf-c-badge--FontWeight);\n  color: var(--pf-c-badge--Color);\n  text-align: center;\n  background-color: var(--pf-c-badge--BackgroundColor);\n  border-radius: var(--pf-c-badge--BorderRadius); }\n  .pf-c-badge.pf-m-read {\n    --pf-c-badge--Color: var(--pf-c-badge--m-read--Color);\n    --pf-c-badge--BackgroundColor: var(--pf-c-badge--m-read--BackgroundColor); }\n  .pf-c-badge.pf-m-unread {\n    --pf-c-badge--Color: var(--pf-c-badge--m-unread--Color);\n    --pf-c-badge--BackgroundColor: var(--pf-c-badge--m-unread--BackgroundColor); }\n\n.pf-c-banner {\n  --pf-c-banner--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-banner--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-banner--md--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-banner--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-banner--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-banner--md--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-banner--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-banner--Color: var(--pf-global--Color--100);\n  --pf-c-banner--BackgroundColor: var(--pf-global--BackgroundColor--dark-400);\n  --pf-c-banner--m-info--BackgroundColor: var(--pf-global--palette--blue-200);\n  --pf-c-banner--m-danger--BackgroundColor: var(--pf-global--danger-color--100);\n  --pf-c-banner--m-success--BackgroundColor: var(--pf-global--success-color--100);\n  --pf-c-banner--m-warning--BackgroundColor: var(--pf-global--warning-color--100);\n  --pf-c-banner--m-sticky--ZIndex: var(--pf-global--ZIndex--md);\n  --pf-c-banner--m-sticky--BoxShadow: var(--pf-global--BoxShadow--md-bottom);\n  color: var(--pf-global--Color--100);\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  padding: var(--pf-c-banner--PaddingTop) var(--pf-c-banner--PaddingRight) var(--pf-c-banner--PaddingBottom) var(--pf-c-banner--PaddingLeft);\n  flex-shrink: 0;\n  font-size: var(--pf-c-banner--FontSize);\n  color: var(--pf-c-banner--Color);\n  white-space: nowrap;\n  background-color: var(--pf-c-banner--BackgroundColor); }\n  @media (min-width: 768px) {\n    .pf-c-banner {\n      --pf-c-banner--PaddingRight: var(--pf-c-banner--md--PaddingRight);\n      --pf-c-banner--PaddingLeft: var(--pf-c-banner--md--PaddingLeft); } }\n  .pf-c-banner.pf-m-info {\n    color: var(--pf-global--Color--100);\n    --pf-c-banner--BackgroundColor: var(--pf-c-banner--m-info--BackgroundColor); }\n  .pf-c-banner.pf-m-danger {\n    --pf-c-banner--BackgroundColor: var(--pf-c-banner--m-danger--BackgroundColor); }\n  .pf-c-banner.pf-m-success {\n    --pf-c-banner--BackgroundColor: var(--pf-c-banner--m-success--BackgroundColor); }\n  .pf-c-banner.pf-m-warning {\n    color: var(--pf-global--Color--100);\n    --pf-c-banner--BackgroundColor: var(--pf-c-banner--m-warning--BackgroundColor); }\n  .pf-c-banner.pf-m-sticky {\n    position: sticky;\n    top: 0;\n    z-index: var(--pf-c-banner--m-sticky--ZIndex);\n    box-shadow: var(--pf-c-banner--m-sticky--BoxShadow); }\n\n.pf-c-breadcrumb {\n  --pf-c-breadcrumb__item--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-breadcrumb__item--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-breadcrumb__item--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-breadcrumb__item-divider--Color: var(--pf-global--BorderColor--200);\n  --pf-c-breadcrumb__item-divider--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-breadcrumb__item-divider--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-breadcrumb__link--m-current--Color: var(--pf-global--Color--100);\n  --pf-c-breadcrumb__heading--FontSize: var(--pf-global--FontSize--sm);\n  display: inline-flex; }\n\n.pf-c-breadcrumb__list {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center; }\n\n.pf-c-breadcrumb__item {\n  display: flex;\n  align-items: baseline;\n  font-size: var(--pf-c-breadcrumb__item--FontSize);\n  font-weight: var(--pf-c-breadcrumb__item--FontWeight);\n  line-height: var(--pf-c-breadcrumb__item--LineHeight);\n  white-space: nowrap;\n  list-style: none; }\n  .pf-c-breadcrumb__item:not(:last-child) {\n    margin-right: var(--pf-c-breadcrumb__item--MarginRight); }\n\n.pf-c-breadcrumb__item-divider {\n  margin-right: var(--pf-c-breadcrumb__item-divider--MarginRight);\n  font-size: var(--pf-c-breadcrumb__item-divider--FontSize);\n  line-height: 1;\n  color: var(--pf-c-breadcrumb__item-divider--Color); }\n\n.pf-c-breadcrumb__link {\n  font-size: inherit;\n  font-weight: var(--pf-c-breadcrumb__link--FontWeight);\n  line-height: inherit;\n  word-break: break-word; }\n  .pf-c-breadcrumb__link.pf-m-current {\n    cursor: default; }\n    .pf-c-breadcrumb__link.pf-m-current, .pf-c-breadcrumb__link.pf-m-current:hover {\n      color: var(--pf-c-breadcrumb__link--m-current--Color);\n      text-decoration: none; }\n\n.pf-c-breadcrumb__heading {\n  display: inline;\n  font-size: var(--pf-c-breadcrumb__heading--FontSize); }\n\n.pf-c-breadcrumb__link,\n.pf-c-breadcrumb__heading {\n  white-space: normal; }\n\n.pf-m-overpass-font .pf-c-breadcrumb__link,\n.pf-m-overpass-font .pf-c-breadcrumb__item {\n  font-weight: var(--pf-global--FontWeight--semi-bold); }\n\n.pf-c-breadcrumb__list > :first-child .pf-c-breadcrumb__item-divider {\n  display: none;\n  visibility: hidden; }\n\n.pf-c-button {\n  --pf-c-button--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-button--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-button--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-button--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-button--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-button--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-button--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-button--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-button--after--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-button--after--BorderColor: transparent;\n  --pf-c-button--after--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-button--hover--after--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-button--focus--after--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-button--active--after--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-button--disabled--Color: var(--pf-global--disabled-color--100);\n  --pf-c-button--disabled--BackgroundColor: var(--pf-global--disabled-color--200);\n  --pf-c-button--disabled--after--BorderColor: transparent;\n  --pf-c-button--m-primary--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-button--m-primary--Color: var(--pf-global--Color--light-100);\n  --pf-c-button--m-primary--hover--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-button--m-primary--hover--Color: var(--pf-global--Color--light-100);\n  --pf-c-button--m-primary--focus--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-button--m-primary--focus--Color: var(--pf-global--Color--light-100);\n  --pf-c-button--m-primary--active--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-button--m-primary--active--Color: var(--pf-global--Color--light-100);\n  --pf-c-button--m-secondary--BackgroundColor: transparent;\n  --pf-c-button--m-secondary--after--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-button--m-secondary--Color: var(--pf-global--primary-color--100);\n  --pf-c-button--m-secondary--hover--BackgroundColor: transparent;\n  --pf-c-button--m-secondary--hover--after--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-button--m-secondary--hover--Color: var(--pf-global--primary-color--100);\n  --pf-c-button--m-secondary--focus--BackgroundColor: transparent;\n  --pf-c-button--m-secondary--focus--after--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-button--m-secondary--focus--Color: var(--pf-global--primary-color--100);\n  --pf-c-button--m-secondary--active--BackgroundColor: transparent;\n  --pf-c-button--m-secondary--active--after--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-button--m-secondary--active--Color: var(--pf-global--primary-color--100);\n  --pf-c-button--m-tertiary--BackgroundColor: transparent;\n  --pf-c-button--m-tertiary--after--BorderColor: var(--pf-global--Color--100);\n  --pf-c-button--m-tertiary--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-tertiary--hover--BackgroundColor: transparent;\n  --pf-c-button--m-tertiary--hover--after--BorderColor: var(--pf-global--Color--100);\n  --pf-c-button--m-tertiary--hover--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-tertiary--focus--BackgroundColor: transparent;\n  --pf-c-button--m-tertiary--focus--after--BorderColor: var(--pf-global--Color--100);\n  --pf-c-button--m-tertiary--focus--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-tertiary--active--BackgroundColor: transparent;\n  --pf-c-button--m-tertiary--active--after--BorderColor: var(--pf-global--Color--100);\n  --pf-c-button--m-tertiary--active--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-warning--BackgroundColor: var(--pf-global--warning-color--100);\n  --pf-c-button--m-warning--Color: var(--pf-global--Color--dark-100);\n  --pf-c-button--m-warning--hover--BackgroundColor: var(--pf-global--palette--gold-500);\n  --pf-c-button--m-warning--hover--Color: var(--pf-global--Color--dark-100);\n  --pf-c-button--m-warning--focus--BackgroundColor: var(--pf-global--palette--gold-500);\n  --pf-c-button--m-warning--focus--Color: var(--pf-global--Color--dark-100);\n  --pf-c-button--m-warning--active--BackgroundColor: var(--pf-global--palette--gold-500);\n  --pf-c-button--m-warning--active--Color: var(--pf-global--Color--dark-100);\n  --pf-c-button--m-danger--BackgroundColor: var(--pf-global--danger-color--100);\n  --pf-c-button--m-danger--Color: var(--pf-global--Color--light-100);\n  --pf-c-button--m-danger--hover--BackgroundColor: var(--pf-global--danger-color--200);\n  --pf-c-button--m-danger--hover--Color: var(--pf-global--Color--light-100);\n  --pf-c-button--m-danger--focus--BackgroundColor: var(--pf-global--danger-color--200);\n  --pf-c-button--m-danger--focus--Color: var(--pf-global--Color--light-100);\n  --pf-c-button--m-danger--active--BackgroundColor: var(--pf-global--danger-color--200);\n  --pf-c-button--m-danger--active--Color: var(--pf-global--Color--light-100);\n  --pf-c-button--m-link--BackgroundColor: transparent;\n  --pf-c-button--m-link--Color: var(--pf-global--link--Color);\n  --pf-c-button--m-link--hover--BackgroundColor: transparent;\n  --pf-c-button--m-link--hover--Color: var(--pf-global--link--Color--hover);\n  --pf-c-button--m-link--focus--BackgroundColor: transparent;\n  --pf-c-button--m-link--focus--Color: var(--pf-global--link--Color--hover);\n  --pf-c-button--m-link--active--BackgroundColor: transparent;\n  --pf-c-button--m-link--active--Color: var(--pf-global--link--Color--hover);\n  --pf-c-button--m-link--disabled--BackgroundColor: transparent;\n  --pf-c-button--m-link--m-inline--FontSize: inherit;\n  --pf-c-button--m-link--m-inline--hover--TextDecoration: var(--pf-global--link--TextDecoration--hover);\n  --pf-c-button--m-link--m-inline--hover--Color: var(--pf-global--link--Color--hover);\n  --pf-c-button--m-plain--BackgroundColor: transparent;\n  --pf-c-button--m-plain--Color: var(--pf-global--Color--200);\n  --pf-c-button--m-plain--hover--BackgroundColor: transparent;\n  --pf-c-button--m-plain--hover--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-plain--focus--BackgroundColor: transparent;\n  --pf-c-button--m-plain--focus--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-plain--active--BackgroundColor: transparent;\n  --pf-c-button--m-plain--active--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-plain--disabled--Color: var(--pf-global--disabled-color--200);\n  --pf-c-button--m-plain--disabled--BackgroundColor: transparent;\n  --pf-c-button--m-control--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-button--m-control--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-control--BorderRadius: 0;\n  --pf-c-button--m-control--after--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-button--m-control--after--BorderTopColor: var(--pf-global--BorderColor--300);\n  --pf-c-button--m-control--after--BorderRightColor: var(--pf-global--BorderColor--300);\n  --pf-c-button--m-control--after--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-button--m-control--after--BorderLeftColor: var(--pf-global--BorderColor--300);\n  --pf-c-button--m-control--disabled--BackgroundColor: var(--pf-global--disabled-color--300);\n  --pf-c-button--m-control--hover--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-button--m-control--hover--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-control--hover--after--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-button--m-control--hover--after--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-button--m-control--active--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-button--m-control--active--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-control--active--after--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-button--m-control--active--after--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-button--m-control--focus--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-button--m-control--focus--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-control--focus--after--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-button--m-control--focus--after--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-button--m-control--m-expanded--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-button--m-control--m-expanded--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-control--m-expanded--after--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-button--m-control--m-expanded--after--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-button--m-small--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-button--m-display-lg--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-button--m-display-lg--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-button--m-display-lg--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-button--m-display-lg--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-button--m-display-lg--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-button--m-link--m-display-lg--FontSize: var(--pf-global--FontSize--lg);\n  --pf-c-button__icon--m-start--MarginRight: var(--pf-global--spacer--xs);\n  --pf-c-button__icon--m-end--MarginLeft: var(--pf-global--spacer--xs);\n  --pf-c-button__progress--width: calc(var(--pf-global--icon--FontSize--md) + var(--pf-global--spacer--sm));\n  --pf-c-button__progress--Opacity: 0;\n  --pf-c-button__progress--TranslateY: -50%;\n  --pf-c-button__progress--Top: 50%;\n  --pf-c-button__progress--Left: var(--pf-global--spacer--md);\n  --pf-c-button--m-progress--TransitionProperty: padding;\n  --pf-c-button--m-progress--TransitionDuration: var(--pf-global--TransitionDuration);\n  --pf-c-button--m-progress--PaddingRight: calc(var(--pf-global--spacer--md) + var(--pf-c-button__progress--width) / 2);\n  --pf-c-button--m-progress--PaddingLeft: calc(var(--pf-global--spacer--md) + var(--pf-c-button__progress--width) / 2);\n  --pf-c-button--m-in-progress--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-button--m-in-progress--PaddingLeft: calc(var(--pf-global--spacer--md) + var(--pf-c-button__progress--width));\n  position: relative;\n  display: inline-block;\n  padding: var(--pf-c-button--PaddingTop) var(--pf-c-button--PaddingRight) var(--pf-c-button--PaddingBottom) var(--pf-c-button--PaddingLeft);\n  font-size: var(--pf-c-button--FontSize);\n  font-weight: var(--pf-c-button--FontWeight);\n  line-height: var(--pf-c-button--LineHeight);\n  text-align: center;\n  white-space: nowrap;\n  user-select: none;\n  border: 0;\n  border-radius: var(--pf-c-button--BorderRadius); }\n  .pf-c-button::after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    pointer-events: none;\n    content: "";\n    border: var(--pf-c-button--after--BorderWidth) solid;\n    border-color: var(--pf-c-button--after--BorderColor);\n    border-radius: var(--pf-c-button--after--BorderRadius); }\n  .pf-c-button:hover {\n    --pf-c-button--after--BorderWidth: var(--pf-c-button--hover--after--BorderWidth);\n    text-decoration: none; }\n  .pf-c-button:focus {\n    --pf-c-button--after--BorderWidth: var(--pf-c-button--focus--after--BorderWidth); }\n  .pf-c-button:active, .pf-c-button.pf-m-active {\n    --pf-c-button--after--BorderWidth: var(--pf-c-button--active--after--BorderWidth); }\n  .pf-c-button.pf-m-block {\n    display: block;\n    width: 100%; }\n  .pf-c-button.pf-m-small {\n    --pf-c-button--FontSize: var(--pf-c-button--m-small--FontSize); }\n  .pf-c-button.pf-m-primary.pf-m-display-lg, .pf-c-button.pf-m-secondary.pf-m-display-lg, .pf-c-button.pf-m-tertiary.pf-m-display-lg, .pf-c-button.pf-m-link.pf-m-display-lg {\n    --pf-c-button--PaddingTop: var(--pf-c-button--m-display-lg--PaddingTop);\n    --pf-c-button--PaddingRight: var(--pf-c-button--m-display-lg--PaddingRight);\n    --pf-c-button--PaddingBottom: var(--pf-c-button--m-display-lg--PaddingBottom);\n    --pf-c-button--PaddingLeft: var(--pf-c-button--m-display-lg--PaddingLeft);\n    --pf-c-button--FontWeight: var(--pf-c-button--m-display-lg--FontWeight); }\n  .pf-c-button.pf-m-primary {\n    color: var(--pf-c-button--m-primary--Color);\n    background-color: var(--pf-c-button--m-primary--BackgroundColor); }\n    .pf-c-button.pf-m-primary:hover {\n      --pf-c-button--m-primary--Color: var(--pf-c-button--m-primary--hover--Color);\n      --pf-c-button--m-primary--BackgroundColor: var(--pf-c-button--m-primary--hover--BackgroundColor); }\n    .pf-c-button.pf-m-primary:focus {\n      --pf-c-button--m-primary--Color: var(--pf-c-button--m-primary--focus--Color);\n      --pf-c-button--m-primary--BackgroundColor: var(--pf-c-button--m-primary--focus--BackgroundColor); }\n    .pf-c-button.pf-m-primary:active, .pf-c-button.pf-m-primary.pf-m-active {\n      --pf-c-button--m-primary--Color: var(--pf-c-button--m-primary--active--Color);\n      --pf-c-button--m-primary--BackgroundColor: var(--pf-c-button--m-primary--active--BackgroundColor); }\n  .pf-c-button.pf-m-secondary {\n    --pf-c-button--after--BorderColor: var(--pf-c-button--m-secondary--after--BorderColor);\n    color: var(--pf-c-button--m-secondary--Color);\n    background-color: var(--pf-c-button--m-secondary--BackgroundColor); }\n    .pf-c-button.pf-m-secondary:hover {\n      --pf-c-button--m-secondary--Color: var(--pf-c-button--m-secondary--hover--Color);\n      --pf-c-button--m-secondary--BackgroundColor: var(--pf-c-button--m-secondary--hover--BackgroundColor);\n      --pf-c-button--after--BorderColor: var(--pf-c-button--m-secondary--hover--after--BorderColor); }\n    .pf-c-button.pf-m-secondary:focus {\n      --pf-c-button--m-secondary--Color: var(--pf-c-button--m-secondary--focus--Color);\n      --pf-c-button--m-secondary--BackgroundColor: var(--pf-c-button--m-secondary--focus--BackgroundColor);\n      --pf-c-button--after--BorderColor: var(--pf-c-button--m-secondary--focus--after--BorderColor); }\n    .pf-c-button.pf-m-secondary.pf-m-active, .pf-c-button.pf-m-secondary:active {\n      --pf-c-button--m-secondary--Color: var(--pf-c-button--m-secondary--active--Color);\n      --pf-c-button--m-secondary--BackgroundColor: var(--pf-c-button--m-secondary--active--BackgroundColor);\n      --pf-c-button--after--BorderColor: var(--pf-c-button--m-secondary--active--after--BorderColor); }\n  .pf-c-button.pf-m-tertiary {\n    --pf-c-button--after--BorderColor: var(--pf-c-button--m-tertiary--after--BorderColor);\n    color: var(--pf-c-button--m-tertiary--Color);\n    background-color: var(--pf-c-button--m-tertiary--BackgroundColor); }\n    .pf-c-button.pf-m-tertiary:hover {\n      --pf-c-button--m-tertiary--Color: var(--pf-c-button--m-tertiary--hover--Color);\n      --pf-c-button--m-tertiary--BackgroundColor: var(--pf-c-button--m-tertiary--hover--BackgroundColor);\n      --pf-c-button--after--BorderColor: var(--pf-c-button--m-tertiary--hover--after--BorderColor); }\n    .pf-c-button.pf-m-tertiary:focus {\n      --pf-c-button--m-tertiary--Color: var(--pf-c-button--m-tertiary--focus--Color);\n      --pf-c-button--m-tertiary--BackgroundColor: var(--pf-c-button--m-tertiary--focus--BackgroundColor);\n      --pf-c-button--after--BorderColor: var(--pf-c-button--m-tertiary--focus--after--BorderColor); }\n    .pf-c-button.pf-m-tertiary:active, .pf-c-button.pf-m-tertiary.pf-m-active {\n      --pf-c-button--m-tertiary--Color: var(--pf-c-button--m-tertiary--active--Color);\n      --pf-c-button--m-tertiary--BackgroundColor: var(--pf-c-button--m-tertiary--active--BackgroundColor);\n      --pf-c-button--after--BorderColor: var(--pf-c-button--m-tertiary--active--after--BorderColor); }\n  .pf-c-button.pf-m-danger {\n    color: var(--pf-c-button--m-danger--Color);\n    background-color: var(--pf-c-button--m-danger--BackgroundColor); }\n    .pf-c-button.pf-m-danger:hover {\n      --pf-c-button--m-danger--Color: var(--pf-c-button--m-danger--hover--Color);\n      --pf-c-button--m-danger--BackgroundColor: var(--pf-c-button--m-danger--hover--BackgroundColor); }\n    .pf-c-button.pf-m-danger:focus {\n      --pf-c-button--m-danger--Color: var(--pf-c-button--m-danger--focus--Color);\n      --pf-c-button--m-danger--BackgroundColor: var(--pf-c-button--m-danger--focus--BackgroundColor); }\n    .pf-c-button.pf-m-danger:active, .pf-c-button.pf-m-danger.pf-m-active {\n      --pf-c-button--m-danger--Color: var(--pf-c-button--m-danger--active--Color);\n      --pf-c-button--m-danger--BackgroundColor: var(--pf-c-button--m-danger--active--BackgroundColor); }\n  .pf-c-button.pf-m-warning {\n    color: var(--pf-c-button--m-warning--Color);\n    background-color: var(--pf-c-button--m-warning--BackgroundColor); }\n    .pf-c-button.pf-m-warning:hover {\n      --pf-c-button--m-warning--Color: var(--pf-c-button--m-warning--hover--Color);\n      --pf-c-button--m-warning--BackgroundColor: var(--pf-c-button--m-warning--hover--BackgroundColor); }\n    .pf-c-button.pf-m-warning:focus {\n      --pf-c-button--m-warning--Color: var(--pf-c-button--m-warning--focus--Color);\n      --pf-c-button--m-warning--BackgroundColor: var(--pf-c-button--m-warning--focus--BackgroundColor); }\n    .pf-c-button.pf-m-warning:active, .pf-c-button.pf-m-warning.pf-m-active {\n      --pf-c-button--m-warning--Color: var(--pf-c-button--m-warning--active--Color);\n      --pf-c-button--m-warning--BackgroundColor: var(--pf-c-button--m-warning--active--BackgroundColor); }\n  .pf-c-button.pf-m-link {\n    --pf-c-button--disabled--BackgroundColor: var(--pf-c-button--m-link--disabled--BackgroundColor);\n    color: var(--pf-c-button--m-link--Color);\n    background-color: var(--pf-c-button--m-link--BackgroundColor); }\n    .pf-c-button.pf-m-link:not(.pf-m-inline):hover {\n      --pf-c-button--m-link--Color: var(--pf-c-button--m-link--hover--Color);\n      --pf-c-button--m-link--BackgroundColor: var(--pf-c-button--m-link--hover--BackgroundColor); }\n    .pf-c-button.pf-m-link:not(.pf-m-inline):focus {\n      --pf-c-button--m-link--Color: var(--pf-c-button--m-link--focus--Color);\n      --pf-c-button--m-link--BackgroundColor: var(--pf-c-button--m-link--focus--BackgroundColor); }\n    .pf-c-button.pf-m-link:not(.pf-m-inline):active, .pf-c-button.pf-m-link:not(.pf-m-inline).pf-m-active {\n      --pf-c-button--m-link--Color: var(--pf-c-button--m-link--active--Color);\n      --pf-c-button--m-link--BackgroundColor: var(--pf-c-button--m-link--active--BackgroundColor); }\n    .pf-c-button.pf-m-link.pf-m-inline {\n      --pf-c-button--FontSize: var(--pf-c-button--m-link--m-inline--FontSize);\n      display: inline;\n      padding: 0;\n      text-align: left;\n      white-space: normal;\n      cursor: pointer; }\n      .pf-c-button.pf-m-link.pf-m-inline:hover {\n        --pf-c-button--m-link--Color: var(--pf-c-button--m-link--m-inline--hover--Color);\n        text-decoration: var(--pf-c-button--m-link--m-inline--hover--TextDecoration); }\n    .pf-c-button.pf-m-link.pf-m-display-lg {\n      --pf-c-button--FontSize: var(--pf-c-button--m-link--m-display-lg--FontSize); }\n  .pf-c-button.pf-m-control {\n    --pf-c-button--BorderRadius: var(--pf-c-button--m-control--BorderRadius);\n    --pf-c-button--disabled--BackgroundColor: var(--pf-c-button--m-control--disabled--BackgroundColor);\n    --pf-c-button--after--BorderWidth: var(--pf-c-button--m-control--after--BorderWidth);\n    --pf-c-button--after--BorderColor: var(--pf-c-button--m-control--after--BorderTopColor) var(--pf-c-button--m-control--after--BorderRightColor) var(--pf-c-button--m-control--after--BorderBottomColor) var(--pf-c-button--m-control--after--BorderLeftColor);\n    color: var(--pf-c-button--m-control--Color);\n    background-color: var(--pf-c-button--m-control--BackgroundColor); }\n    .pf-c-button.pf-m-control::after {\n      border-radius: initial; }\n    .pf-c-button.pf-m-control:hover {\n      --pf-c-button--m-control--Color: var(--pf-c-button--m-control--hover--Color);\n      --pf-c-button--m-control--BackgroundColor: var(--pf-c-button--m-control--hover--BackgroundColor);\n      --pf-c-button--m-control--after--BorderBottomColor: var(--pf-c-button--m-control--hover--after--BorderBottomColor); }\n      .pf-c-button.pf-m-control:hover::after {\n        border-bottom-width: var(--pf-c-button--m-control--hover--after--BorderBottomWidth); }\n    .pf-c-button.pf-m-control:active, .pf-c-button.pf-m-control.pf-m-active {\n      --pf-c-button--m-control--Color: var(--pf-c-button--m-control--active--Color);\n      --pf-c-button--m-control--BackgroundColor: var(--pf-c-button--m-control--active--BackgroundColor);\n      --pf-c-button--m-control--after--BorderBottomColor: var(--pf-c-button--m-control--active--after--BorderBottomColor); }\n      .pf-c-button.pf-m-control:active::after, .pf-c-button.pf-m-control.pf-m-active::after {\n        border-bottom-width: var(--pf-c-button--m-control--active--after--BorderBottomWidth); }\n    .pf-c-button.pf-m-control:focus {\n      --pf-c-button--m-control--Color: var(--pf-c-button--m-control--focus--Color);\n      --pf-c-button--m-control--BackgroundColor: var(--pf-c-button--m-control--focus--BackgroundColor);\n      --pf-c-button--m-control--after--BorderBottomColor: var(--pf-c-button--m-control--focus--after--BorderBottomColor); }\n      .pf-c-button.pf-m-control:focus::after {\n        border-bottom-width: var(--pf-c-button--m-control--focus--after--BorderBottomWidth); }\n    .pf-c-button.pf-m-control.pf-m-expanded {\n      --pf-c-button--m-control--Color: var(--pf-c-button--m-control--m-expanded--Color);\n      --pf-c-button--m-control--BackgroundColor: var(--pf-c-button--m-control--m-expanded--BackgroundColor);\n      --pf-c-button--m-control--after--BorderBottomColor: var(--pf-c-button--m-control--m-expanded--after--BorderBottomColor); }\n      .pf-c-button.pf-m-control.pf-m-expanded::after {\n        border-bottom-width: var(--pf-c-button--m-control--m-expanded--after--BorderBottomWidth); }\n  .pf-c-button.pf-m-plain {\n    --pf-c-button--disabled--Color: var(--pf-c-button--m-plain--disabled--Color);\n    --pf-c-button--disabled--BackgroundColor: var(--pf-c-button--m-plain--disabled--BackgroundColor);\n    color: var(--pf-c-button--m-plain--Color);\n    background-color: var(--pf-c-button--m-plain--BackgroundColor); }\n    .pf-c-button.pf-m-plain:hover {\n      --pf-c-button--m-plain--Color: var(--pf-c-button--m-plain--hover--Color);\n      --pf-c-button--m-plain--BackgroundColor: var(--pf-c-button--m-plain--hover--BackgroundColor); }\n    .pf-c-button.pf-m-plain:active, .pf-c-button.pf-m-plain.pf-m-active {\n      --pf-c-button--m-plain--Color: var(--pf-c-button--m-plain--active--Color);\n      --pf-c-button--m-plain--BackgroundColor: var(--pf-c-button--m-plain--active--BackgroundColor); }\n    .pf-c-button.pf-m-plain:focus {\n      --pf-c-button--m-plain--Color: var(--pf-c-button--m-plain--focus--Color);\n      --pf-c-button--m-plain--BackgroundColor: var(--pf-c-button--m-plain--focus--BackgroundColor); }\n  .pf-c-button:disabled, .pf-c-button.pf-m-disabled {\n    pointer-events: none; }\n  .pf-c-button:disabled, .pf-c-button.pf-m-disabled, .pf-c-button.pf-m-aria-disabled {\n    --pf-c-button--after--BorderColor: var(--pf-c-button--disabled--after--BorderColor);\n    color: var(--pf-c-button--disabled--Color);\n    background-color: var(--pf-c-button--disabled--BackgroundColor); }\n  .pf-c-button.pf-m-aria-disabled {\n    --pf-c-button--after--BorderWidth: 0;\n    --pf-c-button--m-link--m-inline--hover--TextDecoration: none;\n    cursor: default; }\n  .pf-c-button.pf-m-progress {\n    --pf-c-button--PaddingRight: var(--pf-c-button--m-progress--PaddingRight);\n    --pf-c-button--PaddingLeft: var(--pf-c-button--m-progress--PaddingLeft);\n    transition: var(--pf-c-button--m-progress--TransitionProperty) var(--pf-c-button--m-progress--TransitionDuration); }\n  .pf-c-button.pf-m-in-progress {\n    --pf-c-button--PaddingRight: var(--pf-c-button--m-in-progress--PaddingRight);\n    --pf-c-button--PaddingLeft: var(--pf-c-button--m-in-progress--PaddingLeft); }\n\n.pf-c-button__icon.pf-m-start {\n  margin-right: var(--pf-c-button__icon--m-start--MarginRight); }\n\n.pf-c-button__icon.pf-m-end {\n  margin-left: var(--pf-c-button__icon--m-end--MarginLeft); }\n\n.pf-c-button__progress {\n  position: absolute;\n  top: var(--pf-c-button__progress--Top);\n  left: var(--pf-c-button__progress--Left);\n  line-height: 1;\n  transform: translateY(var(--pf-c-button__progress--TranslateY)); }\n  .pf-c-button__progress .pf-c-spinner {\n    --pf-c-spinner--Color: currentColor; }\n\n.pf-m-overpass-font .pf-c-button {\n  --pf-c-button--FontWeight: var(--pf-global--FontWeight--semi-bold); }\n\n.pf-c-calendar-month {\n  --pf-c-calendar-month--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-calendar-month--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-calendar-month--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-calendar-month--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-calendar-month--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-calendar-month--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-calendar-month__header--MarginBottom: var(--pf-global--spacer--md);\n  --pf-c-calendar-month__header-year--Width: 8ch;\n  --pf-c-calendar-month__header-nav-control--MarginRight: 0;\n  --pf-c-calendar-month__header-nav-control--MarginLeft: 0;\n  --pf-c-calendar-month__header-nav-control--m-prev-month--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-calendar-month__header-nav-control--m-prev-month--MarginLeft: calc(var(--pf-global--spacer--md) * -1);\n  --pf-c-calendar-month__header-nav-control--m-next-month--MarginRight: calc(var(--pf-global--spacer--md) * -1);\n  --pf-c-calendar-month__header-nav-control--m-next-month--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-calendar-month__days--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-calendar-month__days--BorderBottomColor: var(--pf-global--BorderColor--100);\n  --pf-c-calendar-month__day--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-calendar-month__day--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-calendar-month__dates-cell--PaddingTop: 0.125rem;\n  --pf-c-calendar-month__dates-cell--PaddingRight: 0.125rem;\n  --pf-c-calendar-month__dates-cell--PaddingBottom: 0.125rem;\n  --pf-c-calendar-month__dates-cell--PaddingLeft: 0.125rem;\n  --pf-c-calendar-month__dates-row--first-child__dates-cell--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-calendar-month__dates-cell--m-current__date--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-calendar-month__dates-cell--m-selected__date--BackgroundColor: var(--pf-global--active-color--100);\n  --pf-c-calendar-month__dates-cell--m-selected__date--hover--BackgroundColor: var(--pf-global--active-color--100);\n  --pf-c-calendar-month__dates-cell--m-selected__date--focus--BackgroundColor: var(--pf-global--active-color--100);\n  --pf-c-calendar-month__dates-cell--m-selected__date--Color: var(--pf-global--Color--light-100);\n  --pf-c-calendar-month__dates-cell--before--BackgroundColor: transparent;\n  --pf-c-calendar-month__dates-cell--before--Top: var(--pf-c-calendar-month__dates-cell--PaddingTop);\n  --pf-c-calendar-month__dates-cell--before--Right: 0;\n  --pf-c-calendar-month__dates-cell--before--Bottom: var(--pf-c-calendar-month__dates-cell--PaddingBottom);\n  --pf-c-calendar-month__dates-cell--before--Left: 0;\n  --pf-c-calendar-month__dates-cell--m-in-range--before--BackgroundColor: var(--pf-global--palette--blue-50);\n  --pf-c-calendar-month__dates-cell--m-in-range--m-start-range--before--Left: 50%;\n  --pf-c-calendar-month__dates-cell--m-in-range--m-end-range--before--Right: 50%;\n  --pf-c-calendar-month__dates-cell--m-in-range__date--hover--BackgroundColor: var(--pf-global--palette--blue-100);\n  --pf-c-calendar-month__dates-cell--m-in-range__date--focus--BackgroundColor: var(--pf-global--palette--blue-100);\n  --pf-c-calendar-month__dates-cell--m-adjacent-month__date--Color: var(--pf-global--disabled-color--100);\n  --pf-c-calendar-month__date--Width: 4ch;\n  --pf-c-calendar-month__date--Height: 4ch;\n  --pf-c-calendar-month__date--BorderRadius: var(--pf-global--BorderRadius--lg);\n  --pf-c-calendar-month__date--Color: var(--pf-global--Color--100);\n  --pf-c-calendar-month__date--BackgroundColor: transparent;\n  --pf-c-calendar-month__date--disabled--Color: var(--pf-global--disabled-color--200);\n  --pf-c-calendar-month__date--after--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-calendar-month__date--after--BorderColor: transparent;\n  --pf-c-calendar-month__date--hover--BackgroundColor: var(--pf-global--palette--blue-50);\n  --pf-c-calendar-month__date--focus--BackgroundColor: var(--pf-global--palette--blue-50);\n  --pf-c-calendar-month__date--focus--after--BorderColor: var(--pf-global--active-color--100);\n  color: var(--pf-global--Color--100);\n  display: inline-flex;\n  flex-direction: column;\n  padding: var(--pf-c-calendar-month--PaddingTop) var(--pf-c-calendar-month--PaddingRight) var(--pf-c-calendar-month--PaddingBottom) var(--pf-c-calendar-month--PaddingLeft);\n  font-size: var(--pf-c-calendar-month--FontSize);\n  background-color: var(--pf-c-calendar-month--BackgroundColor); }\n\n.pf-c-calendar-month__header {\n  display: flex;\n  margin-bottom: var(--pf-c-calendar-month__header--MarginBottom); }\n\n.pf-c-calendar-month__header-nav-control {\n  margin-right: var(--pf-c-calendar-month__header-nav-control--MarginRight);\n  margin-left: var(--pf-c-calendar-month__header-nav-control--MarginLeft); }\n  .pf-c-calendar-month__header-nav-control.pf-m-prev-month {\n    --pf-c-calendar-month__header-nav-control--MarginRight: var(--pf-c-calendar-month__header-nav-control--m-prev-month--MarginRight);\n    --pf-c-calendar-month__header-nav-control--MarginLeft: var(--pf-c-calendar-month__header-nav-control--m-prev-month--MarginLeft); }\n  .pf-c-calendar-month__header-nav-control.pf-m-next-month {\n    --pf-c-calendar-month__header-nav-control--MarginRight: var(--pf-c-calendar-month__header-nav-control--m-next-month--MarginRight);\n    --pf-c-calendar-month__header-nav-control--MarginLeft: var(--pf-c-calendar-month__header-nav-control--m-next-month--MarginLeft); }\n\n.pf-c-calendar-month__header-month {\n  flex-grow: 1; }\n\n.pf-c-calendar-month__header-year {\n  width: var(--pf-c-calendar-month__header-year--Width); }\n\n.pf-c-calendar-month__calendar {\n  table-layout: fixed; }\n\n.pf-c-calendar-month__days {\n  border-bottom: var(--pf-c-calendar-month__days--BorderBottomWidth) solid var(--pf-c-calendar-month__days--BorderBottomColor); }\n\n.pf-c-calendar-month__day {\n  padding-bottom: var(--pf-c-calendar-month__day--PaddingBottom);\n  font-weight: var(--pf-c-calendar-month__day--FontWeight);\n  text-align: center; }\n\n.pf-c-calendar-month__dates-row:first-child {\n  --pf-c-calendar-month__dates-cell--PaddingTop: var(--pf-c-calendar-month__dates-row--first-child__dates-cell--PaddingTop); }\n\n.pf-c-calendar-month__dates-cell {\n  position: relative;\n  padding: var(--pf-c-calendar-month__dates-cell--PaddingTop) var(--pf-c-calendar-month__dates-cell--PaddingRight) var(--pf-c-calendar-month__dates-cell--PaddingBottom) var(--pf-c-calendar-month__dates-cell--PaddingLeft);\n  text-align: center; }\n  .pf-c-calendar-month__dates-cell::before {\n    position: absolute;\n    top: var(--pf-c-calendar-month__dates-cell--before--Top);\n    right: var(--pf-c-calendar-month__dates-cell--before--Right);\n    bottom: var(--pf-c-calendar-month__dates-cell--before--Bottom);\n    left: var(--pf-c-calendar-month__dates-cell--before--Left);\n    content: "";\n    background-color: var(--pf-c-calendar-month__dates-cell--before--BackgroundColor); }\n  .pf-c-calendar-month__dates-cell.pf-m-current {\n    --pf-c-calendar-month__date--BackgroundColor: var(--pf-c-calendar-month__dates-cell--m-current__date--BackgroundColor); }\n  .pf-c-calendar-month__dates-cell.pf-m-in-range {\n    --pf-c-calendar-month__dates-cell--before--BackgroundColor: var(--pf-c-calendar-month__dates-cell--m-in-range--before--BackgroundColor);\n    --pf-c-calendar-month__date--hover--BackgroundColor: var(--pf-c-calendar-month__dates-cell--m-in-range__date--hover--BackgroundColor);\n    --pf-c-calendar-month__date--focus--BackgroundColor: var(--pf-c-calendar-month__dates-cell--m-in-range__date--focus--BackgroundColor); }\n  .pf-c-calendar-month__dates-cell.pf-m-start-range {\n    --pf-c-calendar-month__dates-cell--before--Left: var(--pf-c-calendar-month__dates-cell--m-in-range--m-start-range--before--Left); }\n  .pf-c-calendar-month__dates-cell.pf-m-end-range {\n    --pf-c-calendar-month__dates-cell--before--Right: var(--pf-c-calendar-month__dates-cell--m-in-range--m-end-range--before--Right); }\n  .pf-c-calendar-month__dates-cell.pf-m-adjacent-month {\n    --pf-c-calendar-month__date--Color: var(--pf-c-calendar-month__dates-cell--m-adjacent-month__date--Color); }\n  .pf-c-calendar-month__dates-cell.pf-m-selected {\n    --pf-c-calendar-month__date--BackgroundColor: var(--pf-c-calendar-month__dates-cell--m-selected__date--BackgroundColor);\n    --pf-c-calendar-month__date--hover--BackgroundColor: var(--pf-c-calendar-month__dates-cell--m-selected__date--hover--BackgroundColor);\n    --pf-c-calendar-month__date--focus--BackgroundColor: var(--pf-c-calendar-month__dates-cell--m-selected__date--focus--BackgroundColor);\n    --pf-c-calendar-month__date--Color: var(--pf-c-calendar-month__dates-cell--m-selected__date--Color); }\n  .pf-c-calendar-month__dates-cell.pf-m-disabled {\n    --pf-c-calendar-month__dates-cell--before--BackgroundColor: transparent;\n    --pf-c-calendar-month__date--BackgroundColor: transparent; }\n\n.pf-c-calendar-month__date {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--pf-c-calendar-month__date--Width);\n  height: var(--pf-c-calendar-month__date--Height);\n  line-height: 1;\n  color: var(--pf-c-calendar-month__date--Color);\n  background-color: var(--pf-c-calendar-month__date--BackgroundColor);\n  border: 0; }\n  .pf-c-calendar-month__date::after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    border: var(--pf-c-calendar-month__date--after--BorderWidth) solid var(--pf-c-calendar-month__date--after--BorderColor); }\n  .pf-c-calendar-month__date, .pf-c-calendar-month__date::after {\n    border-radius: var(--pf-c-calendar-month__date--BorderRadius); }\n  .pf-c-calendar-month__date:hover, .pf-c-calendar-month__date.pf-m-hover {\n    --pf-c-calendar-month__date--BackgroundColor: var(--pf-c-calendar-month__date--hover--BackgroundColor); }\n  .pf-c-calendar-month__date:focus, .pf-c-calendar-month__date.pf-m-focus {\n    --pf-c-calendar-month__date--BackgroundColor: var(--pf-c-calendar-month__date--focus--BackgroundColor);\n    --pf-c-calendar-month__date--after--BorderColor: var(--pf-c-calendar-month__date--focus--after--BorderColor);\n    outline: 0; }\n  .pf-c-calendar-month__date:disabled {\n    pointer-events: none;\n    --pf-c-calendar-month__date--Color: var(--pf-c-calendar-month__date--disabled--Color);\n    --pf-c-calendar-month__date--hover--focus--BorderColor: transparent; }\n\n.pf-c-card {\n  --pf-c-card--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-card--BoxShadow: var(--pf-global--BoxShadow--sm);\n  --pf-c-card--m-hoverable--hover--BoxShadow: var(--pf-global--BoxShadow--lg);\n  --pf-c-card--m-selectable--hover--BoxShadow: var(--pf-global--BoxShadow--lg);\n  --pf-c-card--m-selectable--focus--BoxShadow: var(--pf-global--BoxShadow--lg);\n  --pf-c-card--m-selectable--active--BoxShadow: var(--pf-global--BoxShadow--lg);\n  --pf-c-card--m-selectable--m-selected--BoxShadow: var(--pf-global--BoxShadow--lg);\n  --pf-c-card--m-selectable--m-selected--before--Height: var(--pf-global--BorderWidth--lg);\n  --pf-c-card--m-selectable--m-selected--before--BackgroundColor: var(--pf-global--active-color--100);\n  --pf-c-card--m-compact__body--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-card--m-compact__footer--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-card--m-compact--first-child--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-card--m-compact--child--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-card--m-compact--child--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-card--m-compact--child--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-card--m-compact__title--not--last-child--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-card--m-flat--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-card--m-flat--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-card--first-child--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-card--child--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-card--child--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-card--child--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-card__header-toggle--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-card__header-toggle--MarginRight: var(--pf-global--spacer--xs);\n  --pf-c-card__header-toggle--MarginBottom: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-card__header-toggle--MarginLeft: calc(var(--pf-global--spacer--md) * -1);\n  --pf-c-card__header-toggle-icon--Transition: var(--pf-global--Transition);\n  --pf-c-card--m-expanded__header-toggle-icon--Rotate: 90deg;\n  --pf-c-card__title--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-card__title--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-card__title--not--last-child--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-card__body--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-card__footer--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-card__actions--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-card__actions--child--MarginLeft: var(--pf-global--spacer--sm);\n  display: flex;\n  flex-direction: column;\n  background-color: var(--pf-c-card--BackgroundColor);\n  box-shadow: var(--pf-c-card--BoxShadow); }\n  .pf-c-card.pf-m-hoverable:hover {\n    box-shadow: var(--pf-c-card--m-hoverable--hover--BoxShadow); }\n  .pf-c-card.pf-m-selectable {\n    position: relative;\n    cursor: pointer; }\n    .pf-c-card.pf-m-selectable:hover {\n      box-shadow: var(--pf-c-card--m-selectable--hover--BoxShadow); }\n    .pf-c-card.pf-m-selectable:focus {\n      box-shadow: var(--pf-c-card--m-selectable--focus--BoxShadow); }\n    .pf-c-card.pf-m-selectable:active {\n      box-shadow: var(--pf-c-card--m-selectable--active--BoxShadow); }\n    .pf-c-card.pf-m-selectable.pf-m-selected {\n      box-shadow: var(--pf-c-card--m-selectable--m-selected--BoxShadow); }\n      .pf-c-card.pf-m-selectable.pf-m-selected::before {\n        position: absolute;\n        top: 0;\n        right: 0;\n        left: 0;\n        height: var(--pf-c-card--m-selectable--m-selected--before--Height);\n        content: "";\n        background-color: var(--pf-c-card--m-selectable--m-selected--before--BackgroundColor); }\n  .pf-c-card.pf-m-compact {\n    --pf-c-card__body--FontSize: var(--pf-c-card--m-compact__body--FontSize);\n    --pf-c-card__footer--FontSize: var(--pf-c-card--m-compact__footer--FontSize);\n    --pf-c-card--first-child--PaddingTop: var(--pf-c-card--m-compact--first-child--PaddingTop);\n    --pf-c-card--child--PaddingRight: var(--pf-c-card--m-compact--child--PaddingRight);\n    --pf-c-card--child--PaddingBottom: var(--pf-c-card--m-compact--child--PaddingBottom);\n    --pf-c-card--child--PaddingLeft: var(--pf-c-card--m-compact--child--PaddingLeft);\n    --pf-c-card__title--not--last-child--PaddingBottom: var(--pf-c-card--m-compact__title--not--last-child--PaddingBottom); }\n  .pf-c-card.pf-m-flat {\n    --pf-c-card--BoxShadow: none;\n    border: var(--pf-c-card--m-flat--BorderWidth) solid var(--pf-c-card--m-flat--BorderColor); }\n  .pf-c-card.pf-m-expanded .pf-c-card__header-toggle-icon {\n    transform: rotate(var(--pf-c-card--m-expanded__header-toggle-icon--Rotate)); }\n\n.pf-c-card__header {\n  display: flex;\n  flex-direction: row;\n  align-items: center; }\n  .pf-c-card__header .pf-c-card__title {\n    padding: 0; }\n\n.pf-c-card__header-toggle {\n  align-self: flex-start;\n  margin: var(--pf-c-card__header-toggle--MarginTop) var(--pf-c-card__header-toggle--MarginRight) var(--pf-c-card__header-toggle--MarginBottom) var(--pf-c-card__header-toggle--MarginLeft); }\n\n.pf-c-card__header-toggle-icon {\n  display: inline-block;\n  transition: var(--pf-c-card__header-toggle-icon--Transition); }\n\n.pf-c-card__title {\n  font-family: var(--pf-c-card__title--FontFamily);\n  font-weight: var(--pf-c-card__title--FontWeight); }\n\n.pf-c-card__actions {\n  display: flex;\n  align-items: center;\n  align-self: flex-start;\n  order: 1;\n  padding-left: var(--pf-c-card__actions--PaddingLeft);\n  margin: var(--pf-c-card__header-toggle--MarginTop) var(--pf-c-card__header-toggle--MarginRight) var(--pf-c-card__header-toggle--MarginBottom) auto; }\n  .pf-c-card__actions > * + * {\n    margin-left: var(--pf-c-card__actions--child--MarginLeft); }\n  .pf-c-card__actions + .pf-c-card__title,\n  .pf-c-card__actions + .pf-c-card__body,\n  .pf-c-card__actions + .pf-c-card__footer {\n    padding: 0; }\n\n.pf-c-card__header,\n.pf-c-card__title,\n.pf-c-card__body,\n.pf-c-card__footer {\n  padding-right: var(--pf-c-card--child--PaddingRight);\n  padding-bottom: var(--pf-c-card--child--PaddingBottom);\n  padding-left: var(--pf-c-card--child--PaddingLeft); }\n  .pf-c-card__header:first-child,\n  .pf-c-card__title:first-child,\n  .pf-c-card__body:first-child,\n  .pf-c-card__footer:first-child {\n    padding-top: var(--pf-c-card--first-child--PaddingTop); }\n\n.pf-c-card__header:not(:last-child),\n.pf-c-card__title:not(:last-child) {\n  padding-bottom: var(--pf-c-card__title--not--last-child--PaddingBottom); }\n\n.pf-c-card__expandable-content {\n  --pf-c-card--first-child--PaddingTop: 0; }\n\n.pf-c-card__body:not(.pf-m-no-fill) {\n  flex: 1 1 auto; }\n\n.pf-c-card__body {\n  font-size: var(--pf-c-card__body--FontSize); }\n\n.pf-c-card__footer {\n  font-size: var(--pf-c-card__footer--FontSize); }\n\n.pf-m-overpass-font .pf-c-card .pf-c-card__title {\n  font-weight: var(--pf-global--FontWeight--normal); }\n\n.pf-c-check {\n  --pf-c-check--GridGap: var(--pf-global--spacer--xs) var(--pf-global--spacer--sm);\n  --pf-c-check__label--disabled--Color: var(--pf-global--disabled-color--100);\n  --pf-c-check__label--Color: var(--pf-global--Color--100);\n  --pf-c-check__label--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-check__label--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-check__label--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-check__input--MarginTop: -0.1875rem;\n  --pf-c-check__description--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-check__description--Color: var(--pf-global--Color--200);\n  display: grid;\n  grid-template-columns: auto 1fr;\n  grid-gap: var(--pf-c-check--GridGap);\n  align-items: center;\n  justify-items: start; }\n\n.pf-c-check__label {\n  font-size: var(--pf-c-check__label--FontSize);\n  font-weight: var(--pf-c-check__label--FontWeight);\n  line-height: var(--pf-c-check__label--LineHeight);\n  color: var(--pf-c-check__label--Color); }\n\n.pf-c-check__input {\n  margin-top: var(--pf-c-check__input--MarginTop); }\n\n.pf-c-check__description {\n  grid-column: 2;\n  font-size: var(--pf-c-check__description--FontSize);\n  color: var(--pf-c-check__description--Color); }\n\nlabel.pf-c-check, .pf-c-check__label,\n.pf-c-check__input {\n  cursor: pointer; }\n\n.pf-c-check__label:disabled, .pf-c-check__label.pf-m-disabled,\n.pf-c-check__input:disabled,\n.pf-c-check__input.pf-m-disabled {\n  --pf-c-check__label--Color: var(--pf-c-check__label--disabled--Color);\n  cursor: not-allowed; }\n\n.pf-c-chip {\n  --pf-c-chip--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-chip--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-chip--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-chip--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-chip--BackgroundColor: var(--pf-global--Color--light-100);\n  --pf-c-chip--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-chip--before--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-chip--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-chip--before--BorderRadius: var(--pf-c-chip--BorderRadius);\n  --pf-c-chip--m-overflow__text--Color: var(--pf-global--primary-color--100);\n  --pf-c-chip--m-draggable--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-chip--m-draggable--BoxShadow: var(--pf-global--BoxShadow--sm);\n  --pf-c-chip--m-draggable__icon--FontSize: var(--pf-global--icon--FontSize--sm);\n  --pf-c-chip__text--FontSize: var(--pf-global--FontSize--xs);\n  --pf-c-chip__text--Color: var(--pf-global--Color--100);\n  --pf-c-chip__text--MaxWidth: 16ch;\n  --pf-c-chip__c-button--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-chip__c-button--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-chip__c-button--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-chip__c-button--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-chip__c-button--MarginTop: calc(var(--pf-c-chip--PaddingTop) * -1);\n  --pf-c-chip__c-button--MarginRight: calc(var(--pf-c-chip--PaddingRight) / 2 * -1);\n  --pf-c-chip__c-button--MarginBottom: calc(var(--pf-c-chip--PaddingBottom) * -1);\n  --pf-c-chip__c-button--FontSize: var(--pf-global--FontSize--xs);\n  --pf-c-chip__c-badge--MarginLeft: var(--pf-global--spacer--xs);\n  --pf-c-chip__icon--MarginLeft: var(--pf-global--spacer--sm);\n  color: var(--pf-global--Color--100);\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  padding: var(--pf-c-chip--PaddingTop) var(--pf-c-chip--PaddingRight) var(--pf-c-chip--PaddingBottom) var(--pf-c-chip--PaddingLeft);\n  list-style: none;\n  background-color: var(--pf-c-chip--BackgroundColor);\n  border-radius: var(--pf-c-chip--BorderRadius); }\n  .pf-c-chip::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    border: var(--pf-c-chip--before--BorderWidth) solid var(--pf-c-chip--before--BorderColor);\n    border-radius: var(--pf-c-chip--before--BorderRadius); }\n  .pf-c-chip.pf-m-overflow {\n    border: 0; }\n    .pf-c-chip.pf-m-overflow .pf-c-chip__text {\n      color: var(--pf-c-chip--m-overflow__text--Color); }\n  .pf-c-chip.pf-m-draggable {\n    --pf-c-chip--BackgroundColor: var(--pf-c-chip--m-draggable--BackgroundColor);\n    box-shadow: var(--pf-c-chip--m-draggable--BoxShadow); }\n    .pf-c-chip.pf-m-draggable .pf-c-chip__icon {\n      font-size: var(--pf-c-chip--m-draggable__icon--FontSize); }\n  .pf-c-chip .pf-c-button {\n    --pf-c-button--PaddingTop: var(--pf-c-chip__c-button--PaddingTop);\n    --pf-c-button--PaddingRight: var(--pf-c-chip__c-button--PaddingRight);\n    --pf-c-button--PaddingBottom: var(--pf-c-chip__c-button--PaddingBottom);\n    --pf-c-button--PaddingLeft: var(--pf-c-chip__c-button--PaddingLeft);\n    --pf-c-button--FontSize: var(--pf-c-chip__c-button--FontSize);\n    margin-top: var(--pf-c-chip__c-button--MarginTop);\n    margin-right: var(--pf-c-chip__c-button--MarginRight);\n    margin-bottom: var(--pf-c-chip__c-button--MarginBottom); }\n  .pf-c-chip .pf-c-badge {\n    margin-left: var(--pf-c-chip__c-badge--MarginLeft); }\n\n.pf-c-chip__text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  position: relative;\n  max-width: var(--pf-c-chip__text--MaxWidth);\n  font-size: var(--pf-c-chip__text--FontSize);\n  color: var(--pf-c-chip__text--Color); }\n\n.pf-c-chip__icon + .pf-c-chip__text,\n.pf-c-chip__text + .pf-c-chip__icon {\n  margin-left: var(--pf-c-chip__icon--MarginLeft); }\n\n.pf-c-chip-group {\n  color: var(--pf-global--Color--100);\n  --pf-c-chip-group__list--MarginBottom: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-chip-group__list--MarginRight: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-chip-group--m-category--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-chip-group--m-category--PaddingRight: var(--pf-global--spacer--xs);\n  --pf-c-chip-group--m-category--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-chip-group--m-category--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-chip-group--m-category--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-chip-group--m-category--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-chip-group__label--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-chip-group__label--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-chip-group__label--MaxWidth: 18ch;\n  --pf-c-chip-group__close--MarginTop: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-chip-group__close--MarginBottom: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-chip-group__list-item--MarginRight: var(--pf-global--spacer--xs);\n  --pf-c-chip-group__list-item--MarginBottom: var(--pf-global--spacer--xs); }\n  .pf-c-chip-group.pf-m-category {\n    padding-top: var(--pf-c-chip-group--m-category--PaddingTop);\n    padding-right: var(--pf-c-chip-group--m-category--PaddingRight);\n    padding-bottom: var(--pf-c-chip-group--m-category--PaddingBottom);\n    padding-left: var(--pf-c-chip-group--m-category--PaddingLeft);\n    background-color: var(--pf-c-chip-group--m-category--BackgroundColor);\n    border-radius: var(--pf-c-chip-group--m-category--BorderRadius); }\n\n.pf-c-chip-group__main {\n  display: flex;\n  flex: 1;\n  flex-wrap: wrap;\n  align-items: baseline; }\n\n.pf-c-chip-group__list {\n  margin-right: var(--pf-c-chip-group__list--MarginRight);\n  margin-bottom: var(--pf-c-chip-group__list--MarginBottom); }\n\n.pf-c-chip-group,\n.pf-c-chip-group__list {\n  display: inline-flex;\n  flex-wrap: wrap;\n  align-items: center; }\n\n.pf-c-chip-group__list-item {\n  display: inline-flex;\n  margin-right: var(--pf-c-chip-group__list-item--MarginRight);\n  margin-bottom: var(--pf-c-chip-group__list-item--MarginBottom); }\n\n.pf-c-chip-group__label {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  max-width: var(--pf-c-chip-group__label--MaxWidth);\n  margin-right: var(--pf-c-chip-group__label--MarginRight);\n  font-size: var(--pf-c-chip-group__label--FontSize); }\n\n.pf-c-chip-group__close {\n  display: flex;\n  align-self: flex-start;\n  margin-top: var(--pf-c-chip-group__close--MarginTop);\n  margin-bottom: var(--pf-c-chip-group__close--MarginBottom); }\n\n.pf-c-clipboard-copy {\n  --pf-c-clipboard-copy__toggle-icon--Transition: .2s ease-in 0s;\n  --pf-c-clipboard-copy--m-expanded__toggle-icon--Rotate: 90deg;\n  --pf-c-clipboard-copy__expandable-content--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-clipboard-copy__expandable-content--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-clipboard-copy__expandable-content--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-clipboard-copy__expandable-content--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-clipboard-copy__expandable-content--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-clipboard-copy__expandable-content--BorderTopWidth: 0;\n  --pf-c-clipboard-copy__expandable-content--BorderRightWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-clipboard-copy__expandable-content--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-clipboard-copy__expandable-content--BorderLeftWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-clipboard-copy__expandable-content--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-clipboard-copy__expandable-content--OutlineOffset: calc(-1 * var(--pf-global--spacer--xs)); }\n  .pf-c-clipboard-copy.pf-m-expanded .pf-c-clipboard-copy__toggle-icon {\n    transform: rotate(var(--pf-c-clipboard-copy--m-expanded__toggle-icon--Rotate)); }\n\n.pf-c-clipboard-copy__group {\n  display: flex; }\n  .pf-c-clipboard-copy__group > * + * {\n    margin-left: -1px; }\n\n.pf-c-clipboard-copy__toggle-icon {\n  transition: var(--pf-c-clipboard-copy__toggle-icon--Transition); }\n\n.pf-c-clipboard-copy__expandable-content {\n  padding: var(--pf-c-clipboard-copy__expandable-content--PaddingTop) var(--pf-c-clipboard-copy__expandable-content--PaddingRight) var(--pf-c-clipboard-copy__expandable-content--PaddingBottom) var(--pf-c-clipboard-copy__expandable-content--PaddingLeft);\n  word-wrap: break-word;\n  background-color: var(--pf-c-clipboard-copy__expandable-content--BackgroundColor);\n  background-clip: padding-box;\n  border: solid var(--pf-c-clipboard-copy__expandable-content--BorderColor);\n  border-width: var(--pf-c-clipboard-copy__expandable-content--BorderTopWidth) var(--pf-c-clipboard-copy__expandable-content--BorderRightWidth) var(--pf-c-clipboard-copy__expandable-content--BorderBottomWidth) var(--pf-c-clipboard-copy__expandable-content--BorderLeftWidth);\n  box-shadow: var(--pf-c-clipboard-copy__expandable-content--BoxShadow); }\n  .pf-c-clipboard-copy__expandable-content pre {\n    white-space: pre-wrap; }\n\n.pf-c-code-editor {\n  --pf-c-code-editor__controls--c-button--m-control--Color: var(--pf-global--Color--200);\n  --pf-c-code-editor__controls--c-button--m-control--hover--Color: var(--pf-global--Color--100);\n  --pf-c-code-editor__controls--c-button--m-control--focus--Color: var(--pf-global--Color--100);\n  --pf-c-code-editor__controls--c-button--m-control--disabled--after--BorderBottomColor: var(--pf-global--BorderColor--100);\n  --pf-c-code-editor__header--before--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-code-editor__header--before--BorderBottomColor: var(--pf-global--BorderColor--100);\n  --pf-c-code-editor__main--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-code-editor__main--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-code-editor__main--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-code-editor--m-read-only__main--BackgroundColor: var(--pf-global--disabled-color--300);\n  --pf-c-code-editor__main--m-drag-hover--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-code-editor__main--m-drag-hover--before--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-code-editor__main--m-drag-hover--after--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-code-editor__main--m-drag-hover--after--Opacity: .1;\n  --pf-c-code-editor__code--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-code-editor__code--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-code-editor__code--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-code-editor__code--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-code-editor__code-pre--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-code-editor__code-pre--FontFamily: var(--pf-global--FontFamily--monospace);\n  --pf-c-code-editor__tab--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-code-editor__tab--Color: var(--pf-global--Color--200);\n  --pf-c-code-editor__tab--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-code-editor__tab--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-code-editor__tab--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-code-editor__tab--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-code-editor__tab--BorderTopWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-code-editor__tab--BorderRightWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-code-editor__tab--BorderBottomWidth: 0;\n  --pf-c-code-editor__tab--BorderLeftWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-code-editor__tab--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-code-editor__tab-icon--text--MarginLeft: var(--pf-global--spacer--sm); }\n  .pf-c-code-editor.pf-m-read-only {\n    --pf-c-code-editor__main--BackgroundColor: var(--pf-c-code-editor--m-read-only__main--BackgroundColor); }\n\n.pf-c-code-editor__header {\n  position: relative;\n  display: flex;\n  align-items: flex-end; }\n  .pf-c-code-editor__header::before {\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    pointer-events: none;\n    content: "";\n    border-bottom: var(--pf-c-code-editor__header--before--BorderBottomWidth) solid var(--pf-c-code-editor__header--before--BorderBottomColor); }\n\n.pf-c-code-editor__controls {\n  display: flex; }\n  .pf-c-code-editor__controls .pf-c-button.pf-m-control {\n    --pf-c-button--m-control--Color: var(--pf-c-code-editor__controls--c-button--m-control--Color); }\n    .pf-c-code-editor__controls .pf-c-button.pf-m-control:hover {\n      --pf-c-code-editor__controls--c-button--m-control--Color: var(--pf-c-code-editor__controls--c-button--m-control--hover--Color); }\n    .pf-c-code-editor__controls .pf-c-button.pf-m-control:focus {\n      --pf-c-code-editor__controls--c-button--m-control--Color: var(--pf-c-code-editor__controls--c-button--m-control--focus--Color); }\n    .pf-c-code-editor__controls .pf-c-button.pf-m-control:disabled::after {\n      border-bottom-color: var(--pf-c-code-editor__controls--c-button--m-control--disabled--after--BorderBottomColor); }\n\n.pf-c-code-editor__main {\n  position: relative;\n  background-color: var(--pf-c-code-editor__main--BackgroundColor);\n  border: var(--pf-c-code-editor__main--BorderWidth) solid;\n  border-color: var(--pf-c-code-editor__main--BorderColor); }\n  .pf-c-code-editor__main.pf-m-drag-hover::after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    background-color: var(--pf-c-code-editor__main--m-drag-hover--after--BackgroundColor);\n    opacity: var(--pf-c-code-editor__main--m-drag-hover--after--Opacity); }\n  .pf-c-code-editor__main.pf-m-drag-hover::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    border: var(--pf-c-code-editor__main--m-drag-hover--before--BorderWidth) solid var(--pf-c-code-editor__main--m-drag-hover--before--BorderColor); }\n  .pf-c-code-editor__main .monaco-editor {\n    background-color: var(--pf-c-code-editor__main--BackgroundColor); }\n\n.pf-c-code-editor__header + .pf-c-code-editor__main {\n  border-top-width: 0; }\n\n.pf-c-code-editor__code {\n  position: relative;\n  padding: var(--pf-c-code-editor__code--PaddingTop) var(--pf-c-code-editor__code--PaddingRight) var(--pf-c-code-editor__code--PaddingBottom) var(--pf-c-code-editor__code--PaddingLeft); }\n  .pf-c-code-editor__code .pf-c-code-editor__code-pre {\n    font-family: var(--pf-c-code-editor__code-pre--FontFamily);\n    font-size: var(--pf-c-code-editor__code-pre--FontSize);\n    white-space: pre-wrap; }\n\n.pf-c-code-editor__tab {\n  position: relative;\n  display: flex;\n  align-items: center;\n  padding: var(--pf-c-code-editor__tab--PaddingTop) var(--pf-c-code-editor__tab--PaddingRight) var(--pf-c-code-editor__tab--PaddingBottom) var(--pf-c-code-editor__tab--PaddingLeft);\n  margin-left: auto;\n  color: var(--pf-c-code-editor__tab--Color);\n  background-color: var(--pf-c-code-editor__tab--BackgroundColor);\n  border-color: var(--pf-c-code-editor__tab--BorderColor);\n  border-style: solid;\n  border-width: var(--pf-c-code-editor__tab--BorderTopWidth) var(--pf-c-code-editor__tab--BorderRightWidth) var(--pf-c-code-editor__tab--BorderBottomWidth) var(--pf-c-code-editor__tab--BorderLeftWidth); }\n\n.pf-c-code-editor__tab-icon + .pf-c-code-editor__tab-text {\n  margin-left: var(--pf-c-code-editor__tab-icon--text--MarginLeft); }\n\n.pf-c-content {\n  --pf-c-content--MarginBottom: var(--pf-global--spacer--md);\n  --pf-c-content--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-content--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-content--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-content--Color: var(--pf-global--Color--100);\n  --pf-c-content--heading--FontFamily: var(--pf-global--FontFamily--heading--sans-serif);\n  --pf-c-content--h1--MarginTop: var(--pf-global--spacer--lg);\n  --pf-c-content--h1--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-content--h1--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-content--h1--FontSize: var(--pf-global--FontSize--2xl);\n  --pf-c-content--h1--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-content--h2--MarginTop: var(--pf-global--spacer--lg);\n  --pf-c-content--h2--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-content--h2--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-content--h2--FontSize: var(--pf-global--FontSize--xl);\n  --pf-c-content--h2--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-content--h3--MarginTop: var(--pf-global--spacer--lg);\n  --pf-c-content--h3--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-content--h3--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-content--h3--FontSize: var(--pf-global--FontSize--lg);\n  --pf-c-content--h3--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-content--h4--MarginTop: var(--pf-global--spacer--lg);\n  --pf-c-content--h4--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-content--h4--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-content--h4--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-content--h4--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-content--h5--MarginTop: var(--pf-global--spacer--lg);\n  --pf-c-content--h5--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-content--h5--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-content--h5--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-content--h5--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-content--h6--MarginTop: var(--pf-global--spacer--lg);\n  --pf-c-content--h6--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-content--h6--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-content--h6--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-content--h6--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-content--small--MarginBottom: var(--pf-global--spacer--md);\n  --pf-c-content--small--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-content--small--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-content--small--Color: var(--pf-global--Color--200);\n  --pf-c-content--a--Color: var(--pf-global--link--Color);\n  --pf-c-content--a--TextDecoration: var(--pf-global--link--TextDecoration);\n  --pf-c-content--a--hover--Color: var(--pf-global--link--Color--hover);\n  --pf-c-content--a--hover--TextDecoration: var(--pf-global--link--TextDecoration--hover);\n  --pf-c-content--blockquote--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-content--blockquote--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-content--blockquote--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-content--blockquote--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-content--blockquote--Color: var(--pf-global--Color--200);\n  --pf-c-content--blockquote--BorderLeftColor: var(--pf-global--BorderColor--100);\n  --pf-c-content--blockquote--BorderLeftWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-content--ol--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-content--ol--MarginLeft: var(--pf-global--spacer--lg);\n  --pf-c-content--ol--nested--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-content--ol--nested--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-content--ul--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-content--ul--MarginLeft: var(--pf-global--spacer--lg);\n  --pf-c-content--ul--nested--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-content--ul--nested--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-content--ul--ListStyle: var(--pf-global--ListStyle);\n  --pf-c-content--li--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-content--dl--ColumnGap: var(--pf-global--spacer--2xl);\n  --pf-c-content--dl--RowGap: var(--pf-global--spacer--md);\n  --pf-c-content--dt--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-content--dt--MarginTop: var(--pf-global--spacer--md);\n  --pf-c-content--dt--sm--MarginTop: 0;\n  --pf-c-content--hr--Height: var(--pf-global--BorderWidth--sm);\n  --pf-c-content--hr--BackgroundColor: var(--pf-global--BorderColor--100);\n  font-size: var(--pf-c-content--FontSize);\n  line-height: var(--pf-c-content--LineHeight);\n  color: var(--pf-c-content--Color); }\n  .pf-c-content a {\n    color: var(--pf-c-content--a--Color);\n    text-decoration: var(--pf-c-content--a--TextDecoration); }\n    .pf-c-content a:hover {\n      --pf-c-content--a--Color: var(--pf-c-content--a--hover--Color);\n      --pf-c-content--a--TextDecoration: var(--pf-c-content--a--hover--TextDecoration); }\n  .pf-c-content li + li {\n    margin-top: var(--pf-c-content--li--MarginTop); }\n  .pf-c-content p:not(:last-child),\n  .pf-c-content dl:not(:last-child),\n  .pf-c-content ol:not(:last-child),\n  .pf-c-content ul:not(:last-child),\n  .pf-c-content blockquote:not(:last-child),\n  .pf-c-content small:not(:last-child),\n  .pf-c-content pre:not(:last-child),\n  .pf-c-content table:not(:last-child),\n  .pf-c-content hr:not(:last-child) {\n    margin-bottom: var(--pf-c-content--MarginBottom); }\n  .pf-c-content h1,\n  .pf-c-content h2,\n  .pf-c-content h3,\n  .pf-c-content h4,\n  .pf-c-content h5,\n  .pf-c-content h6 {\n    margin: 0;\n    font-family: var(--pf-c-content--heading--FontFamily); }\n    .pf-c-content h1:first-child,\n    .pf-c-content h2:first-child,\n    .pf-c-content h3:first-child,\n    .pf-c-content h4:first-child,\n    .pf-c-content h5:first-child,\n    .pf-c-content h6:first-child {\n      margin-top: 0; }\n    .pf-c-content h1:last-child,\n    .pf-c-content h2:last-child,\n    .pf-c-content h3:last-child,\n    .pf-c-content h4:last-child,\n    .pf-c-content h5:last-child,\n    .pf-c-content h6:last-child {\n      margin-bottom: 0; }\n  .pf-c-content ol,\n  .pf-c-content ul {\n    margin: 0; }\n  .pf-c-content h1 {\n    margin-top: var(--pf-c-content--h1--MarginTop);\n    margin-bottom: var(--pf-c-content--h1--MarginBottom);\n    font-size: var(--pf-c-content--h1--FontSize);\n    font-weight: var(--pf-c-content--h1--FontWeight);\n    line-height: var(--pf-c-content--h1--LineHeight); }\n  .pf-c-content h2 {\n    margin-top: var(--pf-c-content--h2--MarginTop);\n    margin-bottom: var(--pf-c-content--h2--MarginBottom);\n    font-size: var(--pf-c-content--h2--FontSize);\n    font-weight: var(--pf-c-content--h2--FontWeight);\n    line-height: var(--pf-c-content--h2--LineHeight); }\n  .pf-c-content h3 {\n    margin-top: var(--pf-c-content--h3--MarginTop);\n    margin-bottom: var(--pf-c-content--h3--MarginBottom);\n    font-size: var(--pf-c-content--h3--FontSize);\n    font-weight: var(--pf-c-content--h3--FontWeight);\n    line-height: var(--pf-c-content--h3--LineHeight); }\n  .pf-c-content h4 {\n    margin-top: var(--pf-c-content--h4--MarginTop);\n    margin-bottom: var(--pf-c-content--h4--MarginBottom);\n    font-size: var(--pf-c-content--h4--FontSize);\n    font-weight: var(--pf-c-content--h4--FontWeight);\n    line-height: var(--pf-c-content--h4--LineHeight); }\n  .pf-c-content h5 {\n    margin-top: var(--pf-c-content--h5--MarginTop);\n    margin-bottom: var(--pf-c-content--h5--MarginBottom);\n    font-size: var(--pf-c-content--h5--FontSize);\n    font-weight: var(--pf-c-content--h5--FontWeight);\n    line-height: var(--pf-c-content--h5--LineHeight); }\n  .pf-c-content h6 {\n    margin-top: var(--pf-c-content--h6--MarginTop);\n    margin-bottom: var(--pf-c-content--h6--MarginBottom);\n    font-size: var(--pf-c-content--h6--FontSize);\n    font-weight: var(--pf-c-content--h6--FontWeight);\n    line-height: var(--pf-c-content--h6--LineHeight); }\n  .pf-c-content small {\n    display: block;\n    font-size: var(--pf-c-content--small--FontSize);\n    line-height: var(--pf-c-content--small--LineHeight);\n    color: var(--pf-c-content--small--Color); }\n    .pf-c-content small:not(:last-child) {\n      margin-bottom: var(--pf-c-content--small--MarginBottom); }\n  .pf-c-content blockquote {\n    padding: var(--pf-c-content--blockquote--PaddingTop) var(--pf-c-content--blockquote--PaddingRight) var(--pf-c-content--blockquote--PaddingBottom) var(--pf-c-content--blockquote--PaddingLeft);\n    color: var(--pf-c-content--blockquote--Color);\n    border-left: var(--pf-c-content--blockquote--BorderLeftWidth) solid var(--pf-c-content--blockquote--BorderLeftColor); }\n  .pf-c-content hr {\n    height: var(--pf-c-content--hr--Height);\n    background-color: var(--pf-c-content--hr--BackgroundColor);\n    border: none; }\n  .pf-c-content ol {\n    padding-left: var(--pf-c-content--ol--PaddingLeft);\n    margin-left: var(--pf-c-content--ol--MarginLeft); }\n    .pf-c-content ol ul {\n      margin-top: var(--pf-c-content--ul--nested--MarginTop);\n      --pf-c-content--ul--MarginLeft: var(--pf-c-content--ul--nested--MarginLeft); }\n    .pf-c-content ol ol {\n      margin-top: var(--pf-c-content--ol--nested--MarginTop);\n      --pf-c-content--ol--MarginLeft: var(--pf-c-content--ol--nested--MarginLeft); }\n  .pf-c-content ul {\n    padding-left: var(--pf-c-content--ul--PaddingLeft);\n    margin-left: var(--pf-c-content--ul--MarginLeft);\n    list-style: var(--pf-c-content--ul--ListStyle); }\n    .pf-c-content ul ul {\n      margin-top: var(--pf-c-content--ul--nested--MarginTop);\n      --pf-c-content--ul--MarginLeft: var(--pf-c-content--ul--nested--MarginLeft); }\n    .pf-c-content ul ol {\n      margin-top: var(--pf-c-content--ol--nested--MarginTop);\n      --pf-c-content--ol--MarginLeft: var(--pf-c-content--ol--nested--MarginLeft); }\n  .pf-c-content dl {\n    display: grid;\n    grid-template-columns: 1fr; }\n    @media screen and (min-width: 576px) {\n      .pf-c-content dl {\n        grid-template: auto / auto 1fr;\n        grid-column-gap: var(--pf-c-content--dl--ColumnGap);\n        grid-row-gap: var(--pf-c-content--dl--RowGap); } }\n  .pf-c-content dt {\n    font-weight: var(--pf-c-content--dt--FontWeight); }\n    .pf-c-content dt:not(:first-child) {\n      margin-top: var(--pf-c-content--dt--MarginTop); }\n      @media screen and (min-width: 576px) {\n        .pf-c-content dt:not(:first-child) {\n          --pf-c-content--dt--MarginTop: var(--pf-c-content--dt--sm--MarginTop); } }\n    @media screen and (min-width: 576px) {\n      .pf-c-content dt {\n        grid-column: 1; } }\n  @media screen and (min-width: 576px) {\n    .pf-c-content dd {\n      grid-column: 2; } }\n\n.pf-m-overpass-font .pf-c-content {\n  --pf-c-content--h2--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-content--h4--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-content--h5--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-content--h6--FontWeight: var(--pf-global--FontWeight--semi-bold); }\n  .pf-m-overpass-font .pf-c-content blockquote {\n    font-weight: var(--pf-global--FontWeight--light); }\n\n.pf-c-context-selector {\n  --pf-c-context-selector--Width: 15.625rem;\n  --pf-c-context-selector__toggle--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-context-selector__toggle--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-context-selector__toggle--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-context-selector__toggle--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-context-selector__toggle--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-context-selector__toggle--BorderTopColor: var(--pf-global--BorderColor--300);\n  --pf-c-context-selector__toggle--BorderRightColor: var(--pf-global--BorderColor--300);\n  --pf-c-context-selector__toggle--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-context-selector__toggle--BorderLeftColor: var(--pf-global--BorderColor--300);\n  --pf-c-context-selector__toggle--Color: var(--pf-global--Color--100);\n  --pf-c-context-selector__toggle--hover--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-context-selector__toggle--active--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-context-selector__toggle--active--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-context-selector__toggle--expanded--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-context-selector__toggle--expanded--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-context-selector__toggle-text--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-context-selector__toggle-text--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-context-selector__toggle-text--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-context-selector__toggle-icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-context-selector__toggle-icon--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-context-selector__menu--Top: calc(100% + var(--pf-global--spacer--xs));\n  --pf-c-context-selector__menu--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-context-selector__menu--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-context-selector__menu--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-context-selector__menu--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-context-selector__menu-search--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-context-selector__menu-search--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-context-selector__menu-search--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-context-selector__menu-search--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-context-selector__menu-search--BorderBottomColor: var(--pf-global--BorderColor--100);\n  --pf-c-context-selector__menu-search--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-context-selector__menu-footer--BoxShadow: var(--pf-global--BoxShadow--sm-top);\n  --pf-c-context-selector__menu-footer--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-context-selector__menu-footer--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-context-selector__menu-footer--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-context-selector__menu-footer--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-context-selector__menu-list--MaxHeight: 12.5rem;\n  --pf-c-context-selector__menu-list-item--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-context-selector__menu-list-item--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-context-selector__menu-list-item--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-context-selector__menu-list-item--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-context-selector__menu-list-item--hover--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-context-selector__menu-list-item--disabled--Color: var(--pf-global--Color--dark-200);\n  position: relative;\n  display: inline-block;\n  width: var(--pf-c-context-selector--Width);\n  max-width: 100%; }\n\n.pf-c-context-selector__toggle {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  width: 100%;\n  padding: var(--pf-c-context-selector__toggle--PaddingTop) var(--pf-c-context-selector__toggle--PaddingRight) var(--pf-c-context-selector__toggle--PaddingBottom) var(--pf-c-context-selector__toggle--PaddingLeft);\n  color: var(--pf-c-context-selector__toggle--Color);\n  white-space: nowrap;\n  cursor: pointer;\n  border: none; }\n  .pf-c-context-selector__toggle::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    border: var(--pf-c-context-selector__toggle--BorderWidth) solid;\n    border-color: var(--pf-c-context-selector__toggle--BorderTopColor) var(--pf-c-context-selector__toggle--BorderRightColor) var(--pf-c-context-selector__toggle--BorderBottomColor) var(--pf-c-context-selector__toggle--BorderLeftColor); }\n  .pf-c-context-selector__toggle:hover::before {\n    --pf-c-context-selector__toggle--BorderBottomColor: var(--pf-c-context-selector__toggle--hover--BorderBottomColor); }\n  .pf-c-context-selector__toggle:active::before, .pf-c-context-selector__toggle.pf-m-active::before, .pf-c-context-selector__toggle:focus-within::before {\n    --pf-c-context-selector__toggle--BorderBottomColor: var(--pf-c-context-selector__toggle--active--BorderBottomColor);\n    border-bottom-width: var(--pf-c-context-selector__toggle--active--BorderBottomWidth); }\n  .pf-m-expanded > .pf-c-context-selector__toggle::before {\n    --pf-c-context-selector__toggle--BorderBottomColor: var(--pf-c-context-selector__toggle--expanded--BorderBottomColor);\n    border-bottom-width: var(--pf-c-context-selector__toggle--expanded--BorderBottomWidth); }\n  .pf-c-context-selector__toggle .pf-c-context-selector__toggle-icon {\n    margin-right: var(--pf-c-context-selector__toggle-icon--MarginRight);\n    margin-left: var(--pf-c-context-selector__toggle-icon--MarginLeft); }\n  .pf-c-context-selector__toggle .pf-c-context-selector__toggle-text {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    font-size: var(--pf-c-context-selector__toggle-text--FontSize);\n    font-weight: var(--pf-c-context-selector__toggle-text--FontWeight);\n    line-height: var(--pf-c-context-selector__toggle-text--LineHeight); }\n\n.pf-c-context-selector__menu {\n  color: var(--pf-global--Color--100);\n  position: absolute;\n  top: var(--pf-c-context-selector__menu--Top);\n  z-index: var(--pf-c-context-selector__menu--ZIndex);\n  min-width: 100%;\n  padding-top: var(--pf-c-context-selector__menu--PaddingTop);\n  background-color: var(--pf-c-context-selector__menu--BackgroundColor);\n  background-clip: padding-box;\n  box-shadow: var(--pf-c-context-selector__menu--BoxShadow); }\n\n.pf-c-context-selector__menu-search {\n  position: relative;\n  padding: var(--pf-c-context-selector__menu-search--PaddingTop) var(--pf-c-context-selector__menu-search--PaddingRight) var(--pf-c-context-selector__menu-search--PaddingBottom) var(--pf-c-context-selector__menu-search--PaddingLeft);\n  border-bottom: var(--pf-c-context-selector__menu-search--BorderBottomWidth) solid var(--pf-c-context-selector__menu-search--BorderBottomColor); }\n\n.pf-c-context-selector__menu-footer {\n  padding: var(--pf-c-context-selector__menu-footer--PaddingTop) var(--pf-c-context-selector__menu-footer--PaddingRight) var(--pf-c-context-selector__menu-footer--PaddingBottom) var(--pf-c-context-selector__menu-footer--PaddingLeft);\n  text-align: right;\n  box-shadow: var(--pf-c-context-selector__menu-footer--BoxShadow); }\n\n.pf-c-context-selector__menu-list {\n  max-height: var(--pf-c-context-selector__menu-list--MaxHeight);\n  overflow-y: scroll; }\n\n.pf-c-context-selector__menu-list-item {\n  display: flex;\n  align-items: center;\n  width: 100%;\n  padding: var(--pf-c-context-selector__menu-list-item--PaddingTop) var(--pf-c-context-selector__menu-list-item--PaddingRight) var(--pf-c-context-selector__menu-list-item--PaddingBottom) var(--pf-c-context-selector__menu-list-item--PaddingLeft);\n  white-space: nowrap;\n  border: none; }\n  .pf-c-context-selector__menu-list-item:hover, .pf-c-context-selector__menu-list-item:focus {\n    text-decoration: none;\n    background-color: var(--pf-c-context-selector__menu-list-item--hover--BackgroundColor); }\n  .pf-c-context-selector__menu-list-item:disabled {\n    color: var(--pf-c-context-selector__menu-list-item--disabled--Color);\n    pointer-events: none; }\n\n@media screen and (min-width: 768px) {\n  .pf-c-data-list:not([class*="pf-m-grid"]) {\n    --pf-c-data-list__cell--cell--PaddingTop: var(--pf-c-data-list__cell--cell--md--PaddingTop);\n    --pf-c-data-list__cell--PaddingBottom: var(--pf-c-data-list__cell--md--PaddingBottom);\n    --pf-c-data-list__item-control--MarginRight: var(--pf-c-data-list__item-control--md--MarginRight);\n    --pf-c-data-list__item-action--MarginLeft: var(--pf-c-data-list__item-action--md--MarginLeft);\n    --pf-c-data-list__expandable-content-body--PaddingTop: var(--pf-c-data-list__expandable-content-body--md--PaddingTop);\n    --pf-c-data-list__expandable-content-body--PaddingBottom: var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell--PaddingBottom: var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell-cell--PaddingTop: var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop); } }\n  @media screen and (min-width: 768px) and (min-width: 1200px) {\n    .pf-c-data-list:not([class*="pf-m-grid"]) {\n      --pf-c-data-list__item-row--PaddingRight: var(--pf-c-data-list__item-row--xl--PaddingRight);\n      --pf-c-data-list__item-row--PaddingLeft: var(--pf-c-data-list__item-row--xl--PaddingLeft);\n      --pf-c-data-list__expandable-content-body--PaddingRight: var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);\n      --pf-c-data-list__expandable-content-body--PaddingLeft: var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft); } }\n\n@media screen and (min-width: 768px) {\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__item-content {\n      display: flex;\n      flex-wrap: wrap;\n      flex-grow: 1;\n      padding-bottom: var(--pf-c-data-list__item-content--md--PaddingBottom); }\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon) {\n      margin-right: var(--pf-c-data-list__cell--MarginRight); }\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__cell + .pf-c-data-list__cell {\n      flex: 1;\n      order: initial; }\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__cell.pf-m-align-right {\n      margin-left: auto; }\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__cell.pf-m-no-fill {\n      flex-grow: 0; }\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__cell.pf-m-flex-2 {\n      flex-grow: 2; }\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__cell.pf-m-flex-3 {\n      flex-grow: 3; }\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__cell.pf-m-flex-4 {\n      flex-grow: 4; }\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__cell.pf-m-flex-5 {\n      flex-grow: 5; }\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__expandable-content {\n      max-height: initial;\n      overflow-y: visible; } }\n\n@media screen and (min-width: 0) {\n  .pf-c-data-list.pf-m-grid-none {\n    --pf-c-data-list__cell--cell--PaddingTop: var(--pf-c-data-list__cell--cell--md--PaddingTop);\n    --pf-c-data-list__cell--PaddingBottom: var(--pf-c-data-list__cell--md--PaddingBottom);\n    --pf-c-data-list__item-control--MarginRight: var(--pf-c-data-list__item-control--md--MarginRight);\n    --pf-c-data-list__item-action--MarginLeft: var(--pf-c-data-list__item-action--md--MarginLeft);\n    --pf-c-data-list__expandable-content-body--PaddingTop: var(--pf-c-data-list__expandable-content-body--md--PaddingTop);\n    --pf-c-data-list__expandable-content-body--PaddingBottom: var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell--PaddingBottom: var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell-cell--PaddingTop: var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop); } }\n  @media screen and (min-width: 0) and (min-width: 1200px) {\n    .pf-c-data-list.pf-m-grid-none {\n      --pf-c-data-list__item-row--PaddingRight: var(--pf-c-data-list__item-row--xl--PaddingRight);\n      --pf-c-data-list__item-row--PaddingLeft: var(--pf-c-data-list__item-row--xl--PaddingLeft);\n      --pf-c-data-list__expandable-content-body--PaddingRight: var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);\n      --pf-c-data-list__expandable-content-body--PaddingLeft: var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft); } }\n\n@media screen and (min-width: 0) {\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__item-content {\n      display: flex;\n      flex-wrap: wrap;\n      flex-grow: 1;\n      padding-bottom: var(--pf-c-data-list__item-content--md--PaddingBottom); }\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon) {\n      margin-right: var(--pf-c-data-list__cell--MarginRight); }\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell + .pf-c-data-list__cell {\n      flex: 1;\n      order: initial; }\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell.pf-m-align-right {\n      margin-left: auto; }\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell.pf-m-no-fill {\n      flex-grow: 0; }\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell.pf-m-flex-2 {\n      flex-grow: 2; }\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell.pf-m-flex-3 {\n      flex-grow: 3; }\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell.pf-m-flex-4 {\n      flex-grow: 4; }\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell.pf-m-flex-5 {\n      flex-grow: 5; }\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__expandable-content {\n      max-height: initial;\n      overflow-y: visible; } }\n\n@media screen and (min-width: 576px) {\n  .pf-c-data-list.pf-m-grid-sm {\n    --pf-c-data-list__cell--cell--PaddingTop: var(--pf-c-data-list__cell--cell--md--PaddingTop);\n    --pf-c-data-list__cell--PaddingBottom: var(--pf-c-data-list__cell--md--PaddingBottom);\n    --pf-c-data-list__item-control--MarginRight: var(--pf-c-data-list__item-control--md--MarginRight);\n    --pf-c-data-list__item-action--MarginLeft: var(--pf-c-data-list__item-action--md--MarginLeft);\n    --pf-c-data-list__expandable-content-body--PaddingTop: var(--pf-c-data-list__expandable-content-body--md--PaddingTop);\n    --pf-c-data-list__expandable-content-body--PaddingBottom: var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell--PaddingBottom: var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell-cell--PaddingTop: var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop); } }\n  @media screen and (min-width: 576px) and (min-width: 1200px) {\n    .pf-c-data-list.pf-m-grid-sm {\n      --pf-c-data-list__item-row--PaddingRight: var(--pf-c-data-list__item-row--xl--PaddingRight);\n      --pf-c-data-list__item-row--PaddingLeft: var(--pf-c-data-list__item-row--xl--PaddingLeft);\n      --pf-c-data-list__expandable-content-body--PaddingRight: var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);\n      --pf-c-data-list__expandable-content-body--PaddingLeft: var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft); } }\n\n@media screen and (min-width: 576px) {\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__item-content {\n      display: flex;\n      flex-wrap: wrap;\n      flex-grow: 1;\n      padding-bottom: var(--pf-c-data-list__item-content--md--PaddingBottom); }\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon) {\n      margin-right: var(--pf-c-data-list__cell--MarginRight); }\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell + .pf-c-data-list__cell {\n      flex: 1;\n      order: initial; }\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell.pf-m-align-right {\n      margin-left: auto; }\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell.pf-m-no-fill {\n      flex-grow: 0; }\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell.pf-m-flex-2 {\n      flex-grow: 2; }\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell.pf-m-flex-3 {\n      flex-grow: 3; }\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell.pf-m-flex-4 {\n      flex-grow: 4; }\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell.pf-m-flex-5 {\n      flex-grow: 5; }\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__expandable-content {\n      max-height: initial;\n      overflow-y: visible; } }\n\n@media screen and (min-width: 768px) {\n  .pf-c-data-list.pf-m-grid-md {\n    --pf-c-data-list__cell--cell--PaddingTop: var(--pf-c-data-list__cell--cell--md--PaddingTop);\n    --pf-c-data-list__cell--PaddingBottom: var(--pf-c-data-list__cell--md--PaddingBottom);\n    --pf-c-data-list__item-control--MarginRight: var(--pf-c-data-list__item-control--md--MarginRight);\n    --pf-c-data-list__item-action--MarginLeft: var(--pf-c-data-list__item-action--md--MarginLeft);\n    --pf-c-data-list__expandable-content-body--PaddingTop: var(--pf-c-data-list__expandable-content-body--md--PaddingTop);\n    --pf-c-data-list__expandable-content-body--PaddingBottom: var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell--PaddingBottom: var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell-cell--PaddingTop: var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop); } }\n  @media screen and (min-width: 768px) and (min-width: 1200px) {\n    .pf-c-data-list.pf-m-grid-md {\n      --pf-c-data-list__item-row--PaddingRight: var(--pf-c-data-list__item-row--xl--PaddingRight);\n      --pf-c-data-list__item-row--PaddingLeft: var(--pf-c-data-list__item-row--xl--PaddingLeft);\n      --pf-c-data-list__expandable-content-body--PaddingRight: var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);\n      --pf-c-data-list__expandable-content-body--PaddingLeft: var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft); } }\n\n@media screen and (min-width: 768px) {\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__item-content {\n      display: flex;\n      flex-wrap: wrap;\n      flex-grow: 1;\n      padding-bottom: var(--pf-c-data-list__item-content--md--PaddingBottom); }\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon) {\n      margin-right: var(--pf-c-data-list__cell--MarginRight); }\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell + .pf-c-data-list__cell {\n      flex: 1;\n      order: initial; }\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell.pf-m-align-right {\n      margin-left: auto; }\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell.pf-m-no-fill {\n      flex-grow: 0; }\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell.pf-m-flex-2 {\n      flex-grow: 2; }\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell.pf-m-flex-3 {\n      flex-grow: 3; }\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell.pf-m-flex-4 {\n      flex-grow: 4; }\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell.pf-m-flex-5 {\n      flex-grow: 5; }\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__expandable-content {\n      max-height: initial;\n      overflow-y: visible; } }\n\n@media screen and (min-width: 992px) {\n  .pf-c-data-list.pf-m-grid-lg {\n    --pf-c-data-list__cell--cell--PaddingTop: var(--pf-c-data-list__cell--cell--md--PaddingTop);\n    --pf-c-data-list__cell--PaddingBottom: var(--pf-c-data-list__cell--md--PaddingBottom);\n    --pf-c-data-list__item-control--MarginRight: var(--pf-c-data-list__item-control--md--MarginRight);\n    --pf-c-data-list__item-action--MarginLeft: var(--pf-c-data-list__item-action--md--MarginLeft);\n    --pf-c-data-list__expandable-content-body--PaddingTop: var(--pf-c-data-list__expandable-content-body--md--PaddingTop);\n    --pf-c-data-list__expandable-content-body--PaddingBottom: var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell--PaddingBottom: var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell-cell--PaddingTop: var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop); } }\n  @media screen and (min-width: 992px) and (min-width: 1200px) {\n    .pf-c-data-list.pf-m-grid-lg {\n      --pf-c-data-list__item-row--PaddingRight: var(--pf-c-data-list__item-row--xl--PaddingRight);\n      --pf-c-data-list__item-row--PaddingLeft: var(--pf-c-data-list__item-row--xl--PaddingLeft);\n      --pf-c-data-list__expandable-content-body--PaddingRight: var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);\n      --pf-c-data-list__expandable-content-body--PaddingLeft: var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft); } }\n\n@media screen and (min-width: 992px) {\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__item-content {\n      display: flex;\n      flex-wrap: wrap;\n      flex-grow: 1;\n      padding-bottom: var(--pf-c-data-list__item-content--md--PaddingBottom); }\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon) {\n      margin-right: var(--pf-c-data-list__cell--MarginRight); }\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell + .pf-c-data-list__cell {\n      flex: 1;\n      order: initial; }\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell.pf-m-align-right {\n      margin-left: auto; }\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell.pf-m-no-fill {\n      flex-grow: 0; }\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell.pf-m-flex-2 {\n      flex-grow: 2; }\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell.pf-m-flex-3 {\n      flex-grow: 3; }\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell.pf-m-flex-4 {\n      flex-grow: 4; }\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell.pf-m-flex-5 {\n      flex-grow: 5; }\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__expandable-content {\n      max-height: initial;\n      overflow-y: visible; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-c-data-list.pf-m-grid-xl {\n    --pf-c-data-list__cell--cell--PaddingTop: var(--pf-c-data-list__cell--cell--md--PaddingTop);\n    --pf-c-data-list__cell--PaddingBottom: var(--pf-c-data-list__cell--md--PaddingBottom);\n    --pf-c-data-list__item-control--MarginRight: var(--pf-c-data-list__item-control--md--MarginRight);\n    --pf-c-data-list__item-action--MarginLeft: var(--pf-c-data-list__item-action--md--MarginLeft);\n    --pf-c-data-list__expandable-content-body--PaddingTop: var(--pf-c-data-list__expandable-content-body--md--PaddingTop);\n    --pf-c-data-list__expandable-content-body--PaddingBottom: var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell--PaddingBottom: var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell-cell--PaddingTop: var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop); } }\n  @media screen and (min-width: 1200px) and (min-width: 1200px) {\n    .pf-c-data-list.pf-m-grid-xl {\n      --pf-c-data-list__item-row--PaddingRight: var(--pf-c-data-list__item-row--xl--PaddingRight);\n      --pf-c-data-list__item-row--PaddingLeft: var(--pf-c-data-list__item-row--xl--PaddingLeft);\n      --pf-c-data-list__expandable-content-body--PaddingRight: var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);\n      --pf-c-data-list__expandable-content-body--PaddingLeft: var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft); } }\n\n@media screen and (min-width: 1200px) {\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__item-content {\n      display: flex;\n      flex-wrap: wrap;\n      flex-grow: 1;\n      padding-bottom: var(--pf-c-data-list__item-content--md--PaddingBottom); }\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon) {\n      margin-right: var(--pf-c-data-list__cell--MarginRight); }\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell + .pf-c-data-list__cell {\n      flex: 1;\n      order: initial; }\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell.pf-m-align-right {\n      margin-left: auto; }\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell.pf-m-no-fill {\n      flex-grow: 0; }\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell.pf-m-flex-2 {\n      flex-grow: 2; }\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell.pf-m-flex-3 {\n      flex-grow: 3; }\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell.pf-m-flex-4 {\n      flex-grow: 4; }\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell.pf-m-flex-5 {\n      flex-grow: 5; }\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__expandable-content {\n      max-height: initial;\n      overflow-y: visible; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-c-data-list.pf-m-grid-2xl {\n    --pf-c-data-list__cell--cell--PaddingTop: var(--pf-c-data-list__cell--cell--md--PaddingTop);\n    --pf-c-data-list__cell--PaddingBottom: var(--pf-c-data-list__cell--md--PaddingBottom);\n    --pf-c-data-list__item-control--MarginRight: var(--pf-c-data-list__item-control--md--MarginRight);\n    --pf-c-data-list__item-action--MarginLeft: var(--pf-c-data-list__item-action--md--MarginLeft);\n    --pf-c-data-list__expandable-content-body--PaddingTop: var(--pf-c-data-list__expandable-content-body--md--PaddingTop);\n    --pf-c-data-list__expandable-content-body--PaddingBottom: var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell--PaddingBottom: var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell-cell--PaddingTop: var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop); } }\n  @media screen and (min-width: 1450px) and (min-width: 1200px) {\n    .pf-c-data-list.pf-m-grid-2xl {\n      --pf-c-data-list__item-row--PaddingRight: var(--pf-c-data-list__item-row--xl--PaddingRight);\n      --pf-c-data-list__item-row--PaddingLeft: var(--pf-c-data-list__item-row--xl--PaddingLeft);\n      --pf-c-data-list__expandable-content-body--PaddingRight: var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);\n      --pf-c-data-list__expandable-content-body--PaddingLeft: var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft); } }\n\n@media screen and (min-width: 1450px) {\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__item-content {\n      display: flex;\n      flex-wrap: wrap;\n      flex-grow: 1;\n      padding-bottom: var(--pf-c-data-list__item-content--md--PaddingBottom); }\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon) {\n      margin-right: var(--pf-c-data-list__cell--MarginRight); }\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell + .pf-c-data-list__cell {\n      flex: 1;\n      order: initial; }\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell.pf-m-align-right {\n      margin-left: auto; }\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell.pf-m-no-fill {\n      flex-grow: 0; }\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell.pf-m-flex-2 {\n      flex-grow: 2; }\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell.pf-m-flex-3 {\n      flex-grow: 3; }\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell.pf-m-flex-4 {\n      flex-grow: 4; }\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell.pf-m-flex-5 {\n      flex-grow: 5; }\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__expandable-content {\n      max-height: initial;\n      overflow-y: visible; } }\n\n.pf-c-data-list {\n  --pf-c-data-list--BorderTopColor: var(--pf-global--BorderColor--300);\n  --pf-c-data-list--BorderTopWidth: var(--pf-global--spacer--sm);\n  --pf-c-data-list--sm--BorderTopWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-data-list--sm--BorderTopColor: var(--pf-global--BorderColor--100);\n  --pf-c-data-list__item--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-data-list__item--m-selected--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-data-list__item--m-expanded--before--BackgroundColor: var(--pf-global--active-color--100);\n  --pf-c-data-list__item--m-selected--before--BackgroundColor: var(--pf-global--active-color--100);\n  --pf-c-data-list__item--m-selected--BoxShadow: var(--pf-global--BoxShadow--sm-top), var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-data-list__item--m-selectable--OutlineOffset: calc(-1 * var(--pf-global--spacer--xs));\n  --pf-c-data-list__item--m-selectable--hover--ZIndex: calc(var(--pf-c-data-list__item--m-selected--ZIndex) + 1);\n  --pf-c-data-list__item--m-selectable--hover--BoxShadow: var(--pf-global--BoxShadow--sm-top), var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-data-list__item--m-selectable--focus--BoxShadow: var(--pf-global--BoxShadow--sm-top), var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-data-list__item--m-selectable--active--BoxShadow: var(--pf-global--BoxShadow--sm-top), var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-data-list__item--m-expanded--m-selectable--before--BackgroundColor: var(--pf-global--active-color--300);\n  --pf-c-data-list__item--BorderBottomColor: var(--pf-global--BorderColor--300);\n  --pf-c-data-list__item--BorderBottomWidth: 0.5rem;\n  --pf-c-data-list__item--m-selectable--hover--item--BorderTopColor: var(--pf-c-data-list__item--BorderBottomColor);\n  --pf-c-data-list__item--m-selectable--hover--item--BorderTopWidth: var(--pf-c-data-list__item--BorderBottomWidth);\n  --pf-c-data-list__item--sm--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-data-list__item--sm--BorderBottomColor: var(--pf-global--BorderColor--100);\n  --pf-c-data-list__item--before--BackgroundColor: transparent;\n  --pf-c-data-list__item--before--Width: var(--pf-global--BorderWidth--lg);\n  --pf-c-data-list__item--before--Transition: var(--pf-global--Transition);\n  --pf-c-data-list__item--before--Top: 0;\n  --pf-c-data-list__item--before--sm--Top: calc(var(--pf-c-data-list__item--BorderBottomWidth) * -1);\n  --pf-c-data-list__item-row--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-data-list__item-row--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-data-list__item-row--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-data-list__item-row--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-data-list__item-content--md--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-data-list__cell--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-data-list__cell--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-data-list__cell--MarginRight: var(--pf-global--spacer--xl);\n  --pf-c-data-list__cell--md--PaddingBottom: 0;\n  --pf-c-data-list__cell--m-icon--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-data-list__cell--cell--PaddingTop: 0;\n  --pf-c-data-list__cell--cell--md--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-data-list__cell--m-icon--cell--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-data-list--cell--MinWidth: initial;\n  --pf-c-data-list--cell--Overflow: visible;\n  --pf-c-data-list--cell--TextOverflow: clip;\n  --pf-c-data-list--cell--WhiteSpace: normal;\n  --pf-c-data-list--cell--WordBreak: normal;\n  --pf-c-data-list--cell--m-truncate--MinWidth: 5ch;\n  --pf-c-data-list__toggle--MarginLeft: calc(var(--pf-global--spacer--sm) * -1);\n  --pf-c-data-list__toggle--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-data-list__toggle-icon--Transition: .2s ease-in 0s;\n  --pf-c-data-list__item--m-expanded__toggle-icon--Rotate: 90deg;\n  --pf-c-data-list__item-draggable-button--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-data-list__item-draggable-button--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-data-list__item-draggable-button--MarginTop: calc(var(--pf-global--spacer--sm) * -1);\n  --pf-c-data-list__item-draggable-button--MarginLeft: calc(var(--pf-global--spacer--md) * -1);\n  --pf-c-data-list__item-draggable-button-icon--Color: var(--pf-global--icon--Color--light);\n  --pf-c-data-list__item-draggable-button--m-disabled__draggable-icon--Color: var(--pf-global--disabled-color--200);\n  --pf-c-data-list__item-draggable-button--hover__draggable-icon--Color: var(--pf-global--icon--Color--dark);\n  --pf-c-data-list__item-draggable-button--focus__draggable-icon--Color: var(--pf-global--icon--Color--dark);\n  --pf-c-data-list__item--m-ghost-row--after--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-data-list__item--m-ghost-row--after--Opacity: .6;\n  --pf-c-data-list__item-control--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-data-list__item-control--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-data-list__item-control--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-data-list__item-control--md--MarginRight: var(--pf-global--spacer--xl);\n  --pf-c-data-list__item-control--not-last-child--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-data-list__item-action--Display: flex;\n  --pf-c-data-list__item-action--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-data-list__item-action--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-data-list__item-action--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-data-list__item-action--md--MarginLeft: var(--pf-global--spacer--xl);\n  --pf-c-data-list__item-action--not-last-child--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-data-list__action--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-data-list__expandable-content--BorderTopWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-data-list__expandable-content--BorderTopColor: var(--pf-global--BorderColor--100);\n  --pf-c-data-list__expandable-content--MarginRight: calc(var(--pf-c-data-list__expandable-content-body--PaddingRight) * -1);\n  --pf-c-data-list__expandable-content--MarginLeft: calc(var(--pf-c-data-list__expandable-content-body--PaddingLeft) * -1);\n  --pf-c-data-list__expandable-content--MaxHeight: 37.5rem;\n  --pf-c-data-list__expandable-content--before--Top: calc(var(--pf-c-data-list__item--BorderBottomWidth) * -1);\n  --pf-c-data-list__expandable-content-body--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-data-list__expandable-content-body--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-data-list__expandable-content-body--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-data-list__expandable-content-body--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-data-list__expandable-content-body--md--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-data-list__expandable-content-body--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-data-list__expandable-content-body--md--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-data-list__expandable-content-body--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-data-list--m-compact--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-data-list--m-compact__check--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-data-list--m-compact__cell--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-data-list--m-compact__cell--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-data-list--m-compact__cell--md--PaddingBottom: 0;\n  --pf-c-data-list--m-compact__cell-cell--PaddingTop: 0;\n  --pf-c-data-list--m-compact__cell-cell--md--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-data-list--m-compact__cell--cell--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-data-list--m-compact__item-control--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-data-list--m-compact__item-control--PaddingBottom: 0;\n  --pf-c-data-list--m-compact__item-control--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-data-list--m-compact__item-action--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-data-list--m-compact__item-action--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-data-list--m-compact__item-action--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-data-list--m-compact__item-content--PaddingBottom: var(--pf-global--spacer--sm);\n  color: var(--pf-global--Color--100);\n  overflow-wrap: break-word;\n  list-style-type: disc;\n  border-top: var(--pf-c-data-list--BorderTopWidth) solid var(--pf-c-data-list--BorderTopColor); }\n  @media screen and (min-width: 576px) {\n    .pf-c-data-list {\n      --pf-c-data-list--BorderTopColor: var(--pf-c-data-list--sm--BorderTopColor);\n      --pf-c-data-list--BorderTopWidth: var(--pf-c-data-list--sm--BorderTopWidth); } }\n  @media screen and (min-width: 576px) {\n    .pf-c-data-list {\n      --pf-c-data-list__item--BorderBottomWidth: var(--pf-c-data-list__item--sm--BorderBottomWidth);\n      --pf-c-data-list__item--BorderBottomColor: var(--pf-c-data-list__item--sm--BorderBottomColor); } }\n  @media (min-width: 576px) {\n    .pf-c-data-list {\n      --pf-c-data-list__item--before--Top: var(--pf-c-data-list__item--before--sm--Top); } }\n  .pf-c-data-list.pf-m-compact {\n    font-size: var(--pf-c-data-list--m-compact--FontSize);\n    --pf-c-data-list__item-action--MarginLeft: var(--pf-c-data-list--m-compact__item-action--MarginLeft);\n    --pf-c-data-list__item-action--PaddingTop: var(--pf-c-data-list--m-compact__item-action--PaddingTop);\n    --pf-c-data-list__item-action--PaddingBottom: var(--pf-c-data-list--m-compact__item-action--PaddingBottom);\n    --pf-c-data-list__item-control--MarginRight: var(--pf-c-data-list--m-compact__item-control--MarginRight);\n    --pf-c-data-list__item-control--PaddingTop: var(--pf-c-data-list--m-compact__item-control--PaddingTop);\n    --pf-c-data-list__item-control--PaddingBottom: var(--pf-c-data-list--m-compact__item-control--PaddingBottom);\n    --pf-c-data-list__item-content--md--PaddingBottom: var(--pf-c-data-list--m-compact__item-content--PaddingBottom); }\n    .pf-c-data-list.pf-m-compact .pf-c-data-list__cell {\n      --pf-c-data-list__cell--PaddingTop: var(--pf-c-data-list--m-compact__cell--PaddingTop);\n      --pf-c-data-list__cell--PaddingBottom: var(--pf-c-data-list--m-compact__cell--PaddingBottom);\n      --pf-c-data-list__cell--MarginRight: var(--pf-c-data-list--m-compact__cell--cell--MarginRight);\n      --pf-c-data-list__cell--cell--PaddingTop: var(--pf-c-data-list--m-compact__cell-cell--PaddingTop); }\n    .pf-c-data-list.pf-m-compact .pf-c-data-list__check {\n      font-size: var(--pf-c-data-list--m-compact__check--FontSize); }\n  .pf-c-data-list.pf-m-drag-over {\n    overflow-anchor: none; }\n\n.pf-c-data-list.pf-m-truncate,\n.pf-c-data-list__item-row.pf-m-truncate,\n.pf-c-data-list__cell.pf-m-truncate,\n.pf-c-data-list__text.pf-m-truncate {\n  --pf-c-data-list--cell--MinWidth: var(--pf-c-data-list--cell--m-truncate--MinWidth);\n  --pf-c-data-list--cell--Overflow: hidden;\n  --pf-c-data-list--cell--TextOverflow: ellipsis;\n  --pf-c-data-list--cell--WhiteSpace: nowrap; }\n\n.pf-c-data-list.pf-m-break-word,\n.pf-c-data-list__item-row.pf-m-break-word,\n.pf-c-data-list__cell.pf-m-break-word,\n.pf-c-data-list__text.pf-m-break-word {\n  --pf-c-data-list--cell--WordBreak: break-word; }\n\n.pf-c-data-list.pf-m-nowrap,\n.pf-c-data-list__item-row.pf-m-nowrap,\n.pf-c-data-list__cell.pf-m-nowrap,\n.pf-c-data-list__text.pf-m-nowrap {\n  --pf-c-data-list--cell--WhiteSpace: nowrap; }\n\n.pf-c-data-list__item {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  background-color: var(--pf-c-data-list__item--BackgroundColor);\n  border-bottom: var(--pf-c-data-list__item--BorderBottomWidth) solid var(--pf-c-data-list__item--BorderBottomColor); }\n  .pf-c-data-list__item::before {\n    position: absolute;\n    top: var(--pf-c-data-list__item--before--Top);\n    bottom: 0;\n    left: 0;\n    width: var(--pf-c-data-list__item--before--Width);\n    content: "";\n    background-color: var(--pf-c-data-list__item--before--BackgroundColor);\n    transition: var(--pf-c-data-list__item--before--Transition); }\n  .pf-c-data-list__item.pf-m-selectable {\n    cursor: pointer;\n    outline-offset: var(--pf-c-data-list__item--m-selectable--OutlineOffset); }\n    .pf-c-data-list__item.pf-m-selectable:hover, .pf-c-data-list__item.pf-m-selectable:focus {\n      position: relative;\n      z-index: var(--pf-c-data-list__item--m-selectable--hover--ZIndex); }\n      .pf-c-data-list__item.pf-m-selectable:hover:not(.pf-m-selected):not(:last-child), .pf-c-data-list__item.pf-m-selectable:focus:not(.pf-m-selected):not(:last-child) {\n        --pf-c-data-list__item--BorderBottomWidth: 0; }\n        .pf-c-data-list__item.pf-m-selectable:hover:not(.pf-m-selected):not(:last-child) + .pf-c-data-list__item, .pf-c-data-list__item.pf-m-selectable:focus:not(.pf-m-selected):not(:last-child) + .pf-c-data-list__item {\n          border-top: var(--pf-c-data-list__item--m-selectable--hover--item--BorderTopWidth) solid var(--pf-c-data-list__item--m-selectable--hover--item--BorderTopColor); }\n    .pf-c-data-list__item.pf-m-selectable:hover {\n      box-shadow: var(--pf-c-data-list__item--m-selectable--hover--BoxShadow); }\n    .pf-c-data-list__item.pf-m-selectable:focus {\n      box-shadow: var(--pf-c-data-list__item--m-selectable--focus--BoxShadow); }\n    .pf-c-data-list__item.pf-m-selectable:active {\n      box-shadow: var(--pf-c-data-list__item--m-selectable--active--BoxShadow); }\n  .pf-c-data-list__item.pf-m-selected {\n    --pf-c-data-list__item--before--BackgroundColor: var(--pf-c-data-list__item--m-selected--before--BackgroundColor);\n    position: relative;\n    z-index: var(--pf-c-data-list__item--m-selected--ZIndex);\n    box-shadow: var(--pf-c-data-list__item--m-selected--BoxShadow); }\n  .pf-c-data-list__item.pf-m-ghost-row::after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    background-color: var(--pf-c-data-list__item--m-ghost-row--after--BackgroundColor);\n    opacity: var(--pf-c-data-list__item--m-ghost-row--after--Opacity); }\n  .pf-c-data-list__item.pf-m-expanded {\n    --pf-c-data-list__item--before--BackgroundColor: var(--pf-c-data-list__item--m-expanded--before--BackgroundColor); }\n    .pf-c-data-list__item.pf-m-expanded.pf-m-selectable:not(.pf-m-selected) {\n      --pf-c-data-list__item--before--BackgroundColor: var(--pf-c-data-list__item--m-expanded--m-selectable--before--BackgroundColor); }\n\n.pf-c-data-list__item-row {\n  display: flex;\n  flex-wrap: nowrap;\n  padding-right: var(--pf-c-data-list__item-row--PaddingRight);\n  padding-left: var(--pf-c-data-list__item-row--PaddingLeft); }\n\n.pf-c-data-list__item-control {\n  display: flex;\n  flex-wrap: nowrap;\n  padding-top: var(--pf-c-data-list__item-control--PaddingTop);\n  padding-bottom: var(--pf-c-data-list__item-control--PaddingBottom);\n  margin-right: var(--pf-c-data-list__item-control--MarginRight); }\n  .pf-c-data-list__item-control > *:not(:last-child) {\n    margin-right: var(--pf-c-data-list__item-control--not-last-child--MarginRight); }\n\n.pf-c-data-list__item-draggable-button {\n  padding-right: var(--pf-c-data-list__item-draggable-button--PaddingRight);\n  padding-left: var(--pf-c-data-list__item-draggable-button--PaddingLeft);\n  margin-top: var(--pf-c-data-list__item-draggable-button--MarginTop);\n  margin-left: var(--pf-c-data-list__item-draggable-button--MarginLeft);\n  border: 0; }\n  .pf-c-data-list__item-draggable-button:hover {\n    --pf-c-data-list__item-draggable-button-icon--Color: var(--pf-c-data-list__item-draggable-button--hover__draggable-icon--Color);\n    cursor: grab; }\n  .pf-c-data-list__item-draggable-button:focus {\n    --pf-c-data-list__item-draggable-button-icon--Color: var(--pf-c-data-list__item-draggable-button--focus__draggable-icon--Color); }\n  .pf-c-data-list__item-draggable-button:active {\n    cursor: grabbing; }\n  .pf-c-data-list__item-draggable-button.pf-m-disabled {\n    --pf-c-data-list__item-draggable-button-icon--Color: var(--pf-c-data-list__item-draggable-button--m-disabled__draggable-icon--Color);\n    pointer-events: none;\n    cursor: none; }\n  .pf-c-data-list__item-draggable-button .pf-c-data-list__item-draggable-icon {\n    color: var(--pf-c-data-list__item-draggable-button-icon--Color); }\n\n.pf-c-data-list__item-action {\n  --pf-hidden-visible--visible--Display: var(--pf-c-data-list__item-action--Display);\n  align-items: flex-start;\n  align-content: flex-start;\n  padding-top: var(--pf-c-data-list__item-action--PaddingTop);\n  padding-bottom: var(--pf-c-data-list__item-action--PaddingBottom);\n  margin-left: var(--pf-c-data-list__item-action--MarginLeft); }\n  .pf-c-data-list__item-action > *:not(:last-child) {\n    margin-right: var(--pf-c-data-list__item-action--not-last-child--MarginRight); }\n  .pf-c-data-list__item-action .pf-c-data-list__action {\n    margin-top: var(--pf-c-data-list__action--MarginTop); }\n\n.pf-c-data-list__toggle {\n  margin-top: var(--pf-c-data-list__toggle--MarginTop);\n  margin-left: var(--pf-c-data-list__toggle--MarginLeft); }\n\n.pf-c-data-list__toggle-icon {\n  pointer-events: none;\n  transition: var(--pf-c-data-list__toggle-icon--Transition); }\n  .pf-c-data-list__item.pf-m-expanded .pf-c-data-list__toggle-icon {\n    transform: rotate(var(--pf-c-data-list__item--m-expanded__toggle-icon--Rotate)); }\n\n.pf-c-data-list__item-content {\n  display: grid;\n  width: 100%;\n  grid-template-columns: auto 1fr; }\n\n.pf-c-data-list__cell {\n  flex: 1;\n  grid-column: 1 / -1;\n  padding-top: var(--pf-c-data-list__cell--PaddingTop);\n  padding-bottom: var(--pf-c-data-list__cell--PaddingBottom); }\n  .pf-c-data-list__cell + .pf-c-data-list__cell {\n    flex: 1 0 100%;\n    order: 1;\n    padding-top: var(--pf-c-data-list__cell--cell--PaddingTop); }\n  .pf-c-data-list__cell.pf-m-icon {\n    flex-grow: 0;\n    margin-right: var(--pf-c-data-list__cell--m-icon--MarginRight);\n    grid-column: 1 / 2; }\n  .pf-c-data-list__cell.pf-m-icon + .pf-c-data-list__cell {\n    grid-column: 2 / 3;\n    padding-top: var(--pf-c-data-list__cell--m-icon--cell--PaddingTop); }\n  .pf-c-data-list__cell.pf-m-align-right {\n    margin-left: 0; }\n\n.pf-c-data-list__text {\n  display: inline-block; }\n\n.pf-c-data-list__text,\n.pf-c-data-list__cell {\n  min-width: var(--pf-c-data-list--cell--MinWidth);\n  max-width: 100%;\n  overflow: var(--pf-c-data-list--cell--Overflow);\n  text-overflow: var(--pf-c-data-list--cell--TextOverflow);\n  word-break: var(--pf-c-data-list--cell--WordBreak);\n  white-space: var(--pf-c-data-list--cell--WhiteSpace); }\n\n.pf-c-data-list__expandable-content {\n  max-height: var(--pf-c-data-list__expandable-content--MaxHeight);\n  overflow-y: auto;\n  border-top: var(--pf-c-data-list__expandable-content--BorderTopWidth) solid var(--pf-c-data-list__expandable-content--BorderTopColor); }\n  .pf-c-data-list__expandable-content .pf-c-data-list__expandable-content-body {\n    padding: var(--pf-c-data-list__expandable-content-body--PaddingTop) var(--pf-c-data-list__expandable-content-body--PaddingRight) var(--pf-c-data-list__expandable-content-body--PaddingBottom) var(--pf-c-data-list__expandable-content-body--PaddingLeft); }\n    .pf-c-data-list__expandable-content .pf-c-data-list__expandable-content-body.pf-m-no-padding {\n      padding: 0; }\n\n.pf-c-description-list {\n  --pf-c-description-list--RowGap: var(--pf-global--gutter--md);\n  --pf-c-description-list--ColumnGap: var(--pf-global--spacer--lg);\n  --pf-c-description-list--GridTemplateColumns--count: 1;\n  --pf-c-description-list--GridTemplateColumns--width: 1fr;\n  --pf-c-description-list--GridTemplateColumns: repeat(var(--pf-c-description-list--GridTemplateColumns--count), var(--pf-c-description-list--GridTemplateColumns--width));\n  --pf-c-description-list__group--RowGap: var(--pf-global--spacer--sm);\n  --pf-c-description-list__group--ColumnGap: var(--pf-global--spacer--md);\n  --pf-c-description-list__group--GridTemplateColumns: auto;\n  --pf-c-description-list__group--GridColumn: auto;\n  --pf-c-description-list__term--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-description-list__term--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-description-list--m-horizontal__term--width: 12ch;\n  --pf-c-description-list--m-horizontal__description--width: minmax(10ch, auto);\n  --pf-c-description-list--m-horizontal__group--GridTemplateColumns: var(--pf-c-description-list__term--width) var(--pf-c-description-list--m-horizontal__description--width);\n  --pf-c-description-list--m-1-col--GridTemplateColumns--count: 1;\n  --pf-c-description-list--m-auto-fit--GridTemplateColumns--min: 15.625rem;\n  --pf-c-description-list--m-auto-fit--GridTemplateColumns--minmax--min: var(--pf-c-description-list--m-auto-fit--GridTemplateColumns--min);\n  display: grid;\n  align-items: baseline;\n  row-gap: var(--pf-c-description-list--RowGap);\n  column-gap: var(--pf-c-description-list--ColumnGap);\n  grid-template-columns: var(--pf-c-description-list--GridTemplateColumns); }\n  @media screen and (min-width: 768px) {\n    .pf-c-description-list {\n      --pf-c-description-list--m-2-col--GridTemplateColumns--count: 2;\n      --pf-c-description-list--m-3-col--GridTemplateColumns--count: 3; } }\n  .pf-c-description-list.pf-m-horizontal {\n    --pf-c-description-list__group--GridTemplateColumns: var(--pf-c-description-list--m-horizontal__group--GridTemplateColumns);\n    --pf-c-description-list__term--width: var(--pf-c-description-list--m-horizontal__term--width); }\n    @media (min-width: 768px) {\n      .pf-c-description-list.pf-m-horizontal {\n        --pf-c-description-list__term--width: var(--pf-c-description-list--m-horizontal__term--width-on-md, var(--pf-c-description-list--m-horizontal__term--width)); } }\n    @media (min-width: 992px) {\n      .pf-c-description-list.pf-m-horizontal {\n        --pf-c-description-list__term--width: var(--pf-c-description-list--m-horizontal__term--width-on-lg, var(--pf-c-description-list--m-horizontal__term--width-on-md, var(--pf-c-description-list--m-horizontal__term--width))); } }\n    @media (min-width: 1200px) {\n      .pf-c-description-list.pf-m-horizontal {\n        --pf-c-description-list__term--width: var(--pf-c-description-list--m-horizontal__term--width-on-xl, var(--pf-c-description-list--m-horizontal__term--width-on-lg, var(--pf-c-description-list--m-horizontal__term--width-on-md, var(--pf-c-description-list--m-horizontal__term--width)))); } }\n    @media (min-width: 1450px) {\n      .pf-c-description-list.pf-m-horizontal {\n        --pf-c-description-list__term--width: var(--pf-c-description-list--m-horizontal__term--width-on-2xl, var(--pf-c-description-list--m-horizontal__term--width-on-xl, var(--pf-c-description-list--m-horizontal__term--width-on-lg, var(--pf-c-description-list--m-horizontal__term--width-on-md, var(--pf-c-description-list--m-horizontal__term--width))))); } }\n  .pf-c-description-list.pf-m-inline-grid {\n    display: inline-grid; }\n  .pf-c-description-list.pf-m-auto-column-widths {\n    --pf-c-description-list--GridTemplateColumns--width: minmax(8ch, max-content); }\n  .pf-c-description-list.pf-m-auto-fit {\n    grid-template-columns: repeat(auto-fit, minmax(var(--pf-c-description-list--m-auto-fit--GridTemplateColumns--minmax--min), 1fr));\n    --pf-c-description-list--GridTemplateColumns--minmax--min: var(--pf-c-description-list--GridTemplateColumns--min); }\n    @media (min-width: 768px) {\n      .pf-c-description-list.pf-m-auto-fit {\n        --pf-c-description-list--GridTemplateColumns--minmax--min: var(--pf-c-description-list--GridTemplateColumns--min-on-md, var(--pf-c-description-list--GridTemplateColumns--min)); } }\n    @media (min-width: 992px) {\n      .pf-c-description-list.pf-m-auto-fit {\n        --pf-c-description-list--GridTemplateColumns--minmax--min: var(--pf-c-description-list--GridTemplateColumns--min-on-lg, var(--pf-c-description-list--GridTemplateColumns--min-on-md, var(--pf-c-description-list--GridTemplateColumns--min))); } }\n    @media (min-width: 1200px) {\n      .pf-c-description-list.pf-m-auto-fit {\n        --pf-c-description-list--GridTemplateColumns--minmax--min: var(--pf-c-description-list--GridTemplateColumns--min-on-xl, var(--pf-c-description-list--GridTemplateColumns--min-on-lg, var(--pf-c-description-list--GridTemplateColumns--min-on-md, var(--pf-c-description-list--GridTemplateColumns--min)))); } }\n    @media (min-width: 1450px) {\n      .pf-c-description-list.pf-m-auto-fit {\n        --pf-c-description-list--GridTemplateColumns--minmax--min: var(--pf-c-description-list--GridTemplateColumns--min-on-2xl, var(--pf-c-description-list--GridTemplateColumns--min-on-xl, var(--pf-c-description-list--GridTemplateColumns--min-on-lg, var(--pf-c-description-list--GridTemplateColumns--min-on-md, var(--pf-c-description-list--GridTemplateColumns--min))))); } }\n\n.pf-c-description-list__group {\n  display: grid;\n  grid-column: var(--pf-c-description-list__group--GridColumn);\n  row-gap: var(--pf-c-description-list__group--RowGap);\n  column-gap: var(--pf-c-description-list__group--ColumnGap);\n  grid-template-columns: var(--pf-c-description-list__group--GridTemplateColumns);\n  align-items: baseline; }\n\n.pf-c-description-list__term,\n.pf-c-description-list__description {\n  text-align: left; }\n\n.pf-c-description-list__term {\n  font-size: var(--pf-c-description-list__term--FontSize);\n  font-weight: var(--pf-c-description-list__term--FontWeight); }\n  .pf-c-description-list__term .pf-c-description-list__text {\n    display: inline; }\n\n.pf-c-description-list.pf-m-1-col {\n  --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-1-col--GridTemplateColumns--count); }\n\n.pf-c-description-list.pf-m-2-col {\n  --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-2-col--GridTemplateColumns--count); }\n\n.pf-c-description-list.pf-m-3-col {\n  --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-3-col--GridTemplateColumns--count); }\n\n@media (min-width: 768px) {\n  .pf-c-description-list.pf-m-1-col-on-md {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-1-col--GridTemplateColumns--count); }\n  .pf-c-description-list.pf-m-2-col-on-md {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-2-col--GridTemplateColumns--count); }\n  .pf-c-description-list.pf-m-3-col-on-md {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-3-col--GridTemplateColumns--count); } }\n\n@media (min-width: 992px) {\n  .pf-c-description-list.pf-m-1-col-on-lg {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-1-col--GridTemplateColumns--count); }\n  .pf-c-description-list.pf-m-2-col-on-lg {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-2-col--GridTemplateColumns--count); }\n  .pf-c-description-list.pf-m-3-col-on-lg {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-3-col--GridTemplateColumns--count); } }\n\n@media (min-width: 1200px) {\n  .pf-c-description-list.pf-m-1-col-on-xl {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-1-col--GridTemplateColumns--count); }\n  .pf-c-description-list.pf-m-2-col-on-xl {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-2-col--GridTemplateColumns--count); }\n  .pf-c-description-list.pf-m-3-col-on-xl {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-3-col--GridTemplateColumns--count); } }\n\n@media (min-width: 1450px) {\n  .pf-c-description-list.pf-m-1-col-on-2xl {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-1-col--GridTemplateColumns--count); }\n  .pf-c-description-list.pf-m-2-col-on-2xl {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-2-col--GridTemplateColumns--count); }\n  .pf-c-description-list.pf-m-3-col-on-2xl {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-3-col--GridTemplateColumns--count); } }\n\n.pf-c-dual-list-selector {\n  --pf-c-dual-list-selector__header--GridArea: pane-header;\n  --pf-c-dual-list-selector__tools--GridArea: pane-tools;\n  --pf-c-dual-list-selector__status--GridArea: pane-status;\n  --pf-c-dual-list-selector__menu--GridArea: pane-menu;\n  --pf-c-dual-list-selector__controls--GridArea: controls;\n  --pf-c-dual-list-selector--m-chosen__header--GridArea: pane-header-c;\n  --pf-c-dual-list-selector--m-chosen__tools--GridArea: pane-tools-c;\n  --pf-c-dual-list-selector--m-chosen__status--GridArea: pane-status-c;\n  --pf-c-dual-list-selector--m-chosen__menu--GridArea: pane-menu-c;\n  --pf-c-dual-list-selector--GridTemplateColumns--pane--MinMax--min: 12.5rem;\n  --pf-c-dual-list-selector--GridTemplateColumns--pane--MinMax--max: 28.125rem;\n  --pf-c-dual-list-selector__header--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-dual-list-selector__title-text--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-dual-list-selector__tools--MarginBottom: var(--pf-global--spacer--md);\n  --pf-c-dual-list-selector__tools-filter--tools-actions--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-dual-list-selector__menu--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-dual-list-selector__menu--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-dual-list-selector__menu--MinHeight: 12.5rem;\n  --pf-c-dual-list-selector__menu--MaxHeight: 20rem;\n  --pf-c-dual-list-selector__item--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-dual-list-selector__item--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-dual-list-selector__item--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-dual-list-selector__item--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-dual-list-selector__item--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-dual-list-selector__item--BackgroundColor: transparent;\n  --pf-c-dual-list-selector__item--hover--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-dual-list-selector__item--focus-within--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-dual-list-selector__item--m-selected--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-dual-list-selector__item--list__item--PaddingLeft: calc(var(--pf-global--spacer--lg) + var(--pf-global--spacer--xl));\n  --pf-c-dual-list-selector__item--list__item--m-expandable--PaddingLeft: calc(var(--pf-global--spacer--lg) + var(--pf-global--spacer--md));\n  --pf-c-dual-list-selector__item--list--list__item--PaddingLeft: calc(var(--pf-global--spacer--2xl) + var(--pf-global--spacer--xl));\n  --pf-c-dual-list-selector__item-text--Color: var(--pf-global--Color--100);\n  --pf-c-dual-list-selector__item--m-selected__text--Color: var(--pf-global--active-color--100);\n  --pf-c-dual-list-selector__item--m-selected__text--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-dual-list-selector__status--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-dual-list-selector__status-text--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-dual-list-selector__status-text--Color: var(--pf-global--Color--200);\n  --pf-c-dual-list-selector__controls--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-dual-list-selector__controls--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-dual-list-selector__item-toggle--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-dual-list-selector__item-check--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-dual-list-selector__item-count--Marginleft: var(--pf-global--spacer--sm);\n  --pf-c-dual-list-selector__item--c-badge--m-read--BackgroundColor: var(--pf-global--disabled-color--200);\n  --pf-c-dual-list-selector__item-toggle-icon--Transform: 0;\n  --pf-c-dual-list-selector__list-item--m-expanded__item-toggle-icon--Rotate: 90deg;\n  --pf-c-dual-list-selector__item-toggle-icon--Transition: var(--pf-global--Transition);\n  display: grid;\n  grid-template-areas: "pane-header . pane-header-c" "pane-tools . pane-tools-c" "pane-status . pane-status-c" "pane-menu controls pane-menu-c";\n  grid-template-columns: minmax(var(--pf-c-dual-list-selector--GridTemplateColumns--pane--MinMax--min), var(--pf-c-dual-list-selector--GridTemplateColumns--pane--MinMax--max)) min-content minmax(var(--pf-c-dual-list-selector--GridTemplateColumns--pane--MinMax--min), var(--pf-c-dual-list-selector--GridTemplateColumns--pane--MinMax--max));\n  grid-template-rows: repeat(3, auto) auto; }\n\n.pf-c-dual-list-selector__pane {\n  display: contents; }\n  .pf-c-dual-list-selector__pane.pf-m-chosen {\n    --pf-c-dual-list-selector__header--GridArea: var(--pf-c-dual-list-selector--m-chosen__header--GridArea);\n    --pf-c-dual-list-selector__tools--GridArea: var(--pf-c-dual-list-selector--m-chosen__tools--GridArea);\n    --pf-c-dual-list-selector__status--GridArea: var(--pf-c-dual-list-selector--m-chosen__status--GridArea);\n    --pf-c-dual-list-selector__menu--GridArea: var(--pf-c-dual-list-selector--m-chosen__menu--GridArea); }\n\n.pf-c-dual-list-selector__header {\n  grid-area: var(--pf-c-dual-list-selector__header--GridArea);\n  margin-bottom: var(--pf-c-dual-list-selector__header--MarginBottom); }\n\n.pf-c-dual-list-selector__title-text {\n  font-weight: var(--pf-c-dual-list-selector__title-text--FontWeight); }\n\n.pf-c-dual-list-selector__tools {\n  display: flex;\n  grid-area: var(--pf-c-dual-list-selector__tools--GridArea);\n  margin-bottom: var(--pf-c-dual-list-selector__tools--MarginBottom); }\n\n.pf-c-dual-list-selector__tools-filter {\n  flex-grow: 1; }\n\n.pf-c-dual-list-selector__tools-actions {\n  display: flex; }\n  .pf-c-dual-list-selector__tools-filter ~ .pf-c-dual-list-selector__tools-actions {\n    margin-left: var(--pf-c-dual-list-selector__tools-filter--tools-actions--MarginLeft); }\n\n.pf-c-dual-list-selector__status {\n  display: flex;\n  grid-area: var(--pf-c-dual-list-selector__status--GridArea);\n  margin-bottom: var(--pf-c-dual-list-selector__status--MarginBottom); }\n\n.pf-c-dual-list-selector__status-text {\n  flex-grow: 1;\n  font-size: var(--pf-c-dual-list-selector__status-text--FontSize);\n  color: var(--pf-c-dual-list-selector__status-text--Color); }\n\n.pf-c-dual-list-selector__menu {\n  grid-area: var(--pf-c-dual-list-selector__menu--GridArea);\n  min-height: var(--pf-c-dual-list-selector__menu--MinHeight);\n  max-height: var(--pf-c-dual-list-selector__menu--MaxHeight);\n  overflow: auto;\n  border: var(--pf-c-dual-list-selector__menu--BorderWidth) solid var(--pf-c-dual-list-selector__menu--BorderColor); }\n\n.pf-c-dual-list-selector__list {\n  display: flex;\n  flex-direction: column; }\n  .pf-c-dual-list-selector__list .pf-c-dual-list-selector__list {\n    --pf-c-dual-list-selector__item--PaddingLeft: var(--pf-c-dual-list-selector__item--list__item--PaddingLeft); }\n    .pf-c-dual-list-selector__list .pf-c-dual-list-selector__list .pf-c-dual-list-selector__list-item.pf-m-expandable {\n      --pf-c-dual-list-selector__item--PaddingLeft: var(--pf-c-dual-list-selector__item--list__item--m-expandable--PaddingLeft); }\n    .pf-c-dual-list-selector__list .pf-c-dual-list-selector__list .pf-c-dual-list-selector__list {\n      --pf-c-dual-list-selector__item--PaddingLeft: var(--pf-c-dual-list-selector__item--list--list__item--PaddingLeft); }\n\n.pf-c-dual-list-selector__list-item.pf-m-expanded > .pf-c-dual-list-selector__item {\n  --pf-c-dual-list-selector__item-toggle-icon--Transform: rotate(--pf-c-dual-list-selector__list-item--m-expanded__item-toggle-icon--rotate); }\n\n.pf-c-dual-list-selector__item,\n.pf-c-dual-list-selector__main {\n  display: flex; }\n\n.pf-c-dual-list-selector__item,\n.pf-c-dual-list-selector__item-main {\n  flex-basis: 100%; }\n\n.pf-c-dual-list-selector__item {\n  width: 100%;\n  padding: var(--pf-c-dual-list-selector__item--PaddingTop) var(--pf-c-dual-list-selector__item--PaddingRight) var(--pf-c-dual-list-selector__item--PaddingBottom) var(--pf-c-dual-list-selector__item--PaddingLeft);\n  font-size: var(--pf-c-dual-list-selector__item--FontSize);\n  text-align: left;\n  cursor: pointer;\n  background-color: var(--pf-c-dual-list-selector__item--BackgroundColor);\n  border: 0; }\n  .pf-c-dual-list-selector__item:hover {\n    --pf-c-dual-list-selector__item--BackgroundColor: var(--pf-c-dual-list-selector__item--hover--BackgroundColor); }\n  .pf-c-dual-list-selector__item:focus-within {\n    --pf-c-dual-list-selector__item--BackgroundColor: var(--pf-c-dual-list-selector__item--focus-within--BackgroundColor); }\n  .pf-c-dual-list-selector__item.pf-m-selected {\n    --pf-c-dual-list-selector__item--BackgroundColor: var(--pf-c-dual-list-selector__item--m-selected--BackgroundColor); }\n    .pf-c-dual-list-selector__item.pf-m-selected .pf-c-dual-list-selector__item-text {\n      --pf-c-dual-list-selector__item-text--Color: var(--pf-c-dual-list-selector__item--m-selected__text--Color);\n      font-weight: var(--pf-c-dual-list-selector__item--m-selected__text--FontWeight); }\n  .pf-c-dual-list-selector__item .pf-c-dual-list-selector__item-count {\n    margin-left: var(--pf-c-dual-list-selector__item-count--Marginleft); }\n    .pf-c-dual-list-selector__item .pf-c-dual-list-selector__item-count .pf-c-badge.pf-m-read {\n      --pf-c-badge--m-read--BackgroundColor: var(--pf-c-dual-list-selector__item--c-badge--m-read--BackgroundColor); }\n\n.pf-c-dual-list-selector__item-text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  flex-grow: 1;\n  color: var(--pf-c-dual-list-selector__item-text--Color); }\n\n.pf-c-dual-list-selector__controls {\n  grid-area: var(--pf-c-dual-list-selector__controls--GridArea);\n  align-self: center;\n  padding-right: var(--pf-c-dual-list-selector__controls--PaddingRight);\n  padding-left: var(--pf-c-dual-list-selector__controls--PaddingLeft); }\n\n.pf-c-dual-list-selector__item-main {\n  display: flex;\n  min-width: 0; }\n\n.pf-c-dual-list-selector__item-toggle {\n  padding-right: var(--pf-c-dual-list-selector__item-toggle--PaddingRight); }\n\n.pf-c-dual-list-selector__item-check {\n  display: flex;\n  align-items: center;\n  margin-right: var(--pf-c-dual-list-selector__item-check--MarginRight); }\n\n.pf-c-dual-list-selector__item-toggle-icon {\n  display: inline-block;\n  transition: var(--pf-c-dual-list-selector__item-toggle-icon--Transition); }\n\n.pf-c-toolbar {\n  --pf-c-toolbar--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-toolbar--RowGap: var(--pf-global--spacer--lg);\n  --pf-c-toolbar--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-toolbar--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-toolbar__content--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-toolbar__content--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-toolbar--m-page-insets--inset: var(--pf-global--spacer--md);\n  --pf-c-toolbar--m-page-insets--xl--inset: var(--pf-global--spacer--lg);\n  --pf-c-toolbar__expandable-content--PaddingTop: var(--pf-c-toolbar--RowGap);\n  --pf-c-toolbar__expandable-content--PaddingRight: var(--pf-c-toolbar__content--PaddingRight);\n  --pf-c-toolbar__expandable-content--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-toolbar__expandable-content--PaddingLeft: var(--pf-c-toolbar__content--PaddingLeft);\n  --pf-c-toolbar__expandable-content--lg--PaddingRight: 0;\n  --pf-c-toolbar__expandable-content--lg--PaddingBottom: 0;\n  --pf-c-toolbar__expandable-content--lg--PaddingLeft: 0;\n  --pf-c-toolbar__expandable-content--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-toolbar__expandable-content--BoxShadow: var(--pf-global--BoxShadow--md-bottom);\n  --pf-c-toolbar__expandable-content--BackgroundColor: var(--pf-c-toolbar--BackgroundColor);\n  --pf-c-toolbar__expandable-content--m-expanded--GridRowGap: var(--pf-global--gutter--md);\n  --pf-c-toolbar__group--m-chip-container--MarginTop: calc(var(--pf-global--spacer--md) * -1);\n  --pf-c-toolbar__group--m-chip-container__item--MarginTop: var(--pf-global--spacer--md);\n  --pf-c-toolbar--spacer--base: var(--pf-global--spacer--md);\n  --pf-c-toolbar__item--spacer: var(--pf-c-toolbar--spacer--base);\n  --pf-c-toolbar__group--spacer: var(--pf-c-toolbar--spacer--base);\n  --pf-c-toolbar__group--m-toggle-group--spacer: var(--pf-global--spacer--sm);\n  --pf-c-toolbar__group--m-toggle-group--m-show--spacer: var(--pf-c-toolbar__group--spacer);\n  --pf-c-toolbar__group--m-icon-button-group--spacer: var(--pf-c-toolbar__group--spacer);\n  --pf-c-toolbar__group--m-icon-button-group--space-items: 0;\n  --pf-c-toolbar__group--m-button-group--spacer: var(--pf-c-toolbar__group--spacer);\n  --pf-c-toolbar__group--m-button-group--space-items: var(--pf-global--spacer--sm);\n  --pf-c-toolbar__group--m-filter-group--spacer: var(--pf-c-toolbar__group--spacer);\n  --pf-c-toolbar__group--m-filter-group--space-items: 0;\n  --pf-c-toolbar__item--m-overflow-menu--spacer: var(--pf-c-toolbar__item--spacer);\n  --pf-c-toolbar__item--m-bulk-select--spacer: var(--pf-global--spacer--lg);\n  --pf-c-toolbar__expand-all-icon--Rotate: 0;\n  --pf-c-toolbar__expand-all-icon--Transition: var(--pf-global--Transition);\n  --pf-c-toolbar__item--m-expand-all--m-expanded__expand-all-icon--Rotate: 90deg;\n  --pf-c-toolbar__item--m-search-filter--spacer: var(--pf-global--spacer--sm);\n  --pf-c-toolbar__item--m-chip-group--spacer: var(--pf-global--spacer--sm);\n  --pf-c-toolbar__item--m-label--spacer: var(--pf-c-toolbar__item--spacer);\n  --pf-c-toolbar__item--m-label--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-toolbar__toggle--m-expanded__c-button--m-plain--Color: var(--pf-global--Color--100);\n  --pf-c-toolbar--c-divider--m-vertical--spacer: var(--pf-c-toolbar--spacer--base);\n  position: relative;\n  row-gap: var(--pf-c-toolbar--RowGap);\n  display: grid;\n  padding-top: var(--pf-c-toolbar--PaddingTop);\n  padding-bottom: var(--pf-c-toolbar--PaddingBottom);\n  background-color: var(--pf-c-toolbar--BackgroundColor); }\n  @media screen and (min-width: 992px) {\n    .pf-c-toolbar {\n      --pf-c-toolbar__expandable-content--PaddingRight: var(--pf-c-toolbar__expandable-content--lg--PaddingRight);\n      --pf-c-toolbar__expandable-content--PaddingBottom: var(--pf-c-toolbar__expandable-content--lg--PaddingBottom);\n      --pf-c-toolbar__expandable-content--PaddingLeft: var(--pf-c-toolbar__expandable-content--lg--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-toolbar {\n      --pf-c-toolbar--m-page-insets--inset: var(--pf-c-toolbar--m-page-insets--xl--inset); } }\n  .pf-c-toolbar.pf-m-page-insets {\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--m-page-insets--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--m-page-insets--inset); }\n\n.pf-c-toolbar__content-section > .pf-c-divider,\n.pf-c-toolbar__group > .pf-c-divider {\n  --pf-c-toolbar--spacer: var(--pf-c-toolbar--c-divider--m-vertical--spacer); }\n\n.pf-c-toolbar__content-section > .pf-c-divider.pf-m-vertical,\n.pf-c-toolbar__group > .pf-c-divider.pf-m-vertical {\n  margin-right: var(--pf-c-toolbar--spacer); }\n  .pf-c-toolbar__content-section > .pf-c-divider.pf-m-vertical:last-child,\n  .pf-c-toolbar__group > .pf-c-divider.pf-m-vertical:last-child {\n    --pf-c-toolbar--spacer: 0; }\n\n.pf-c-toolbar__group {\n  --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--spacer);\n  display: flex;\n  align-items: center;\n  margin-right: var(--pf-c-toolbar--spacer); }\n  .pf-c-toolbar__group.pf-m-button-group {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-button-group--spacer); }\n    .pf-c-toolbar__group.pf-m-button-group > * {\n      --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-button-group--space-items); }\n  .pf-c-toolbar__group.pf-m-icon-button-group {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-icon-button-group--spacer); }\n    .pf-c-toolbar__group.pf-m-icon-button-group > * {\n      --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-icon-button-group--space-items); }\n  .pf-c-toolbar__group.pf-m-filter-group {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-filter-group--spacer); }\n    .pf-c-toolbar__group.pf-m-filter-group > * {\n      --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-filter-group--space-items); }\n    .pf-c-toolbar__group.pf-m-filter-group > * + * {\n      margin-left: -1px; }\n  .pf-c-toolbar__group.pf-m-toggle-group {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-toggle-group--spacer); }\n    .pf-c-toolbar__group.pf-m-toggle-group .pf-c-toolbar__group,\n    .pf-c-toolbar__group.pf-m-toggle-group .pf-c-toolbar__item {\n      display: none;\n      visibility: hidden; }\n    .pf-c-toolbar__group.pf-m-toggle-group .pf-c-toolbar__toggle {\n      display: inline-block;\n      visibility: visible; }\n  .pf-c-toolbar__group:last-child {\n    --pf-c-toolbar--spacer: 0; }\n\n.pf-c-toolbar__item {\n  --pf-c-toolbar--spacer: var(--pf-c-toolbar__item--spacer);\n  margin-right: var(--pf-c-toolbar--spacer); }\n  .pf-c-toolbar__item.pf-m-overflow-menu {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__item--m-overflow-menu--spacer); }\n  .pf-c-toolbar__item.pf-m-bulk-select {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__item--m-bulk-select--spacer); }\n  .pf-c-toolbar__item.pf-m-expand-all.pf-m-expanded {\n    --pf-c-toolbar__expand-all-icon--Rotate: var(--pf-c-toolbar__item--m-expand-all--m-expanded__expand-all-icon--Rotate); }\n  .pf-c-toolbar__item.pf-m-search-filter {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__item--m-search-filter--spacer); }\n  .pf-c-toolbar__item.pf-m-chip-group {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__item--m-chip-group--spacer); }\n  .pf-c-toolbar__item.pf-m-label {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__item--m-label--spacer);\n    font-weight: var(--pf-c-toolbar__item--m-label--FontWeight); }\n  .pf-c-toolbar__item.pf-m-pagination {\n    margin-left: auto; }\n    .pf-c-toolbar__item.pf-m-pagination .pf-c-pagination {\n      flex-wrap: nowrap; }\n  .pf-c-toolbar__item:last-child {\n    --pf-c-toolbar--spacer: 0; }\n\n.pf-c-toolbar__expand-all-icon {\n  display: inline-block;\n  transition: var(--pf-c-toolbar__expand-all-icon--Transition);\n  transform: rotate(var(--pf-c-toolbar__expand-all-icon--Rotate)); }\n\n.pf-c-toolbar__content,\n.pf-c-toolbar__content-section {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center; }\n\n.pf-c-toolbar__content {\n  position: relative;\n  padding-right: var(--pf-c-toolbar__content--PaddingRight);\n  padding-left: var(--pf-c-toolbar__content--PaddingLeft); }\n\n.pf-c-toolbar__content-section {\n  width: 100%; }\n\n.pf-c-toolbar__expandable-content {\n  position: absolute;\n  top: 100%;\n  right: 0;\n  left: 0;\n  z-index: var(--pf-c-toolbar__expandable-content--ZIndex);\n  display: none;\n  width: 100%;\n  padding: var(--pf-c-toolbar__expandable-content--PaddingTop) var(--pf-c-toolbar__expandable-content--PaddingRight) var(--pf-c-toolbar__expandable-content--PaddingBottom) var(--pf-c-toolbar__expandable-content--PaddingLeft);\n  visibility: hidden;\n  background-color: var(--pf-c-toolbar__expandable-content--BackgroundColor);\n  box-shadow: var(--pf-c-toolbar__expandable-content--BoxShadow); }\n  @media screen and (min-width: 992px) {\n    .pf-c-toolbar__expandable-content {\n      position: static;\n      box-shadow: none; } }\n  .pf-c-toolbar__expandable-content.pf-m-expanded {\n    display: grid;\n    grid-row-gap: var(--pf-c-toolbar__expandable-content--m-expanded--GridRowGap);\n    visibility: visible; }\n  .pf-c-toolbar__expandable-content .pf-c-toolbar__group,\n  .pf-c-toolbar__expandable-content .pf-c-toolbar__item {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar__expandable-content .pf-c-toolbar__group {\n    display: grid;\n    grid-row-gap: var(--pf-c-toolbar__expandable-content--m-expanded--GridRowGap); }\n  .pf-c-toolbar__expandable-content .pf-m-label {\n    display: none;\n    visibility: hidden; }\n\n.pf-c-toolbar__content.pf-m-chip-container,\n.pf-c-toolbar__group.pf-m-chip-container {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\n  margin-top: var(--pf-c-toolbar__group--m-chip-container--MarginTop);\n  grid-row-gap: 0; }\n  .pf-c-toolbar__content.pf-m-chip-container .pf-c-toolbar__item,\n  .pf-c-toolbar__group.pf-m-chip-container .pf-c-toolbar__item {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__item--spacer);\n    margin-top: var(--pf-c-toolbar__group--m-chip-container__item--MarginTop); }\n  .pf-c-toolbar__content.pf-m-chip-container .pf-c-toolbar__group,\n  .pf-c-toolbar__group.pf-m-chip-container .pf-c-toolbar__group {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--spacer);\n    display: flex;\n    flex-wrap: wrap;\n    grid-row-gap: 0; }\n  .pf-c-toolbar__content.pf-m-chip-container .pf-c-toolbar__group:last-child,\n  .pf-c-toolbar__content.pf-m-chip-container .pf-c-toolbar__item:last-child,\n  .pf-c-toolbar__group.pf-m-chip-container .pf-c-toolbar__group:last-child,\n  .pf-c-toolbar__group.pf-m-chip-container .pf-c-toolbar__item:last-child {\n    --pf-c-toolbar--spacer: 0; }\n\n.pf-c-toolbar .pf-c-chip-group:last-child {\n  --pf-c-chip-group--MarginRight: 0; }\n\n.pf-c-toolbar .pf-c-chip-group li:last-child {\n  --pf-c-chip-group__li--m-toolbar--MarginRight: 0; }\n\n.pf-c-toolbar__toggle.pf-m-expanded .pf-c-button.pf-m-plain {\n  color: var(--pf-c-toolbar__toggle--m-expanded__c-button--m-plain--Color); }\n\n.pf-m-toggle-group.pf-m-show {\n  --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-toggle-group--m-show--spacer); }\n  .pf-m-toggle-group.pf-m-show .pf-c-toolbar__group,\n  .pf-m-toggle-group.pf-m-show .pf-c-toolbar__item {\n    display: flex;\n    flex: 0 1 auto;\n    visibility: visible; }\n  .pf-m-toggle-group.pf-m-show .pf-c-toolbar__toggle {\n    display: none;\n    visibility: hidden; }\n\n@media (min-width: 576px) {\n  .pf-m-toggle-group.pf-m-show-on-sm {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-toggle-group--m-show--spacer); }\n    .pf-m-toggle-group.pf-m-show-on-sm .pf-c-toolbar__group,\n    .pf-m-toggle-group.pf-m-show-on-sm .pf-c-toolbar__item {\n      display: flex;\n      flex: 0 1 auto;\n      visibility: visible; }\n    .pf-m-toggle-group.pf-m-show-on-sm .pf-c-toolbar__toggle {\n      display: none;\n      visibility: hidden; } }\n\n@media (min-width: 768px) {\n  .pf-m-toggle-group.pf-m-show-on-md {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-toggle-group--m-show--spacer); }\n    .pf-m-toggle-group.pf-m-show-on-md .pf-c-toolbar__group,\n    .pf-m-toggle-group.pf-m-show-on-md .pf-c-toolbar__item {\n      display: flex;\n      flex: 0 1 auto;\n      visibility: visible; }\n    .pf-m-toggle-group.pf-m-show-on-md .pf-c-toolbar__toggle {\n      display: none;\n      visibility: hidden; } }\n\n@media (min-width: 992px) {\n  .pf-m-toggle-group.pf-m-show-on-lg {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-toggle-group--m-show--spacer); }\n    .pf-m-toggle-group.pf-m-show-on-lg .pf-c-toolbar__group,\n    .pf-m-toggle-group.pf-m-show-on-lg .pf-c-toolbar__item {\n      display: flex;\n      flex: 0 1 auto;\n      visibility: visible; }\n    .pf-m-toggle-group.pf-m-show-on-lg .pf-c-toolbar__toggle {\n      display: none;\n      visibility: hidden; } }\n\n@media (min-width: 1200px) {\n  .pf-m-toggle-group.pf-m-show-on-xl {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-toggle-group--m-show--spacer); }\n    .pf-m-toggle-group.pf-m-show-on-xl .pf-c-toolbar__group,\n    .pf-m-toggle-group.pf-m-show-on-xl .pf-c-toolbar__item {\n      display: flex;\n      flex: 0 1 auto;\n      visibility: visible; }\n    .pf-m-toggle-group.pf-m-show-on-xl .pf-c-toolbar__toggle {\n      display: none;\n      visibility: hidden; } }\n\n@media (min-width: 1450px) {\n  .pf-m-toggle-group.pf-m-show-on-2xl {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-toggle-group--m-show--spacer); }\n    .pf-m-toggle-group.pf-m-show-on-2xl .pf-c-toolbar__group,\n    .pf-m-toggle-group.pf-m-show-on-2xl .pf-c-toolbar__item {\n      display: flex;\n      flex: 0 1 auto;\n      visibility: visible; }\n    .pf-m-toggle-group.pf-m-show-on-2xl .pf-c-toolbar__toggle {\n      display: none;\n      visibility: hidden; } }\n\n.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right,\n.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right {\n  margin-left: auto; }\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right ~ .pf-m-pagination,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right ~ .pf-m-pagination {\n    margin-left: 0; }\n\n.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left,\n.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left {\n  margin-left: 0; }\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left ~ .pf-m-pagination,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left ~ .pf-m-pagination {\n    margin-left: auto; }\n\n.pf-c-toolbar .pf-m-hidden {\n  display: none;\n  visibility: hidden; }\n\n.pf-c-toolbar .pf-m-visible {\n  display: flex;\n  visibility: visible; }\n\n.pf-c-toolbar .pf-c-toolbar__content-section.pf-m-nowrap,\n.pf-c-toolbar .pf-c-toolbar__group.pf-m-nowrap {\n  flex-wrap: nowrap; }\n\n.pf-c-toolbar .pf-c-toolbar__content-section.pf-m-wrap,\n.pf-c-toolbar .pf-c-toolbar__group.pf-m-wrap {\n  flex-wrap: wrap; }\n\n@media (min-width: 576px) {\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-sm,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-sm {\n    margin-left: auto; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-sm ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-sm ~ .pf-m-pagination {\n      margin-left: 0; }\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-sm,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-sm {\n    margin-left: 0; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-sm ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-sm ~ .pf-m-pagination {\n      margin-left: auto; }\n  .pf-c-toolbar .pf-m-hidden-on-sm {\n    display: none;\n    visibility: hidden; }\n  .pf-c-toolbar .pf-m-visible-on-sm {\n    display: flex;\n    visibility: visible; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-nowrap-on-sm,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-nowrap-on-sm {\n    flex-wrap: nowrap; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-wrap-on-sm,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-wrap-on-sm {\n    flex-wrap: wrap; } }\n\n@media (min-width: 768px) {\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-md,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-md {\n    margin-left: auto; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-md ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-md ~ .pf-m-pagination {\n      margin-left: 0; }\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-md,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-md {\n    margin-left: 0; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-md ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-md ~ .pf-m-pagination {\n      margin-left: auto; }\n  .pf-c-toolbar .pf-m-hidden-on-md {\n    display: none;\n    visibility: hidden; }\n  .pf-c-toolbar .pf-m-visible-on-md {\n    display: flex;\n    visibility: visible; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-nowrap-on-md,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-nowrap-on-md {\n    flex-wrap: nowrap; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-wrap-on-md,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-wrap-on-md {\n    flex-wrap: wrap; } }\n\n@media (min-width: 992px) {\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-lg,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-lg {\n    margin-left: auto; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-lg ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-lg ~ .pf-m-pagination {\n      margin-left: 0; }\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-lg,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-lg {\n    margin-left: 0; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-lg ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-lg ~ .pf-m-pagination {\n      margin-left: auto; }\n  .pf-c-toolbar .pf-m-hidden-on-lg {\n    display: none;\n    visibility: hidden; }\n  .pf-c-toolbar .pf-m-visible-on-lg {\n    display: flex;\n    visibility: visible; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-nowrap-on-lg,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-nowrap-on-lg {\n    flex-wrap: nowrap; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-wrap-on-lg,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-wrap-on-lg {\n    flex-wrap: wrap; } }\n\n@media (min-width: 1200px) {\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-xl,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-xl {\n    margin-left: auto; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-xl ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-xl ~ .pf-m-pagination {\n      margin-left: 0; }\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-xl,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-xl {\n    margin-left: 0; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-xl ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-xl ~ .pf-m-pagination {\n      margin-left: auto; }\n  .pf-c-toolbar .pf-m-hidden-on-xl {\n    display: none;\n    visibility: hidden; }\n  .pf-c-toolbar .pf-m-visible-on-xl {\n    display: flex;\n    visibility: visible; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-nowrap-on-xl,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-nowrap-on-xl {\n    flex-wrap: nowrap; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-wrap-on-xl,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-wrap-on-xl {\n    flex-wrap: wrap; } }\n\n@media (min-width: 1450px) {\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-2xl,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-2xl {\n    margin-left: auto; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-2xl ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-2xl ~ .pf-m-pagination {\n      margin-left: 0; }\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-2xl,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-2xl {\n    margin-left: 0; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-2xl ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-2xl ~ .pf-m-pagination {\n      margin-left: auto; }\n  .pf-c-toolbar .pf-m-hidden-on-2xl {\n    display: none;\n    visibility: hidden; }\n  .pf-c-toolbar .pf-m-visible-on-2xl {\n    display: flex;\n    visibility: visible; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-nowrap-on-2xl,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-nowrap-on-2xl {\n    flex-wrap: nowrap; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-wrap-on-2xl,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-wrap-on-2xl {\n    flex-wrap: wrap; } }\n\n.pf-c-toolbar .pf-m-space-items-none > * {\n  --pf-c-toolbar--spacer: 0; }\n\n.pf-c-toolbar .pf-m-space-items-none > :last-child {\n  --pf-c-toolbar--spacer: 0; }\n\n.pf-c-toolbar .pf-m-space-items-sm > * {\n  --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n\n.pf-c-toolbar .pf-m-space-items-sm > :last-child {\n  --pf-c-toolbar--spacer: 0; }\n\n.pf-c-toolbar .pf-m-space-items-md > * {\n  --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n\n.pf-c-toolbar .pf-m-space-items-md > :last-child {\n  --pf-c-toolbar--spacer: 0; }\n\n.pf-c-toolbar .pf-m-space-items-lg > * {\n  --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n\n.pf-c-toolbar .pf-m-space-items-lg > :last-child {\n  --pf-c-toolbar--spacer: 0; }\n\n@media (min-width: 576px) {\n  .pf-c-toolbar .pf-m-space-items-none-on-sm > * {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-none-on-sm > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-sm-on-sm > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-space-items-sm-on-sm > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-md-on-sm > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-space-items-md-on-sm > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-lg-on-sm > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n  .pf-c-toolbar .pf-m-space-items-lg-on-sm > :last-child {\n    --pf-c-toolbar--spacer: 0; } }\n\n@media (min-width: 768px) {\n  .pf-c-toolbar .pf-m-space-items-none-on-md > * {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-none-on-md > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-sm-on-md > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-space-items-sm-on-md > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-md-on-md > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-space-items-md-on-md > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-lg-on-md > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n  .pf-c-toolbar .pf-m-space-items-lg-on-md > :last-child {\n    --pf-c-toolbar--spacer: 0; } }\n\n@media (min-width: 992px) {\n  .pf-c-toolbar .pf-m-space-items-none-on-lg > * {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-none-on-lg > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-sm-on-lg > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-space-items-sm-on-lg > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-md-on-lg > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-space-items-md-on-lg > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-lg-on-lg > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n  .pf-c-toolbar .pf-m-space-items-lg-on-lg > :last-child {\n    --pf-c-toolbar--spacer: 0; } }\n\n@media (min-width: 1200px) {\n  .pf-c-toolbar .pf-m-space-items-none-on-xl > * {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-none-on-xl > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-sm-on-xl > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-space-items-sm-on-xl > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-md-on-xl > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-space-items-md-on-xl > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-lg-on-xl > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n  .pf-c-toolbar .pf-m-space-items-lg-on-xl > :last-child {\n    --pf-c-toolbar--spacer: 0; } }\n\n@media (min-width: 1450px) {\n  .pf-c-toolbar .pf-m-space-items-none-on-2xl > * {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-none-on-2xl > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-sm-on-2xl > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-space-items-sm-on-2xl > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-md-on-2xl > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-space-items-md-on-2xl > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-lg-on-2xl > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n  .pf-c-toolbar .pf-m-space-items-lg-on-2xl > :last-child {\n    --pf-c-toolbar--spacer: 0; } }\n\n.pf-c-toolbar .pf-m-spacer-none {\n  --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-spacer-none:last-child {\n    --pf-c-toolbar--spacer: 0; }\n\n.pf-c-toolbar .pf-m-spacer-sm {\n  --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-spacer-sm:last-child {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n\n.pf-c-toolbar .pf-m-spacer-md {\n  --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-spacer-md:last-child {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n\n.pf-c-toolbar .pf-m-spacer-lg {\n  --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n  .pf-c-toolbar .pf-m-spacer-lg:last-child {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n\n@media (min-width: 576px) {\n  .pf-c-toolbar .pf-m-spacer-none-on-sm {\n    --pf-c-toolbar--spacer: 0; }\n    .pf-c-toolbar .pf-m-spacer-none-on-sm:last-child {\n      --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-spacer-sm-on-sm {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n    .pf-c-toolbar .pf-m-spacer-sm-on-sm:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-spacer-md-on-sm {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n    .pf-c-toolbar .pf-m-spacer-md-on-sm:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-spacer-lg-on-sm {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n    .pf-c-toolbar .pf-m-spacer-lg-on-sm:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); } }\n\n@media (min-width: 768px) {\n  .pf-c-toolbar .pf-m-spacer-none-on-md {\n    --pf-c-toolbar--spacer: 0; }\n    .pf-c-toolbar .pf-m-spacer-none-on-md:last-child {\n      --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-spacer-sm-on-md {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n    .pf-c-toolbar .pf-m-spacer-sm-on-md:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-spacer-md-on-md {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n    .pf-c-toolbar .pf-m-spacer-md-on-md:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-spacer-lg-on-md {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n    .pf-c-toolbar .pf-m-spacer-lg-on-md:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); } }\n\n@media (min-width: 992px) {\n  .pf-c-toolbar .pf-m-spacer-none-on-lg {\n    --pf-c-toolbar--spacer: 0; }\n    .pf-c-toolbar .pf-m-spacer-none-on-lg:last-child {\n      --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-spacer-sm-on-lg {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n    .pf-c-toolbar .pf-m-spacer-sm-on-lg:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-spacer-md-on-lg {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n    .pf-c-toolbar .pf-m-spacer-md-on-lg:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-spacer-lg-on-lg {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n    .pf-c-toolbar .pf-m-spacer-lg-on-lg:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); } }\n\n@media (min-width: 1200px) {\n  .pf-c-toolbar .pf-m-spacer-none-on-xl {\n    --pf-c-toolbar--spacer: 0; }\n    .pf-c-toolbar .pf-m-spacer-none-on-xl:last-child {\n      --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-spacer-sm-on-xl {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n    .pf-c-toolbar .pf-m-spacer-sm-on-xl:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-spacer-md-on-xl {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n    .pf-c-toolbar .pf-m-spacer-md-on-xl:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-spacer-lg-on-xl {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n    .pf-c-toolbar .pf-m-spacer-lg-on-xl:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); } }\n\n@media (min-width: 1450px) {\n  .pf-c-toolbar .pf-m-spacer-none-on-2xl {\n    --pf-c-toolbar--spacer: 0; }\n    .pf-c-toolbar .pf-m-spacer-none-on-2xl:last-child {\n      --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-spacer-sm-on-2xl {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n    .pf-c-toolbar .pf-m-spacer-sm-on-2xl:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-spacer-md-on-2xl {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n    .pf-c-toolbar .pf-m-spacer-md-on-2xl:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-spacer-lg-on-2xl {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n    .pf-c-toolbar .pf-m-spacer-lg-on-2xl:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); } }\n\n.pf-c-toolbar.pf-m-inset-none {\n  --pf-c-toolbar--inset: 0;\n  --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n  --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n\n.pf-c-toolbar.pf-m-inset-sm {\n  --pf-c-toolbar--inset: var(--pf-global--spacer--sm);\n  --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n  --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n\n.pf-c-toolbar.pf-m-inset-md {\n  --pf-c-toolbar--inset: var(--pf-global--spacer--md);\n  --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n  --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n\n.pf-c-toolbar.pf-m-inset-lg {\n  --pf-c-toolbar--inset: var(--pf-global--spacer--lg);\n  --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n  --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n\n.pf-c-toolbar.pf-m-inset-xl {\n  --pf-c-toolbar--inset: var(--pf-global--spacer--xl);\n  --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n  --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n\n.pf-c-toolbar.pf-m-inset-2xl {\n  --pf-c-toolbar--inset: var(--pf-global--spacer--2xl);\n  --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n  --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n\n@media (min-width: 576px) {\n  .pf-c-toolbar.pf-m-inset-none-on-sm {\n    --pf-c-toolbar--inset: 0;\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-sm-on-sm {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--sm);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-md-on-sm {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--md);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-lg-on-sm {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--lg);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-xl-on-sm {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-2xl-on-sm {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--2xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); } }\n\n@media (min-width: 768px) {\n  .pf-c-toolbar.pf-m-inset-none-on-md {\n    --pf-c-toolbar--inset: 0;\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-sm-on-md {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--sm);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-md-on-md {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--md);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-lg-on-md {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--lg);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-xl-on-md {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-2xl-on-md {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--2xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); } }\n\n@media (min-width: 992px) {\n  .pf-c-toolbar.pf-m-inset-none-on-lg {\n    --pf-c-toolbar--inset: 0;\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-sm-on-lg {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--sm);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-md-on-lg {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--md);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-lg-on-lg {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--lg);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-xl-on-lg {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-2xl-on-lg {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--2xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); } }\n\n@media (min-width: 1200px) {\n  .pf-c-toolbar.pf-m-inset-none-on-xl {\n    --pf-c-toolbar--inset: 0;\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-sm-on-xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--sm);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-md-on-xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--md);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-lg-on-xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--lg);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-xl-on-xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-2xl-on-xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--2xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); } }\n\n@media (min-width: 1450px) {\n  .pf-c-toolbar.pf-m-inset-none-on-2xl {\n    --pf-c-toolbar--inset: 0;\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-sm-on-2xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--sm);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-md-on-2xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--md);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-lg-on-2xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--lg);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-xl-on-2xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-2xl-on-2xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--2xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); } }\n\n.pf-c-toolbar__content-section > :last-child {\n  --pf-c-toolbar--spacer: 0; }\n\n.pf-c-date-picker {\n  --pf-c-date-picker--m-top__calendar--Top: 0;\n  --pf-c-date-picker--m-top__calendar--TranslateY: calc(-100% - var(--pf-global--spacer--xs));\n  --pf-c-date-picker__helper-text--MarginTop: var(--pf-global--spacer--xs);\n  --pf-c-date-picker__helper-text--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-date-picker__helper-text--Color: var(--pf-global--Color--100);\n  --pf-c-date-picker__helper-text--m-error--Color: var(--pf-global--danger-color--100);\n  --pf-c-date-picker__calendar--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-date-picker__calendar--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-date-picker__calendar--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-date-picker__calendar--Top: calc(100% + var(--pf-global--spacer--xs));\n  --pf-c-date-picker__calendar--Right: auto;\n  --pf-c-date-picker__calendar--Left: 0;\n  --pf-c-date-picker__calendar--m-align-right--Right: 0;\n  --pf-c-date-picker__calendar--m-align-right--Left: auto;\n  position: relative; }\n\n.pf-c-date-picker__helper-text {\n  margin-top: var(--pf-c-date-picker__helper-text--MarginTop);\n  font-size: var(--pf-c-date-picker__helper-text--FontSize);\n  color: var(--pf-c-date-picker__helper-text--Color); }\n  .pf-c-date-picker__helper-text.pf-m-error {\n    --pf-c-date-picker__helper-text--Color: var(--pf-c-date-picker__helper-text--m-error--Color); }\n\n.pf-c-date-picker__calendar {\n  position: absolute;\n  top: var(--pf-c-date-picker__calendar--Top);\n  right: var(--pf-c-date-picker__calendar--Right);\n  left: var(--pf-c-date-picker__calendar--Left);\n  z-index: var(--pf-c-date-picker__calendar--ZIndex);\n  background-color: var(--pf-c-date-picker__calendar--BackgroundColor);\n  box-shadow: var(--pf-c-date-picker__calendar--BoxShadow); }\n  .pf-c-date-picker__calendar.pf-m-align-right {\n    --pf-c-date-picker__calendar--Right: var(--pf-c-date-picker__calendar--m-align-right--Right);\n    --pf-c-date-picker__calendar--Left: var(--pf-c-date-picker__calendar--m-align-right--Left); }\n  .pf-c-date-picker.pf-m-top .pf-c-date-picker__calendar {\n    --pf-c-date-picker__calendar--Top: var(--pf-c-date-picker--m-top__calendar--Top);\n    transform: translateY(var(--pf-c-date-picker--m-top__calendar--TranslateY)); }\n\n.pf-c-divider {\n  --pf-c-divider--Height: var(--pf-global--BorderWidth--sm);\n  --pf-c-divider--BackgroundColor: var(--pf-global--BorderColor--100);\n  --pf-c-divider--after--Height: var(--pf-c-divider--Height);\n  --pf-c-divider--after--BackgroundColor: var(--pf-c-divider--BackgroundColor);\n  --pf-c-divider--after--FlexBasis: 100%;\n  --pf-c-divider--after--Inset: 0%;\n  --pf-c-divider--m-vertical--after--FlexBasis: 100%;\n  --pf-c-divider--m-vertical--after--Width: var(--pf-global--BorderWidth--sm);\n  display: flex;\n  align-items: center;\n  align-self: stretch;\n  justify-content: center;\n  width: 100%;\n  border: 0; }\n  .pf-c-divider::after {\n    flex-basis: calc(var(--pf-c-divider--after--FlexBasis) - calc(var(--pf-c-divider--after--Inset) * 2));\n    align-self: stretch;\n    height: var(--pf-c-divider--after--Height);\n    content: "";\n    background-color: var(--pf-c-divider--after--BackgroundColor);\n    justify-self: center; }\n  .pf-c-divider.pf-m-vertical {\n    display: inline-flex;\n    flex-direction: column;\n    width: auto;\n    height: inherit;\n    min-height: 100%;\n    max-height: 100%; }\n    .pf-c-divider.pf-m-vertical::after {\n      flex-basis: calc(var(--pf-c-divider--m-vertical--after--FlexBasis) - var(--pf-c-divider--after--Inset));\n      width: var(--pf-c-divider--m-vertical--after--Width); }\n  .pf-c-divider.pf-m-inset-none {\n    --pf-c-divider--after--Inset: 0%; }\n  .pf-c-divider.pf-m-inset-xs {\n    --pf-c-divider--after--Inset: var(--pf-global--spacer--xs); }\n  .pf-c-divider.pf-m-inset-sm {\n    --pf-c-divider--after--Inset: var(--pf-global--spacer--sm); }\n  .pf-c-divider.pf-m-inset-md {\n    --pf-c-divider--after--Inset: var(--pf-global--spacer--md); }\n  .pf-c-divider.pf-m-inset-lg {\n    --pf-c-divider--after--Inset: var(--pf-global--spacer--lg); }\n  .pf-c-divider.pf-m-inset-xl {\n    --pf-c-divider--after--Inset: var(--pf-global--spacer--xl); }\n  .pf-c-divider.pf-m-inset-2xl {\n    --pf-c-divider--after--Inset: var(--pf-global--spacer--2xl); }\n  .pf-c-divider.pf-m-inset-3xl {\n    --pf-c-divider--after--Inset: var(--pf-global--spacer--3xl); }\n  @media (min-width: 576px) {\n    .pf-c-divider.pf-m-inset-none-on-sm {\n      --pf-c-divider--after--Inset: 0%; }\n    .pf-c-divider.pf-m-inset-xs-on-sm {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xs); }\n    .pf-c-divider.pf-m-inset-sm-on-sm {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--sm); }\n    .pf-c-divider.pf-m-inset-md-on-sm {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--md); }\n    .pf-c-divider.pf-m-inset-lg-on-sm {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--lg); }\n    .pf-c-divider.pf-m-inset-xl-on-sm {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xl); }\n    .pf-c-divider.pf-m-inset-2xl-on-sm {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--2xl); }\n    .pf-c-divider.pf-m-inset-3xl-on-sm {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--3xl); } }\n  @media (min-width: 768px) {\n    .pf-c-divider.pf-m-inset-none-on-md {\n      --pf-c-divider--after--Inset: 0%; }\n    .pf-c-divider.pf-m-inset-xs-on-md {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xs); }\n    .pf-c-divider.pf-m-inset-sm-on-md {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--sm); }\n    .pf-c-divider.pf-m-inset-md-on-md {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--md); }\n    .pf-c-divider.pf-m-inset-lg-on-md {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--lg); }\n    .pf-c-divider.pf-m-inset-xl-on-md {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xl); }\n    .pf-c-divider.pf-m-inset-2xl-on-md {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--2xl); }\n    .pf-c-divider.pf-m-inset-3xl-on-md {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--3xl); } }\n  @media (min-width: 992px) {\n    .pf-c-divider.pf-m-inset-none-on-lg {\n      --pf-c-divider--after--Inset: 0%; }\n    .pf-c-divider.pf-m-inset-xs-on-lg {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xs); }\n    .pf-c-divider.pf-m-inset-sm-on-lg {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--sm); }\n    .pf-c-divider.pf-m-inset-md-on-lg {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--md); }\n    .pf-c-divider.pf-m-inset-lg-on-lg {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--lg); }\n    .pf-c-divider.pf-m-inset-xl-on-lg {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xl); }\n    .pf-c-divider.pf-m-inset-2xl-on-lg {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--2xl); }\n    .pf-c-divider.pf-m-inset-3xl-on-lg {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--3xl); } }\n  @media (min-width: 1200px) {\n    .pf-c-divider.pf-m-inset-none-on-xl {\n      --pf-c-divider--after--Inset: 0%; }\n    .pf-c-divider.pf-m-inset-xs-on-xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xs); }\n    .pf-c-divider.pf-m-inset-sm-on-xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--sm); }\n    .pf-c-divider.pf-m-inset-md-on-xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--md); }\n    .pf-c-divider.pf-m-inset-lg-on-xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--lg); }\n    .pf-c-divider.pf-m-inset-xl-on-xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xl); }\n    .pf-c-divider.pf-m-inset-2xl-on-xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--2xl); }\n    .pf-c-divider.pf-m-inset-3xl-on-xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--3xl); } }\n  @media (min-width: 1450px) {\n    .pf-c-divider.pf-m-inset-none-on-2xl {\n      --pf-c-divider--after--Inset: 0%; }\n    .pf-c-divider.pf-m-inset-xs-on-2xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xs); }\n    .pf-c-divider.pf-m-inset-sm-on-2xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--sm); }\n    .pf-c-divider.pf-m-inset-md-on-2xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--md); }\n    .pf-c-divider.pf-m-inset-lg-on-2xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--lg); }\n    .pf-c-divider.pf-m-inset-xl-on-2xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xl); }\n    .pf-c-divider.pf-m-inset-2xl-on-2xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--2xl); }\n    .pf-c-divider.pf-m-inset-3xl-on-2xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--3xl); } }\n\n.pf-c-drawer {\n  --pf-c-drawer__section--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-drawer__content--FlexBasis: 100%;\n  --pf-c-drawer__content--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-drawer__content--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-drawer__panel--FlexBasis: 100%;\n  --pf-c-drawer__panel--md--FlexBasis: 50%;\n  --pf-c-drawer__panel--MinWidth: 50%;\n  --pf-c-drawer__panel--MaxHeight: auto;\n  --pf-c-drawer--m-panel-bottom__panel--md--MinHeight: 50%;\n  --pf-c-drawer__panel--xl--MinWidth: 28.125rem;\n  --pf-c-drawer__panel--xl--FlexBasis: 28.125rem;\n  --pf-c-drawer--m-panel-bottom__panel--xl--MinHeight: 18.75rem;\n  --pf-c-drawer--m-panel-bottom__panel--xl--FlexBasis: 18.75rem;\n  --pf-c-drawer__panel--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-drawer__panel--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-drawer__panel--TransitionDuration: var(--pf-global--TransitionDuration);\n  --pf-c-drawer__panel--TransitionProperty: margin, transform, box-shadow;\n  --pf-c-drawer__panel--m-resizable--PaddingLeft: var(--pf-c-drawer__splitter--m-vertical--Width);\n  --pf-c-drawer--m-panel-left__panel--m-resizable--PaddingRight: var(--pf-c-drawer__splitter--m-vertical--Width);\n  --pf-c-drawer--m-panel-bottom__panel--m-resizable--PaddingTop: var(--pf-c-drawer__splitter--Height);\n  --pf-c-drawer--child--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-drawer--child--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-drawer--child--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-drawer--child--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-drawer--child--md--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-drawer--child--md--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-drawer--child--md--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-drawer--child--md--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-drawer--child--m-padding--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-drawer--child--m-padding--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-drawer--child--m-padding--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-drawer--child--m-padding--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-drawer--child--m-padding--md--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-drawer--child--m-padding--md--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-drawer--child--m-padding--md--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-drawer--child--m-padding--md--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-drawer__content--child--PaddingTop: 0;\n  --pf-c-drawer__content--child--PaddingRight: 0;\n  --pf-c-drawer__content--child--PaddingBottom: 0;\n  --pf-c-drawer__content--child--PaddingLeft: 0;\n  --pf-c-drawer__splitter--Top: 0;\n  --pf-c-drawer__splitter--Right: auto;\n  --pf-c-drawer__splitter--Bottom: 0;\n  --pf-c-drawer__splitter--Left: 0;\n  --pf-c-drawer__splitter--Height: 0.5625rem;\n  --pf-c-drawer__splitter--Width: 100%;\n  --pf-c-drawer__splitter--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-drawer__splitter--Cursor: row-resize;\n  --pf-c-drawer__splitter--m-vertical--Height: 100%;\n  --pf-c-drawer__splitter--m-vertical--Width: 0.5625rem;\n  --pf-c-drawer__splitter--m-vertical--Cursor: col-resize;\n  --pf-c-drawer--m-inline__splitter--focus--OutlineOffset: -0.0625rem;\n  --pf-c-drawer__splitter--after--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-drawer__splitter--after--border-width--base: var(--pf-global--BorderWidth--sm);\n  --pf-c-drawer__splitter--after--BorderTopWidth: 0;\n  --pf-c-drawer__splitter--after--BorderRightWidth: var(--pf-c-drawer__splitter--after--border-width--base);\n  --pf-c-drawer__splitter--after--BorderBottomWidth: 0;\n  --pf-c-drawer__splitter--after--BorderLeftWidth: 0;\n  --pf-c-drawer--m-panel-left__splitter--after--BorderLeftWidth: var(--pf-c-drawer__splitter--after--border-width--base);\n  --pf-c-drawer--m-panel-bottom__splitter--after--BorderBottomWidth: var(--pf-c-drawer__splitter--after--border-width--base);\n  --pf-c-drawer--m-inline__splitter--m-vertical--Width: 0.625rem;\n  --pf-c-drawer--m-inline__splitter-handle--Left: 50%;\n  --pf-c-drawer--m-inline__splitter--after--BorderRightWidth: var(--pf-c-drawer__splitter--after--border-width--base);\n  --pf-c-drawer--m-inline__splitter--after--BorderLeftWidth: var(--pf-c-drawer__splitter--after--border-width--base);\n  --pf-c-drawer--m-inline--m-panel-bottom__splitter--Height: 0.625rem;\n  --pf-c-drawer--m-inline--m-panel-bottom__splitter-handle--Top: 50%;\n  --pf-c-drawer--m-inline--m-panel-bottom__splitter--after--BorderTopWidth: var(--pf-c-drawer__splitter--after--border-width--base);\n  --pf-c-drawer__splitter-handle--Top: 50%;\n  --pf-c-drawer__splitter-handle--Left: calc(50% - var(--pf-c-drawer__splitter--after--border-width--base));\n  --pf-c-drawer--m-panel-left__splitter-handle--Left: 50%;\n  --pf-c-drawer--m-panel-bottom__splitter-handle--Top: calc(50% - var(--pf-c-drawer__splitter--after--border-width--base));\n  --pf-c-drawer__splitter-handle--after--BorderColor: var(--pf-global--Color--200);\n  --pf-c-drawer__splitter-handle--after--BorderTopWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-drawer__splitter-handle--after--BorderRightWidth: 0;\n  --pf-c-drawer__splitter-handle--after--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-drawer__splitter-handle--after--BorderLeftWidth: 0;\n  --pf-c-drawer__splitter--hover__splitter-handle--after--BorderColor: var(--pf-global--Color--100);\n  --pf-c-drawer__splitter--focus__splitter-handle--after--BorderColor: var(--pf-global--Color--100);\n  --pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderTopWidth: 0;\n  --pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderRightWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderBottomWidth: 0;\n  --pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderLeftWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-drawer__splitter-handle--after--Width: 0.75rem;\n  --pf-c-drawer__splitter-handle--after--Height: 0.25rem;\n  --pf-c-drawer__splitter--m-vertical__splitter-handle--after--Width: 0.25rem;\n  --pf-c-drawer__splitter--m-vertical__splitter-handle--after--Height: 0.75rem;\n  --pf-c-drawer__actions--MarginTop: calc(var(pf-global--spacer--form-element) * -1);\n  --pf-c-drawer__actions--MarginRight: calc(var(pf-global--spacer--form-element) * -1);\n  --pf-c-drawer__panel--BoxShadow: none;\n  --pf-c-drawer--m-expanded__panel--BoxShadow: var(--pf-global--BoxShadow--lg-left);\n  --pf-c-drawer--m-expanded--m-panel-left__panel--BoxShadow: var(--pf-global--BoxShadow--lg-right);\n  --pf-c-drawer--m-expanded--m-panel-bottom__panel--BoxShadow: var(--pf-global--BoxShadow--lg-top);\n  --pf-c-drawer__panel--after--Width: var(--pf-global--BorderWidth--sm);\n  --pf-c-drawer--m-panel-bottom__panel--after--Height: var(--pf-global--BorderWidth--sm);\n  --pf-c-drawer__panel--after--BackgroundColor: transparent;\n  --pf-c-drawer--m-inline--m-expanded__panel--after--BackgroundColor: var(--pf-global--BorderColor--100);\n  --pf-c-drawer--m-inline__panel--PaddingLeft: var(--pf-c-drawer__panel--after--Width);\n  --pf-c-drawer--m-panel-left--m-inline__panel--PaddingRight: var(--pf-c-drawer__panel--after--Width);\n  --pf-c-drawer--m-panel-bottom--m-inline__panel--PaddingTop: var(--pf-c-drawer__panel--after--Width);\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  overflow-x: hidden; }\n  @media screen and (min-width: 768px) {\n    .pf-c-drawer {\n      --pf-c-drawer__panel--FlexBasis: var(--pf-c-drawer__panel--md--FlexBasis);\n      --pf-c-drawer--child--PaddingTop: var(--pf-c-drawer--child--md--PaddingTop);\n      --pf-c-drawer--child--PaddingRight: var(--pf-c-drawer--child--md--PaddingRight);\n      --pf-c-drawer--child--PaddingBottom: var(--pf-c-drawer--child--md--PaddingBottom);\n      --pf-c-drawer--child--PaddingLeft: var(--pf-c-drawer--child--md--PaddingLeft);\n      --pf-c-drawer--child--m-padding--PaddingTop: var(--pf-c-drawer--child--m-padding--md--PaddingTop);\n      --pf-c-drawer--child--m-padding--PaddingRight: var(--pf-c-drawer--child--m-padding--md--PaddingRight);\n      --pf-c-drawer--child--m-padding--PaddingBottom: var(--pf-c-drawer--child--m-padding--md--PaddingBottom);\n      --pf-c-drawer--child--m-padding--PaddingLeft: var(--pf-c-drawer--child--m-padding--md--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-drawer {\n      --pf-c-drawer__panel--FlexBasis: var(--pf-c-drawer__panel--xl--FlexBasis);\n      --pf-c-drawer__panel--MinWidth: var(--pf-c-drawer__panel--xl--MinWidth); }\n      .pf-c-drawer.pf-m-panel-bottom {\n        --pf-c-drawer__panel--MinWidth: auto;\n        --pf-c-drawer__panel--FlexBasis: var(--pf-c-drawer--m-panel-bottom__panel--xl--FlexBasis);\n        --pf-c-drawer__panel--MinHeight: var(--pf-c-drawer--m-panel-bottom__panel--xl--MinHeight); } }\n  .pf-c-drawer.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__panel , .pf-c-drawer.pf-m-static > .pf-c-drawer__main > .pf-c-drawer__panel {\n    padding-left: var(--pf-c-drawer--m-inline__panel--PaddingLeft); }\n  .pf-c-drawer.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    order: 0;\n    margin-right: calc(var(--pf-c-drawer__panel--FlexBasis) * -1);\n    transform: translateX(-100%); }\n  .pf-c-drawer.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__content {\n    order: 1; }\n  .pf-c-drawer.pf-m-panel-bottom > .pf-c-drawer__main {\n    flex-direction: column; }\n  .pf-c-drawer.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(-100%); }\n  .pf-c-drawer.pf-m-expanded.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-expanded.pf-m-panel-bottom > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translate(0, -100%); }\n\n.pf-c-drawer__section {\n  flex-grow: 0;\n  background-color: var(--pf-c-drawer__section--BackgroundColor); }\n  .pf-c-drawer__section.pf-m-no-background {\n    background-color: transparent; }\n\n.pf-c-drawer__main {\n  display: flex;\n  flex-grow: 1;\n  overflow: hidden; }\n\n.pf-c-drawer__content,\n.pf-c-drawer__panel {\n  display: flex;\n  flex-direction: column;\n  flex-shrink: 0;\n  overflow: auto; }\n\n.pf-c-drawer__content {\n  z-index: var(--pf-c-drawer__content--ZIndex);\n  flex-basis: var(--pf-c-drawer__content--FlexBasis);\n  order: 0;\n  background-color: var(--pf-c-drawer__content--BackgroundColor); }\n  .pf-c-drawer__content > .pf-c-drawer__body {\n    padding: var(--pf-c-drawer__content--child--PaddingTop) var(--pf-c-drawer__content--child--PaddingRight) var(--pf-c-drawer__content--child--PaddingBottom) var(--pf-c-drawer__content--child--PaddingLeft); }\n  .pf-c-drawer__content.pf-m-no-background {\n    background-color: transparent; }\n\n.pf-c-drawer__panel {\n  position: relative;\n  z-index: var(--pf-c-drawer__panel--ZIndex);\n  flex-basis: var(--pf-c-drawer__panel--FlexBasis);\n  order: 1;\n  max-height: var(--pf-c-drawer__panel--MaxHeight);\n  overflow: auto;\n  background-color: var(--pf-c-drawer__panel--BackgroundColor);\n  box-shadow: var(--pf-c-drawer__panel--BoxShadow);\n  transition-duration: var(--pf-c-drawer__panel--TransitionDuration);\n  transition-property: var(--pf-c-drawer__panel--TransitionProperty);\n  -webkit-overflow-scrolling: touch; }\n  .pf-c-drawer__panel::after {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: var(--pf-c-drawer__panel--after--Width);\n    height: 100%;\n    content: "";\n    background-color: var(--pf-c-drawer__panel--after--BackgroundColor); }\n  .pf-c-drawer__panel.pf-m-no-background {\n    background-color: transparent; }\n\n@keyframes pf-remove-tab-focus {\n  to {\n    visibility: hidden; } }\n\n.pf-c-drawer__panel[hidden] {\n  animation-name: pf-remove-tab-focus;\n  animation-delay: var(--pf-c-drawer__panel--TransitionDuration);\n  animation-fill-mode: forwards; }\n\n.pf-c-drawer__head {\n  display: grid;\n  grid-template-columns: auto;\n  grid-auto-columns: max-content; }\n  .pf-c-drawer__head > * {\n    grid-column: 1; }\n\n.pf-c-drawer__actions {\n  grid-column: 2;\n  grid-row: 1;\n  display: flex;\n  align-self: baseline;\n  margin-top: var(--pf-c-drawer__actions--MarginTop);\n  margin-right: var(--pf-c-drawer__actions--MarginRight); }\n\n.pf-c-drawer__body {\n  min-height: 0;\n  padding: var(--pf-c-drawer--child--PaddingTop) var(--pf-c-drawer--child--PaddingRight) var(--pf-c-drawer--child--PaddingBottom) var(--pf-c-drawer--child--PaddingLeft); }\n  .pf-c-drawer__body.pf-m-no-padding {\n    padding: 0; }\n    .pf-c-drawer__body.pf-m-no-padding > .pf-c-drawer__actions,\n    .pf-c-drawer__body.pf-m-no-padding > .pf-c-drawer__head > .pf-c-drawer__actions {\n      margin-top: 0;\n      margin-right: 0; }\n  .pf-c-drawer__body.pf-m-padding {\n    padding: var(--pf-c-drawer--child--m-padding--PaddingTop) var(--pf-c-drawer--child--m-padding--PaddingRight) var(--pf-c-drawer--child--m-padding--PaddingBottom) var(--pf-c-drawer--child--m-padding--PaddingLeft); }\n  .pf-c-drawer__body:not(.pf-m-no-padding) + * {\n    padding-top: 0; }\n  .pf-c-drawer__body:last-child {\n    flex: 1 1; }\n\n.pf-c-drawer__body > .pf-c-page__main {\n  min-height: 100%; }\n\n.pf-c-drawer__splitter {\n  position: absolute;\n  top: var(--pf-c-drawer__splitter--Top);\n  right: var(--pf-c-drawer__splitter--Right);\n  bottom: var(--pf-c-drawer__splitter--Bottom);\n  left: var(--pf-c-drawer__splitter--Left);\n  display: none;\n  width: var(--pf-c-drawer__splitter--Width);\n  height: var(--pf-c-drawer__splitter--Height);\n  cursor: var(--pf-c-drawer__splitter--Cursor);\n  visibility: hidden;\n  background-color: var(--pf-c-drawer__splitter--BackgroundColor); }\n  .pf-c-drawer__splitter.pf-m-vertical {\n    --pf-c-drawer__splitter--Height: var(--pf-c-drawer__splitter--m-vertical--Height);\n    --pf-c-drawer__splitter--Width: var(--pf-c-drawer__splitter--m-vertical--Width);\n    --pf-c-drawer__splitter--Cursor: var(--pf-c-drawer__splitter--m-vertical--Cursor);\n    --pf-c-drawer__splitter-handle--after--Width: var(--pf-c-drawer__splitter--m-vertical__splitter-handle--after--Width);\n    --pf-c-drawer__splitter-handle--after--Height: var(--pf-c-drawer__splitter--m-vertical__splitter-handle--after--Height);\n    --pf-c-drawer__splitter-handle--after--BorderTopWidth: var(--pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderTopWidth);\n    --pf-c-drawer__splitter-handle--after--BorderRightWidth: var(--pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderRightWidth);\n    --pf-c-drawer__splitter-handle--after--BorderBottomWidth: var(--pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderBottomWidth);\n    --pf-c-drawer__splitter-handle--after--BorderLeftWidth: var(--pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderLeftWidth); }\n  .pf-c-drawer__splitter:hover {\n    --pf-c-drawer__splitter-handle--after--BorderColor: var(--pf-c-drawer__splitter--hover__splitter-handle--after--BorderColor); }\n  .pf-c-drawer__splitter:focus {\n    --pf-c-drawer__splitter-handle--after--BorderColor: var(--pf-c-drawer__splitter--focus__splitter-handle--after--BorderColor); }\n  .pf-c-drawer__splitter::after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    border: solid var(--pf-c-drawer__splitter--after--BorderColor);\n    border-width: var(--pf-c-drawer__splitter--after--BorderTopWidth) var(--pf-c-drawer__splitter--after--BorderRightWidth) var(--pf-c-drawer__splitter--after--BorderBottomWidth) var(--pf-c-drawer__splitter--after--BorderLeftWidth); }\n\n.pf-c-drawer__splitter-handle {\n  position: absolute;\n  top: var(--pf-c-drawer__splitter-handle--Top);\n  left: var(--pf-c-drawer__splitter-handle--Left);\n  transform: translate(-50%, -50%); }\n  .pf-c-drawer__splitter-handle::after {\n    display: block;\n    width: var(--pf-c-drawer__splitter-handle--after--Width);\n    height: var(--pf-c-drawer__splitter-handle--after--Height);\n    content: "";\n    border-color: var(--pf-c-drawer__splitter-handle--after--BorderColor);\n    border-style: solid;\n    border-width: var(--pf-c-drawer__splitter-handle--after--BorderTopWidth) var(--pf-c-drawer__splitter-handle--after--BorderRightWidth) var(--pf-c-drawer__splitter-handle--after--BorderBottomWidth) var(--pf-c-drawer__splitter-handle--after--BorderLeftWidth); }\n\n@media screen and (min-width: 768px) {\n  .pf-c-drawer {\n    min-width: var(--pf-c-drawer__panel--MinWidth); }\n    .pf-c-drawer.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n      box-shadow: var(--pf-c-drawer--m-expanded__panel--BoxShadow); }\n    .pf-c-drawer > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-resizable {\n      padding-left: var(--pf-c-drawer__panel--m-resizable--PaddingLeft); }\n      .pf-c-drawer > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-resizable::after {\n        width: 0;\n        height: 0; }\n  .pf-c-drawer.pf-m-panel-left {\n    --pf-c-drawer--m-expanded__panel--BoxShadow: var(--pf-c-drawer--m-expanded--m-panel-left__panel--BoxShadow); }\n    .pf-c-drawer.pf-m-panel-left.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__panel , .pf-c-drawer.pf-m-panel-left.pf-m-static > .pf-c-drawer__main > .pf-c-drawer__panel {\n      padding-right: var(--pf-c-drawer--m-panel-left--m-inline__panel--PaddingRight);\n      padding-left: 0; }\n    .pf-c-drawer.pf-m-panel-left.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n      transform: translateX(0); }\n    .pf-c-drawer.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel::after {\n      right: 0;\n      left: auto; }\n    .pf-c-drawer.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-resizable {\n      padding-right: var(--pf-c-drawer--m-panel-left__panel--m-resizable--PaddingRight);\n      padding-left: 0; }\n      .pf-c-drawer.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-resizable > .pf-c-drawer__splitter {\n        --pf-c-drawer__splitter--Right: 0;\n        --pf-c-drawer__splitter--Left: auto;\n        --pf-c-drawer__splitter-handle--Left: var(--pf-c-drawer--m-panel-left__splitter-handle--Left);\n        --pf-c-drawer__splitter--after--BorderRightWidth: 0;\n        --pf-c-drawer__splitter--after--BorderLeftWidth: var(--pf-c-drawer--m-panel-left__splitter--after--BorderLeftWidth); }\n  .pf-c-drawer.pf-m-panel-bottom {\n    --pf-c-drawer--m-expanded__panel--BoxShadow: var(--pf-c-drawer--m-expanded--m-panel-bottom__panel--BoxShadow);\n    --pf-c-drawer__panel--MaxHeight: 100%;\n    min-width: auto;\n    min-height: var(--pf-c-drawer--m-panel-bottom__panel--md--MinHeight); }\n    .pf-c-drawer.pf-m-panel-bottom.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__panel , .pf-c-drawer.pf-m-panel-bottom.pf-m-static > .pf-c-drawer__main > .pf-c-drawer__panel {\n      padding-top: var(--pf-c-drawer--m-panel-bottom--m-inline__panel--PaddingTop);\n      padding-left: 0; }\n    .pf-c-drawer.pf-m-panel-bottom > .pf-c-drawer__main > .pf-c-drawer__panel::after {\n      top: 0;\n      left: auto;\n      width: 100%;\n      height: var(--pf-c-drawer--m-panel-bottom__panel--after--Height); }\n    .pf-c-drawer.pf-m-panel-bottom > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-resizable {\n      padding-top: var(--pf-c-drawer--m-panel-bottom__panel--m-resizable--PaddingTop);\n      padding-left: 0; }\n      .pf-c-drawer.pf-m-panel-bottom > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-resizable > .pf-c-drawer__splitter {\n        --pf-c-drawer__splitter--Top: 0;\n        --pf-c-drawer__splitter--Right: 0;\n        --pf-c-drawer__splitter--Bottom: auto;\n        --pf-c-drawer__splitter-handle--Top: var(--pf-c-drawer--m-panel-bottom__splitter-handle--Top);\n        --pf-c-drawer__splitter--after--BorderRightWidth: 0;\n        --pf-c-drawer__splitter--after--BorderBottomWidth: var(--pf-c-drawer--m-panel-bottom__splitter--after--BorderBottomWidth); }\n  .pf-c-drawer.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-resizable > .pf-c-drawer__splitter {\n    --pf-c-drawer__splitter--m-vertical--Width: var(--pf-c-drawer--m-inline__splitter--m-vertical--Width);\n    --pf-c-drawer__splitter-handle--Left: var(--pf-c-drawer--m-inline__splitter-handle--Left);\n    --pf-c-drawer__splitter--after--BorderRightWidth: var(--pf-c-drawer--m-inline__splitter--after--BorderRightWidth);\n    --pf-c-drawer__splitter--after--BorderLeftWidth: var(--pf-c-drawer--m-inline__splitter--after--BorderLeftWidth);\n    outline-offset: var(--pf-c-drawer--m-inline__splitter--focus--OutlineOffset); }\n  .pf-c-drawer.pf-m-inline.pf-m-panel-bottom > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-resizable > .pf-c-drawer__splitter {\n    --pf-c-drawer__splitter--Height: var(--pf-c-drawer--m-inline--m-panel-bottom__splitter--Height);\n    --pf-c-drawer__splitter-handle--Top: var(--pf-c-drawer--m-inline--m-panel-bottom__splitter-handle--Top);\n    --pf-c-drawer__splitter--after--BorderTopWidth: var(--pf-c-drawer--m-inline--m-panel-bottom__splitter--after--BorderTopWidth);\n    --pf-c-drawer__splitter--after--BorderRightWidth: 0;\n    --pf-c-drawer__splitter--after--BorderLeftWidth: 0; }\n  .pf-c-drawer > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-no-border,\n  .pf-c-drawer.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-no-border {\n    --pf-c-drawer--m-expanded__panel--BoxShadow: none; }\n  .pf-c-drawer__splitter {\n    display: block;\n    visibility: visible; } }\n\n@media (min-width: 768px) {\n  .pf-c-drawer__panel.pf-m-width-25 {\n    --pf-c-drawer__panel--FlexBasis: 25%; }\n  .pf-c-drawer__panel.pf-m-width-33 {\n    --pf-c-drawer__panel--FlexBasis: 33%; }\n  .pf-c-drawer__panel.pf-m-width-50 {\n    --pf-c-drawer__panel--FlexBasis: 50%; }\n  .pf-c-drawer__panel.pf-m-width-66 {\n    --pf-c-drawer__panel--FlexBasis: 66%; }\n  .pf-c-drawer__panel.pf-m-width-75 {\n    --pf-c-drawer__panel--FlexBasis: 75%; }\n  .pf-c-drawer__panel.pf-m-width-100 {\n    --pf-c-drawer__panel--FlexBasis: 100%; } }\n\n@media (min-width: 992px) {\n  .pf-c-drawer__panel.pf-m-width-25-on-lg {\n    --pf-c-drawer__panel--FlexBasis: 25%; }\n  .pf-c-drawer__panel.pf-m-width-33-on-lg {\n    --pf-c-drawer__panel--FlexBasis: 33%; }\n  .pf-c-drawer__panel.pf-m-width-50-on-lg {\n    --pf-c-drawer__panel--FlexBasis: 50%; }\n  .pf-c-drawer__panel.pf-m-width-66-on-lg {\n    --pf-c-drawer__panel--FlexBasis: 66%; }\n  .pf-c-drawer__panel.pf-m-width-75-on-lg {\n    --pf-c-drawer__panel--FlexBasis: 75%; }\n  .pf-c-drawer__panel.pf-m-width-100-on-lg {\n    --pf-c-drawer__panel--FlexBasis: 100%; } }\n\n@media (min-width: 1200px) {\n  .pf-c-drawer__panel.pf-m-width-25-on-xl {\n    --pf-c-drawer__panel--FlexBasis: 25%; }\n  .pf-c-drawer__panel.pf-m-width-33-on-xl {\n    --pf-c-drawer__panel--FlexBasis: 33%; }\n  .pf-c-drawer__panel.pf-m-width-50-on-xl {\n    --pf-c-drawer__panel--FlexBasis: 50%; }\n  .pf-c-drawer__panel.pf-m-width-66-on-xl {\n    --pf-c-drawer__panel--FlexBasis: 66%; }\n  .pf-c-drawer__panel.pf-m-width-75-on-xl {\n    --pf-c-drawer__panel--FlexBasis: 75%; }\n  .pf-c-drawer__panel.pf-m-width-100-on-xl {\n    --pf-c-drawer__panel--FlexBasis: 100%; } }\n\n@media (min-width: 1450px) {\n  .pf-c-drawer__panel.pf-m-width-25-on-2xl {\n    --pf-c-drawer__panel--FlexBasis: 25%; }\n  .pf-c-drawer__panel.pf-m-width-33-on-2xl {\n    --pf-c-drawer__panel--FlexBasis: 33%; }\n  .pf-c-drawer__panel.pf-m-width-50-on-2xl {\n    --pf-c-drawer__panel--FlexBasis: 50%; }\n  .pf-c-drawer__panel.pf-m-width-66-on-2xl {\n    --pf-c-drawer__panel--FlexBasis: 66%; }\n  .pf-c-drawer__panel.pf-m-width-75-on-2xl {\n    --pf-c-drawer__panel--FlexBasis: 75%; }\n  .pf-c-drawer__panel.pf-m-width-100-on-2xl {\n    --pf-c-drawer__panel--FlexBasis: 100%; } }\n\n@media (min-width: 768px) {\n  .pf-c-drawer.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__content,\n  .pf-c-drawer.pf-m-static > .pf-c-drawer__main > .pf-c-drawer__content {\n    flex-shrink: 1; }\n  .pf-c-drawer.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__panel,\n  .pf-c-drawer.pf-m-static > .pf-c-drawer__main > .pf-c-drawer__panel {\n    --pf-c-drawer--m-expanded__panel--BoxShadow: none; }\n    .pf-c-drawer.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__panel:not(.pf-m-no-border)::after,\n    .pf-c-drawer.pf-m-static > .pf-c-drawer__main > .pf-c-drawer__panel:not(.pf-m-no-border)::after {\n      background-color: var(--pf-c-drawer--m-inline--m-expanded__panel--after--BackgroundColor); }\n  .pf-c-drawer.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__content {\n    overflow-x: auto; }\n  .pf-c-drawer.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-left: calc(var(--pf-c-drawer__panel--FlexBasis) * -1);\n    transform: translateX(100%); }\n  .pf-c-drawer.pf-m-inline.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-left: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: unset;\n    visibility: visible; }\n  .pf-c-drawer.pf-m-inline.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: calc(var(--pf-c-drawer__panel--FlexBasis) * -1);\n    margin-left: 0;\n    transform: translateX(-100%); }\n  .pf-c-drawer.pf-m-inline.pf-m-panel-left.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-inline.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: unset;\n    visibility: visible; }\n  .pf-c-drawer.pf-m-static > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static.pf-m-panel-bottom > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: none;\n    visibility: hidden; } }\n\n@media (min-width: 992px) {\n  .pf-c-drawer.pf-m-inline-on-lg > .pf-c-drawer__main > .pf-c-drawer__content,\n  .pf-c-drawer.pf-m-static-on-lg > .pf-c-drawer__main > .pf-c-drawer__content {\n    flex-shrink: 1; }\n  .pf-c-drawer.pf-m-inline-on-lg > .pf-c-drawer__main > .pf-c-drawer__panel,\n  .pf-c-drawer.pf-m-static-on-lg > .pf-c-drawer__main > .pf-c-drawer__panel {\n    --pf-c-drawer--m-expanded__panel--BoxShadow: none; }\n    .pf-c-drawer.pf-m-inline-on-lg > .pf-c-drawer__main > .pf-c-drawer__panel:not(.pf-m-no-border)::after,\n    .pf-c-drawer.pf-m-static-on-lg > .pf-c-drawer__main > .pf-c-drawer__panel:not(.pf-m-no-border)::after {\n      background-color: var(--pf-c-drawer--m-inline--m-expanded__panel--after--BackgroundColor); }\n  .pf-c-drawer.pf-m-inline-on-lg > .pf-c-drawer__main > .pf-c-drawer__content {\n    overflow-x: auto; }\n  .pf-c-drawer.pf-m-inline-on-lg > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-left: calc(var(--pf-c-drawer__panel--FlexBasis) * -1);\n    transform: translateX(100%); }\n  .pf-c-drawer.pf-m-inline-on-lg.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-left: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-inline-on-lg > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: unset;\n    visibility: visible; }\n  .pf-c-drawer.pf-m-inline-on-lg.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: calc(var(--pf-c-drawer__panel--FlexBasis) * -1);\n    margin-left: 0;\n    transform: translateX(-100%); }\n  .pf-c-drawer.pf-m-inline-on-lg.pf-m-panel-left.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-inline-on-lg.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: unset;\n    visibility: visible; }\n  .pf-c-drawer.pf-m-static-on-lg > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static-on-lg.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static-on-lg.pf-m-panel-bottom > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static-on-lg > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: none;\n    visibility: hidden; } }\n\n@media (min-width: 1200px) {\n  .pf-c-drawer.pf-m-inline-on-xl > .pf-c-drawer__main > .pf-c-drawer__content,\n  .pf-c-drawer.pf-m-static-on-xl > .pf-c-drawer__main > .pf-c-drawer__content {\n    flex-shrink: 1; }\n  .pf-c-drawer.pf-m-inline-on-xl > .pf-c-drawer__main > .pf-c-drawer__panel,\n  .pf-c-drawer.pf-m-static-on-xl > .pf-c-drawer__main > .pf-c-drawer__panel {\n    --pf-c-drawer--m-expanded__panel--BoxShadow: none; }\n    .pf-c-drawer.pf-m-inline-on-xl > .pf-c-drawer__main > .pf-c-drawer__panel:not(.pf-m-no-border)::after,\n    .pf-c-drawer.pf-m-static-on-xl > .pf-c-drawer__main > .pf-c-drawer__panel:not(.pf-m-no-border)::after {\n      background-color: var(--pf-c-drawer--m-inline--m-expanded__panel--after--BackgroundColor); }\n  .pf-c-drawer.pf-m-inline-on-xl > .pf-c-drawer__main > .pf-c-drawer__content {\n    overflow-x: auto; }\n  .pf-c-drawer.pf-m-inline-on-xl > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-left: calc(var(--pf-c-drawer__panel--FlexBasis) * -1);\n    transform: translateX(100%); }\n  .pf-c-drawer.pf-m-inline-on-xl.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-left: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-inline-on-xl > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: unset;\n    visibility: visible; }\n  .pf-c-drawer.pf-m-inline-on-xl.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: calc(var(--pf-c-drawer__panel--FlexBasis) * -1);\n    margin-left: 0;\n    transform: translateX(-100%); }\n  .pf-c-drawer.pf-m-inline-on-xl.pf-m-panel-left.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-inline-on-xl.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: unset;\n    visibility: visible; }\n  .pf-c-drawer.pf-m-static-on-xl > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static-on-xl.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static-on-xl.pf-m-panel-bottom > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static-on-xl > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: none;\n    visibility: hidden; } }\n\n@media (min-width: 1450px) {\n  .pf-c-drawer.pf-m-inline-on-2xl > .pf-c-drawer__main > .pf-c-drawer__content,\n  .pf-c-drawer.pf-m-static-on-2xl > .pf-c-drawer__main > .pf-c-drawer__content {\n    flex-shrink: 1; }\n  .pf-c-drawer.pf-m-inline-on-2xl > .pf-c-drawer__main > .pf-c-drawer__panel,\n  .pf-c-drawer.pf-m-static-on-2xl > .pf-c-drawer__main > .pf-c-drawer__panel {\n    --pf-c-drawer--m-expanded__panel--BoxShadow: none; }\n    .pf-c-drawer.pf-m-inline-on-2xl > .pf-c-drawer__main > .pf-c-drawer__panel:not(.pf-m-no-border)::after,\n    .pf-c-drawer.pf-m-static-on-2xl > .pf-c-drawer__main > .pf-c-drawer__panel:not(.pf-m-no-border)::after {\n      background-color: var(--pf-c-drawer--m-inline--m-expanded__panel--after--BackgroundColor); }\n  .pf-c-drawer.pf-m-inline-on-2xl > .pf-c-drawer__main > .pf-c-drawer__content {\n    overflow-x: auto; }\n  .pf-c-drawer.pf-m-inline-on-2xl > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-left: calc(var(--pf-c-drawer__panel--FlexBasis) * -1);\n    transform: translateX(100%); }\n  .pf-c-drawer.pf-m-inline-on-2xl.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-left: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-inline-on-2xl > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: unset;\n    visibility: visible; }\n  .pf-c-drawer.pf-m-inline-on-2xl.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: calc(var(--pf-c-drawer__panel--FlexBasis) * -1);\n    margin-left: 0;\n    transform: translateX(-100%); }\n  .pf-c-drawer.pf-m-inline-on-2xl.pf-m-panel-left.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-inline-on-2xl.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: unset;\n    visibility: visible; }\n  .pf-c-drawer.pf-m-static-on-2xl > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static-on-2xl.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static-on-2xl.pf-m-panel-bottom > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static-on-2xl > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: none;\n    visibility: hidden; } }\n\n.pf-c-dropdown {\n  --pf-c-dropdown__toggle--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-dropdown__toggle--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__toggle--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-dropdown__toggle--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__toggle--MinWidth: var(--pf-global--target-size--MinWidth);\n  --pf-c-dropdown__toggle--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-dropdown__toggle--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-dropdown__toggle--Color: var(--pf-global--Color--100);\n  --pf-c-dropdown__toggle--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-dropdown__toggle--BackgroundColor: transparent;\n  --pf-c-dropdown__toggle--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-dropdown__toggle--before--BorderTopColor: var(--pf-global--BorderColor--300);\n  --pf-c-dropdown__toggle--before--BorderRightColor: var(--pf-global--BorderColor--300);\n  --pf-c-dropdown__toggle--before--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-dropdown__toggle--before--BorderLeftColor: var(--pf-global--BorderColor--300);\n  --pf-c-dropdown__toggle--hover--before--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-dropdown__toggle--active--before--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-dropdown__toggle--active--before--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-dropdown__toggle--focus--before--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-dropdown__toggle--focus--before--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-dropdown--m-expanded__toggle--before--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-dropdown--m-expanded__toggle--before--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-dropdown__toggle--disabled--BackgroundColor: var(--pf-global--disabled-color--300);\n  --pf-c-dropdown__toggle--m-plain--Color: var(--pf-global--Color--200);\n  --pf-c-dropdown__toggle--m-plain--hover--Color: var(--pf-global--Color--100);\n  --pf-c-dropdown__toggle--m-plain--disabled--Color: var(--pf-global--disabled-color--200);\n  --pf-c-dropdown__toggle--m-plain--child--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-dropdown__toggle--m-primary--Color: var(--pf-global--Color--light-100);\n  --pf-c-dropdown__toggle--m-primary--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-dropdown__toggle--m-primary--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-dropdown__toggle--m-primary--hover--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-dropdown__toggle--m-primary--active--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-dropdown__toggle--m-primary--focus--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-dropdown--m-expanded__toggle--m-primary--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-dropdown__toggle-button--Color: var(--pf-global--Color--100);\n  --pf-c-dropdown__toggle--m-split-button--child--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-dropdown__toggle--m-split-button--child--PaddingRight: var(--pf-global--spacer--xs);\n  --pf-c-dropdown__toggle--m-split-button--child--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-dropdown__toggle--m-split-button--child--PaddingLeft: var(--pf-global--spacer--xs);\n  --pf-c-dropdown__toggle--m-split-button--child--BackgroundColor: transparent;\n  --pf-c-dropdown__toggle--m-split-button--first-child--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__toggle--m-split-button--last-child--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__toggle--m-split-button--m-action--child--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__toggle--m-split-button--m-action--child--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__toggle--m-split-button--m-action__toggle-button--MarginRight: calc(-1 * var(--pf-global--BorderWidth--sm));\n  --pf-c-dropdown__toggle--m-split-button__toggle-check__input--TranslateY: -0.0625rem;\n  --pf-c-dropdown__toggle--m-split-button__toggle-text--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__toggle-icon--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-dropdown__toggle-icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__toggle-icon--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-dropdown--m-top--m-expanded__toggle-icon--Rotate: 180deg;\n  --pf-c-dropdown__menu--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-dropdown__menu--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-dropdown__menu--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__menu--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__menu--Top: calc(100% + var(--pf-global--spacer--xs));\n  --pf-c-dropdown__menu--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-dropdown--m-top__menu--Top: 0;\n  --pf-c-dropdown--m-top__menu--TranslateY: calc(-100% - var(--pf-global--spacer--xs));\n  --pf-c-dropdown__menu-item--BackgroundColor: transparent;\n  --pf-c-dropdown__menu-item--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__menu-item--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-dropdown__menu-item--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__menu-item--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-dropdown__menu-item--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-dropdown__menu-item--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-dropdown__menu-item--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-dropdown__menu-item--Color: var(--pf-global--Color--dark-100);\n  --pf-c-dropdown__menu-item--hover--Color: var(--pf-global--Color--dark-100);\n  --pf-c-dropdown__menu-item--disabled--Color: var(--pf-global--Color--dark-200);\n  --pf-c-dropdown__menu-item--hover--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-dropdown__menu-item--disabled--BackgroundColor: transparent;\n  --pf-c-dropdown__menu-item--m-text--Color: var(--pf-global--Color--dark-200);\n  --pf-c-dropdown__menu-item-icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__menu-item-icon--Width: var(--pf-global--icon--FontSize--lg);\n  --pf-c-dropdown__menu-item-icon--Height: var(--pf-global--icon--FontSize--lg);\n  --pf-c-dropdown__menu-item-description--FontSize: var(--pf-global--FontSize--xs);\n  --pf-c-dropdown__menu-item-description--Color: var(--pf-global--Color--dark-200);\n  --pf-c-dropdown__group--group--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__group-title--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__group-title--PaddingRight: var(--pf-c-dropdown__menu-item--PaddingRight);\n  --pf-c-dropdown__group-title--PaddingBottom: var(--pf-c-dropdown__menu-item--PaddingBottom);\n  --pf-c-dropdown__group-title--PaddingLeft: var(--pf-c-dropdown__menu-item--PaddingLeft);\n  --pf-c-dropdown__group-title--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-dropdown__group-title--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-dropdown__group-title--Color: var(--pf-global--Color--dark-200);\n  --pf-c-dropdown__toggle-image--MarginTop: var(--pf-global--spacer--xs);\n  --pf-c-dropdown__toggle-image--MarginBottom: var(--pf-global--spacer--xs);\n  --pf-c-dropdown__toggle-image--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-dropdown--c-divider--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-dropdown--c-divider--MarginBottom: var(--pf-global--spacer--sm);\n  position: relative;\n  display: inline-block;\n  max-width: 100%; }\n  .pf-c-dropdown .pf-c-divider {\n    margin-top: var(--pf-c-dropdown--c-divider--MarginTop);\n    margin-bottom: var(--pf-c-dropdown--c-divider--MarginBottom); }\n    .pf-c-dropdown .pf-c-divider:last-child {\n      --pf-c-dropdown--c-divider--MarginBottom: 0; }\n\n.pf-c-dropdown__toggle {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  min-width: var(--pf-c-dropdown__toggle--MinWidth);\n  max-width: 100%;\n  padding: var(--pf-c-dropdown__toggle--PaddingTop) var(--pf-c-dropdown__toggle--PaddingRight) var(--pf-c-dropdown__toggle--PaddingBottom) var(--pf-c-dropdown__toggle--PaddingLeft);\n  font-size: var(--pf-c-dropdown__toggle--FontSize);\n  font-weight: var(--pf-c-dropdown__toggle--FontWeight);\n  line-height: var(--pf-c-dropdown__toggle--LineHeight);\n  color: var(--pf-c-dropdown__toggle--Color);\n  background-color: var(--pf-c-dropdown__toggle--BackgroundColor);\n  border: none; }\n  .pf-c-dropdown__toggle::before,\n  .pf-c-dropdown__toggle.pf-m-action .pf-c-dropdown__toggle-button::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    border: var(--pf-c-dropdown__toggle--before--BorderWidth) solid;\n    border-color: var(--pf-c-dropdown__toggle--before--BorderTopColor) var(--pf-c-dropdown__toggle--before--BorderRightColor) var(--pf-c-dropdown__toggle--before--BorderBottomColor) var(--pf-c-dropdown__toggle--before--BorderLeftColor); }\n  .pf-c-dropdown__toggle.pf-m-disabled, .pf-c-dropdown__toggle:disabled {\n    pointer-events: none; }\n    .pf-c-dropdown__toggle.pf-m-disabled:not(.pf-m-plain), .pf-c-dropdown__toggle:disabled:not(.pf-m-plain) {\n      --pf-c-dropdown__toggle--BackgroundColor: var(--pf-c-dropdown__toggle--disabled--BackgroundColor); }\n      .pf-c-dropdown__toggle.pf-m-disabled:not(.pf-m-plain)::before, .pf-c-dropdown__toggle:disabled:not(.pf-m-plain)::before {\n        border: 0; }\n  .pf-c-dropdown__toggle.pf-m-split-button {\n    padding: 0; }\n    .pf-c-dropdown__toggle.pf-m-split-button > * {\n      position: relative;\n      padding-top: var(--pf-c-dropdown__toggle--m-split-button--child--PaddingTop);\n      padding-right: var(--pf-c-dropdown__toggle--m-split-button--child--PaddingRight);\n      padding-bottom: var(--pf-c-dropdown__toggle--m-split-button--child--PaddingBottom);\n      padding-left: var(--pf-c-dropdown__toggle--m-split-button--child--PaddingLeft);\n      background-color: var(--pf-c-dropdown__toggle--m-split-button--child--BackgroundColor); }\n      .pf-c-dropdown__toggle.pf-m-split-button > *:first-child {\n        --pf-c-dropdown__toggle--m-split-button--child--PaddingLeft: var(--pf-c-dropdown__toggle--m-split-button--first-child--PaddingLeft); }\n      .pf-c-dropdown__toggle.pf-m-split-button > *:last-child {\n        --pf-c-dropdown__toggle--m-split-button--child--PaddingRight: var(--pf-c-dropdown__toggle--m-split-button--last-child--PaddingRight); }\n    .pf-c-dropdown__toggle.pf-m-split-button.pf-m-action {\n      --pf-c-dropdown__toggle--m-split-button--child--PaddingRight: var(--pf-c-dropdown__toggle--m-split-button--m-action--child--PaddingRight);\n      --pf-c-dropdown__toggle--m-split-button--child--PaddingLeft: var(--pf-c-dropdown__toggle--m-split-button--m-action--child--PaddingLeft); }\n      .pf-c-dropdown__toggle.pf-m-split-button.pf-m-action .pf-c-dropdown__toggle-button {\n        margin-right: var(--pf-c-dropdown__toggle--m-split-button--m-action__toggle-button--MarginRight); }\n        .pf-c-dropdown__toggle.pf-m-split-button.pf-m-action .pf-c-dropdown__toggle-button::before {\n          border-left: 0; }\n        .pf-c-dropdown__toggle.pf-m-split-button.pf-m-action .pf-c-dropdown__toggle-button:last-child {\n          --pf-c-dropdown__toggle--m-split-button--m-action__toggle-button--MarginRight: 0; }\n    .pf-c-dropdown__toggle.pf-m-split-button .pf-c-dropdown__toggle-check {\n      display: flex;\n      align-items: center;\n      cursor: pointer; }\n      .pf-c-dropdown__toggle.pf-m-split-button .pf-c-dropdown__toggle-check input {\n        transform: translateY(var(--pf-c-dropdown__toggle--m-split-button__toggle-check__input--TranslateY)); }\n    .pf-c-dropdown__toggle.pf-m-split-button .pf-c-dropdown__toggle-button {\n      color: var(--pf-c-dropdown__toggle-button--Color);\n      border: 0; }\n    .pf-c-dropdown__toggle.pf-m-split-button .pf-c-dropdown__toggle-text {\n      margin-left: var(--pf-c-dropdown__toggle--m-split-button__toggle-text--MarginLeft); }\n  .pf-c-dropdown__toggle:not(.pf-m-action):hover::before,\n  .pf-c-dropdown__toggle.pf-m-action .pf-c-dropdown__toggle-button:hover::before {\n    --pf-c-dropdown__toggle--before--BorderBottomColor: var(--pf-c-dropdown__toggle--hover--before--BorderBottomColor); }\n  .pf-c-dropdown__toggle:not(.pf-m-action):active::before, .pf-c-dropdown__toggle:not(.pf-m-action).pf-m-active::before,\n  .pf-c-dropdown__toggle.pf-m-action .pf-c-dropdown__toggle-button:active::before {\n    --pf-c-dropdown__toggle--before--BorderBottomColor: var(--pf-c-dropdown__toggle--active--before--BorderBottomColor);\n    border-bottom-width: var(--pf-c-dropdown__toggle--active--before--BorderBottomWidth); }\n  .pf-c-dropdown__toggle:not(.pf-m-action):focus::before,\n  .pf-c-dropdown__toggle.pf-m-action .pf-c-dropdown__toggle-button:focus::before {\n    --pf-c-dropdown__toggle--before--BorderBottomColor: var(--pf-c-dropdown__toggle--focus--before--BorderBottomColor);\n    border-bottom-width: var(--pf-c-dropdown__toggle--focus--before--BorderBottomWidth); }\n  .pf-m-expanded > .pf-c-dropdown__toggle:not(.pf-m-action)::before,\n  .pf-m-expanded > .pf-c-dropdown__toggle.pf-m-action .pf-c-dropdown__toggle-button::before {\n    --pf-c-dropdown__toggle--before--BorderBottomColor: var(--pf-c-dropdown--m-expanded__toggle--before--BorderBottomColor);\n    border-bottom-width: var(--pf-c-dropdown--m-expanded__toggle--before--BorderBottomWidth); }\n  .pf-c-dropdown__toggle.pf-m-plain {\n    justify-content: center;\n    color: var(--pf-c-dropdown__toggle--m-plain--Color); }\n    .pf-c-dropdown__toggle.pf-m-plain > * {\n      line-height: var(--pf-c-dropdown__toggle--m-plain--child--LineHeight); }\n    .pf-c-dropdown__toggle.pf-m-plain::before {\n      border: 0; }\n    .pf-c-dropdown__toggle.pf-m-plain:hover, .pf-c-dropdown__toggle.pf-m-plain:active, .pf-c-dropdown__toggle.pf-m-plain.pf-m-active, .pf-c-dropdown__toggle.pf-m-plain:focus,\n    .pf-m-expanded > .pf-c-dropdown__toggle.pf-m-plain {\n      --pf-c-dropdown__toggle--m-plain--Color: var(--pf-c-dropdown__toggle--m-plain--hover--Color); }\n    .pf-c-dropdown__toggle.pf-m-plain.pf-m-disabled, .pf-c-dropdown__toggle.pf-m-plain:disabled {\n      --pf-c-dropdown__toggle--m-plain--Color: var(--pf-c-dropdown__toggle--m-plain--disabled--Color); }\n  .pf-c-dropdown__toggle.pf-m-primary {\n    --pf-c-dropdown__toggle--Color: var(--pf-c-dropdown__toggle--m-primary--Color);\n    --pf-c-dropdown__toggle--BackgroundColor: var(--pf-c-dropdown__toggle--m-primary--BackgroundColor);\n    border-radius: var(--pf-c-dropdown__toggle--m-primary--BorderRadius); }\n    .pf-c-dropdown__toggle.pf-m-primary::before {\n      border: 0; }\n    .pf-c-dropdown__toggle.pf-m-primary:hover {\n      --pf-c-dropdown__toggle--BackgroundColor: var(--pf-c-dropdown__toggle--m-primary--hover--BackgroundColor); }\n    .pf-c-dropdown__toggle.pf-m-primary:active, .pf-c-dropdown__toggle.pf-m-primary.pf-m-active {\n      --pf-c-dropdown__toggle--BackgroundColor: var(--pf-c-dropdown__toggle--m-primary--active--BackgroundColor); }\n    .pf-c-dropdown__toggle.pf-m-primary:focus {\n      --pf-c-dropdown__toggle--BackgroundColor: var(--pf-c-dropdown__toggle--m-primary--focus--BackgroundColor); }\n    .pf-m-expanded > .pf-c-dropdown__toggle.pf-m-primary {\n      --pf-c-dropdown__toggle--BackgroundColor: var(--pf-c-dropdown--m-expanded__toggle--m-primary--BackgroundColor); }\n  .pf-c-dropdown__toggle .pf-c-dropdown__toggle-text {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n\n.pf-c-dropdown__toggle-icon {\n  margin-right: var(--pf-c-dropdown__toggle-icon--MarginRight);\n  margin-left: var(--pf-c-dropdown__toggle-icon--MarginLeft);\n  line-height: var(--pf-c-dropdown__toggle-icon--LineHeight); }\n  .pf-c-dropdown.pf-m-top.pf-m-expanded .pf-c-dropdown__toggle-icon {\n    transform: rotate(var(--pf-c-dropdown--m-top--m-expanded__toggle-icon--Rotate)); }\n\n.pf-c-dropdown__toggle-image {\n  display: inline-flex;\n  margin-top: var(--pf-c-dropdown__toggle-image--MarginTop);\n  margin-right: var(--pf-c-dropdown__toggle-image--MarginRight);\n  margin-bottom: var(--pf-c-dropdown__toggle-image--MarginBottom); }\n  .pf-c-dropdown__toggle-image:last-child {\n    --pf-c-dropdown__toggle-image--MarginRight: 0; }\n\n.pf-c-dropdown__menu {\n  position: absolute;\n  top: var(--pf-c-dropdown__menu--Top);\n  z-index: var(--pf-c-dropdown__menu--ZIndex);\n  min-width: 100%;\n  padding-top: var(--pf-c-dropdown__menu--PaddingTop);\n  padding-bottom: var(--pf-c-dropdown__menu--PaddingBottom);\n  background: var(--pf-c-dropdown__menu--BackgroundColor);\n  background-clip: padding-box;\n  box-shadow: var(--pf-c-dropdown__menu--BoxShadow); }\n  .pf-c-dropdown__menu.pf-m-align-right {\n    right: 0; }\n  .pf-c-dropdown.pf-m-top .pf-c-dropdown__menu {\n    --pf-c-dropdown__menu--Top: var(--pf-c-dropdown--m-top__menu--Top);\n    transform: translateY(var(--pf-c-dropdown--m-top__menu--TranslateY)); }\n\n.pf-c-dropdown__menu-item {\n  display: block;\n  width: 100%;\n  padding: var(--pf-c-dropdown__menu-item--PaddingTop) var(--pf-c-dropdown__menu-item--PaddingRight) var(--pf-c-dropdown__menu-item--PaddingBottom) var(--pf-c-dropdown__menu-item--PaddingLeft);\n  font-size: var(--pf-c-dropdown__menu-item--FontSize);\n  font-weight: var(--pf-c-dropdown__menu-item--FontWeight);\n  line-height: var(--pf-c-dropdown__menu-item--LineHeight);\n  color: var(--pf-c-dropdown__menu-item--Color);\n  text-align: left;\n  white-space: nowrap;\n  background-color: var(--pf-c-dropdown__menu-item--BackgroundColor);\n  border: none; }\n  .pf-c-dropdown__menu-item:hover, .pf-c-dropdown__menu-item:focus {\n    --pf-c-dropdown__menu-item--Color: var(--pf-c-dropdown__menu-item--hover--Color);\n    --pf-c-dropdown__menu-item--BackgroundColor: var(--pf-c-dropdown__menu-item--hover--BackgroundColor);\n    text-decoration: none; }\n  .pf-c-dropdown__menu-item:disabled, .pf-c-dropdown__menu-item.pf-m-disabled {\n    --pf-c-dropdown__menu-item--Color: var(--pf-c-dropdown__menu-item--disabled--Color);\n    --pf-c-dropdown__menu-item--BackgroundColor: var(--pf-c-dropdown__menu-item--disabled--BackgroundColor);\n    pointer-events: none; }\n  .pf-c-dropdown__menu-item.pf-m-icon {\n    display: flex;\n    align-items: center; }\n    .pf-c-dropdown__menu-item.pf-m-icon.pf-m-description {\n      flex-direction: column;\n      align-items: start; }\n    .pf-c-dropdown__menu-item.pf-m-icon .pf-c-dropdown__menu-item-main {\n      display: flex;\n      align-items: center; }\n  .pf-c-dropdown__menu-item.pf-m-text {\n    --pf-c-dropdown__menu-item--Color: var(--pf-c-dropdown__menu-item--m-text--Color); }\n    .pf-c-dropdown__menu-item.pf-m-text:hover, .pf-c-dropdown__menu-item.pf-m-text:focus {\n      --pf-c-dropdown__menu-item--BackgroundColor: transparent; }\n\n.pf-c-dropdown__menu-item-icon {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--pf-c-dropdown__menu-item-icon--Width);\n  height: var(--pf-c-dropdown__menu-item-icon--Height);\n  margin-right: var(--pf-c-dropdown__menu-item-icon--MarginRight); }\n  .pf-c-dropdown__menu-item-icon > * {\n    max-width: 100%;\n    max-height: 100%; }\n\n.pf-c-dropdown__menu-item-description {\n  font-size: var(--pf-c-dropdown__menu-item-description--FontSize);\n  color: var(--pf-c-dropdown__menu-item-description--Color); }\n\n.pf-c-dropdown__group + .pf-c-dropdown__group {\n  padding-top: var(--pf-c-dropdown__group--group--PaddingTop); }\n\n.pf-c-dropdown__group-title {\n  padding-top: var(--pf-c-dropdown__group-title--PaddingTop);\n  padding-right: var(--pf-c-dropdown__group-title--PaddingRight);\n  padding-bottom: var(--pf-c-dropdown__group-title--PaddingBottom);\n  padding-left: var(--pf-c-dropdown__group-title--PaddingLeft);\n  font-size: var(--pf-c-dropdown__group-title--FontSize);\n  font-weight: var(--pf-c-dropdown__group-title--FontWeight);\n  color: var(--pf-c-dropdown__group-title--Color); }\n\n.pf-c-empty-state {\n  --pf-c-empty-state--PaddingTop: var(--pf-global--spacer--xl);\n  --pf-c-empty-state--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-empty-state--PaddingBottom: var(--pf-global--spacer--xl);\n  --pf-c-empty-state--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-empty-state__content--MaxWidth: none;\n  --pf-c-empty-state__icon--MarginBottom: var(--pf-global--spacer--lg);\n  --pf-c-empty-state__icon--FontSize: var(--pf-global--icon--FontSize--xl);\n  --pf-c-empty-state__icon--Color: var(--pf-global--icon--Color--light);\n  --pf-c-empty-state__content--c-title--m-lg--FontSize: var(--pf-global--FontSize--xl);\n  --pf-c-empty-state__body--MarginTop: var(--pf-global--spacer--md);\n  --pf-c-empty-state__body--Color: var(--pf-global--Color--200);\n  --pf-c-empty-state__primary--MarginTop: var(--pf-global--spacer--xl);\n  --pf-c-empty-state__primary--secondary--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-empty-state__secondary--MarginTop: var(--pf-global--spacer--xl);\n  --pf-c-empty-state__secondary--MarginBottom: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-empty-state__secondary--child--MarginRight: calc(var(--pf-global--spacer--xs) / 2);\n  --pf-c-empty-state__secondary--child--MarginBottom: var(--pf-global--spacer--xs);\n  --pf-c-empty-state__secondary--child--MarginLeft: calc(var(--pf-global--spacer--xs) / 2);\n  --pf-c-empty-state--m-xs__content--MaxWidth: 21.875rem;\n  --pf-c-empty-state--m-xs__body--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-empty-state--m-xs--button--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-empty-state--m-xs--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-empty-state--m-xs--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-empty-state--m-xs--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-empty-state--m-xs--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-empty-state--m-xs__icon--MarginBottom: var(--pf-global--spacer--md);\n  --pf-c-empty-state--m-xs__body--MarginTop: var(--pf-global--spacer--md);\n  --pf-c-empty-state--m-xs__primary--MarginTop: var(--pf-global--spacer--md);\n  --pf-c-empty-state--m-xs__secondary--MarginTop: var(--pf-global--spacer--md);\n  --pf-c-empty-state--m-sm__content--MaxWidth: 25rem;\n  --pf-c-empty-state--m-lg__content--MaxWidth: 37.5rem;\n  --pf-c-empty-state--m-xl__body--FontSize: var(--pf-global--FontSize--xl);\n  --pf-c-empty-state--m-xl__body--MarginTop: var(--pf-global--spacer--lg);\n  --pf-c-empty-state--m-xl__icon--MarginBottom: var(--pf-global--spacer--xl);\n  --pf-c-empty-state--m-xl__icon--FontSize: 6.25rem;\n  --pf-c-empty-state--m-xl--c-button__secondary--MarginTop: var(--pf-global--spacer--md);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: var(--pf-c-empty-state--PaddingTop) var(--pf-c-empty-state--PaddingRight) var(--pf-c-empty-state--PaddingBottom) var(--pf-c-empty-state--PaddingLeft);\n  text-align: center; }\n  .pf-c-empty-state.pf-m-xs {\n    --pf-c-empty-state--PaddingTop: var(--pf-c-empty-state--m-xs--PaddingTop);\n    --pf-c-empty-state--PaddingRight: var(--pf-c-empty-state--m-xs--PaddingRight);\n    --pf-c-empty-state--PaddingBottom: var(--pf-c-empty-state--m-xs--PaddingBottom);\n    --pf-c-empty-state--PaddingLeft: var(--pf-c-empty-state--m-xs--PaddingLeft);\n    --pf-c-empty-state__content--MaxWidth: var(--pf-c-empty-state--m-xs__content--MaxWidth);\n    --pf-c-empty-state__icon--MarginBottom: var(--pf-c-empty-state--m-xs__icon--MarginBottom);\n    --pf-c-empty-state__body--MarginTop: var(--pf-c-empty-state--m-xs__body--MarginTop);\n    --pf-c-empty-state__primary--MarginTop: var(--pf-c-empty-state--m-xs__primary--MarginTop);\n    --pf-c-empty-state__secondary--MarginTop: var(--pf-c-empty-state--m-xs__secondary--MarginTop); }\n    .pf-c-empty-state.pf-m-xs .pf-c-empty-state__body {\n      font-size: var(--pf-c-empty-state--m-xs__body--FontSize); }\n    .pf-c-empty-state.pf-m-xs .pf-c-button {\n      --pf-c-button--FontSize: var(--pf-c-empty-state--m-xs--button--FontSize); }\n  .pf-c-empty-state.pf-m-sm {\n    --pf-c-empty-state__content--MaxWidth: var(--pf-c-empty-state--m-sm__content--MaxWidth); }\n  .pf-c-empty-state.pf-m-lg {\n    --pf-c-empty-state__content--MaxWidth: var(--pf-c-empty-state--m-lg__content--MaxWidth); }\n  .pf-c-empty-state.pf-m-xl {\n    --pf-c-empty-state__body--MarginTop: var(--pf-c-empty-state--m-xl__body--MarginTop);\n    --pf-c-empty-state__icon--MarginBottom: var(--pf-c-empty-state--m-xl__icon--MarginBottom);\n    --pf-c-empty-state__icon--FontSize: var(--pf-c-empty-state--m-xl__icon--FontSize);\n    --pf-c-empty-state--c-button__secondary--MarginTop: var(--pf-c-empty-state--m-xl--c-button__secondary--MarginTop); }\n    .pf-c-empty-state.pf-m-xl .pf-c-empty-state__body {\n      font-size: var(--pf-c-empty-state--m-xl__body--FontSize); }\n  .pf-c-empty-state.pf-m-full-height {\n    height: 100%; }\n\n.pf-c-empty-state__content {\n  max-width: var(--pf-c-empty-state__content--MaxWidth); }\n  .pf-c-empty-state__content > .pf-c-title.pf-m-lg {\n    font-size: var(--pf-c-empty-state__content--c-title--m-lg--FontSize); }\n\n.pf-c-empty-state__icon {\n  margin-bottom: var(--pf-c-empty-state__icon--MarginBottom);\n  font-size: var(--pf-c-empty-state__icon--FontSize);\n  color: var(--pf-c-empty-state__icon--Color); }\n\n.pf-c-empty-state__body {\n  margin-top: var(--pf-c-empty-state__body--MarginTop);\n  color: var(--pf-c-empty-state__body--Color); }\n\n.pf-c-empty-state__content > .pf-c-button.pf-m-primary,\n.pf-c-empty-state__primary {\n  margin-top: var(--pf-c-empty-state__primary--MarginTop); }\n  .pf-c-empty-state__content > .pf-c-button.pf-m-primary + .pf-c-empty-state__secondary,\n  .pf-c-empty-state__primary + .pf-c-empty-state__secondary {\n    margin-top: var(--pf-c-empty-state__primary--secondary--MarginTop); }\n\n.pf-c-empty-state__secondary {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  margin-top: var(--pf-c-empty-state__secondary--MarginTop);\n  margin-bottom: var(--pf-c-empty-state__secondary--MarginBottom); }\n  .pf-c-empty-state__secondary > * {\n    margin-right: var(--pf-c-empty-state__secondary--child--MarginRight);\n    margin-bottom: var(--pf-c-empty-state__secondary--child--MarginBottom);\n    margin-left: var(--pf-c-empty-state__secondary--child--MarginLeft); }\n\n.pf-m-overpass-font .pf-c-empty-state .pf-c-empty-state__content > .pf-c-title.pf-m-lg {\n  font-size: var(--pf-global--FontSize--lg); }\n\n.pf-c-expandable-section {\n  --pf-c-expandable-section__toggle--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-expandable-section__toggle--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-expandable-section__toggle--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-expandable-section__toggle--PaddingLeft: 0;\n  --pf-c-expandable-section__toggle--Color: var(--pf-global--link--Color);\n  --pf-c-expandable-section__toggle--hover--Color: var(--pf-global--link--Color--hover);\n  --pf-c-expandable-section__toggle--active--Color: var(--pf-global--link--Color--hover);\n  --pf-c-expandable-section__toggle--focus--Color: var(--pf-global--link--Color--hover);\n  --pf-c-expandable-section__toggle--m-expanded--Color: var(--pf-global--link--Color--hover);\n  --pf-c-expandable-section__toggle-icon--Color: var(--pf-global--Color--100);\n  --pf-c-expandable-section__toggle-icon--Transition: .2s ease-in 0s;\n  --pf-c-expandable-section__toggle-icon--Rotate: 0;\n  --pf-c-expandable-section--m-expanded__toggle-icon--Rotate: 90deg;\n  --pf-c-expandable-section__toggle-text--MarginLeft: calc(var(--pf-global--spacer--xs) + var(--pf-global--spacer--sm));\n  --pf-c-expandable-section__content--MarginTop: var(--pf-global--spacer--md); }\n  .pf-c-expandable-section.pf-m-expanded {\n    --pf-c-expandable-section__toggle--Color: var(--pf-c-expandable-section__toggle--m-expanded--Color);\n    --pf-c-expandable-section__toggle-icon--Rotate: var(--pf-c-expandable-section--m-expanded__toggle-icon--Rotate); }\n\n.pf-c-expandable-section__toggle {\n  display: flex;\n  padding: var(--pf-c-expandable-section__toggle--PaddingTop) var(--pf-c-expandable-section__toggle--PaddingRight) var(--pf-c-expandable-section__toggle--PaddingBottom) var(--pf-c-expandable-section__toggle--PaddingLeft);\n  color: var(--pf-c-expandable-section__toggle--Color);\n  border: none; }\n  .pf-c-expandable-section__toggle:hover {\n    --pf-c-expandable-section__toggle--Color: var(--pf-c-expandable-section__toggle--hover--Color); }\n  .pf-c-expandable-section__toggle:active, .pf-c-expandable-section__toggle.pf-m-active {\n    --pf-c-expandable-section__toggle--Color: var(--pf-c-expandable-section__toggle--active--Color); }\n  .pf-c-expandable-section__toggle:focus {\n    --pf-c-expandable-section__toggle--Color: var(--pf-c-expandable-section__toggle--focus--Color); }\n\n.pf-c-expandable-section__toggle-icon {\n  color: var(--pf-c-expandable-section__toggle-icon--Color);\n  transition: var(--pf-c-expandable-section__toggle-icon--Transition);\n  transform: rotate(var(--pf-c-expandable-section__toggle-icon--Rotate)); }\n\n.pf-c-expandable-section__toggle-text {\n  margin-left: var(--pf-c-expandable-section__toggle-text--MarginLeft); }\n\n.pf-c-expandable-section__content {\n  margin-top: var(--pf-c-expandable-section__content--MarginTop); }\n\n.pf-m-overpass-font .pf-c-expandable-section__toggle {\n  font-weight: var(--pf-global--FontWeight--semi-bold); }\n\n.pf-c-file-upload {\n  --pf-c-file-upload--m-loading__file-details--before--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-file-upload--m-loading__file-details--before--Left: var(--pf-global--BorderWidth--sm);\n  --pf-c-file-upload--m-loading__file-details--before--Right: var(--pf-global--BorderWidth--sm);\n  --pf-c-file-upload--m-loading__file-details--before--Bottom: var(--pf-global--BorderWidth--sm);\n  --pf-c-file-upload--m-drag-hover--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-file-upload--m-drag-hover--before--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-file-upload--m-drag-hover--before--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-file-upload--m-drag-hover--after--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-file-upload--m-drag-hover--after--Opacity: .1;\n  --pf-c-file-upload__file-details__c-form-control--MinHeight: calc(var(--pf-global--spacer--3xl) * 2);\n  --pf-c-file-upload__file-select__c-button--m-control--OutlineOffset: calc(-1 * var(--pf-global--spacer--xs));\n  position: relative;\n  display: flex;\n  flex-direction: column; }\n  .pf-c-file-upload.pf-m-drag-hover::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: var(--pf-c-file-upload--m-drag-hover--before--ZIndex);\n    content: "";\n    border: var(--pf-c-file-upload--m-drag-hover--before--BorderWidth) solid var(--pf-c-file-upload--m-drag-hover--before--BorderColor); }\n  .pf-c-file-upload.pf-m-drag-hover::after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    background-color: var(--pf-c-file-upload--m-drag-hover--after--BackgroundColor);\n    opacity: var(--pf-c-file-upload--m-drag-hover--after--Opacity); }\n  .pf-c-file-upload.pf-m-loading .pf-c-file-upload__file-details {\n    position: relative; }\n    .pf-c-file-upload.pf-m-loading .pf-c-file-upload__file-details::before {\n      position: absolute;\n      top: 0;\n      right: var(--pf-c-file-upload--m-loading__file-details--before--Left);\n      bottom: var(--pf-c-file-upload--m-loading__file-details--before--Left);\n      left: var(--pf-c-file-upload--m-loading__file-details--before--Left);\n      content: "";\n      background-color: var(--pf-c-file-upload--m-loading__file-details--before--BackgroundColor); }\n\n.pf-c-file-upload__file-select .pf-c-button.pf-m-control {\n  outline-offset: var(--pf-c-file-upload__file-select__c-button--m-control--OutlineOffset); }\n\n.pf-c-file-upload__file-details {\n  position: relative;\n  display: flex; }\n  .pf-c-file-upload__file-details .pf-c-form-control {\n    flex: 1 1 auto;\n    min-height: var(--pf-c-file-upload__file-details__c-form-control--MinHeight);\n    border-top: 0; }\n\n.pf-c-file-upload__file-details-spinner {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%); }\n\n.pf-c-form {\n  --pf-c-form--GridGap: var(--pf-global--gutter--md);\n  --pf-c-form__group--m-action--MarginTop: var(--pf-global--spacer--xl);\n  --pf-c-form--m-horizontal__group-label--md--GridColumnWidth: 9.375rem;\n  --pf-c-form--m-horizontal__group-label--md--GridColumnGap: var(--pf-global--spacer--md);\n  --pf-c-form--m-horizontal__group-control--md--GridColumnWidth: 1fr;\n  --pf-c-form--m-limit-width--MaxWidth: 31.25rem;\n  --pf-c-form--m-horizontal__group-label--md--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-form__group-label--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-form__label--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-form__label--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-form__label--m-disabled--Color: var(--pf-global--disabled-color--100);\n  --pf-c-form__label-text--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-form__label-required--MarginLeft: var(--pf-global--spacer--xs);\n  --pf-c-form__label-required--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-form__label-required--Color: var(--pf-global--danger-color--100);\n  --pf-c-form__group-label-help--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-form__group-label-help--PaddingRight: var(--pf-global--spacer--xs);\n  --pf-c-form__group-label-help--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-form__group-label-help--PaddingLeft: var(--pf-global--spacer--xs);\n  --pf-c-form__group-label-help--MarginTop: calc(var(--pf-c-form__group-label-help--PaddingTop) * -1);\n  --pf-c-form__group-label-help--MarginRight: calc(var(--pf-c-form__group-label-help--PaddingRight) * -1);\n  --pf-c-form__group-label-help--MarginBottom: calc(var(--pf-c-form__group-label-help--PaddingBottom) * -1);\n  --pf-c-form__group-label-help--MarginLeft: calc(var(--pf-c-form__group-label-help--PaddingLeft) * -1 + var(--pf-global--spacer--xs));\n  --pf-c-form__group-label-help--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-form__group-label-help--TranslateY: 0.125rem;\n  --pf-c-form__group-control--m-inline--child--MarginRight: var(--pf-global--spacer--lg);\n  --pf-c-form__group-control__helper-text--MarginBottom: var(--pf-global--spacer--xs);\n  --pf-c-form__actions--child--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-form__actions--child--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-form__actions--child--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-form__actions--child--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-form__actions--MarginTop: calc(var(--pf-c-form__actions--child--MarginTop) * -1);\n  --pf-c-form__actions--MarginRight: calc(var(--pf-c-form__actions--child--MarginRight) * -1);\n  --pf-c-form__actions--MarginBottom: calc(var(--pf-c-form__actions--child--MarginBottom) * -1);\n  --pf-c-form__actions--MarginLeft: calc(var(--pf-c-form__actions--child--MarginLeft) * -1);\n  --pf-c-form__helper-text--MarginTop: var(--pf-global--spacer--xs);\n  --pf-c-form__helper-text--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-form__helper-text--Color: var(--pf-global--Color--100);\n  --pf-c-form__helper-text-icon--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-form__helper-text-icon--MarginRight: var(--pf-global--spacer--xs);\n  --pf-c-form__helper-text--m-success--Color: var(--pf-global--success-color--200);\n  --pf-c-form__helper-text--m-warning--Color: var(--pf-global--warning-color--200);\n  --pf-c-form__helper-text--m-error--Color: var(--pf-global--danger-color--100);\n  --pf-c-form__section--MarginTop: var(--pf-global--spacer--xl);\n  --pf-c-form__section--Gap: var(--pf-global--gutter--md);\n  display: grid;\n  grid-gap: var(--pf-c-form--GridGap); }\n  .pf-c-form.pf-m-horizontal {\n    --pf-c-form__group-label--PaddingBottom: 0; }\n    .pf-c-form.pf-m-horizontal.pf-m-align-right .pf-c-form__label {\n      text-align: right; }\n    @media (min-width: 768px) {\n      .pf-c-form.pf-m-horizontal .pf-c-form__group {\n        display: grid;\n        grid-column-gap: var(--pf-c-form--m-horizontal__group-label--md--GridColumnGap);\n        grid-template-columns: var(--pf-c-form--m-horizontal__group-label--md--GridColumnWidth) var(--pf-c-form--m-horizontal__group-control--md--GridColumnWidth); }\n      .pf-c-form.pf-m-horizontal .pf-c-form__group-label {\n        padding-top: var(--pf-c-form--m-horizontal__group-label--md--PaddingTop); }\n        .pf-c-form.pf-m-horizontal .pf-c-form__group-label.pf-m-no-padding-top {\n          --pf-c-form--m-horizontal__group-label--md--PaddingTop: 0; }\n      .pf-c-form.pf-m-horizontal .pf-c-form__group-control {\n        grid-column: 2; } }\n  .pf-c-form.pf-m-limit-width {\n    max-width: var(--pf-c-form--m-limit-width--MaxWidth); }\n\n.pf-c-form__group.pf-m-action {\n  margin-top: var(--pf-c-form__group--m-action--MarginTop);\n  overflow: hidden; }\n\n.pf-c-form__section {\n  display: grid;\n  gap: var(--pf-c-form__section--Gap); }\n  .pf-c-form__section + .pf-c-form__group:not(.pf-m-action), .pf-c-form__section:not(:first-child) {\n    margin-top: var(--pf-c-form__section--MarginTop); }\n\n.pf-c-form__group-label {\n  --pf-c-form__helper-text--MarginTop: 0;\n  padding-bottom: var(--pf-c-form__group-label--PaddingBottom); }\n\n.pf-c-form__label {\n  font-size: var(--pf-c-form__label--FontSize);\n  line-height: var(--pf-c-form__label--LineHeight); }\n  .pf-c-form__label::selection {\n    background-color: none; }\n  .pf-c-form__label:not(.pf-m-disabled):hover {\n    cursor: pointer; }\n  .pf-c-form__label.pf-m-disabled {\n    color: var(--pf-c-form__label--m-disabled--Color); }\n  .pf-c-form__label.pf-m-disabled:hover {\n    cursor: not-allowed; }\n\n.pf-c-form__label-text {\n  font-weight: var(--pf-c-form__label-text--FontWeight); }\n\n.pf-c-form__label-required {\n  margin-left: var(--pf-c-form__label-required--MarginLeft);\n  font-size: var(--pf-c-form__label-required--FontSize);\n  color: var(--pf-c-form__label-required--Color); }\n\n.pf-c-form__group-label-help {\n  padding-top: var(--pf-c-form__group-label-help--PaddingTop);\n  padding-right: var(--pf-c-form__group-label-help--PaddingRight);\n  padding-bottom: var(--pf-c-form__group-label-help--PaddingBottom);\n  padding-left: var(--pf-c-form__group-label-help--PaddingLeft);\n  margin-top: var(--pf-c-form__group-label-help--MarginTop);\n  margin-right: var(--pf-c-form__group-label-help--MarginRight);\n  margin-bottom: var(--pf-c-form__group-label-help--MarginBottom);\n  margin-left: var(--pf-c-form__group-label-help--MarginLeft);\n  font-size: var(--pf-c-form__group-label-help--FontSize);\n  line-height: 1;\n  border: 0;\n  transform: translateY(var(--pf-c-form__group-label-help--TranslateY)); }\n\n.pf-c-form__group-control.pf-m-inline {\n  display: flex;\n  flex-flow: row wrap; }\n  .pf-c-form__group-control.pf-m-inline > * {\n    margin-right: var(--pf-c-form__group-control--m-inline--child--MarginRight); }\n\n.pf-c-form__group-control .pf-c-form__helper-text:first-child {\n  --pf-c-form__helper-text--MarginTop: 0;\n  margin-bottom: var(--pf-c-form__group-control__helper-text--MarginBottom); }\n\n.pf-c-form__helper-text {\n  margin-top: var(--pf-c-form__helper-text--MarginTop);\n  font-size: var(--pf-c-form__helper-text--FontSize);\n  color: var(--pf-c-form__helper-text--Color); }\n  .pf-c-form__helper-text.pf-m-error {\n    --pf-c-form__helper-text--Color: var(--pf-c-form__helper-text--m-error--Color); }\n  .pf-c-form__helper-text.pf-m-success {\n    --pf-c-form__helper-text--Color: var(--pf-c-form__helper-text--m-success--Color); }\n  .pf-c-form__helper-text.pf-m-warning {\n    --pf-c-form__helper-text--Color: var(--pf-c-form__helper-text--m-warning--Color); }\n  .pf-c-form__helper-text.pf-m-inactive {\n    display: none;\n    visibility: hidden; }\n  .pf-c-form__helper-text.pf-m-hidden {\n    visibility: hidden;\n    opacity: 0; }\n\n.pf-c-form__helper-text-icon {\n  margin-right: var(--pf-c-form__helper-text-icon--MarginRight);\n  font-size: var(--pf-c-form__helper-text-icon--FontSize); }\n\n.pf-c-form__fieldset {\n  border: 0; }\n\n.pf-c-form__actions {\n  display: flex;\n  flex-wrap: wrap;\n  margin-top: var(--pf-c-form__actions--MarginTop);\n  margin-right: var(--pf-c-form__actions--MarginRight);\n  margin-bottom: var(--pf-c-form__actions--MarginBottom);\n  margin-left: var(--pf-c-form__actions--MarginLeft); }\n  .pf-c-form__actions > * {\n    margin-top: var(--pf-c-form__actions--child--MarginTop);\n    margin-right: var(--pf-c-form__actions--child--MarginRight);\n    margin-bottom: var(--pf-c-form__actions--child--MarginBottom);\n    margin-left: var(--pf-c-form__actions--child--MarginLeft); }\n\n.pf-c-form-control {\n  --pf-c-form-control--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-form-control--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-form-control--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-form-control--BorderTopColor: var(--pf-global--BorderColor--300);\n  --pf-c-form-control--BorderRightColor: var(--pf-global--BorderColor--300);\n  --pf-c-form-control--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-form-control--BorderLeftColor: var(--pf-global--BorderColor--300);\n  --pf-c-form-control--BorderRadius: 0;\n  --pf-c-form-control--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-form-control--Height: calc(var(--pf-c-form-control--FontSize) * var(--pf-c-form-control--LineHeight) + var(--pf-c-form-control--BorderWidth) * 2 + var(--pf-c-form-control--PaddingTop) + var(--pf-c-form-control--PaddingBottom));\n  --pf-c-form-control--inset--base: var(--pf-global--spacer--sm);\n  --pf-c-form-control--PaddingTop: calc(var(--pf-global--spacer--form-element) - var(--pf-global--BorderWidth--sm));\n  --pf-c-form-control--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-global--BorderWidth--sm));\n  --pf-c-form-control--PaddingRight: var(--pf-c-form-control--inset--base);\n  --pf-c-form-control--PaddingLeft: var(--pf-c-form-control--inset--base);\n  --pf-c-form-control--hover--BorderBottomColor: var(--pf-global--primary-color--100);\n  --pf-c-form-control--focus--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-form-control--focus--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-c-form-control--focus--BorderBottomWidth));\n  --pf-c-form-control--focus--BorderBottomColor: var(--pf-global--primary-color--100);\n  --pf-c-form-control--m-expanded--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-form-control--m-expanded--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-c-form-control--focus--BorderBottomWidth));\n  --pf-c-form-control--m-expanded--BorderBottomColor: var(--pf-global--primary-color--100);\n  --pf-c-form-control--placeholder--Color: var(--pf-global--Color--dark-200);\n  --pf-c-form-control--disabled--Color: var(--pf-global--disabled-color--100);\n  --pf-c-form-control--disabled--BackgroundColor: var(--pf-global--disabled-color--300);\n  --pf-c-form-control--disabled--BorderColor: transparent;\n  --pf-c-form-control--readonly--BackgroundColor: var(--pf-global--disabled-color--300);\n  --pf-c-form-control--readonly--hover--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-form-control--readonly--focus--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-global--BorderWidth--sm));\n  --pf-c-form-control--readonly--focus--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-form-control--readonly--focus--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-form-control--success--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-form-control--success--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-c-form-control--success--BorderBottomWidth));\n  --pf-c-form-control--success--BorderBottomColor: var(--pf-global--success-color--100);\n  --pf-c-form-control--success--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-form-control--success--BackgroundPositionX: calc(100% - var(--pf-c-form-control--PaddingLeft));\n  --pf-c-form-control--success--BackgroundPositionY: center;\n  --pf-c-form-control--success--BackgroundPosition: var(--pf-c-form-control--success--BackgroundPositionX) var(--pf-c-form-control--success--BackgroundPositionY);\n  --pf-c-form-control--success--BackgroundSizeX: var(--pf-c-form-control--FontSize);\n  --pf-c-form-control--success--BackgroundSizeY: var(--pf-c-form-control--FontSize);\n  --pf-c-form-control--success--BackgroundSize: var(--pf-c-form-control--success--BackgroundSizeX) var(--pf-c-form-control--success--BackgroundSizeY);\n  --pf-c-form-control--success--BackgroundUrl: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 512 512\'%3E%3Cpath fill=\'%233e8635\' d=\'M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z\'/%3E%3C/svg%3E");\n  --pf-c-form-control--m-warning--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-form-control--m-warning--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-c-form-control--m-warning--BorderBottomWidth));\n  --pf-c-form-control--m-warning--BorderBottomColor: var(--pf-global--warning-color--100);\n  --pf-c-form-control--m-warning--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-form-control--m-warning--BackgroundPositionX: calc(100% - calc(var(--pf-c-form-control--PaddingLeft) - 0.0625rem));\n  --pf-c-form-control--m-warning--BackgroundPositionY: center;\n  --pf-c-form-control--m-warning--BackgroundPosition: var(--pf-c-form-control--m-warning--BackgroundPositionX) var(--pf-c-form-control--m-warning--BackgroundPositionY);\n  --pf-c-form-control--m-warning--BackgroundSizeX: 1.25rem;\n  --pf-c-form-control--m-warning--BackgroundSizeY: var(--pf-c-form-control--FontSize);\n  --pf-c-form-control--m-warning--BackgroundSize: var(--pf-c-form-control--m-warning--BackgroundSizeX) var(--pf-c-form-control--m-warning--BackgroundSizeY);\n  --pf-c-form-control--m-warning--BackgroundUrl: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 512 512\'%3E%3Cpath fill=\'%23f0ab00\' d=\'M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\'/%3E%3C/svg%3E");\n  --pf-c-form-control--invalid--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-form-control--invalid--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-c-form-control--invalid--BorderBottomWidth));\n  --pf-c-form-control--invalid--BorderBottomColor: var(--pf-global--danger-color--100);\n  --pf-c-form-control--invalid--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-form-control--invalid--BackgroundPositionX: calc(100% - var(--pf-c-form-control--PaddingLeft));\n  --pf-c-form-control--invalid--BackgroundPositionY: center;\n  --pf-c-form-control--invalid--BackgroundPosition: var(--pf-c-form-control--invalid--BackgroundPositionX) var(--pf-c-form-control--invalid--BackgroundPositionY);\n  --pf-c-form-control--invalid--BackgroundSizeX: var(--pf-c-form-control--FontSize);\n  --pf-c-form-control--invalid--BackgroundSizeY: var(--pf-c-form-control--FontSize);\n  --pf-c-form-control--invalid--BackgroundSize: var(--pf-c-form-control--invalid--BackgroundSizeX) var(--pf-c-form-control--invalid--BackgroundSizeY);\n  --pf-c-form-control--invalid--BackgroundUrl: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 512 512\'%3E%3Cpath fill=\'%23c9190b\' d=\'M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\'/%3E%3C/svg%3E");\n  --pf-c-form-control--invalid--exclamation--Background: var(--pf-c-form-control--invalid--BackgroundUrl) var(--pf-c-form-control--invalid--BackgroundPosition) / var(--pf-c-form-control--invalid--BackgroundSize) no-repeat;\n  --pf-c-form-control--invalid--Background: var(--pf-c-form-control--BackgroundColor) var(--pf-c-form-control--invalid--exclamation--Background);\n  --pf-c-form-control--m-search--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-form-control--m-search--BackgroundPosition: var(--pf-c-form-control--PaddingRight);\n  --pf-c-form-control--m-search--BackgroundSize: var(--pf-c-form-control--FontSize) var(--pf-c-form-control--FontSize);\n  --pf-c-form-control--m-search--BackgroundUrl: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 512 512\'%3E%3Cpath fill=\'%236a6e73\' d=\'M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z\'/%3E%3C/svg%3E");\n  --pf-c-form-control--m-icon--PaddingRight: calc(var(--pf-c-form-control--inset--base) + var(--pf-c-form-control--m-icon--BackgroundSizeX) + var(--pf-c-form-control--m-icon--icon--spacer));\n  --pf-c-form-control--m-icon--BackgroundUrl: none;\n  --pf-c-form-control--m-icon--BackgroundPositionX: calc(100% - var(--pf-c-form-control--inset--base));\n  --pf-c-form-control--m-icon--BackgroundPositionY: center;\n  --pf-c-form-control--m-icon--BackgroundSizeX: var(--pf-c-form-control--FontSize);\n  --pf-c-form-control--m-icon--BackgroundSizeY: var(--pf-c-form-control--FontSize);\n  --pf-c-form-control--m-icon--icon--spacer: var(--pf-global--spacer--sm);\n  --pf-c-form-control--m-icon--icon--PaddingRight: calc(var(--pf-c-form-control--inset--base) + var(--pf-c-form-control--invalid--BackgroundSizeX) + var(--pf-c-form-control--m-icon--icon--spacer) + var(--pf-c-form-control--m-icon--BackgroundSizeX) + var(--pf-c-form-control--m-icon--icon--spacer));\n  --pf-c-form-control--m-icon--icon--BackgroundPositionX: calc(var(--pf-c-form-control--m-icon--BackgroundPositionX) - var(--pf-c-form-control--m-icon--icon--spacer) - var(--pf-c-form-control--invalid--BackgroundSizeX));\n  --pf-c-form-control--m-icon--invalid--BackgroundUrl: var(--pf-c-form-control--invalid--BackgroundUrl), var(--pf-c-form-control--m-icon--BackgroundUrl);\n  --pf-c-form-control--m-icon--invalid--BackgroundPosition: var(--pf-c-form-control--invalid--BackgroundPosition), var(--pf-c-form-control--m-icon--icon--BackgroundPositionX) var(--pf-c-form-control--m-icon--BackgroundPositionY);\n  --pf-c-form-control--m-icon--invalid--BackgroundSize: var(--pf-c-form-control--invalid--BackgroundSize), var(--pf-c-form-control--m-icon--BackgroundSizeX) var(--pf-c-form-control--m-icon--BackgroundSizeY);\n  --pf-c-form-control--m-icon--success--BackgroundUrl: var(--pf-c-form-control--success--BackgroundUrl), var(--pf-c-form-control--m-icon--BackgroundUrl);\n  --pf-c-form-control--m-icon--success--BackgroundPosition: var(--pf-c-form-control--success--BackgroundPosition), var(--pf-c-form-control--m-icon--icon--BackgroundPositionX) var(--pf-c-form-control--m-icon--BackgroundPositionY);\n  --pf-c-form-control--m-icon--success--BackgroundSize: var(--pf-c-form-control--success--BackgroundSize), var(--pf-c-form-control--m-icon--BackgroundSizeX) var(--pf-c-form-control--m-icon--BackgroundSizeY);\n  --pf-c-form-control--m-icon--m-warning--BackgroundUrl: var(--pf-c-form-control--m-warning--BackgroundUrl), var(--pf-c-form-control--m-icon--BackgroundUrl);\n  --pf-c-form-control--m-icon--m-warning--BackgroundPosition: var(--pf-c-form-control--m-warning--BackgroundPosition), var(--pf-c-form-control--m-icon--icon--BackgroundPositionX) var(--pf-c-form-control--m-icon--BackgroundPositionY);\n  --pf-c-form-control--m-icon--m-warning--BackgroundSize: var(--pf-c-form-control--m-warning--BackgroundSize), var(--pf-c-form-control--m-icon--BackgroundSizeX) var(--pf-c-form-control--m-icon--BackgroundSizeY);\n  --pf-c-form-control--m-calendar--BackgroundUrl: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 512 512\'%3E%3Cpath fill=\'%236a6e73\' d=\'M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm320-196c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM192 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM64 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z\'/%3E%3C/svg%3E");\n  --pf-c-form-control--m-clock--BackgroundUrl: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 512 512\'%3E%3Cpath fill=\'%236a6e73\' d=\'M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm61.8-104.4l-84.9-61.7c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v141.7l66.8 48.6c5.4 3.9 6.5 11.4 2.6 16.8L334.6 349c-3.9 5.3-11.4 6.5-16.8 2.6z\'/%3E%3C/svg%3E");\n  --pf-c-form-control__select--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-form-control__select--BackgroundUrl: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 320 512\'%3E%3Cpath fill=\'%23urrentColor\' d=\'M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\'/%3E%3C/svg%3E");\n  --pf-c-form-control__select--BackgroundSize: .625em;\n  --pf-c-form-control__select--BackgroundPositionX: calc(100% - var(--pf-global--spacer--md) + 1px);\n  --pf-c-form-control__select--BackgroundPositionY: center;\n  --pf-c-form-control__select--BackgroundPosition: var(--pf-c-form-control__select--BackgroundPositionX) var(--pf-c-form-control__select--BackgroundPositionY);\n  --pf-c-form-control__select--success--PaddingRight: var(--pf-global--spacer--3xl);\n  --pf-c-form-control__select--success--BackgroundPosition: calc(var(--pf-c-form-control__select--BackgroundPositionX) - var(--pf-global--spacer--lg));\n  --pf-c-form-control__select--m-warning--PaddingRight: var(--pf-global--spacer--3xl);\n  --pf-c-form-control__select--m-warning--BackgroundPosition: calc(var(--pf-c-form-control__select--BackgroundPositionX) - var(--pf-global--spacer--lg) + 0.0625rem);\n  --pf-c-form-control__select--invalid--PaddingRight: var(--pf-global--spacer--3xl);\n  --pf-c-form-control__select--invalid--BackgroundPosition: calc(var(--pf-c-form-control__select--BackgroundPositionX) - var(--pf-global--spacer--lg));\n  --pf-c-form-control--textarea--success--BackgroundPositionY: var(--pf-c-form-control--PaddingLeft);\n  --pf-c-form-control--textarea--m-warning--BackgroundPositionY: var(--pf-c-form-control--PaddingLeft);\n  --pf-c-form-control--textarea--invalid--BackgroundPositionY: var(--pf-c-form-control--PaddingLeft);\n  color: var(--pf-global--Color--100);\n  width: 100%;\n  padding: var(--pf-c-form-control--PaddingTop) var(--pf-c-form-control--PaddingRight) var(--pf-c-form-control--PaddingBottom) var(--pf-c-form-control--PaddingLeft);\n  font-size: var(--pf-c-form-control--FontSize);\n  line-height: var(--pf-c-form-control--LineHeight);\n  background-color: var(--pf-c-form-control--BackgroundColor);\n  background-repeat: no-repeat;\n  border: var(--pf-c-form-control--BorderWidth) solid;\n  border-color: var(--pf-c-form-control--BorderTopColor) var(--pf-c-form-control--BorderRightColor) var(--pf-c-form-control--BorderBottomColor) var(--pf-c-form-control--BorderLeftColor);\n  border-radius: var(--pf-c-form-control--BorderRadius);\n  -moz-appearance: none;\n  -webkit-appearance: none; }\n  .pf-c-form-control::placeholder {\n    color: var(--pf-c-form-control--placeholder--Color); }\n  .pf-c-form-control:not(textarea) {\n    height: var(--pf-c-form-control--Height);\n    text-overflow: ellipsis; }\n  .pf-c-form-control[readonly] {\n    background-color: var(--pf-c-form-control--readonly--BackgroundColor); }\n    .pf-c-form-control[readonly]:not(.pf-m-success):not([aria-invalid="true"]):hover {\n      --pf-c-form-control--BorderBottomColor: var(--pf-c-form-control--readonly--hover--BorderBottomColor); }\n    .pf-c-form-control[readonly]:not(.pf-m-success):not([aria-invalid="true"]):focus {\n      --pf-c-form-control--focus--PaddingBottom: var(--pf-c-form-control--readonly--focus--PaddingBottom);\n      --pf-c-form-control--focus--BorderBottomWidth: var(--pf-c-form-control--readonly--focus--BorderBottomWidth);\n      --pf-c-form-control--focus--BorderBottomColor: var(--pf-c-form-control--readonly--focus--BorderBottomColor); }\n  .pf-c-form-control:hover {\n    --pf-c-form-control--BorderBottomColor: var(--pf-c-form-control--hover--BorderBottomColor); }\n  .pf-c-form-control:focus {\n    --pf-c-form-control--BorderBottomColor: var(--pf-c-form-control--focus--BorderBottomColor);\n    padding-bottom: var(--pf-c-form-control--focus--PaddingBottom);\n    border-bottom-width: var(--pf-c-form-control--focus--BorderBottomWidth); }\n  .pf-c-form-control.pf-m-expanded {\n    --pf-c-form-control--BorderBottomColor: var(--pf-c-form-control--m-expanded--BorderBottomColor);\n    padding-bottom: var(--pf-c-form-control--m-expanded--PaddingBottom);\n    border-bottom-width: var(--pf-c-form-control--m-expanded--BorderBottomWidth); }\n  .pf-c-form-control:disabled {\n    --pf-c-form-control--Color: var(--pf-c-form-control--disabled--Color);\n    --pf-c-form-control--BackgroundColor: var(--pf-c-form-control--disabled--BackgroundColor);\n    cursor: not-allowed;\n    border-color: var(--pf-c-form-control--disabled--BorderColor); }\n  .pf-c-form-control[aria-invalid="true"] {\n    --pf-c-form-control--PaddingRight: var(--pf-c-form-control--invalid--PaddingRight);\n    --pf-c-form-control--BorderBottomColor: var(--pf-c-form-control--invalid--BorderBottomColor);\n    padding-bottom: var(--pf-c-form-control--invalid--PaddingBottom);\n    background-image: var(--pf-c-form-control--invalid--BackgroundUrl);\n    background-position: var(--pf-c-form-control--invalid--BackgroundPosition);\n    background-size: var(--pf-c-form-control--invalid--BackgroundSize);\n    border-bottom-width: var(--pf-c-form-control--invalid--BorderBottomWidth); }\n    .pf-c-form-control[aria-invalid="true"].pf-m-icon {\n      --pf-c-form-control--PaddingRight: var(--pf-c-form-control--m-icon--icon--PaddingRight);\n      background-image: var(--pf-c-form-control--m-icon--invalid--BackgroundUrl);\n      background-position: var(--pf-c-form-control--m-icon--invalid--BackgroundPosition);\n      background-size: var(--pf-c-form-control--m-icon--invalid--BackgroundSize); }\n  .pf-c-form-control.pf-m-success {\n    --pf-c-form-control--PaddingRight: var(--pf-c-form-control--success--PaddingRight);\n    --pf-c-form-control--BorderBottomColor: var(--pf-c-form-control--success--BorderBottomColor);\n    padding-bottom: var(--pf-c-form-control--success--PaddingBottom);\n    background-image: var(--pf-c-form-control--success--BackgroundUrl);\n    background-position: var(--pf-c-form-control--success--BackgroundPosition);\n    background-size: var(--pf-c-form-control--success--BackgroundSize);\n    border-bottom-width: var(--pf-c-form-control--success--BorderBottomWidth); }\n    .pf-c-form-control.pf-m-success.pf-m-icon {\n      --pf-c-form-control--PaddingRight: var(--pf-c-form-control--m-icon--icon--PaddingRight);\n      background-image: var(--pf-c-form-control--m-icon--success--BackgroundUrl);\n      background-position: var(--pf-c-form-control--m-icon--success--BackgroundPosition);\n      background-size: var(--pf-c-form-control--m-icon--success--BackgroundSize); }\n  .pf-c-form-control.pf-m-warning {\n    --pf-c-form-control--PaddingRight: var(--pf-c-form-control--m-warning--PaddingRight);\n    --pf-c-form-control--BorderBottomColor: var(--pf-c-form-control--m-warning--BorderBottomColor);\n    padding-bottom: var(--pf-c-form-control--m-warning--PaddingBottom);\n    background-image: var(--pf-c-form-control--m-warning--BackgroundUrl);\n    background-position: var(--pf-c-form-control--m-warning--BackgroundPosition);\n    background-size: var(--pf-c-form-control--m-warning--BackgroundSize);\n    border-bottom-width: var(--pf-c-form-control--m-warning--BorderBottomWidth); }\n    .pf-c-form-control.pf-m-warning.pf-m-icon {\n      --pf-c-form-control--PaddingRight: var(--pf-c-form-control--m-icon--icon--PaddingRight);\n      background-image: var(--pf-c-form-control--m-icon--m-warning--BackgroundUrl);\n      background-position: var(--pf-c-form-control--m-icon--m-warning--BackgroundPosition);\n      background-size: var(--pf-c-form-control--m-icon--m-warning--BackgroundSize); }\n  .pf-c-form-control.pf-m-search {\n    --pf-c-form-control--PaddingLeft: var(--pf-c-form-control--m-search--PaddingLeft);\n    background-image: var(--pf-c-form-control--m-search--BackgroundUrl);\n    background-position: var(--pf-c-form-control--m-search--BackgroundPosition);\n    background-size: var(--pf-c-form-control--m-search--BackgroundSize); }\n  .pf-c-form-control.pf-m-icon {\n    --pf-c-form-control--PaddingRight: var(--pf-c-form-control--m-icon--PaddingRight);\n    background-image: var(--pf-c-form-control--m-icon--BackgroundUrl);\n    background-position: var(--pf-c-form-control--m-icon--BackgroundPositionX) var(--pf-c-form-control--m-icon--BackgroundPositionY);\n    background-size: var(--pf-c-form-control--m-icon--BackgroundSizeX) var(--pf-c-form-control--m-icon--BackgroundSizeY); }\n    .pf-c-form-control.pf-m-icon.pf-m-calendar {\n      --pf-c-form-control--m-icon--BackgroundUrl: var(--pf-c-form-control--m-calendar--BackgroundUrl); }\n    .pf-c-form-control.pf-m-icon.pf-m-clock {\n      --pf-c-form-control--m-icon--BackgroundUrl: var(--pf-c-form-control--m-clock--BackgroundUrl); }\n  select.pf-c-form-control {\n    --pf-c-form-control--PaddingRight: var(--pf-c-form-control__select--PaddingRight);\n    background-image: var(--pf-c-form-control__select--BackgroundUrl);\n    background-position: var(--pf-c-form-control__select--BackgroundPosition);\n    background-size: var(--pf-c-form-control__select--BackgroundSize); }\n    select.pf-c-form-control[aria-invalid="true"] {\n      --pf-c-form-control--PaddingRight: var(--pf-c-form-control__select--invalid--PaddingRight);\n      --pf-c-form-control--invalid--BackgroundPosition: var(--pf-c-form-control__select--invalid--BackgroundPosition);\n      background-image: var(--pf-c-form-control__select--BackgroundUrl), var(--pf-c-form-control--invalid--BackgroundUrl);\n      background-position: var(--pf-c-form-control__select--BackgroundPosition), var(--pf-c-form-control--invalid--BackgroundPosition);\n      background-size: var(--pf-c-form-control__select--BackgroundSize), var(--pf-c-form-control--invalid--BackgroundSize); }\n    select.pf-c-form-control.pf-m-success {\n      --pf-c-form-control--PaddingRight: var(--pf-c-form-control__select--success--PaddingRight);\n      --pf-c-form-control--success--BackgroundPosition: var(--pf-c-form-control__select--success--BackgroundPosition);\n      background-image: var(--pf-c-form-control__select--BackgroundUrl), var(--pf-c-form-control--success--BackgroundUrl);\n      background-position: var(--pf-c-form-control__select--BackgroundPosition), var(--pf-c-form-control--success--BackgroundPosition);\n      background-size: var(--pf-c-form-control__select--BackgroundSize), var(--pf-c-form-control--success--BackgroundSize); }\n    select.pf-c-form-control.pf-m-warning {\n      --pf-c-form-control--PaddingRight: var(--pf-c-form-control__select--m-warning--PaddingRight);\n      background-image: var(--pf-c-form-control__select--BackgroundUrl), var(--pf-c-form-control--m-warning--BackgroundUrl);\n      background-position: var(--pf-c-form-control__select--BackgroundPosition), var(--pf-c-form-control__select--m-warning--BackgroundPosition);\n      background-size: var(--pf-c-form-control__select--BackgroundSize), var(--pf-c-form-control--m-warning--BackgroundSize); }\n  textarea.pf-c-form-control {\n    --pf-c-form-control--success--BackgroundPositionY: var(--pf-c-form-control--textarea--success--BackgroundPositionY);\n    --pf-c-form-control--invalid--BackgroundPositionY: var(--pf-c-form-control--textarea--invalid--BackgroundPositionY);\n    --pf-c-form-control--m-warning--BackgroundPositionY: var(--pf-c-form-control--textarea--m-warning--BackgroundPositionY); }\n  .pf-c-form-control.pf-m-resize-vertical {\n    resize: vertical; }\n  .pf-c-form-control.pf-m-resize-horizontal {\n    resize: horizontal; }\n\n.pf-c-hint {\n  --pf-c-hint--GridRowGap: var(--pf-global--spacer--md);\n  --pf-c-hint--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-hint--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-hint--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-hint--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-hint--BackgroundColor: var(--pf-global--palette--blue-50);\n  --pf-c-hint--BorderColor: var(--pf-global--palette--blue-100);\n  --pf-c-hint--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-hint--BoxShadow: var(--pf-global--BoxShadow--sm);\n  --pf-c-hint--Color: var(--pf-global--Color--100);\n  --pf-c-hint__title--FontSize: var(--pf-global--FontSize--lg);\n  --pf-c-hint__body--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-hint__footer--child--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-hint__actions--MarginLeft: var(--pf-global--spacer--2xl);\n  --pf-c-hint__actions--c-dropdown--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  display: grid;\n  grid-template-columns: 1fr auto;\n  grid-row-gap: var(--pf-c-hint--GridRowGap);\n  padding: var(--pf-c-hint--PaddingTop) var(--pf-c-hint--PaddingRight) var(--pf-c-hint--PaddingBottom) var(--pf-c-hint--PaddingLeft);\n  color: var(--pf-c-hint--Color);\n  background-color: var(--pf-c-hint--BackgroundColor);\n  border: var(--pf-c-hint--BorderWidth) solid var(--pf-c-hint--BorderColor);\n  box-shadow: var(--pf-c-hint--BoxShadow); }\n  .pf-c-hint .pf-c-button.pf-m-link.pf-m-inline {\n    text-align: left;\n    white-space: normal; }\n\n.pf-c-hint__actions {\n  display: inline-grid;\n  grid-auto-flow: column;\n  margin-left: var(--pf-c-hint__actions--MarginLeft);\n  text-align: right;\n  grid-column: 2;\n  grid-row: 1; }\n  .pf-c-hint__actions .pf-c-dropdown .pf-c-dropdown__toggle.pf-m-plain {\n    margin-top: var(--pf-c-hint__actions--c-dropdown--MarginTop); }\n  .pf-c-hint__actions + .pf-c-hint__body {\n    grid-column: 1; }\n\n.pf-c-hint__title {\n  font-size: var(--pf-c-hint__title--FontSize); }\n\n.pf-c-hint__body {\n  grid-column: 1 / -1;\n  font-size: var(--pf-c-hint__body--FontSize); }\n\n.pf-c-hint__footer {\n  grid-column: 1 / -1; }\n  .pf-c-hint__footer > :not(:last-child) {\n    margin-right: var(--pf-c-hint__footer--child--MarginRight); }\n\n.pf-c-inline-edit {\n  --pf-c-inline-edit__group--item--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-inline-edit__action--c-button--m-valid--m-plain--Color: var(--pf-global--link--Color);\n  --pf-c-inline-edit__action--c-button--m-valid--m-plain--hover--Color: var(--pf-global--link--Color--hover);\n  --pf-c-inline-edit__action--m-icon-group--item--MarginRight: 0;\n  --pf-c-inline-edit__group--m-footer--MarginTop: var(--pf-global--spacer--xl);\n  --pf-c-inline-edit__label--m-bold--FontWeight: var(--pf-global--FontWeight--semi-bold); }\n\n.pf-c-inline-edit__group {\n  display: flex;\n  align-items: baseline; }\n  .pf-c-inline-edit__group > * {\n    margin-right: var(--pf-c-inline-edit__group--item--MarginRight); }\n  .pf-c-inline-edit__group.pf-m-icon-group {\n    --pf-c-inline-edit__group--item--MarginRight: var(--pf-c-inline-edit__action--m-icon-group--item--MarginRight); }\n  .pf-c-inline-edit__group.pf-m-footer {\n    margin-top: var(--pf-c-inline-edit__group--m-footer--MarginTop); }\n  .pf-c-inline-edit__group.pf-m-column {\n    --pf-c-inline-edit__group--item--MarginRight: 0;\n    flex-direction: column; }\n  .pf-c-inline-edit__group > :last-child {\n    --pf-c-inline-edit__group--item--MarginRight: 0; }\n\n.pf-c-inline-edit__input {\n  flex: 1; }\n\n.pf-c-inline-edit__action.pf-m-valid .pf-c-button.pf-m-plain {\n  --pf-c-button--m-plain--Color: var(--pf-c-inline-edit__action--c-button--m-valid--m-plain--Color); }\n  .pf-c-inline-edit__action.pf-m-valid .pf-c-button.pf-m-plain:hover {\n    --pf-c-button--m-plain--Color: var(--pf-c-inline-edit__action--c-button--m-valid--m-plain--hover--Color); }\n\n.pf-c-inline-edit__input,\n.pf-c-inline-edit__action,\n.pf-c-inline-edit__group.pf-m-action-group {\n  display: none;\n  visibility: hidden; }\n\n.pf-c-inline-edit__action.pf-m-enable-editable {\n  display: inline-block;\n  visibility: visible; }\n\n.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__input,\n.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__action,\n.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__group.pf-m-action-group,\n.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__input,\n.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__action,\n.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__group.pf-m-action-group {\n  visibility: visible; }\n\n.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__input,\n.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__input {\n  display: block; }\n\n.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__action,\n.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__action {\n  display: inline-block; }\n\n.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__group.pf-m-action-group,\n.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__group.pf-m-action-group {\n  display: inline-flex; }\n\n.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__value,\n.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__action.pf-m-enable-editable,\n.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__value,\n.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__action.pf-m-enable-editable {\n  display: none;\n  visibility: hidden; }\n\n.pf-c-inline-edit__label + .pf-c-inline-edit__action.pf-m-enable > .pf-c-button {\n  margin-top: calc(var(--pf-c-button--PaddingTop) * -1);\n  margin-bottom: calc(var(--pf-c-button--PaddingBottom) * -1); }\n\n.pf-c-inline-edit__label.pf-m-bold {\n  font-weight: var(--pf-c-inline-edit__label--m-bold--FontWeight); }\n\n.pf-c-input-group {\n  --pf-c-input-group--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-input-group__text--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-input-group__text--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-input-group__text--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-input-group__text--Color: var(--pf-global--Color--dark-200);\n  --pf-c-input-group__text--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-input-group__text--BorderTopColor: var(--pf-global--BorderColor--300);\n  --pf-c-input-group__text--BorderRightColor: var(--pf-global--BorderColor--300);\n  --pf-c-input-group__text--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-input-group__text--BorderLeftColor: var(--pf-global--BorderColor--300);\n  --pf-c-input-group__text--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-input-group__textarea--MinHeight: var(--pf-global--spacer--xl);\n  --pf-c-input-group--c-form-control--invalid--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-input-group--c-form-control--MarginRight: 0;\n  color: var(--pf-global--Color--100);\n  display: flex;\n  width: 100%;\n  background-color: var(--pf-c-input-group--BackgroundColor); }\n  .pf-c-input-group > * + * {\n    margin-left: -1px; }\n  .pf-c-input-group .pf-c-form-control[aria-invalid="true"]:not(:last-child) {\n    margin-right: var(--pf-c-input-group--c-form-control--MarginRight); }\n  .pf-c-input-group input:not([type="checkbox"]):not([type="radio"]),\n  .pf-c-input-group textarea {\n    flex: 2;\n    min-width: 0; }\n  .pf-c-input-group textarea {\n    min-height: var(--pf-c-input-group__textarea--MinHeight); }\n\n.pf-c-input-group__text {\n  display: flex;\n  align-items: center;\n  padding-right: var(--pf-c-input-group__text--PaddingRight);\n  padding-left: var(--pf-c-input-group__text--PaddingLeft);\n  font-size: var(--pf-c-input-group__text--FontSize);\n  color: var(--pf-c-input-group__text--Color);\n  text-align: center;\n  background-color: var(--pf-c-input-group__text--BackgroundColor);\n  border: var(--pf-c-input-group__text--BorderWidth) solid;\n  border-color: var(--pf-c-input-group__text--BorderTopColor) var(--pf-c-input-group__text--BorderRightColor) var(--pf-c-input-group__text--BorderBottomColor) var(--pf-c-input-group__text--BorderLeftColor); }\n  label.pf-c-input-group__text {\n    cursor: pointer; }\n\n.pf-c-jump-links {\n  --pf-c-jump-links__list--PaddingTop: 0;\n  --pf-c-jump-links__list--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-jump-links__list--PaddingBottom: 0;\n  --pf-c-jump-links__list--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-jump-links--m-vertical__list--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-jump-links--m-vertical__list--PaddingRight: 0;\n  --pf-c-jump-links--m-vertical__list--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-jump-links--m-vertical__list--PaddingLeft: 0;\n  --pf-c-jump-links__list--FlexDirection: row;\n  --pf-c-jump-links--m-vertical__list--FlexDirection: column;\n  --pf-c-jump-links__list--before--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-jump-links__list--before--BorderTopWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-jump-links__list--before--BorderRightWidth: 0;\n  --pf-c-jump-links__list--before--BorderBottomWidth: 0;\n  --pf-c-jump-links__list--before--BorderLeftWidth: 0;\n  --pf-c-jump-links--m-vertical__list--before--BorderLeftWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-jump-links--m-vertical__list--before--BorderTopWidth: 0;\n  --pf-c-jump-links__list__list--MarginTop: calc(var(--pf-global--spacer--sm) * -1);\n  --pf-c-jump-links__link--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-jump-links__link--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-jump-links__link--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-jump-links__link--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-jump-links__list__list__link--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-jump-links__list__list__link--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-jump-links__list__list__link--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-jump-links__link--OutlineOffset: calc(-1 * var(--pf-global--spacer--sm));\n  --pf-c-jump-links__link--before--BorderTopWidth: 0;\n  --pf-c-jump-links__link--before--BorderRightWidth: 0;\n  --pf-c-jump-links__link--before--BorderBottomWidth: 0;\n  --pf-c-jump-links__link--before--BorderLeftWidth: 0;\n  --pf-c-jump-links__link--before--BorderColor: transparent;\n  --pf-c-jump-links__link--focus--before--BorderTopWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-jump-links__link--focus--before--BorderLeftWidth: 0;\n  --pf-c-jump-links__link--focus--before--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-jump-links__item--m-current__link--before--BorderTopWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-jump-links__item--m-current__link--before--BorderLeftWidth: 0;\n  --pf-c-jump-links__item--m-current__link--before--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-jump-links--m-vertical__link--focus--before--BorderTopWidth: 0;\n  --pf-c-jump-links--m-vertical__link--focus--before--BorderLeftWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-jump-links--m-vertical__item--m-current__link--before--BorderTopWidth: 0;\n  --pf-c-jump-links--m-vertical__item--m-current__link--before--BorderLeftWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-jump-links__link-text--Color: var(--pf-global--Color--200);\n  --pf-c-jump-links__link--hover__link-text--Color: var(--pf-global--Color--100);\n  --pf-c-jump-links__link--focus__link-text--Color: var(--pf-global--Color--100);\n  --pf-c-jump-links__item--m-current__link-text--Color: var(--pf-global--Color--100);\n  --pf-c-jump-links__label--MarginBottom: var(--pf-global--spacer--md);\n  display: flex; }\n  .pf-c-jump-links.pf-m-center {\n    justify-content: center; }\n    .pf-c-jump-links.pf-m-center .pf-c-jump-links__main {\n      align-items: center; }\n  .pf-c-jump-links.pf-m-vertical {\n    --pf-c-jump-links__list--PaddingTop: var(--pf-c-jump-links--m-vertical__list--PaddingTop);\n    --pf-c-jump-links__list--PaddingRight: var(--pf-c-jump-links--m-vertical__list--PaddingRight);\n    --pf-c-jump-links__list--PaddingBottom: var(--pf-c-jump-links--m-vertical__list--PaddingBottom);\n    --pf-c-jump-links__list--PaddingLeft: var(--pf-c-jump-links--m-vertical__list--PaddingLeft);\n    --pf-c-jump-links__list--before--BorderTopWidth: var(--pf-c-jump-links--m-vertical__list--before--BorderTopWidth);\n    --pf-c-jump-links__list--before--BorderLeftWidth: var(--pf-c-jump-links--m-vertical__list--before--BorderLeftWidth);\n    --pf-c-jump-links__link--focus--before--BorderTopWidth: var(--pf-c-jump-links--m-vertical__link--focus--before--BorderTopWidth);\n    --pf-c-jump-links__link--focus--before--BorderLeftWidth: var(--pf-c-jump-links--m-vertical__link--focus--before--BorderLeftWidth);\n    --pf-c-jump-links__item--m-current__link--before--BorderTopWidth: var(--pf-c-jump-links--m-vertical__item--m-current__link--before--BorderTopWidth);\n    --pf-c-jump-links__item--m-current__link--before--BorderLeftWidth: var(--pf-c-jump-links--m-vertical__item--m-current__link--before--BorderLeftWidth);\n    --pf-c-jump-links__list--FlexDirection: var(--pf-c-jump-links--m-vertical__list--FlexDirection);\n    flex-direction: column; }\n\n.pf-c-jump-links__list {\n  position: relative;\n  display: flex;\n  flex-direction: var(--pf-c-jump-links__list--FlexDirection);\n  padding-top: var(--pf-c-jump-links__list--PaddingTop);\n  padding-right: var(--pf-c-jump-links__list--PaddingRight);\n  padding-bottom: var(--pf-c-jump-links__list--PaddingBottom);\n  padding-left: var(--pf-c-jump-links__list--PaddingLeft); }\n  .pf-c-jump-links__list::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    pointer-events: none;\n    content: "";\n    border: solid var(--pf-c-jump-links__list--before--BorderColor);\n    border-width: var(--pf-c-jump-links__list--before--BorderTopWidth) var(--pf-c-jump-links__list--before--BorderRightWidth) var(--pf-c-jump-links__list--before--BorderBottomWidth) var(--pf-c-jump-links__list--before--BorderLeftWidth); }\n  .pf-c-jump-links__list .pf-c-jump-links__list {\n    --pf-c-jump-links__list--PaddingTop: 0;\n    --pf-c-jump-links__list--PaddingBottom: 0;\n    --pf-c-jump-links__link--PaddingTop: var(--pf-c-jump-links__list__list__link--PaddingTop);\n    --pf-c-jump-links__link--PaddingBottom: var(--pf-c-jump-links__list__list__link--PaddingBottom);\n    --pf-c-jump-links__link--PaddingLeft: var(--pf-c-jump-links__list__list__link--PaddingLeft);\n    margin-top: var(--pf-c-jump-links__list__list--MarginTop); }\n\n.pf-c-jump-links__link {\n  position: relative;\n  display: flex;\n  flex: 1;\n  padding-top: var(--pf-c-jump-links__link--PaddingTop);\n  padding-right: var(--pf-c-jump-links__link--PaddingRight);\n  padding-bottom: var(--pf-c-jump-links__link--PaddingBottom);\n  padding-left: var(--pf-c-jump-links__link--PaddingLeft);\n  text-decoration: none;\n  outline-offset: var(--pf-c-jump-links__link--OutlineOffset); }\n  .pf-c-jump-links__link:hover {\n    --pf-c-jump-links__link-text--Color: var(--pf-c-jump-links__link--hover__link-text--Color); }\n  .pf-c-jump-links__link:focus {\n    --pf-c-jump-links__link-text--Color: var(--pf-c-jump-links__link--focus__link-text--Color);\n    --pf-c-jump-links__link--before--BorderTopWidth: var(--pf-c-jump-links__link--focus--before--BorderTopWidth);\n    --pf-c-jump-links__link--before--BorderLeftWidth: var(--pf-c-jump-links__link--focus--before--BorderLeftWidth);\n    --pf-c-jump-links__link--before--BorderColor: var(--pf-c-jump-links__link--focus--before--BorderColor); }\n  .pf-c-jump-links__link::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    pointer-events: none;\n    content: "";\n    border-color: var(--pf-c-jump-links__link--before--BorderColor);\n    border-style: solid;\n    border-width: var(--pf-c-jump-links__link--before--BorderTopWidth) var(--pf-c-jump-links__link--before--BorderRightWidth) var(--pf-c-jump-links__link--before--BorderBottomWidth) var(--pf-c-jump-links__link--before--BorderLeftWidth); }\n\n.pf-c-jump-links__item.pf-m-current {\n  --pf-c-jump-links__link--before--BorderTopWidth: var(--pf-c-jump-links__item--m-current__link--before--BorderTopWidth);\n  --pf-c-jump-links__link--before--BorderLeftWidth: var(--pf-c-jump-links__item--m-current__link--before--BorderLeftWidth);\n  --pf-c-jump-links__link--before--BorderColor: var(--pf-c-jump-links__item--m-current__link--before--BorderColor);\n  --pf-c-jump-links__link-text--Color: var(--pf-c-jump-links__item--m-current__link-text--Color); }\n\n.pf-c-jump-links__link-text {\n  color: var(--pf-c-jump-links__link-text--Color); }\n\n.pf-c-jump-links__label {\n  margin-bottom: var(--pf-c-jump-links__label--MarginBottom); }\n\n.pf-c-jump-links__main {\n  display: flex;\n  flex-direction: column; }\n\n.pf-c-label {\n  --pf-c-label--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-label--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-label--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-label--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-label--BorderRadius: var(--pf-global--BorderRadius--lg);\n  --pf-c-label--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-label--Color: var(--pf-global--Color--100);\n  --pf-c-label--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-label__content--before--BorderWidth: 0;\n  --pf-c-label__content--before--BorderColor: transparent;\n  --pf-c-label--m-outline--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-label--m-outline__content--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-label--m-outline__content--before--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-label__content--link--hover--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-label__content--link--focus--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-label__content--link--hover--before--BorderColor: var(--pf-global--BorderColor--200);\n  --pf-c-label__content--link--focus--before--BorderColor: var(--pf-global--BorderColor--200);\n  --pf-c-label--m-outline__content--link--hover--before--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-label--m-outline__content--link--focus--before--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-label--m-outline__content--link--hover--before--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-label--m-outline__content--link--focus--before--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-label--m-blue--BackgroundColor: var(--pf-global--palette--blue-50);\n  --pf-c-label--m-blue__content--Color: var(--pf-global--info-color--200);\n  --pf-c-label--m-blue__icon--Color: var(--pf-global--primary-color--100);\n  --pf-c-label--m-blue__content--link--hover--before--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-label--m-blue__content--link--focus--before--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-label--m-outline--m-blue__content--before--BorderColor: var(--pf-global--active-color--200);\n  --pf-c-label--m-outline--m-blue__content--link--hover--before--BorderColor: var(--pf-global--active-color--200);\n  --pf-c-label--m-outline--m-blue__content--link--focus--before--BorderColor: var(--pf-global--active-color--200);\n  --pf-c-label--m-green--BackgroundColor: var(--pf-global--palette--green-50);\n  --pf-c-label--m-green__content--Color: var(--pf-global--success-color--200);\n  --pf-c-label--m-green__icon--Color: var(--pf-global--success-color--100);\n  --pf-c-label--m-green__content--link--hover--before--BorderColor: var(--pf-global--success-color--100);\n  --pf-c-label--m-green__content--link--focus--before--BorderColor: var(--pf-global--success-color--100);\n  --pf-c-label--m-outline--m-green__content--before--BorderColor: var(--pf-global--palette--green-100);\n  --pf-c-label--m-outline--m-green__content--link--hover--before--BorderColor: var(--pf-global--palette--green-100);\n  --pf-c-label--m-outline--m-green__content--link--focus--before--BorderColor: var(--pf-global--palette--green-100);\n  --pf-c-label--m-orange--BackgroundColor: var(--pf-global--palette--gold-50);\n  --pf-c-label--m-orange__content--Color: var(--pf-global--palette--gold-700);\n  --pf-c-label--m-orange__icon--Color: var(--pf-global--palette--orange-300);\n  --pf-c-label--m-orange__content--link--hover--before--BorderColor: var(--pf-global--palette--orange-300);\n  --pf-c-label--m-orange__content--link--focus--before--BorderColor: var(--pf-global--palette--orange-300);\n  --pf-c-label--m-outline--m-orange__content--before--BorderColor: var(--pf-global--palette--gold-100);\n  --pf-c-label--m-outline--m-orange__content--link--hover--before--BorderColor: var(--pf-global--palette--gold-100);\n  --pf-c-label--m-outline--m-orange__content--link--focus--before--BorderColor: var(--pf-global--palette--gold-100);\n  --pf-c-label--m-red--BackgroundColor: var(--pf-global--palette--red-50);\n  --pf-c-label--m-red__content--Color: var(--pf-global--palette--red-300);\n  --pf-c-label--m-red__icon--Color: var(--pf-global--danger-color--100);\n  --pf-c-label--m-red__content--link--hover--before--BorderColor: var(--pf-global--danger-color--100);\n  --pf-c-label--m-red__content--link--focus--before--BorderColor: var(--pf-global--danger-color--100);\n  --pf-c-label--m-outline--m-red__content--before--BorderColor: var(--pf-global--danger-color--100);\n  --pf-c-label--m-outline--m-red__content--link--hover--before--BorderColor: var(--pf-global--danger-color--100);\n  --pf-c-label--m-outline--m-red__content--link--focus--before--BorderColor: var(--pf-global--danger-color--100);\n  --pf-c-label--m-purple--BackgroundColor: var(--pf-global--palette--purple-50);\n  --pf-c-label--m-purple__content--Color: var(--pf-global--palette--purple-700);\n  --pf-c-label--m-purple__icon--Color: var(--pf-global--palette--purple-500);\n  --pf-c-label--m-purple__content--link--hover--before--BorderColor: var(--pf-global--palette--purple-500);\n  --pf-c-label--m-purple__content--link--focus--before--BorderColor: var(--pf-global--palette--purple-500);\n  --pf-c-label--m-outline--m-purple__content--before--BorderColor: var(--pf-global--palette--purple-100);\n  --pf-c-label--m-outline--m-purple__content--link--hover--before--BorderColor: var(--pf-global--palette--purple-100);\n  --pf-c-label--m-outline--m-purple__content--link--focus--before--BorderColor: var(--pf-global--palette--purple-100);\n  --pf-c-label--m-cyan--BackgroundColor: var(--pf-global--palette--cyan-50);\n  --pf-c-label--m-cyan__content--Color: var(--pf-global--default-color--300);\n  --pf-c-label--m-cyan__icon--Color: var(--pf-global--default-color--200);\n  --pf-c-label--m-cyan__content--link--hover--before--BorderColor: var(--pf-global--default-color--200);\n  --pf-c-label--m-cyan__content--link--focus--before--BorderColor: var(--pf-global--default-color--200);\n  --pf-c-label--m-outline--m-cyan__content--before--BorderColor: var(--pf-global--palette--cyan-100);\n  --pf-c-label--m-outline--m-cyan__content--link--hover--before--BorderColor: var(--pf-global--palette--cyan-100);\n  --pf-c-label--m-outline--m-cyan__content--link--focus--before--BorderColor: var(--pf-global--palette--cyan-100);\n  --pf-c-label--m-overflow__content--Color: var(--pf-global--link--Color);\n  --pf-c-label--m-overflow__content--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-label--m-overflow__content--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-label--m-overflow__content--before--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-label--m-overflow__content--link--hover--before--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-label--m-overflow__content--link--hover--before--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-label--m-overflow__content--link--focus--before--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-label--m-overflow__content--link--focus--before--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-label__content--Color: var(--pf-global--Color--100);\n  --pf-c-label__text--MaxWidth: 16ch;\n  --pf-c-label__icon--Color: var(--pf-global--Color--100);\n  --pf-c-label__icon--MarginRight: var(--pf-global--spacer--xs);\n  --pf-c-label__c-button--FontSize: var(--pf-global--FontSize--xs);\n  --pf-c-label__c-button--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-label__c-button--MarginRight: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-label__c-button--MarginBottom: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-label__c-button--MarginLeft: var(--pf-global--spacer--xs);\n  --pf-c-label__c-button--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-label__c-button--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-label__c-button--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-label__c-button--PaddingLeft: var(--pf-global--spacer--sm);\n  position: relative;\n  padding: var(--pf-c-label--PaddingTop) var(--pf-c-label--PaddingRight) var(--pf-c-label--PaddingBottom) var(--pf-c-label--PaddingLeft);\n  font-size: var(--pf-c-label--FontSize);\n  color: var(--pf-c-label--Color);\n  white-space: nowrap;\n  background-color: var(--pf-c-label--BackgroundColor);\n  border: 0;\n  border-radius: var(--pf-c-label--BorderRadius); }\n  .pf-c-label.pf-m-blue {\n    --pf-c-label--BackgroundColor: var(--pf-c-label--m-blue--BackgroundColor);\n    --pf-c-label__content--Color: var(--pf-c-label--m-blue__content--Color);\n    --pf-c-label__icon--Color: var(--pf-c-label--m-blue__icon--Color);\n    --pf-c-label--m-outline__content--before--BorderColor: var(--pf-c-label--m-outline--m-blue__content--before--BorderColor);\n    --pf-c-label__content--link--hover--before--BorderColor: var(--pf-c-label--m-blue__content--link--hover--before--BorderColor);\n    --pf-c-label__content--link--focus--before--BorderColor: var(--pf-c-label--m-blue__content--link--focus--before--BorderColor);\n    --pf-c-label--m-outline__content--link--hover--before--BorderColor: var(--pf-c-label--m-outline--m-blue__content--link--hover--before--BorderColor);\n    --pf-c-label--m-outline__content--link--focus--before--BorderColor: var(--pf-c-label--m-outline--m-blue__content--link--focus--before--BorderColor); }\n  .pf-c-label.pf-m-green {\n    --pf-c-label--BackgroundColor: var(--pf-c-label--m-green--BackgroundColor);\n    --pf-c-label__content--Color: var(--pf-c-label--m-green__content--Color);\n    --pf-c-label__icon--Color: var(--pf-c-label--m-green__icon--Color);\n    --pf-c-label--m-outline__content--before--BorderColor: var(--pf-c-label--m-outline--m-green__content--before--BorderColor);\n    --pf-c-label__content--link--hover--before--BorderColor: var(--pf-c-label--m-green__content--link--hover--before--BorderColor);\n    --pf-c-label__content--link--focus--before--BorderColor: var(--pf-c-label--m-green__content--link--focus--before--BorderColor);\n    --pf-c-label--m-outline__content--link--hover--before--BorderColor: var(--pf-c-label--m-outline--m-green__content--link--hover--before--BorderColor);\n    --pf-c-label--m-outline__content--link--focus--before--BorderColor: var(--pf-c-label--m-outline--m-green__content--link--focus--before--BorderColor); }\n  .pf-c-label.pf-m-orange {\n    --pf-c-label--BackgroundColor: var(--pf-c-label--m-orange--BackgroundColor);\n    --pf-c-label__content--Color: var(--pf-c-label--m-orange__content--Color);\n    --pf-c-label__icon--Color: var(--pf-c-label--m-orange__icon--Color);\n    --pf-c-label--m-outline__content--before--BorderColor: var(--pf-c-label--m-outline--m-orange__content--before--BorderColor);\n    --pf-c-label__content--link--hover--before--BorderColor: var(--pf-c-label--m-orange__content--link--hover--before--BorderColor);\n    --pf-c-label__content--link--focus--before--BorderColor: var(--pf-c-label--m-orange__content--link--focus--before--BorderColor);\n    --pf-c-label--m-outline__content--link--hover--before--BorderColor: var(--pf-c-label--m-outline--m-orange__content--link--hover--before--BorderColor);\n    --pf-c-label--m-outline__content--link--focus--before--BorderColor: var(--pf-c-label--m-outline--m-orange__content--link--focus--before--BorderColor); }\n  .pf-c-label.pf-m-red {\n    --pf-c-label--BackgroundColor: var(--pf-c-label--m-red--BackgroundColor);\n    --pf-c-label__content--Color: var(--pf-c-label--m-red__content--Color);\n    --pf-c-label__icon--Color: var(--pf-c-label--m-red__icon--Color);\n    --pf-c-label--m-outline__content--before--BorderColor: var(--pf-c-label--m-outline--m-red__content--before--BorderColor);\n    --pf-c-label__content--link--hover--before--BorderColor: var(--pf-c-label--m-red__content--link--hover--before--BorderColor);\n    --pf-c-label__content--link--focus--before--BorderColor: var(--pf-c-label--m-red__content--link--focus--before--BorderColor);\n    --pf-c-label--m-outline__content--link--hover--before--BorderColor: var(--pf-c-label--m-outline--m-red__content--link--hover--before--BorderColor);\n    --pf-c-label--m-outline__content--link--focus--before--BorderColor: var(--pf-c-label--m-outline--m-red__content--link--focus--before--BorderColor); }\n  .pf-c-label.pf-m-purple {\n    --pf-c-label--BackgroundColor: var(--pf-c-label--m-purple--BackgroundColor);\n    --pf-c-label__content--Color: var(--pf-c-label--m-purple__content--Color);\n    --pf-c-label__icon--Color: var(--pf-c-label--m-purple__icon--Color);\n    --pf-c-label--m-outline__content--before--BorderColor: var(--pf-c-label--m-outline--m-purple__content--before--BorderColor);\n    --pf-c-label__content--link--hover--before--BorderColor: var(--pf-c-label--m-purple__content--link--hover--before--BorderColor);\n    --pf-c-label__content--link--focus--before--BorderColor: var(--pf-c-label--m-purple__content--link--focus--before--BorderColor);\n    --pf-c-label--m-outline__content--link--hover--before--BorderColor: var(--pf-c-label--m-outline--m-purple__content--link--hover--before--BorderColor);\n    --pf-c-label--m-outline__content--link--focus--before--BorderColor: var(--pf-c-label--m-outline--m-purple__content--link--focus--before--BorderColor); }\n  .pf-c-label.pf-m-cyan {\n    --pf-c-label--BackgroundColor: var(--pf-c-label--m-cyan--BackgroundColor);\n    --pf-c-label__content--Color: var(--pf-c-label--m-cyan__content--Color);\n    --pf-c-label__icon--Color: var(--pf-c-label--m-cyan__icon--Color);\n    --pf-c-label--m-outline__content--before--BorderColor: var(--pf-c-label--m-outline--m-cyan__content--before--BorderColor);\n    --pf-c-label__content--link--hover--before--BorderColor: var(--pf-c-label--m-cyan__content--link--hover--before--BorderColor);\n    --pf-c-label__content--link--focus--before--BorderColor: var(--pf-c-label--m-cyan__content--link--focus--before--BorderColor);\n    --pf-c-label--m-outline__content--link--hover--before--BorderColor: var(--pf-c-label--m-outline--m-cyan__content--link--hover--before--BorderColor);\n    --pf-c-label--m-outline__content--link--focus--before--BorderColor: var(--pf-c-label--m-outline--m-cyan__content--link--focus--before--BorderColor); }\n  .pf-c-label.pf-m-outline {\n    --pf-c-label__content--before--BorderWidth: var(--pf-c-label--m-outline__content--before--BorderWidth);\n    --pf-c-label__content--before--BorderColor: var(--pf-c-label--m-outline__content--before--BorderColor);\n    --pf-c-label--BackgroundColor: var(--pf-c-label--m-outline--BackgroundColor); }\n    .pf-c-label.pf-m-overflow:hover, .pf-c-label.pf-m-outline a.pf-c-label__content:hover,\n    .pf-c-label.pf-m-outline button.pf-c-label__content:hover {\n      --pf-c-label__content--before--BorderWidth: var(--pf-c-label--m-outline__content--link--hover--before--BorderWidth);\n      --pf-c-label__content--before--BorderColor: var(--pf-c-label--m-outline__content--link--hover--before--BorderColor); }\n    .pf-c-label.pf-m-overflow:focus, .pf-c-label.pf-m-outline a.pf-c-label__content:focus,\n    .pf-c-label.pf-m-outline button.pf-c-label__content:focus {\n      --pf-c-label__content--before--BorderWidth: var(--pf-c-label--m-outline__content--link--focus--before--BorderWidth);\n      --pf-c-label__content--before--BorderColor: var(--pf-c-label--m-outline__content--link--focus--before--BorderColor); }\n  .pf-c-label .pf-c-button {\n    --pf-c-button--FontSize: var(--pf-c-label__c-button--FontSize);\n    --pf-c-button--PaddingTop: var(--pf-c-label__c-button--PaddingTop);\n    --pf-c-button--PaddingRight: var(--pf-c-label__c-button--PaddingRight);\n    --pf-c-button--PaddingBottom: var(--pf-c-label__c-button--PaddingBottom);\n    --pf-c-button--PaddingLeft: var(--pf-c-label__c-button--PaddingLeft);\n    margin-top: var(--pf-c-label__c-button--MarginTop);\n    margin-right: var(--pf-c-label__c-button--MarginRight);\n    margin-bottom: var(--pf-c-label__c-button--MarginBottom);\n    margin-left: var(--pf-c-label__c-button--MarginLeft); }\n  .pf-c-label.pf-m-overflow {\n    --pf-c-label__content--Color: var(--pf-c-label--m-overflow__content--Color);\n    --pf-c-label--BackgroundColor: var(--pf-c-label--m-overflow__content--BackgroundColor);\n    --pf-c-label__content--before--BorderWidth: var(--pf-c-label--m-overflow__content--before--BorderWidth);\n    --pf-c-label__content--before--BorderColor: var(--pf-c-label--m-overflow__content--before--BorderColor);\n    --pf-c-label__content--link--hover--before--BorderWidth: var(--pf-c-label--m-overflow__content--link--hover--before--BorderWidth);\n    --pf-c-label__content--link--hover--before--BorderColor: var(--pf-c-label--m-overflow__content--link--hover--before--BorderColor);\n    --pf-c-label__content--link--focus--before--BorderWidth: var(--pf-c-label--m-overflow__content--link--focus--before--BorderWidth);\n    --pf-c-label__content--link--focus--before--BorderColor: var(--pf-c-label--m-overflow__content--link--focus--before--BorderColor); }\n\n.pf-c-label,\n.pf-c-label__content {\n  display: inline-flex;\n  align-items: center; }\n\n.pf-c-label__text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  max-width: var(--pf-c-label__text--MaxWidth); }\n\n.pf-c-label__content {\n  color: var(--pf-c-label__content--Color);\n  border: 0; }\n  .pf-c-label__content::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    border: var(--pf-c-label__content--before--BorderWidth) solid var(--pf-c-label__content--before--BorderColor);\n    border-radius: var(--pf-c-label--BorderRadius); }\n  a.pf-c-label__content,\n  button.pf-c-label__content {\n    cursor: pointer;\n    border: none; }\n    a.pf-c-label__content, a.pf-c-label__content:hover, a.pf-c-label__content:focus,\n    button.pf-c-label__content,\n    button.pf-c-label__content:hover,\n    button.pf-c-label__content:focus {\n      text-decoration: none; }\n    a.pf-c-label__content:hover,\n    button.pf-c-label__content:hover {\n      --pf-c-label__content--before--BorderWidth: var(--pf-c-label__content--link--hover--before--BorderWidth);\n      --pf-c-label__content--before--BorderColor: var(--pf-c-label__content--link--hover--before--BorderColor); }\n    a.pf-c-label__content:focus,\n    button.pf-c-label__content:focus {\n      --pf-c-label__content--before--BorderWidth: var(--pf-c-label__content--link--focus--before--BorderWidth);\n      --pf-c-label__content--before--BorderColor: var(--pf-c-label__content--link--focus--before--BorderColor); }\n\n.pf-c-label__icon {\n  margin-right: var(--pf-c-label__icon--MarginRight);\n  color: var(--pf-c-label__icon--Color); }\n\n.pf-c-label-group {\n  --pf-c-label-group__list--MarginBottom: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-label-group__list--MarginRight: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-label-group--m-category--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-label-group--m-category--PaddingRight: var(--pf-global--spacer--xs);\n  --pf-c-label-group--m-category--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-label-group--m-category--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-label-group--m-vertical--m-category--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-label-group--m-category--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-label-group--m-category--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-label-group--m-category--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-label-group--m-category--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-label-group__label--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-label-group__label--MarginBottom: 0;\n  --pf-c-label-group--m-vertical__label--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-label-group__label--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-label-group__label--MaxWidth: 18ch;\n  --pf-c-label-group__close--MarginTop: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-label-group__close--MarginBottom: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-label-group--m-vertical__close--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-label-group--m-vertical__close--MarginRight: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-label-group--m-vertical__close--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-label-group--m-vertical__close--c-button--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-label-group--m-vertical__close--c-button--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-label-group__list-item--MarginRight: var(--pf-global--spacer--xs);\n  --pf-c-label-group__list-item--MarginBottom: var(--pf-global--spacer--xs);\n  display: inline-flex; }\n  .pf-c-label-group.pf-m-category {\n    padding-top: var(--pf-c-label-group--m-category--PaddingTop);\n    padding-right: var(--pf-c-label-group--m-category--PaddingRight);\n    padding-bottom: var(--pf-c-label-group--m-category--PaddingBottom);\n    padding-left: var(--pf-c-label-group--m-category--PaddingLeft);\n    background-color: var(--pf-c-label-group--m-category--BackgroundColor);\n    border: var(--pf-c-label-group--m-category--BorderWidth) solid var(--pf-c-label-group--m-category--BorderColor);\n    border-radius: var(--pf-c-label-group--m-category--BorderRadius); }\n  .pf-c-label-group.pf-m-vertical {\n    --pf-c-label-group__list--MarginRight: 0;\n    --pf-c-label-group__list--MarginBottom: 0;\n    --pf-c-label-group__list-item--MarginRight: 0;\n    --pf-c-label-group__label--MarginRight: 0;\n    --pf-c-label-group__label--MarginBottom: var(--pf-c-label-group--m-vertical__label--MarginBottom);\n    --pf-c-label-group__close--MarginTop: var(--pf-c-label-group--m-vertical__close--MarginTop);\n    --pf-c-label-group__close--MarginLeft: var(--pf-c-label-group--m-vertical__close--MarginLeft);\n    --pf-c-label-group__close--MarginBottom: 0;\n    --pf-c-label-group__close--MarginRight: var(--pf-c-label-group--m-vertical__close--MarginRight);\n    --pf-c-label-group--m-category--PaddingRight: var(--pf-c-label-group--m-vertical--m-category--PaddingRight); }\n    .pf-c-label-group.pf-m-vertical.pf-c-label-group {\n      align-items: flex-start; }\n    .pf-c-label-group.pf-m-vertical .pf-c-label-group__list {\n      flex-direction: column;\n      align-items: flex-start; }\n    .pf-c-label-group.pf-m-vertical .pf-c-label-group__main {\n      flex-direction: column; }\n    .pf-c-label-group.pf-m-vertical .pf-c-label-group__list-item:last-child {\n      --pf-c-label-group__list-item--MarginBottom: 0; }\n    .pf-c-label-group.pf-m-vertical .pf-c-label-group__close .pf-c-button {\n      --pf-c-button--PaddingLeft: var(--pf-c-label-group--m-vertical__close--c-button--PaddingLeft);\n      --pf-c-button--PaddingRight: var(--pf-c-label-group--m-vertical__close--c-button--PaddingRight); }\n\n.pf-c-label-group__main {\n  display: flex;\n  flex: 1;\n  flex-wrap: wrap;\n  align-items: baseline; }\n\n.pf-c-label-group__list {\n  display: inline-flex;\n  flex-wrap: wrap;\n  margin-right: var(--pf-c-label-group__list--MarginRight);\n  margin-bottom: var(--pf-c-label-group__list--MarginBottom); }\n\n.pf-c-label-group__list-item {\n  display: inline-flex;\n  margin-right: var(--pf-c-label-group__list-item--MarginRight);\n  margin-bottom: var(--pf-c-label-group__list-item--MarginBottom); }\n\n.pf-c-label-group__label {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  max-width: var(--pf-c-label-group__label--MaxWidth);\n  margin-right: var(--pf-c-label-group__label--MarginRight);\n  margin-bottom: var(--pf-c-label-group__label--MarginBottom);\n  font-size: var(--pf-c-label-group__label--FontSize); }\n\n.pf-c-label-group__close {\n  margin-top: var(--pf-c-label-group__close--MarginTop);\n  margin-right: var(--pf-c-label-group__close--MarginRight);\n  margin-bottom: var(--pf-c-label-group__close--MarginBottom);\n  margin-left: var(--pf-c-label-group__close--MarginLeft); }\n\n.pf-c-list {\n  --pf-c-list--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-list--nested--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-list--nested--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-list--ul--ListStyle: var(--pf-global--ListStyle);\n  --pf-c-list--li--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-list--m-inline--li--MarginRight: var(--pf-global--spacer--lg);\n  padding-left: var(--pf-c-list--PaddingLeft); }\n  .pf-c-list ol,\n  .pf-c-list ul {\n    margin-top: var(--pf-c-list--nested--MarginTop);\n    margin-left: var(--pf-c-list--nested--MarginLeft); }\n  .pf-c-list li + li {\n    margin-top: var(--pf-c-list--li--MarginTop); }\n  ul.pf-c-list:not(.pf-m-inline) {\n    list-style: var(--pf-c-list--ul--ListStyle); }\n  .pf-c-list.pf-m-inline {\n    --pf-c-list--PaddingLeft: 0;\n    display: flex;\n    flex-wrap: wrap; }\n    .pf-c-list.pf-m-inline li {\n      --pf-c-list--li--MarginTop: 0; }\n      .pf-c-list.pf-m-inline li:not(:last-child) {\n        margin-right: var(--pf-c-list--m-inline--li--MarginRight); }\n\n.pf-c-login {\n  --pf-c-login--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-login--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-login--xl--BackgroundImage: none;\n  --pf-c-login__container--xl--GridColumnGap: var(--pf-global--spacer--3xl);\n  --pf-c-login__container--MaxWidth: 31.25rem;\n  --pf-c-login__container--xl--MaxWidth: none;\n  --pf-c-login__container--PaddingLeft: 6.125rem;\n  --pf-c-login__container--PaddingRight: 6.125rem;\n  --pf-c-login__container--xl--GridTemplateColumns: 34rem minmax(auto, 34rem);\n  --pf-c-login__header--MarginBottom: var(--pf-global--spacer--md);\n  --pf-c-login__header--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-login__header--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-login__header--xl--MarginBottom: var(--pf-global--spacer--2xl);\n  --pf-c-login__header--xl--MarginTop: var(--pf-global--spacer--3xl);\n  --pf-c-login__header--c-brand--MarginBottom: var(--pf-global--spacer--lg);\n  --pf-c-login__header--c-brand--xl--MarginBottom: var(--pf-global--spacer--2xl);\n  --pf-c-login__main--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-login__main--MarginBottom: var(--pf-global--spacer--lg);\n  --pf-c-login__main-header--PaddingTop: var(--pf-global--spacer--2xl);\n  --pf-c-login__main-header--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-login__main-header--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-login__main-header--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-login__main-header--md--PaddingRight: var(--pf-global--spacer--2xl);\n  --pf-c-login__main-header--md--PaddingLeft: var(--pf-global--spacer--2xl);\n  --pf-c-login__main-header--ColumnGap: var(--pf-global--spacer--md);\n  --pf-c-login__main-header--RowGap: var(--pf-global--spacer--md);\n  --pf-c-login__main-header-desc--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-login__main-header-desc--md--MarginBottom: 0;\n  --pf-c-login__main-header-desc--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-login__main-body--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-login__main-body--PaddingBottom: var(--pf-global--spacer--xl);\n  --pf-c-login__main-body--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-login__main-body--md--PaddingRight: var(--pf-global--spacer--2xl);\n  --pf-c-login__main-body--md--PaddingLeft: var(--pf-global--spacer--2xl);\n  --pf-c-login__main-footer--PaddingBottom: var(--pf-global--spacer--3xl);\n  --pf-c-login__main-footer--c-title--MarginBottom: var(--pf-global--spacer--md);\n  --pf-c-login__main-footer-links--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-login__main-footer-links--PaddingRight: var(--pf-global--spacer--3xl);\n  --pf-c-login__main-footer-links--PaddingBottom: var(--pf-global--spacer--xl);\n  --pf-c-login__main-footer-links--PaddingLeft: var(--pf-global--spacer--3xl);\n  --pf-c-login__main-footer-links-item--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-login__main-footer-links-item--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-login__main-footer-links-item--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-login__main-footer-links-item-link-svg--Fill: var(--pf-global--icon--Color--light);\n  --pf-c-login__main-footer-links-item-link-svg--Width: var(--pf-global--icon--FontSize--lg);\n  --pf-c-login__main-footer-links-item-link-svg--Height: var(--pf-global--icon--FontSize--lg);\n  --pf-c-login__main-footer-links-item-link-svg--hover--Fill: var(--pf-global--icon--Color--dark);\n  --pf-c-login__main-footer-band--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-login__main-footer-band--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-login__main-footer-band--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-login__main-footer-band--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-login__main-footer-band--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-login__main-footer-band-item--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-login__footer--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-login__footer--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-login__footer--c-list--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-login__footer--c-list--xl--PaddingTop: var(--pf-global--spacer--2xl);\n  display: flex;\n  justify-content: center;\n  min-height: 100vh;\n  padding-top: var(--pf-c-login--PaddingTop);\n  padding-bottom: var(--pf-c-login--PaddingBottom); }\n  @media (min-width: 1200px) {\n    .pf-c-login {\n      --pf-c-login__container--MaxWidth: var(--pf-c-login__container--xl--MaxWidth); } }\n  @media (min-width: 576px) {\n    .pf-c-login {\n      --pf-c-login__header--PaddingRight: 0;\n      --pf-c-login__header--PaddingLeft: 0; } }\n  @media (min-width: 1200px) {\n    .pf-c-login {\n      --pf-c-login__header--MarginBottom: var(--pf-c-login__header--xl--MarginBottom);\n      --pf-c-login__header--c-brand--MarginBottom: var(--pf-c-login__header--c-brand--xl--MarginBottom); } }\n  @media (min-width: 1200px) {\n    .pf-c-login {\n      --pf-c-login__main--MarginBottom: 0; } }\n  @media (min-width: 768px) {\n    .pf-c-login {\n      --pf-c-login__main-header--PaddingRight: var(--pf-c-login__main-header--md--PaddingRight);\n      --pf-c-login__main-header--PaddingLeft: var(--pf-c-login__main-header--md--PaddingLeft);\n      --pf-c-login__main-header-desc--MarginBottom: var(--pf-c-login__main-header-desc--md--MarginBottom); } }\n  @media (min-width: 768px) {\n    .pf-c-login {\n      --pf-c-login__main-body--PaddingRight: var(--pf-c-login__main-body--md--PaddingRight);\n      --pf-c-login__main-body--PaddingLeft: var(--pf-c-login__main-body--md--PaddingLeft); } }\n  @media (min-width: 576px) {\n    .pf-c-login {\n      --pf-c-login__footer--PaddingRight: 0;\n      --pf-c-login__footer--PaddingLeft: 0; } }\n  @media (min-width: 1200px) {\n    .pf-c-login {\n      --pf-c-login__footer--c-list--PaddingTop: var(--pf-c-login__footer--c-list--xl--PaddingTop); } }\n  @media (min-width: 1200px) {\n    .pf-c-login {\n      background-image: var(--pf-c-login--xl--BackgroundImage); } }\n  @media (min-width: 576px) {\n    .pf-c-login {\n      align-items: center; } }\n\n.pf-c-login__container {\n  width: 100%;\n  max-width: var(--pf-c-login__container--MaxWidth); }\n  @media (min-width: 1200px) {\n    .pf-c-login__container {\n      display: grid;\n      justify-content: center;\n      grid-column-gap: var(--pf-c-login__container--xl--GridColumnGap);\n      grid-template-columns: var(--pf-c-login__container--xl--GridTemplateColumns);\n      grid-template-areas: "main header" "main footer" "main .";\n      padding-right: var(--pf-c-login__container--PaddingRight);\n      padding-left: var(--pf-c-login__container--PaddingLeft); } }\n\n.pf-c-login__header {\n  color: var(--pf-global--Color--100);\n  grid-area: header;\n  padding-right: var(--pf-c-login__header--PaddingRight);\n  padding-left: var(--pf-c-login__header--PaddingLeft); }\n  @media (min-width: 1200px) {\n    .pf-c-login__header {\n      margin-top: var(--pf-c-login__header--xl--MarginTop); } }\n  .pf-c-login__header .pf-c-brand {\n    margin-bottom: var(--pf-c-login__header--c-brand--MarginBottom); }\n\n.pf-c-login__main {\n  margin-bottom: var(--pf-c-login__main--MarginBottom);\n  background-color: var(--pf-c-login__main--BackgroundColor);\n  grid-area: main; }\n  .pf-c-login__main > :first-child:not(.pf-c-login__main-header) {\n    padding-top: var(--pf-c-login__main-header--PaddingTop); }\n  .pf-c-login__main > :last-child:not(.pf-c-login__main-footer) {\n    padding-bottom: var(--pf-c-login__main-footer--PaddingBottom); }\n\n.pf-c-login__main-header {\n  display: grid;\n  grid-template-columns: 100%;\n  column-gap: var(--pf-c-login__main-header--ColumnGap);\n  row-gap: var(--pf-c-login__main-header--RowGap);\n  align-items: center;\n  padding: var(--pf-c-login__main-header--PaddingTop) var(--pf-c-login__main-header--PaddingRight) var(--pf-c-login__main-header--PaddingBottom) var(--pf-c-login__main-header--PaddingLeft); }\n  @media (min-width: 768px) {\n    .pf-c-login__main-header {\n      grid-template-columns: 1fr auto; } }\n  .pf-c-login__main-header .pf-c-dropdown {\n    grid-column: auto;\n    grid-row: auto; }\n    @media (min-width: 768px) {\n      .pf-c-login__main-header .pf-c-dropdown {\n        grid-column: 2 / 3;\n        grid-row: 1; } }\n\n.pf-c-login__main-header-desc {\n  margin-bottom: var(--pf-c-login__main-header-desc--MarginBottom);\n  font-size: var(--pf-c-login__main-header-desc--FontSize);\n  grid-column: 1 / -1; }\n\n.pf-c-login__main-body {\n  padding-right: var(--pf-c-login__main-body--PaddingRight);\n  padding-bottom: var(--pf-c-login__main-body--PaddingBottom);\n  padding-left: var(--pf-c-login__main-body--PaddingLeft); }\n\n.pf-c-login__main-footer {\n  display: flex;\n  flex-wrap: wrap; }\n  .pf-c-login__main-footer .pf-c-title {\n    margin-bottom: var(--pf-c-login__main-footer--c-title--MarginBottom);\n    text-align: center; }\n  .pf-c-login__main-footer > * {\n    flex-basis: 100%; }\n\n.pf-c-login__main-footer-links {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  padding: var(--pf-c-login__main-footer-links--PaddingTop) var(--pf-c-login__main-footer-links--PaddingRight) var(--pf-c-login__main-footer-links--PaddingBottom) var(--pf-c-login__main-footer-links--PaddingLeft); }\n\n.pf-c-login__main-footer-links-item {\n  padding-right: var(--pf-c-login__main-footer-links-item--PaddingRight);\n  padding-left: var(--pf-c-login__main-footer-links-item--PaddingLeft);\n  margin-bottom: var(--pf-c-login__main-footer-links-item--MarginBottom); }\n\n.pf-c-login__main-footer-links-item-link svg {\n  fill: var(--pf-c-login__main-footer-links-item-link-svg--Fill);\n  width: 100%;\n  max-width: var(--pf-c-login__main-footer-links-item-link-svg--Width);\n  height: 100%;\n  max-height: var(--pf-c-login__main-footer-links-item-link-svg--Height); }\n\n.pf-c-login__main-footer-links-item-link:hover svg {\n  fill: var(--pf-c-login__main-footer-links-item-link-svg--hover--Fill); }\n\n.pf-c-login__main-footer-band {\n  padding: var(--pf-c-login__main-footer-band--PaddingTop) var(--pf-c-login__main-footer-band--PaddingRight) var(--pf-c-login__main-footer-band--PaddingBottom) var(--pf-c-login__main-footer-band--PaddingLeft);\n  text-align: center;\n  background-color: var(--pf-c-login__main-footer-band--BackgroundColor); }\n  .pf-c-login__main-footer-band > * + * {\n    padding-top: var(--pf-c-login__main-footer-band-item--PaddingTop); }\n\n.pf-c-login__footer {\n  color: var(--pf-global--Color--100);\n  grid-area: footer;\n  padding-right: var(--pf-c-login__footer--PaddingRight);\n  padding-left: var(--pf-c-login__footer--PaddingLeft); }\n  .pf-c-login__footer .pf-c-list a {\n    color: unset; }\n  .pf-c-login__footer .pf-c-list:not(:only-child) {\n    padding-top: var(--pf-c-login__footer--c-list--PaddingTop); }\n\n.pf-c-menu {\n  color: var(--pf-global--Color--100);\n  --pf-c-menu--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-menu--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-menu--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-menu--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-menu--m-flyout__menu--Top: calc(var(--pf-c-menu--PaddingTop) * -1);\n  --pf-c-menu--c-divider--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-menu--c-divider--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-menu__search--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-menu__search--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-menu__search--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-menu__search--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-menu__list-item--Color: var(--pf-global--Color--100);\n  --pf-c-menu__list-item--hover--Color: var(--pf-global--Color--100);\n  --pf-c-menu__list-item--BackgroundColor: transparent;\n  --pf-c-menu__list-item--hover--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-menu__item--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-menu__item--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-menu__item--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-menu__item--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-menu__item--OutlineOffset: calc(0.125rem * -1);\n  --pf-c-menu__item--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-menu__item--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-menu__item--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-menu__item--disabled--Color: var(--pf-global--Color--dark-200);\n  --pf-c-menu__group-title--PaddingTop: var(--pf-c-menu__item--PaddingTop);\n  --pf-c-menu__group-title--PaddingRight: var(--pf-c-menu__item--PaddingRight);\n  --pf-c-menu__group-title--PaddingBottom: var(--pf-c-menu__item--PaddingBottom);\n  --pf-c-menu__group-title--PaddingLeft: var(--pf-c-menu__item--PaddingLeft);\n  --pf-c-menu__group-title--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-menu__group-title--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-menu__group-title--Color: var(--pf-global--Color--dark-200);\n  --pf-c-menu__item-description--FontSize: var(--pf-global--FontSize--xs);\n  --pf-c-menu__item-description--Color: var(--pf-global--Color--200);\n  --pf-c-menu__item-icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-menu__item-toggle-icon--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-menu__item-toggle-icon--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-menu__item-text--item-toggle-icon--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-menu__item-toggle-icon--item-text--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-menu__item-select-icon--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-menu__item-select-icon--Color: var(--pf-global--active-color--100);\n  --pf-c-menu__item-select-icon--FontSize: var(--pf-global--icon--FontSize--sm);\n  --pf-c-menu__item-main__external-icon--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-menu__item-main__external-icon--Color: var(--pf-global--link--Color);\n  --pf-c-menu__item-main__external-icon--FontSize: var(--pf-global--icon--FontSize--sm);\n  --pf-c-menu__item-action--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-menu__item-action--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-menu__item-action--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-menu__item-action--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-menu__item-action-icon--Color: var(--pf-global--Color--dark-200);\n  --pf-c-menu__item-action-icon--Height: calc(var(--pf-c-menu__item--FontSize) * var(--pf-c-menu__item--LineHeight));\n  --pf-c-menu__item-action--hover__icon--Color: var(--pf-global--Color--dark-100);\n  --pf-c-menu__item-action--m-favorite__icon--Color: var(--pf-global--disabled-color--200);\n  --pf-c-menu__item-action--m-favorite__icon--FontSize: var(--pf-global--icon--FontSize--sm);\n  --pf-c-menu__item-action--m-favorite--m-favorited__icon--Color: var(--pf-global--palette--gold-400);\n  --pf-c-menu--m-drilldown--Width: auto;\n  --pf-c-menu--m-drilldown--Height: auto;\n  --pf-c-menu--m-drilldown--TransitionDuration--transform: var(--pf-global--TransitionDuration);\n  --pf-c-menu--m-drilldown--TransitionDuration--height: var(--pf-global--TransitionDuration);\n  --pf-c-menu--m-drilldown--Transition: transform var(--pf-c-menu--m-drilldown--TransitionDuration--transform), height var(--pf-c-menu--m-drilldown--TransitionDuration--height);\n  --pf-c-menu--m-drilldown--c-menu--Top: calc(var(--pf-c-menu--PaddingTop) * -1);\n  --pf-c-menu--m-drilldown--c-menu--TransitionDuration--transform: var(--pf-global--TransitionDuration);\n  --pf-c-menu--m-drilldown--c-menu--TransitionDuration--visibility: var(--pf-global--TransitionDuration);\n  --pf-c-menu--m-drilldown--c-menu--Transition: transform var(--pf-c-menu--m-drilldown--c-menu--TransitionDuration--transform), visibility var(--pf-c-menu--m-drilldown--c-menu--TransitionDuration--visibility);\n  --pf-c-menu--m-drilldown__list--TransitionDuration--transform: var(--pf-global--TransitionDuration);\n  --pf-c-menu--m-drilldown__list--Transition: transform var(--pf-c-menu--m-drilldown__list--TransitionDuration--transform);\n  --pf-c-menu--m-drilled-in--c-menu__list-item--m-current-path--c-menu--ZIndex: var(--pf-global--ZIndex--2xl);\n  padding-top: var(--pf-c-menu--PaddingTop);\n  padding-bottom: var(--pf-c-menu--PaddingBottom);\n  background-color: var(--pf-c-menu--BackgroundColor);\n  box-shadow: var(--pf-c-menu--BoxShadow); }\n  .pf-c-menu.pf-m-flyout .pf-c-menu {\n    position: absolute;\n    top: var(--pf-c-menu--m-flyout__menu--Top);\n    left: 100%; }\n  .pf-c-menu.pf-m-flyout .pf-c-menu__list-item {\n    position: relative; }\n  .pf-c-menu.pf-m-drilldown {\n    width: var(--pf-c-menu--m-drilldown--Width);\n    height: var(--pf-c-menu--m-drilldown--Height);\n    overflow: hidden;\n    transition: var(--pf-c-menu--m-drilldown--Transition); }\n    .pf-c-menu.pf-m-drilldown.pf-m-drilled-in > .pf-c-menu__content > .pf-c-menu__list,\n    .pf-c-menu.pf-m-drilldown.pf-m-drilled-in > .pf-c-menu__list {\n      transform: translateX(-100%); }\n    .pf-c-menu.pf-m-drilldown .pf-c-menu {\n      --pf-c-menu--BoxShadow: none;\n      position: absolute;\n      top: var(--pf-c-menu--m-drilldown--c-menu--Top);\n      left: 100%;\n      width: 100%;\n      transition: var(--pf-c-menu--m-drilldown--c-menu--Transition); }\n      .pf-c-menu.pf-m-drilldown .pf-c-menu.pf-m-drilled-in {\n        transform: translateX(-100%); }\n    .pf-c-menu.pf-m-drilldown .pf-c-menu__list {\n      position: relative;\n      transition: var(--pf-c-menu--m-drilldown__list--Transition); }\n    .pf-c-menu.pf-m-drilldown .pf-c-menu__list-item.pf-m-current-path .pf-c-menu {\n      z-index: var(--pf-c-menu--m-drilled-in--c-menu__list-item--m-current-path--c-menu--ZIndex); }\n    .pf-c-menu.pf-m-drilldown .pf-c-menu__list-item:not(.pf-m-current-path) .pf-c-menu {\n      visibility: hidden; }\n    .pf-c-menu.pf-m-drilldown .pf-c-menu__item {\n      outline-offset: var(--pf-c-menu__item--OutlineOffset); }\n  .pf-c-menu .pf-c-divider {\n    margin-top: var(--pf-c-menu--c-divider--MarginTop);\n    margin-bottom: var(--pf-c-menu--c-divider--MarginBottom); }\n\n.pf-c-menu__search {\n  padding-top: var(--pf-c-menu__search--PaddingTop);\n  padding-right: var(--pf-c-menu__search--PaddingRight);\n  padding-bottom: var(--pf-c-menu__search--PaddingBottom);\n  padding-left: var(--pf-c-menu__search--PaddingLeft); }\n\n.pf-c-menu__list-item {\n  display: flex;\n  color: var(--pf-c-menu__list-item--Color);\n  background-color: var(--pf-c-menu__list-item--BackgroundColor); }\n  .pf-c-menu__list-item:hover:not(.pf-m-disabled), .pf-c-menu__list-item:focus-within:not(.pf-m-disabled) {\n    --pf-c-menu__list-item--Color: var(--pf-c-menu__list-item--hover--Color);\n    --pf-c-menu__list-item--BackgroundColor: var(--pf-c-menu__list-item--hover--BackgroundColor); }\n    .pf-c-menu__list-item:hover:not(.pf-m-disabled) .pf-c-menu__item-external-icon, .pf-c-menu__list-item:focus-within:not(.pf-m-disabled) .pf-c-menu__item-external-icon {\n      opacity: 1; }\n  .pf-c-menu__list-item.pf-m-disabled .pf-c-menu__item {\n    --pf-c-menu__item--Color: var(--pf-c-menu__item--disabled--Color);\n    pointer-events: none; }\n\n.pf-c-menu__item {\n  display: flex;\n  flex-basis: 100%;\n  flex-direction: column;\n  min-width: 0;\n  padding-top: var(--pf-c-menu__item--PaddingTop);\n  padding-right: var(--pf-c-menu__item--PaddingRight);\n  padding-bottom: var(--pf-c-menu__item--PaddingBottom);\n  padding-left: var(--pf-c-menu__item--PaddingLeft);\n  font-size: var(--pf-c-menu__item--FontSize);\n  font-weight: var(--pf-c-menu__item--FontWeight);\n  line-height: var(--pf-c-menu__item--LineHeight);\n  color: var(--pf-c-menu__item--Color);\n  text-align: left;\n  background-color: var(--pf-c-menu__item--BackgroundColor);\n  border: none; }\n  .pf-c-menu__item:hover {\n    text-decoration: none; }\n  .pf-c-menu__item:disabled {\n    --pf-c-menu__item--Color: var(--pf-c-menu__item--disabled--Color);\n    pointer-events: none; }\n  .pf-c-menu__item.pf-m-selected .pf-c-menu__item-select-icon {\n    opacity: 1; }\n\n.pf-c-menu__item-main {\n  display: flex;\n  align-items: center;\n  width: 100%; }\n  .pf-c-menu__item-main .pf-c-menu__item-external-icon {\n    margin-left: var(--pf-c-menu__item-main__external-icon--MarginLeft);\n    font-size: var(--pf-c-menu__item-main__external-icon--FontSize);\n    color: var(--pf-c-menu__item-main__external-icon--Color);\n    opacity: 0; }\n\n.pf-c-menu__item-text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  flex-grow: 1; }\n\n.pf-c-menu__group-title {\n  padding-top: var(--pf-c-menu__group-title--PaddingTop);\n  padding-right: var(--pf-c-menu__group-title--PaddingRight);\n  padding-bottom: var(--pf-c-menu__group-title--PaddingBottom);\n  padding-left: var(--pf-c-menu__group-title--PaddingLeft);\n  font-size: var(--pf-c-menu__group-title--FontSize);\n  font-weight: var(--pf-c-menu__group-title--FontWeight);\n  color: var(--pf-c-menu__group-title--Color); }\n\n.pf-c-menu__item-description {\n  font-size: var(--pf-c-menu__item-description--FontSize);\n  color: var(--pf-c-menu__item-description--Color);\n  word-break: break-all; }\n\n.pf-c-menu__item-icon {\n  margin-right: var(--pf-c-menu__item-icon--MarginRight); }\n\n.pf-c-menu__item-toggle-icon {\n  padding-right: var(--pf-c-menu__item-toggle-icon--PaddingRight);\n  padding-left: var(--pf-c-menu__item-toggle-icon--PaddingLeft); }\n\n.pf-c-menu__item-text + .pf-c-menu__item-toggle-icon {\n  margin-left: var(--pf-c-menu__item-text--item-toggle-icon--MarginLeft); }\n\n.pf-c-menu__item-toggle-icon + .pf-c-menu__item-text {\n  margin-left: var(--pf-c-menu__item-toggle-icon--item-text--MarginLeft); }\n\n.pf-c-menu__item-select-icon {\n  margin-left: var(--pf-c-menu__item-select-icon--MarginLeft);\n  font-size: var(--pf-c-menu__item-select-icon--FontSize);\n  color: var(--pf-c-menu__item-select-icon--Color);\n  opacity: 0; }\n\n.pf-c-menu__item-action {\n  display: flex;\n  padding-top: var(--pf-c-menu__item-action--PaddingTop);\n  padding-right: var(--pf-c-menu__item-action--PaddingRight);\n  padding-bottom: var(--pf-c-menu__item-action--PaddingBottom);\n  padding-left: var(--pf-c-menu__item-action--PaddingLeft);\n  border: none; }\n  .pf-c-menu__item-action:hover, .pf-c-menu__item-action:focus {\n    --pf-c-menu__item-action-icon--Color: var(--pf-c-menu__item-action--hover__icon--Color); }\n  .pf-c-menu__item-action.pf-m-favorite {\n    --pf-c-menu__item-action-icon--Color: var(--pf-c-menu__item-action--m-favorite__icon--Color); }\n    .pf-c-menu__item-action.pf-m-favorite.pf-m-favorited {\n      --pf-c-menu__item-action-icon--Color: var(--pf-c-menu__item-action--m-favorite--m-favorited__icon--Color); }\n    .pf-c-menu__item-action.pf-m-favorite .pf-c-menu__item-action-icon {\n      font-size: var(--pf-c-menu__item-action--m-favorite__icon--FontSize); }\n\n.pf-c-menu__item-action-icon {\n  display: flex;\n  align-items: center;\n  height: var(--pf-c-menu__item-action-icon--Height);\n  color: var(--pf-c-menu__item-action-icon--Color); }\n\n.pf-c-modal-box {\n  --pf-c-modal-box--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-modal-box--BoxShadow: var(--pf-global--BoxShadow--xl);\n  --pf-c-modal-box--ZIndex: var(--pf-global--ZIndex--xl);\n  --pf-c-modal-box--Width: 100%;\n  --pf-c-modal-box--MaxWidth: calc(100% - var(--pf-global--spacer--xl));\n  --pf-c-modal-box--m-sm--sm--MaxWidth: 35rem;\n  --pf-c-modal-box--m-md--Width: 52.5rem;\n  --pf-c-modal-box--m-lg--lg--MaxWidth: 70rem;\n  --pf-c-modal-box--MaxHeight: calc(100% - var(--pf-global--spacer--2xl));\n  --pf-c-modal-box--m-align-top--spacer: var(--pf-global--spacer--sm);\n  --pf-c-modal-box--m-align-top--xl--spacer: var(--pf-global--spacer--xl);\n  --pf-c-modal-box--m-align-top--MarginTop: var(--pf-c-modal-box--m-align-top--spacer);\n  --pf-c-modal-box--m-align-top--MaxHeight: calc(100% - min(var(--pf-c-modal-box--m-align-top--spacer), var(--pf-global--spacer--2xl)) - var(--pf-c-modal-box--m-align-top--spacer));\n  --pf-c-modal-box--m-align-top--MaxWidth: calc(100% - min(var(--pf-c-modal-box--m-align-top--spacer) * 2, var(--pf-global--spacer--xl)));\n  --pf-c-modal-box--m-danger__title-icon--Color: var(--pf-global--danger-color--100);\n  --pf-c-modal-box--m-warning__title-icon--Color: var(--pf-global--warning-color--100);\n  --pf-c-modal-box--m-success__title-icon--Color: var(--pf-global--success-color--100);\n  --pf-c-modal-box--m-info__title-icon--Color: var(--pf-global--info-color--100);\n  --pf-c-modal-box--m-default__title-icon--Color: var(--pf-global--default-color--200);\n  --pf-c-modal-box__header--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__header--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__header--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__header--last-child--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__title--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-modal-box__title--FontFamily: var(--pf-global--FontFamily--heading--sans-serif);\n  --pf-c-modal-box__title--FontSize: var(--pf-global--FontSize--2xl);\n  --pf-c-modal-box__title-icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-modal-box__title-icon--Color: var(--pf-global--Color--100);\n  --pf-c-modal-box__description--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-modal-box__body--MinHeight: calc(var(--pf-global--FontSize--md) * var(--pf-global--LineHeight--md));\n  --pf-c-modal-box__body--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__body--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__body--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__body--last-child--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__header--body--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-modal-box--c-button--Top: calc(var(--pf-global--spacer--lg));\n  --pf-c-modal-box--c-button--Right: var(--pf-global--spacer--md);\n  --pf-c-modal-box--c-button--sibling--MarginRight: calc(var(--pf-global--spacer--xl) + var(--pf-global--spacer--sm));\n  --pf-c-modal-box__footer--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__footer--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__footer--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__footer--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__footer--c-button--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-modal-box__footer--c-button--sm--MarginRight: calc(var(--pf-c-modal-box__footer--c-button--MarginRight) / 2);\n  position: relative;\n  z-index: var(--pf-c-modal-box--ZIndex);\n  display: flex;\n  flex-direction: column;\n  width: var(--pf-c-modal-box--Width);\n  max-width: var(--pf-c-modal-box--MaxWidth);\n  max-height: var(--pf-c-modal-box--MaxHeight);\n  background-color: var(--pf-c-modal-box--BackgroundColor);\n  box-shadow: var(--pf-c-modal-box--BoxShadow); }\n  @media (min-width: 1200px) {\n    .pf-c-modal-box {\n      --pf-c-modal-box--m-align-top--spacer: var(--pf-c-modal-box--m-align-top--xl--spacer); } }\n  .pf-c-modal-box.pf-m-sm {\n    --pf-c-modal-box--Width: var(--pf-c-modal-box--m-sm--sm--MaxWidth); }\n  .pf-c-modal-box.pf-m-md {\n    --pf-c-modal-box--Width: var(--pf-c-modal-box--m-md--Width); }\n  .pf-c-modal-box.pf-m-lg {\n    --pf-c-modal-box--Width: var(--pf-c-modal-box--m-lg--lg--MaxWidth); }\n  .pf-c-modal-box.pf-m-align-top {\n    top: var(--pf-c-modal-box--m-align-top--MarginTop);\n    align-self: flex-start;\n    max-width: var(--pf-c-modal-box--m-align-top--MaxWidth);\n    max-height: var(--pf-c-modal-box--m-align-top--MaxHeight); }\n  .pf-c-modal-box.pf-m-danger {\n    --pf-c-modal-box__title-icon--Color: var(--pf-c-modal-box--m-danger__title-icon--Color); }\n  .pf-c-modal-box.pf-m-warning {\n    --pf-c-modal-box__title-icon--Color: var(--pf-c-modal-box--m-warning__title-icon--Color); }\n  .pf-c-modal-box.pf-m-success {\n    --pf-c-modal-box__title-icon--Color: var(--pf-c-modal-box--m-success__title-icon--Color); }\n  .pf-c-modal-box.pf-m-default {\n    --pf-c-modal-box__title-icon--Color: var(--pf-c-modal-box--m-default__title-icon--Color); }\n  .pf-c-modal-box.pf-m-info {\n    --pf-c-modal-box__title-icon--Color: var(--pf-c-modal-box--m-info__title-icon--Color); }\n  .pf-c-modal-box > .pf-c-button {\n    position: absolute;\n    top: var(--pf-c-modal-box--c-button--Top);\n    right: var(--pf-c-modal-box--c-button--Right); }\n    .pf-c-modal-box > .pf-c-button + * {\n      margin-right: var(--pf-c-modal-box--c-button--sibling--MarginRight); }\n\n.pf-c-modal-box__header {\n  display: flex;\n  flex-direction: column;\n  padding-top: var(--pf-c-modal-box__header--PaddingTop);\n  padding-right: var(--pf-c-modal-box__header--PaddingRight);\n  padding-left: var(--pf-c-modal-box__header--PaddingLeft); }\n  .pf-c-modal-box__header.pf-m-help {\n    display: flex;\n    flex-direction: row; }\n  .pf-c-modal-box__header:last-child {\n    padding-bottom: var(--pf-c-modal-box__header--last-child--PaddingBottom); }\n  .pf-c-modal-box__header + .pf-c-modal-box__body {\n    --pf-c-modal-box__body--PaddingTop: var(--pf-c-modal-box__header--body--PaddingTop); }\n\n.pf-c-modal-box__header-main {\n  flex-grow: 1;\n  min-width: 0; }\n\n.pf-c-modal-box__title,\n.pf-c-modal-box__title-text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.pf-c-modal-box__title {\n  flex: 0 0 auto;\n  font-family: var(--pf-c-modal-box__title--FontFamily);\n  font-size: var(--pf-c-modal-box__title--FontSize);\n  line-height: var(--pf-c-modal-box__title--LineHeight); }\n  .pf-c-modal-box__title.pf-m-icon {\n    display: flex; }\n\n.pf-c-modal-box__title-icon {\n  margin-right: var(--pf-c-modal-box__title-icon--MarginRight);\n  color: var(--pf-c-modal-box__title-icon--Color); }\n\n.pf-c-modal-box__description {\n  padding-top: var(--pf-c-modal-box__description--PaddingTop); }\n\n.pf-c-modal-box__body {\n  flex: 1 1 auto;\n  min-height: var(--pf-c-modal-box__body--MinHeight);\n  padding-top: var(--pf-c-modal-box__body--PaddingTop);\n  padding-right: var(--pf-c-modal-box__body--PaddingRight);\n  padding-left: var(--pf-c-modal-box__body--PaddingLeft);\n  overflow-x: hidden;\n  overflow-y: auto;\n  overscroll-behavior: contain;\n  word-break: break-word;\n  -webkit-overflow-scrolling: touch; }\n  .pf-c-modal-box__body:last-child {\n    padding-bottom: var(--pf-c-modal-box__body--last-child--PaddingBottom); }\n\n.pf-c-modal-box__footer {\n  display: flex;\n  flex: 0 0 auto;\n  align-items: center;\n  padding-top: var(--pf-c-modal-box__footer--PaddingTop);\n  padding-right: var(--pf-c-modal-box__footer--PaddingRight);\n  padding-bottom: var(--pf-c-modal-box__footer--PaddingBottom);\n  padding-left: var(--pf-c-modal-box__footer--PaddingLeft); }\n  .pf-c-modal-box__footer > .pf-c-button:not(:last-child) {\n    margin-right: var(--pf-c-modal-box__footer--c-button--MarginRight); }\n    @media screen and (min-width: 576px) {\n      .pf-c-modal-box__footer > .pf-c-button:not(:last-child) {\n        --pf-c-modal-box__footer--c-button--MarginRight: var(--pf-c-modal-box__footer--c-button--sm--MarginRight); } }\n\n.pf-c-nav {\n  --pf-c-nav--Transition: var(--pf-global--Transition);\n  --pf-c-nav__item--m-expanded__toggle-icon--Rotate: 90deg;\n  --pf-c-nav--m-light__item--before--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-nav--m-light__item--m-current--not--m-expanded__link--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-nav--m-light__link--Color: var(--pf-global--Color--dark-100);\n  --pf-c-nav--m-light__link--hover--Color: var(--pf-global--Color--dark-100);\n  --pf-c-nav--m-light__link--focus--Color: var(--pf-global--Color--dark-100);\n  --pf-c-nav--m-light__link--active--Color: var(--pf-global--Color--dark-100);\n  --pf-c-nav--m-light__link--m-current--Color: var(--pf-global--Color--dark-100);\n  --pf-c-nav--m-light__link--hover--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-nav--m-light__link--focus--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-nav--m-light__link--active--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-nav--m-light__link--m-current--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-nav--m-light__link--before--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-nav--m-light__link--after--BorderColor: var(--pf-global--active-color--100);\n  --pf-c-nav--m-light__link--m-current--after--BorderColor: var(--pf-global--active-color--100);\n  --pf-c-nav--m-light__section-title--Color: var(--pf-global--Color--dark-200);\n  --pf-c-nav--m-light__section-title--BorderBottomColor: var(--pf-global--BorderColor--300);\n  --pf-c-nav--m-light--c-divider--BackgroundColor: var(--pf-global--BorderColor--300);\n  --pf-c-nav--m-light__subnav__link--hover--after--BorderColor: var(--pf-global--BorderColor--dark-100);\n  --pf-c-nav--m-light__subnav__link--focus--after--BorderColor: var(--pf-global--BorderColor--dark-100);\n  --pf-c-nav--m-light__subnav__link--active--after--BorderColor: var(--pf-global--BorderColor--dark-100);\n  --pf-c-nav--m-light__subnav__link--m-current--after--BorderColor: var(--pf-global--active-color--100);\n  --pf-c-nav__item--MarginTop: 0;\n  --pf-c-nav__item--m-current--not--m-expanded__link--BackgroundColor: var(--pf-global--BackgroundColor--dark-400);\n  --pf-c-nav__link--m-current--not--m-expanded__link--after--BorderWidth: var(--pf-global--BorderWidth--xl);\n  --pf-c-nav__item--before--BorderColor: var(--pf-global--BackgroundColor--dark-200);\n  --pf-c-nav__item--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-nav__link--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-nav__link--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-nav__link--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-nav__link--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-nav__link--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-nav__link--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-nav__link--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-nav__link--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-nav__link--Color: var(--pf-global--Color--light-100);\n  --pf-c-nav__link--hover--Color: var(--pf-global--Color--light-100);\n  --pf-c-nav__link--focus--Color: var(--pf-global--Color--light-100);\n  --pf-c-nav__link--active--Color: var(--pf-global--Color--light-100);\n  --pf-c-nav__link--m-current--Color: var(--pf-global--Color--light-100);\n  --pf-c-nav__link--BackgroundColor: transparent;\n  --pf-c-nav__link--hover--BackgroundColor: var(--pf-global--BackgroundColor--dark-200);\n  --pf-c-nav__link--focus--BackgroundColor: var(--pf-global--BackgroundColor--dark-200);\n  --pf-c-nav__link--active--BackgroundColor: var(--pf-global--BackgroundColor--dark-200);\n  --pf-c-nav__link--m-current--BackgroundColor: var(--pf-global--BackgroundColor--dark-400);\n  --pf-c-nav__link--OutlineOffset: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-nav__link--before--BorderColor: var(--pf-global--BackgroundColor--dark-200);\n  --pf-c-nav__link--before--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-nav__link--hover--before--BorderBottomWidth: 0;\n  --pf-c-nav__link--focus--before--BorderBottomWidth: 0;\n  --pf-c-nav__link--active--before--BorderBottomWidth: 0;\n  --pf-c-nav__link--m-current--before--BorderBottomWidth: 0;\n  --pf-c-nav__link--after--BorderColor: var(--pf-global--active-color--400);\n  --pf-c-nav__link--hover--after--BorderColor: var(--pf-global--active-color--400);\n  --pf-c-nav__link--focus--after--BorderColor: var(--pf-global--active-color--400);\n  --pf-c-nav__link--active--after--BorderColor: var(--pf-global--active-color--400);\n  --pf-c-nav__link--m-current--after--BorderColor: var(--pf-global--active-color--400);\n  --pf-c-nav__link--after--BorderLeftWidth: 0;\n  --pf-c-nav__link--hover--after--BorderLeftWidth: 0;\n  --pf-c-nav__link--focus--after--BorderLeftWidth: 0;\n  --pf-c-nav__link--active--after--BorderLeftWidth: 0;\n  --pf-c-nav__link--m-current--after--BorderLeftWidth: var(--pf-global--BorderWidth--xl);\n  --pf-c-nav--m-horizontal__link--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-nav--m-horizontal__link--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-nav--m-horizontal__link--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-nav--m-horizontal__link--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-nav--m-horizontal__link--lg--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-nav--m-horizontal__link--lg--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-nav--m-horizontal__link--Right: var(--pf-global--spacer--md);\n  --pf-c-nav--m-horizontal__link--Left: var(--pf-global--spacer--md);\n  --pf-c-nav--m-horizontal__link--Color: var(--pf-global--Color--light-300);\n  --pf-c-nav--m-horizontal__link--hover--Color: var(--pf-global--active-color--400);\n  --pf-c-nav--m-horizontal__link--focus--Color: var(--pf-global--active-color--400);\n  --pf-c-nav--m-horizontal__link--active--Color: var(--pf-global--active-color--400);\n  --pf-c-nav--m-horizontal__link--m-current--Color: var(--pf-global--active-color--400);\n  --pf-c-nav--m-horizontal__link--BackgroundColor: transparent;\n  --pf-c-nav--m-horizontal__link--hover--BackgroundColor: transparent;\n  --pf-c-nav--m-horizontal__link--focus--BackgroundColor: transparent;\n  --pf-c-nav--m-horizontal__link--active--BackgroundColor: transparent;\n  --pf-c-nav--m-horizontal__link--m-current--BackgroundColor: transparent;\n  --pf-c-nav--m-horizontal__link--before--BorderColor: var(--pf-global--active-color--400);\n  --pf-c-nav--m-horizontal__link--before--BorderWidth: 0;\n  --pf-c-nav--m-horizontal__link--hover--before--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-nav--m-horizontal__link--focus--before--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-nav--m-horizontal__link--active--before--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-nav--m-horizontal__link--m-current--before--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-nav--m-tertiary__link--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-nav--m-tertiary__link--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-nav--m-tertiary__link--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-nav--m-tertiary__link--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-nav--m-tertiary__link--Right: var(--pf-global--spacer--md);\n  --pf-c-nav--m-tertiary__link--Left: var(--pf-global--spacer--md);\n  --pf-c-nav--m-tertiary__link--Color: var(--pf-global--Color--dark-100);\n  --pf-c-nav--m-tertiary__link--hover--Color: var(--pf-global--active-color--100);\n  --pf-c-nav--m-tertiary__link--focus--Color: var(--pf-global--active-color--100);\n  --pf-c-nav--m-tertiary__link--active--Color: var(--pf-global--active-color--100);\n  --pf-c-nav--m-tertiary__link--m-current--Color: var(--pf-global--active-color--100);\n  --pf-c-nav--m-tertiary__link--BackgroundColor: transparent;\n  --pf-c-nav--m-tertiary__link--hover--BackgroundColor: transparent;\n  --pf-c-nav--m-tertiary__link--focus--BackgroundColor: transparent;\n  --pf-c-nav--m-tertiary__link--active--BackgroundColor: transparent;\n  --pf-c-nav--m-tertiary__link--m-current--BackgroundColor: transparent;\n  --pf-c-nav--m-tertiary__link--before--BorderColor: var(--pf-global--active-color--100);\n  --pf-c-nav--m-tertiary__link--before--BorderWidth: 0;\n  --pf-c-nav--m-tertiary__link--hover--before--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-nav--m-tertiary__link--focus--before--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-nav--m-tertiary__link--active--before--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-nav--m-tertiary__link--m-current--before--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-nav--m-tertiary__scroll-button--Color: var(--pf-global--Color--dark-100);\n  --pf-c-nav--m-tertiary__scroll-button--hover--Color: var(--pf-global--active-color--100);\n  --pf-c-nav--m-tertiary__scroll-button--focus--Color: var(--pf-global--active-color--100);\n  --pf-c-nav--m-tertiary__scroll-button--active--Color: var(--pf-global--active-color--100);\n  --pf-c-nav--m-tertiary__scroll-button--disabled--Color: var(--pf-global--disabled-color--200);\n  --pf-c-nav--m-tertiary__scroll-button--before--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-nav--m-tertiary__scroll-button--disabled--before--BorderColor: var(--pf-global--disabled-color--300);\n  --pf-c-nav__subnav--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-nav__subnav--xl--PaddingLeft: var(--pf-c-nav__link--PaddingLeft);\n  --pf-c-nav__subnav__link--MarginTop: 0;\n  --pf-c-nav__subnav__link--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-nav__subnav__link--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-nav__subnav__link--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-nav__subnav__link--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-nav__subnav__link--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-nav__subnav__link--hover--after--BorderColor: var(--pf-global--BorderColor--200);\n  --pf-c-nav__subnav__link--focus--after--BorderColor: var(--pf-global--BorderColor--200);\n  --pf-c-nav__subnav__link--active--after--BorderColor: var(--pf-global--BorderColor--200);\n  --pf-c-nav__subnav__link--m-current--after--BorderColor: var(--pf-global--active-color--400);\n  --pf-c-nav__subnav__link--hover--after--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-nav__subnav__link--focus--after--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-nav__subnav__link--active--after--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-nav__subnav__link--m-current--after--BorderWidth: var(--pf-global--BorderWidth--xl);\n  --pf-c-nav__subnav--MaxHeight: 0;\n  --pf-c-nav__item--m-expanded__subnav--MaxHeight: 100%;\n  --pf-c-nav__subnav--c-divider--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-nav__subnav--c-divider--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-nav__section--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-nav__section__item--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-nav__section__link--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-nav__section__link--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-nav__section__link--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-nav__section__link--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-nav__section__link--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-nav__section__link--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-nav__section__link--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-nav__section__link--before--BorderBottomWidth: 0;\n  --pf-c-nav__section__link--hover--after--BorderColor: transparent;\n  --pf-c-nav__section__link--focus--after--BorderColor: transparent;\n  --pf-c-nav__section__link--active--after--BorderColor: transparent;\n  --pf-c-nav__section__link--m-current--after--BorderColor: var(--pf-global--active-color--400);\n  --pf-c-nav__section__link--hover--after--BorderWidth: 0;\n  --pf-c-nav__section__link--focus--after--BorderWidth: 0;\n  --pf-c-nav__section__link--active--after--BorderWidth: 0;\n  --pf-c-nav__section__link--m-current--after--BorderWidth: var(--pf-global--BorderWidth--xl);\n  --pf-c-nav__section--section--MarginTop: var(--pf-global--spacer--xl);\n  --pf-c-nav__section-title--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-nav__section-title--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-nav__section-title--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-nav__section-title--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-nav__section-title--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-nav__section-title--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-nav__section-title--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-nav__section-title--Color: var(--pf-global--Color--light-100);\n  --pf-c-nav__section-title--BorderBottomColor: var(--pf-global--BackgroundColor--dark-200);\n  --pf-c-nav__section-title--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-nav__scroll-button--Color: var(--pf-global--Color--light-100);\n  --pf-c-nav__scroll-button--hover--Color: var(--pf-global--active-color--400);\n  --pf-c-nav__scroll-button--focus--Color: var(--pf-global--active-color--400);\n  --pf-c-nav__scroll-button--active--Color: var(--pf-global--active-color--400);\n  --pf-c-nav__scroll-button--disabled--Color: var(--pf-global--disabled-color--100);\n  --pf-c-nav__scroll-button--BackgroundColor: transparent;\n  --pf-c-nav__scroll-button--Width: var(--pf-global--target-size--MinWidth);\n  --pf-c-nav__scroll-button--OutlineOffset: calc(-1 * var(--pf-global--spacer--xs));\n  --pf-c-nav__scroll-button--Transition: margin .125s, transform .125s, opacity .125s;\n  --pf-c-nav__scroll-button--before--BorderColor: var(--pf-global--BackgroundColor--dark-200);\n  --pf-c-nav__scroll-button--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-nav__scroll-button--before--BorderRightWidth: 0;\n  --pf-c-nav__scroll-button--before--BorderLeftWidth: 0;\n  --pf-c-nav__scroll-button--disabled--before--BorderColor: transparent;\n  --pf-c-nav__toggle--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-nav__toggle--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-nav__toggle--FontSize: var(--pf-global--icon--FontSize--md);\n  --pf-c-nav__toggle-icon--Transition: var(--pf-global--TransitionDuration);\n  --pf-c-nav--c-divider--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-nav--c-divider--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-nav--c-divider--PaddingRight: 0;\n  --pf-c-nav--c-divider--PaddingLeft: 0;\n  --pf-c-nav--c-divider--BackgroundColor: var(--pf-global--BackgroundColor--dark-200); }\n  @media screen and (min-width: 1200px) {\n    .pf-c-nav {\n      --pf-c-nav__link--PaddingRight: var(--pf-c-nav__link--xl--PaddingRight);\n      --pf-c-nav__link--PaddingLeft: var(--pf-c-nav__link--xl--PaddingLeft);\n      --pf-c-nav__section__link--PaddingRight: var(--pf-c-nav__section__link--xl--PaddingRight);\n      --pf-c-nav__section__link--PaddingLeft: var(--pf-c-nav__section__link--xl--PaddingLeft);\n      --pf-c-nav__section-title--PaddingRight: var(--pf-c-nav__section-title--xl--PaddingRight);\n      --pf-c-nav__section-title--PaddingLeft: var(--pf-c-nav__section-title--xl--PaddingLeft);\n      --pf-c-nav__subnav--PaddingLeft: var(--pf-c-nav__subnav--xl--PaddingLeft); } }\n  .pf-c-nav.pf-m-horizontal, .pf-c-nav.pf-m-tertiary {\n    overflow: hidden; }\n    .pf-c-nav.pf-m-horizontal,\n    .pf-c-nav.pf-m-horizontal .pf-c-nav__list, .pf-c-nav.pf-m-tertiary,\n    .pf-c-nav.pf-m-tertiary .pf-c-nav__list {\n      position: relative;\n      display: flex; }\n    .pf-c-nav.pf-m-horizontal .pf-c-nav__list, .pf-c-nav.pf-m-tertiary .pf-c-nav__list {\n      flex: 1;\n      max-width: 100%;\n      overflow-x: auto;\n      white-space: nowrap;\n      -webkit-overflow-scrolling: touch;\n      scrollbar-width: none;\n      -ms-overflow-style: -ms-autohiding-scrollbar; }\n      .pf-c-nav.pf-m-horizontal .pf-c-nav__list::-webkit-scrollbar, .pf-c-nav.pf-m-tertiary .pf-c-nav__list::-webkit-scrollbar {\n        display: none; }\n    .pf-c-nav.pf-m-horizontal .pf-c-nav__item, .pf-c-nav.pf-m-tertiary .pf-c-nav__item {\n      display: flex; }\n    .pf-c-nav.pf-m-horizontal .pf-c-nav__link, .pf-c-nav.pf-m-tertiary .pf-c-nav__link {\n      align-items: center;\n      align-self: stretch;\n      white-space: nowrap; }\n      .pf-c-nav.pf-m-horizontal .pf-c-nav__link::before, .pf-c-nav.pf-m-tertiary .pf-c-nav__link::before {\n        top: auto;\n        bottom: 0; }\n      .pf-c-nav.pf-m-horizontal .pf-c-nav__link::after, .pf-c-nav.pf-m-tertiary .pf-c-nav__link::after {\n        content: none; }\n  .pf-c-nav.pf-m-horizontal .pf-c-nav__link::before {\n    right: var(--pf-c-nav--m-horizontal__link--Right);\n    left: var(--pf-c-nav--m-horizontal__link--Left); }\n  .pf-c-nav.pf-m-tertiary .pf-c-nav__link::before {\n    right: var(--pf-c-nav--m-tertiary__link--Right);\n    left: var(--pf-c-nav--m-tertiary__link--Left); }\n  .pf-c-nav.pf-m-light {\n    --pf-c-nav__item--before--BorderColor: var(--pf-c-nav--m-light__item--before--BorderColor);\n    --pf-c-nav__item--m-current--not--m-expanded__link--BackgroundColor: var(--pf-c-nav--m-light__item--m-current--not--m-expanded__link--BackgroundColor);\n    --pf-c-nav__link--Color: var(--pf-c-nav--m-light__link--Color);\n    --pf-c-nav__link--hover--Color: var(--pf-c-nav--m-light__link--hover--Color);\n    --pf-c-nav__link--focus--Color: var(--pf-c-nav--m-light__link--focus--Color);\n    --pf-c-nav__link--active--Color: var(--pf-c-nav--m-light__link--active--Color);\n    --pf-c-nav__link--m-current--Color: var(--pf-c-nav--m-light__link--m-current--Color);\n    --pf-c-nav__link--hover--BackgroundColor: var(--pf-c-nav--m-light__link--hover--BackgroundColor);\n    --pf-c-nav__link--focus--BackgroundColor: var(--pf-c-nav--m-light__link--focus--BackgroundColor);\n    --pf-c-nav__link--active--BackgroundColor: var(--pf-c-nav--m-light__link--active--BackgroundColor);\n    --pf-c-nav__link--m-current--BackgroundColor: var(--pf-c-nav--m-light__link--m-current--BackgroundColor);\n    --pf-c-nav__link--before--BorderColor: var(--pf-c-nav--m-light__link--before--BorderColor);\n    --pf-c-nav__link--after--BorderColor: var(--pf-c-nav--m-light__link--after--BorderColor);\n    --pf-c-nav__link--m-current--after--BorderColor: var(--pf-c-nav--m-light__link--m-current--after--BorderColor);\n    --pf-c-nav__subnav__link--hover--after--BorderColor: var(--pf-c-nav--m-light__subnav__link--hover--after--BorderColor);\n    --pf-c-nav__subnav__link--focus--after--BorderColor: var(--pf-c-nav--m-light__subnav__link--focus--after--BorderColor);\n    --pf-c-nav__subnav__link--active--after--BorderColor: var(--pf-c-nav--m-light__subnav__link--active--after--BorderColor);\n    --pf-c-nav__subnav__link--m-current--after--BorderColor: var(--pf-c-nav--m-light__subnav__link--m-current--after--BorderColor);\n    --pf-c-nav__section-title--Color: var(--pf-c-nav--m-light__section-title--Color);\n    --pf-c-nav__section-title--BorderBottomColor: var(--pf-c-nav--m-light__section-title--BorderBottomColor); }\n    .pf-c-nav.pf-m-light .pf-c-divider {\n      --pf-c-divider--after--BackgroundColor: var(--pf-c-nav--m-light--c-divider--BackgroundColor); }\n  .pf-c-nav.pf-m-horizontal {\n    --pf-c-nav__link--PaddingTop: var(--pf-c-nav--m-horizontal__link--PaddingTop);\n    --pf-c-nav__link--PaddingRight: var(--pf-c-nav--m-horizontal__link--PaddingRight);\n    --pf-c-nav__link--PaddingBottom: var(--pf-c-nav--m-horizontal__link--PaddingBottom);\n    --pf-c-nav__link--PaddingLeft: var(--pf-c-nav--m-horizontal__link--PaddingLeft);\n    --pf-c-nav__link--Right: var(--pf-c-nav--m-horizontal__link--Right);\n    --pf-c-nav__link--Left: var(--pf-c-nav--m-horizontal__link--Left);\n    --pf-c-nav__link--Color: var(--pf-c-nav--m-horizontal__link--Color);\n    --pf-c-nav__link--hover--Color: var(--pf-c-nav--m-horizontal__link--hover--Color);\n    --pf-c-nav__link--active--Color: var(--pf-c-nav--m-horizontal__link--active--Color);\n    --pf-c-nav__link--focus--Color: var(--pf-c-nav--m-horizontal__link--focus--Color);\n    --pf-c-nav__link--m-current--Color: var(--pf-c-nav--m-horizontal__link--m-current--Color);\n    --pf-c-nav__link--BackgroundColor: var(--pf-c-nav--m-horizontal__link--BackgroundColor);\n    --pf-c-nav__link--hover--BackgroundColor: var(--pf-c-nav--m-horizontal__link--hover--BackgroundColor);\n    --pf-c-nav__link--focus--BackgroundColor: var(--pf-c-nav--m-horizontal__link--focus--BackgroundColor);\n    --pf-c-nav__link--active--BackgroundColor: var(--pf-c-nav--m-horizontal__link--active--BackgroundColor);\n    --pf-c-nav__link--m-current--BackgroundColor: var(--pf-c-nav--m-horizontal__link--m-current--BackgroundColor);\n    --pf-c-nav__link--before--BorderColor: var(--pf-c-nav--m-horizontal__link--before--BorderColor);\n    --pf-c-nav__link--before--BorderBottomWidth: var(--pf-c-nav--m-horizontal__link--before--BorderWidth);\n    --pf-c-nav__link--hover--before--BorderBottomWidth: var(--pf-c-nav--m-horizontal__link--hover--before--BorderWidth);\n    --pf-c-nav__link--focus--before--BorderBottomWidth: var(--pf-c-nav--m-horizontal__link--focus--before--BorderWidth);\n    --pf-c-nav__link--active--before--BorderBottomWidth: var(--pf-c-nav--m-horizontal__link--active--before--BorderWidth);\n    --pf-c-nav__link--m-current--before--BorderBottomWidth: var(--pf-c-nav--m-horizontal__link--m-current--before--BorderWidth); }\n  .pf-c-nav.pf-m-tertiary {\n    --pf-c-nav__link--PaddingTop: var(--pf-c-nav--m-tertiary__link--PaddingTop);\n    --pf-c-nav__link--PaddingRight: var(--pf-c-nav--m-tertiary__link--PaddingRight);\n    --pf-c-nav__link--PaddingBottom: var(--pf-c-nav--m-tertiary__link--PaddingBottom);\n    --pf-c-nav__link--PaddingLeft: var(--pf-c-nav--m-tertiary__link--PaddingLeft);\n    --pf-c-nav__link--Right: var(--pf-c-nav--m-tertiary__link--Right);\n    --pf-c-nav__link--Left: var(--pf-c-nav--m-tertiary__link--Left);\n    --pf-c-nav__link--Color: var(--pf-c-nav--m-tertiary__link--Color);\n    --pf-c-nav__link--hover--Color: var(--pf-c-nav--m-tertiary__link--hover--Color);\n    --pf-c-nav__link--active--Color: var(--pf-c-nav--m-tertiary__link--active--Color);\n    --pf-c-nav__link--focus--Color: var(--pf-c-nav--m-tertiary__link--focus--Color);\n    --pf-c-nav__link--m-current--Color: var(--pf-c-nav--m-tertiary__link--m-current--Color);\n    --pf-c-nav__link--BackgroundColor: var(--pf-c-nav--m-tertiary__link--BackgroundColor);\n    --pf-c-nav__link--hover--BackgroundColor: var(--pf-c-nav--m-tertiary__link--hover--BackgroundColor);\n    --pf-c-nav__link--focus--BackgroundColor: var(--pf-c-nav--m-tertiary__link--focus--BackgroundColor);\n    --pf-c-nav__link--active--BackgroundColor: var(--pf-c-nav--m-tertiary__link--active--BackgroundColor);\n    --pf-c-nav__link--m-current--BackgroundColor: var(--pf-c-nav--m-tertiary__link--m-current--BackgroundColor);\n    --pf-c-nav__link--before--BorderColor: var(--pf-c-nav--m-tertiary__link--before--BorderColor);\n    --pf-c-nav__link--before--BorderBottomWidth: var(--pf-c-nav--m-tertiary__link--before--BorderWidth);\n    --pf-c-nav__link--hover--before--BorderBottomWidth: var(--pf-c-nav--m-tertiary__link--hover--before--BorderWidth);\n    --pf-c-nav__link--focus--before--BorderBottomWidth: var(--pf-c-nav--m-tertiary__link--focus--before--BorderWidth);\n    --pf-c-nav__link--active--before--BorderBottomWidth: var(--pf-c-nav--m-tertiary__link--active--before--BorderWidth);\n    --pf-c-nav__link--m-current--before--BorderBottomWidth: var(--pf-c-nav--m-tertiary__link--m-current--before--BorderWidth);\n    --pf-c-nav__scroll-button--Color: var(--pf-c-nav--m-tertiary__scroll-button--Color);\n    --pf-c-nav__scroll-button--hover--Color: var(--pf-c-nav--m-tertiary__scroll-button--hover--Color);\n    --pf-c-nav__scroll-button--focus--Color: var(--pf-c-nav--m-tertiary__scroll-button--focus--Color);\n    --pf-c-nav__scroll-button--active--Color: var(--pf-c-nav--m-tertiary__scroll-button--active--Color);\n    --pf-c-nav__scroll-button--disabled--Color: var(--pf-c-nav--m-tertiary__scroll-button--disabled--Color);\n    --pf-c-nav__scroll-button--before--BorderColor: var(--pf-c-nav--m-tertiary__scroll-button--before--BorderColor);\n    --pf-c-nav__scroll-button--disabled--before--BorderColor: var(--pf-c-nav--m-tertiary__scroll-button--disabled--before--BorderColor); }\n  .pf-c-nav .pf-c-divider {\n    --pf-c-divider--after--BackgroundColor: var(--pf-c-nav--c-divider--BackgroundColor);\n    padding-right: var(--pf-c-nav--c-divider--PaddingRight);\n    padding-left: var(--pf-c-nav--c-divider--PaddingLeft);\n    margin-top: var(--pf-c-nav--c-divider--MarginTop);\n    margin-bottom: var(--pf-c-nav--c-divider--MarginBottom); }\n  .pf-c-nav.pf-m-scrollable .pf-c-nav__scroll-button {\n    opacity: 1; }\n  .pf-c-nav.pf-m-scrollable .pf-c-nav__scroll-button:nth-of-type(1) {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-nav.pf-m-scrollable .pf-c-nav__scroll-button:nth-of-type(2) {\n    margin-left: 0;\n    transform: translateX(0); }\n\n.pf-c-nav__list {\n  display: block; }\n\n.pf-c-nav__item {\n  position: relative;\n  margin-top: var(--pf-c-nav__item--MarginTop); }\n  .pf-c-nav__item.pf-m-expandable {\n    --pf-c-nav__link--before--BorderBottomWidth: 0; }\n    .pf-c-nav__item.pf-m-expandable::before {\n      position: absolute;\n      right: 0;\n      bottom: calc(var(--pf-c-nav__item--before--BorderWidth) * -1);\n      left: 0;\n      content: "";\n      border-bottom: var(--pf-c-nav__item--before--BorderWidth) solid var(--pf-c-nav__item--before--BorderColor); }\n\n.pf-c-nav__link {\n  position: relative;\n  display: flex;\n  align-items: baseline;\n  padding: var(--pf-c-nav__link--PaddingTop) var(--pf-c-nav__link--PaddingRight) var(--pf-c-nav__link--PaddingBottom) var(--pf-c-nav__link--PaddingLeft);\n  font-size: var(--pf-c-nav__link--FontSize);\n  font-weight: var(--pf-c-nav__link--FontWeight);\n  color: var(--pf-c-nav__link--Color);\n  background-color: var(--pf-c-nav__link--BackgroundColor);\n  outline-offset: var(--pf-c-nav__link--OutlineOffset); }\n  .pf-c-nav__link::after, .pf-c-nav__link::before {\n    position: absolute;\n    content: "";\n    border: 0 solid; }\n  .pf-c-nav__link::before {\n    right: 0;\n    bottom: calc(var(--pf-c-nav__link--before--BorderBottomWidth) * -1);\n    left: 0;\n    border-color: var(--pf-c-nav__link--before--BorderColor);\n    border-bottom-width: var(--pf-c-nav__link--before--BorderBottomWidth); }\n  .pf-c-nav__link::after {\n    top: 0;\n    bottom: 0;\n    left: 0;\n    border: 0 solid;\n    border-color: var(--pf-c-nav__link--after--BorderColor);\n    border-left-width: var(--pf-c-nav__link--after--BorderLeftWidth); }\n  .pf-c-nav__link:hover {\n    color: var(--pf-c-nav__link--hover--Color);\n    background-color: var(--pf-c-nav__link--hover--BackgroundColor); }\n    .pf-c-nav__link:hover::before {\n      border-bottom-width: var(--pf-c-nav__link--hover--before--BorderBottomWidth); }\n    .pf-c-nav__link:hover::after {\n      border-color: var(--pf-c-nav__link--hover--after--BorderColor);\n      border-left-width: var(--pf-c-nav__link--hover--after--BorderLeftWidth); }\n  .pf-c-nav__link:focus {\n    color: var(--pf-c-nav__link--focus--Color);\n    background-color: var(--pf-c-nav__link--focus--BackgroundColor); }\n    .pf-c-nav__link:focus::before {\n      border-bottom-width: var(--pf-c-nav__link--focus--before--BorderBottomWidth); }\n    .pf-c-nav__link:focus::after {\n      border-color: var(--pf-c-nav__link--focus--after--BorderColor);\n      border-left-width: var(--pf-c-nav__link--focus--after--BorderLeftWidth); }\n  .pf-c-nav__link:active {\n    color: var(--pf-c-nav__link--active--Color);\n    background-color: var(--pf-c-nav__link--active--BackgroundColor); }\n    .pf-c-nav__link:active::before {\n      border-bottom-width: var(--pf-c-nav__link--active--before--BorderBottomWidth); }\n    .pf-c-nav__link:active::after {\n      border-color: var(--pf-c-nav__link--active--after--BorderColor);\n      border-left-width: var(--pf-c-nav__link--active--after--BorderLeftWidth); }\n  .pf-c-nav__link.pf-m-current, .pf-c-nav__link.pf-m-current:hover,\n  .pf-c-nav__item.pf-m-current:not(.pf-m-expanded) .pf-c-nav__link {\n    color: var(--pf-c-nav__link--m-current--Color);\n    background-color: var(--pf-c-nav__link--m-current--BackgroundColor); }\n    .pf-c-nav__link.pf-m-current::before, .pf-c-nav__link.pf-m-current:hover::before,\n    .pf-c-nav__item.pf-m-current:not(.pf-m-expanded) .pf-c-nav__link::before {\n      border-bottom-width: var(--pf-c-nav__link--m-current--before--BorderBottomWidth); }\n    .pf-c-nav__link.pf-m-current::after, .pf-c-nav__link.pf-m-current:hover::after,\n    .pf-c-nav__item.pf-m-current:not(.pf-m-expanded) .pf-c-nav__link::after {\n      border-color: var(--pf-c-nav__link--m-current--after--BorderColor);\n      border-left-width: var(--pf-c-nav__link--m-current--after--BorderLeftWidth); }\n  .pf-c-nav__link, .pf-c-nav__link:hover, .pf-c-nav__link:focus, .pf-c-nav__link:active {\n    width: 100%;\n    text-decoration: none;\n    border: none; }\n\n.pf-c-nav__subnav {\n  --pf-c-nav__link--PaddingTop: var(--pf-c-nav__subnav__link--PaddingTop);\n  --pf-c-nav__link--PaddingRight: var(--pf-c-nav__subnav__link--PaddingRight);\n  --pf-c-nav__link--PaddingBottom: var(--pf-c-nav__subnav__link--PaddingBottom);\n  --pf-c-nav__link--PaddingLeft: var(--pf-c-nav__subnav__link--PaddingLeft);\n  --pf-c-nav__link--FontSize: var(--pf-c-nav__subnav__link--FontSize);\n  --pf-c-nav__link--hover--after--BorderColor: var(--pf-c-nav__subnav__link--hover--after--BorderColor);\n  --pf-c-nav__link--focus--after--BorderColor: var(--pf-c-nav__subnav__link--focus--after--BorderColor);\n  --pf-c-nav__link--active--after--BorderColor: var(--pf-c-nav__subnav__link--active--after--BorderColor);\n  --pf-c-nav__link--m-current--after--BorderColor: var(--pf-c-nav__subnav__link--m-current--after--BorderColor);\n  --pf-c-nav__link--hover--after--BorderLeftWidth: var(--pf-c-nav__subnav__link--hover--after--BorderWidth);\n  --pf-c-nav__link--focus--after--BorderLeftWidth: var(--pf-c-nav__subnav__link--focus--after--BorderWidth);\n  --pf-c-nav__link--active--after--BorderLeftWidth: var(--pf-c-nav__subnav__link--active--after--BorderWidth);\n  --pf-c-nav__link--m-current--after--BorderLeftWidth: var(--pf-c-nav__subnav__link--m-current--after--BorderWidth);\n  --pf-c-nav--c-divider--PaddingRight: var(--pf-c-nav__subnav--c-divider--PaddingRight);\n  --pf-c-nav--c-divider--PaddingLeft: var(--pf-c-nav__subnav--c-divider--PaddingLeft);\n  max-height: var(--pf-c-nav__subnav--MaxHeight);\n  padding-bottom: var(--pf-c-nav__subnav--PaddingBottom);\n  padding-left: var(--pf-c-nav__subnav--PaddingLeft);\n  transition: var(--pf-c-nav--Transition);\n  scrollbar-width: none;\n  -ms-overflow-style: -ms-autohiding-scrollbar; }\n  .pf-c-nav__item.pf-m-expanded .pf-c-nav__subnav {\n    --pf-c-nav__subnav--MaxHeight: var(--pf-c-nav__item--m-expanded__subnav--MaxHeight);\n    overflow-y: auto;\n    opacity: 1; }\n  .pf-c-nav__subnav::-webkit-scrollbar {\n    display: none; }\n\n.pf-c-nav__toggle {\n  flex: none;\n  padding-right: var(--pf-c-nav__toggle--PaddingRight);\n  padding-left: var(--pf-c-nav__toggle--PaddingLeft);\n  margin-left: auto;\n  font-size: var(--pf-c-nav__toggle--FontSize);\n  line-height: 1; }\n\n.pf-c-nav__toggle-icon {\n  display: inline-block;\n  transition: var(--pf-c-nav__toggle-icon--Transition); }\n  .pf-c-nav__item.pf-m-expanded .pf-c-nav__toggle-icon {\n    transform: rotate(var(--pf-c-nav__item--m-expanded__toggle-icon--Rotate)); }\n\n.pf-c-nav__section {\n  --pf-c-nav__item--MarginTop: var(--pf-c-nav__section__item--MarginTop);\n  --pf-c-nav__link--PaddingTop: var(--pf-c-nav__section__link--PaddingTop);\n  --pf-c-nav__link--PaddingRight: var(--pf-c-nav__section__link--PaddingRight);\n  --pf-c-nav__link--PaddingBottom: var(--pf-c-nav__section__link--PaddingBottom);\n  --pf-c-nav__link--PaddingLeft: var(--pf-c-nav__section__link--PaddingLeft);\n  --pf-c-nav__link--FontSize: var(--pf-c-nav__section__link--FontSize);\n  --pf-c-nav__link--before--BorderBottomWidth: var(--pf-c-nav__section__link--before--BorderBottomWidth);\n  --pf-c-nav__link--hover--after--BorderColor: var(--pf-c-nav__section__link--hover--after--BorderColor);\n  --pf-c-nav__link--focus--after--BorderColor: var(--pf-c-nav__section__link--focus--after--BorderColor);\n  --pf-c-nav__link--active--after--BorderColor: var(--pf-c-nav__section__link--active--after--BorderColor);\n  --pf-c-nav__link--m-current--after--BorderColor: var(--pf-c-nav__section__link--m-current--after--BorderColor);\n  --pf-c-nav__link--hover--after--BorderLeftWidth: var(--pf-c-nav__section__link--hover--after--BorderWidth);\n  --pf-c-nav__link--focus--after--BorderLeftWidth: var(--pf-c-nav__section__link--focus--after--BorderWidth);\n  --pf-c-nav__link--active--after--BorderLeftWidth: var(--pf-c-nav__section__link--active--after--BorderWidth);\n  --pf-c-nav__link--m-current--after--BorderLeftWidth: var(--pf-c-nav__section__link--m-current--after--BorderWidth);\n  margin-top: var(--pf-c-nav__section--MarginTop);\n  --pf-c-nav--c-divider--MarginBottom: 0; }\n  .pf-c-nav__section + .pf-c-nav__section {\n    --pf-c-nav__section--MarginTop: var(--pf-c-nav__section--section--MarginTop); }\n\n.pf-c-nav__section-title {\n  padding: var(--pf-c-nav__section-title--PaddingTop) var(--pf-c-nav__section-title--PaddingRight) var(--pf-c-nav__section-title--PaddingBottom) var(--pf-c-nav__section-title--PaddingLeft);\n  font-size: var(--pf-c-nav__section-title--FontSize);\n  color: var(--pf-c-nav__section-title--Color);\n  border-bottom: var(--pf-c-nav__section-title--BorderBottomWidth) solid var(--pf-c-nav__section-title--BorderBottomColor); }\n\n.pf-c-nav__scroll-button {\n  flex: none;\n  width: var(--pf-c-nav__scroll-button--Width);\n  color: var(--pf-c-nav__scroll-button--Color);\n  background-color: var(--pf-c-nav__scroll-button--BackgroundColor);\n  border: 0;\n  outline-offset: var(--pf-c-nav__scroll-button--OutlineOffset);\n  opacity: 0;\n  transition: var(--pf-c-nav__scroll-button--Transition); }\n  .pf-c-nav__scroll-button::before {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    content: "";\n    border: solid var(--pf-c-nav__scroll-button--before--BorderColor);\n    border-width: 0 var(--pf-c-nav__scroll-button--before--BorderRightWidth) 0 var(--pf-c-nav__scroll-button--before--BorderLeftWidth); }\n  .pf-c-nav__scroll-button:hover {\n    color: var(--pf-c-nav__scroll-button--hover--Color); }\n  .pf-c-nav__scroll-button:focus {\n    color: var(--pf-c-nav__scroll-button--focus--Color); }\n  .pf-c-nav__scroll-button:active {\n    color: var(--pf-c-nav__scroll-button--active--Color); }\n  .pf-c-nav__scroll-button:disabled {\n    color: var(--pf-c-nav__scroll-button--disabled--Color);\n    border-color: var(--pf-c-nav__scroll-button--disabled--before--BorderColor); }\n  .pf-c-nav__scroll-button:nth-of-type(1) {\n    --pf-c-nav__scroll-button--before--BorderRightWidth: var(--pf-c-nav__scroll-button--before--BorderWidth);\n    margin-right: calc(var(--pf-c-nav__scroll-button--Width) * -1);\n    transform: translateX(-100%); }\n    .pf-c-nav__scroll-button:nth-of-type(1)::before {\n      right: 0; }\n  .pf-c-nav__scroll-button:nth-of-type(2) {\n    --pf-c-nav__scroll-button--before--BorderLeftWidth: var(--pf-c-nav__scroll-button--before--BorderWidth);\n    margin-left: calc(var(--pf-c-nav__scroll-button--Width) * -1);\n    transform: translateX(100%); }\n    .pf-c-nav__scroll-button:nth-of-type(2)::before {\n      left: 0; }\n\n.pf-c-notification-badge {\n  --pf-c-notification-badge--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-notification-badge--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-notification-badge--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-notification-badge--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-notification-badge--MarginTop: calc(-1 * var(--pf-global--spacer--form-element));\n  --pf-c-notification-badge--MarginRight: calc(-1 * var(--pf-global--spacer--md));\n  --pf-c-notification-badge--MarginBottom: calc(-1 * var(--pf-global--spacer--form-element));\n  --pf-c-notification-badge--MarginLeft: calc(-1 * var(--pf-global--spacer--md));\n  --pf-c-notification-badge--after--BorderColor: transparent;\n  --pf-c-notification-badge--after--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-notification-badge--after--BorderWidth: 0;\n  --pf-c-notification-badge--after--Top: 0;\n  --pf-c-notification-badge--after--Right: 0;\n  --pf-c-notification-badge--after--Width: auto;\n  --pf-c-notification-badge--after--Height: auto;\n  --pf-c-notification-badge--after--BackgroundColor: transparent;\n  --pf-c-notification-badge--after--TranslateX: 0;\n  --pf-c-notification-badge--after--TranslateY: 0;\n  --pf-c-notification-badge__i--Width: auto;\n  --pf-c-notification-badge__i--Height: auto;\n  --pf-c-notification-badge--m-read--after--BorderColor: transparent;\n  --pf-c-notification-badge--m-read--after--BackgroundColor: transparent;\n  --pf-c-notification-badge--m-unread--Color: var(--pf-global--Color--light-100);\n  --pf-c-notification-badge--m-unread--after--BackgroundColor: var(--pf-global--active-color--100);\n  --pf-c-notification-badge--m-unread--hover--after--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-notification-badge--m-attention--Color: var(--pf-global--Color--light-100);\n  --pf-c-notification-badge--m-attention--after--BackgroundColor: var(--pf-global--danger-color--100);\n  --pf-c-notification-badge--m-attention--hover--after--BackgroundColor: var(--pf-global--danger-color--200);\n  --pf-c-notification-badge__count--MarginLeft: var(--pf-global--spacer--xs);\n  --pf-c-notification-badge--pf-icon-attention-bell--LineHeight: var(--pf-global--LineHeight--sm);\n  position: relative;\n  display: inline-block;\n  padding: var(--pf-c-notification-badge--PaddingTop) var(--pf-c-notification-badge--PaddingRight) var(--pf-c-notification-badge--PaddingBottom) var(--pf-c-notification-badge--PaddingLeft);\n  margin: var(--pf-c-notification-badge--MarginTop) var(--pf-c-notification-badge--MarginRight) var(--pf-c-notification-badge--MarginBottom) var(--pf-c-notification-badge--MarginLeft);\n  background-color: var(--pf-c-notification-badge--after--BackgroundColor);\n  border-radius: var(--pf-c-notification-badge--after--BorderRadius); }\n  .pf-c-notification-badge::before {\n    position: absolute;\n    top: var(--pf-c-notification-badge--after--Top);\n    right: var(--pf-c-notification-badge--after--Right);\n    bottom: 0;\n    left: 0;\n    width: var(--pf-c-notification-badge--after--Width);\n    height: var(--pf-c-notification-badge--after--Height);\n    content: "";\n    border: var(--pf-c-notification-badge--after--BorderWidth) solid var(--pf-c-notification-badge--after--BorderColor);\n    border-radius: var(--pf-c-notification-badge--after--BorderRadius);\n    transform: translate(var(--pf-c-notification-badge--after--TranslateX), var(--pf-c-notification-badge--after--TranslateY)); }\n  .pf-c-notification-badge > i {\n    width: var(--pf-c-notification-badge__i--Width);\n    height: var(--pf-c-notification-badge__i--Height); }\n  .pf-c-notification-badge > * {\n    position: relative; }\n  .pf-c-notification-badge .pf-icon-attention-bell,\n  .pf-c-notification-badge .pf-icon-bell {\n    display: inline-block;\n    line-height: var(--pf-c-notification-badge--pf-icon-attention-bell--LineHeight); }\n    .pf-c-notification-badge .pf-icon-attention-bell::before,\n    .pf-c-notification-badge .pf-icon-bell::before {\n      vertical-align: bottom; }\n  .pf-c-notification-badge.pf-m-read {\n    --pf-c-notification-badge--after--BackgroundColor: var(--pf-c-notification-badge--m-read--after--BackgroundColor);\n    --pf-c-notification-badge--after--BorderColor: var(--pf-c-notification-badge--m-read--after--BorderColor); }\n  .pf-c-notification-badge.pf-m-unread {\n    --pf-c-notification-badge--after--BackgroundColor: var(--pf-c-notification-badge--m-unread--after--BackgroundColor);\n    color: var(--pf-c-notification-badge--m-unread--Color); }\n    .pf-c-notification-badge.pf-m-unread:hover {\n      --pf-c-notification-badge--after--BackgroundColor: var(--pf-c-notification-badge--m-unread--hover--after--BackgroundColor); }\n  .pf-c-notification-badge.pf-m-attention {\n    --pf-c-notification-badge--after--BackgroundColor: var(--pf-c-notification-badge--m-attention--after--BackgroundColor);\n    color: var(--pf-c-notification-badge--m-attention--Color); }\n    .pf-c-notification-badge.pf-m-attention:hover {\n      --pf-c-notification-badge--after--BackgroundColor: var(--pf-c-notification-badge--m-attention--hover--after--BackgroundColor); }\n\n.pf-c-notification-badge__count {\n  margin-left: var(--pf-c-notification-badge__count--MarginLeft); }\n\n.pf-c-notification-drawer {\n  --pf-c-notification-drawer--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-notification-drawer__header--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__header--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__header--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__header--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__header--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-notification-drawer__header--BoxShadow: var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-notification-drawer__header--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-notification-drawer__header-title--FontSize: var(--pf-global--FontSize--xl);\n  --pf-c-notification-drawer__header-status--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__body--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-notification-drawer__list-item--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__list-item--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__list-item--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__list-item--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__list-item--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-notification-drawer__list-item--BoxShadow: inset var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-notification-drawer__list-item--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-notification-drawer__list-item--BorderBottomColor: transparent;\n  --pf-c-notification-drawer__list-item--OutlineOffset: -0.25rem;\n  --pf-c-notification-drawer__list-item--before--Width: var(--pf-global--BorderWidth--lg);\n  --pf-c-notification-drawer__list-item--before--Top: 0;\n  --pf-c-notification-drawer__list-item--before--Bottom: calc(var(--pf-c-notification-drawer__list-item--BorderBottomWidth) * -1);\n  --pf-c-notification-drawer__list-item--m-info__list-item-header-icon--Color: var(--pf-global--info-color--100);\n  --pf-c-notification-drawer__list-item--m-info__list-item--before--BackgroundColor: var(--pf-global--info-color--100);\n  --pf-c-notification-drawer__list-item--m-warning__list-item-header-icon--Color: var(--pf-global--warning-color--100);\n  --pf-c-notification-drawer__list-item--m-warning__list-item--before--BackgroundColor: var(--pf-global--warning-color--100);\n  --pf-c-notification-drawer__list-item--m-danger__list-item-header-icon--Color: var(--pf-global--danger-color--100);\n  --pf-c-notification-drawer__list-item--m-danger__list-item--before--BackgroundColor: var(--pf-global--danger-color--100);\n  --pf-c-notification-drawer__list-item--m-success__list-item-header-icon--Color: var(--pf-global--success-color--100);\n  --pf-c-notification-drawer__list-item--m-success__list-item--before--BackgroundColor: var(--pf-global--success-color--100);\n  --pf-c-notification-drawer__list-item--m-default__list-item-header-icon--Color: var(--pf-global--default-color--200);\n  --pf-c-notification-drawer__list-item--m-default__list-item--before--BackgroundColor: var(--pf-global--default-color--200);\n  --pf-c-notification-drawer__list-item--m-read--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-notification-drawer__list-item--m-read--BorderBottomColor: var(--pf-global--BorderColor--100);\n  --pf-c-notification-drawer__list-item--m-read--before--Top: calc(var(--pf-c-notification-drawer__list-item--BorderBottomWidth) * -1);\n  --pf-c-notification-drawer__list-item--m-read--before--Bottom: 0;\n  --pf-c-notification-drawer__list-item--m-read--before--BackgroundColor: transparent;\n  --pf-c-notification-drawer__list-item--list-item--m-read--before--Top: 0;\n  --pf-c-notification-drawer__list-item--list-item--m-read--BoxShadow: inset var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-notification-drawer__list-item--m-hoverable--hover--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-notification-drawer__list-item--m-hoverable--hover--BoxShadow: var(--pf-global--BoxShadow--md-top), var(--pf-global--BoxShadow--md-bottom);\n  --pf-c-notification-drawer__list-item-header--MarginBottom: var(--pf-global--spacer--xs);\n  --pf-c-notification-drawer__list-item-header-icon--Color: inherit;\n  --pf-c-notification-drawer__list-item-header-icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-notification-drawer__list-item-header-title--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-notification-drawer__list-item-header-title--max-lines: 1;\n  --pf-c-notification-drawer__list-item--m-read__list-item-header-title--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-notification-drawer__list-item-description--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-notification-drawer__list-item-timestamp--Color: var(--pf-global--Color--200);\n  --pf-c-notification-drawer__list-item-timestamp--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-notification-drawer__group--m-expanded--group--BorderTopWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-notification-drawer__group--m-expanded--group--BorderTopColor: var(--pf-global--BorderColor--100);\n  --pf-c-notification-drawer__group--m-expanded--MinHeight: 0;\n  --pf-c-notification-drawer__group-toggle--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__group-toggle--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__group-toggle--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__group-toggle--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__group-toggle--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-notification-drawer__group-toggle--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-notification-drawer__group-toggle--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-notification-drawer__group-toggle--OutlineOffset: -0.25rem;\n  --pf-c-notification-drawer__group-toggle-title--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__group-toggle-title--max-lines: 1;\n  --pf-c-notification-drawer__group-toggle-count--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__group-toggle-icon--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__group-toggle-icon--Color: var(--pf-global--Color--200);\n  --pf-c-notification-drawer__group-toggle-icon--Transition: .2s ease-in 0s;\n  --pf-c-notification-drawer__group--m-expanded__group-toggle-icon--Rotate: 90deg;\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  background-color: var(--pf-c-notification-drawer--BackgroundColor); }\n\n.pf-c-notification-drawer__header {\n  position: relative;\n  z-index: var(--pf-c-notification-drawer__header--ZIndex);\n  display: flex;\n  flex-shrink: 0;\n  align-items: baseline;\n  padding: var(--pf-c-notification-drawer__header--PaddingTop) var(--pf-c-notification-drawer__header--PaddingRight) var(--pf-c-notification-drawer__header--PaddingBottom) var(--pf-c-notification-drawer__header--PaddingLeft);\n  background-color: var(--pf-c-notification-drawer__header--BackgroundColor);\n  box-shadow: var(--pf-c-notification-drawer__header--BoxShadow); }\n\n.pf-c-notification-drawer__header-title {\n  font-size: var(--pf-c-notification-drawer__header-title--FontSize); }\n\n.pf-c-notification-drawer__header-status {\n  margin-left: var(--pf-c-notification-drawer__header-status--MarginLeft); }\n\n.pf-c-notification-drawer__header-action {\n  display: flex;\n  align-items: center;\n  margin-left: auto; }\n\n.pf-c-notification-drawer__body {\n  overflow-y: auto;\n  box-shadow: var(--pf-c-notification-drawer__body--ZIndex); }\n\n.pf-c-notification-drawer__list-item {\n  position: relative;\n  display: grid;\n  grid-template-columns: 1fr auto;\n  padding: var(--pf-c-notification-drawer__list-item--PaddingTop) var(--pf-c-notification-drawer__list-item--PaddingRight) var(--pf-c-notification-drawer__list-item--PaddingBottom) var(--pf-c-notification-drawer__list-item--PaddingLeft);\n  background-color: var(--pf-c-notification-drawer__list-item--BackgroundColor);\n  border-bottom: var(--pf-c-notification-drawer__list-item--BorderBottomWidth) solid var(--pf-c-notification-drawer__list-item--BorderBottomColor);\n  outline-offset: var(--pf-c-notification-drawer__list-item--OutlineOffset);\n  box-shadow: var(--pf-c-notification-drawer__list-item--BoxShadow); }\n  .pf-c-notification-drawer__list-item.pf-m-read, .pf-c-notification-drawer__list-item:first-child {\n    --pf-c-notification-drawer__list-item--BoxShadow: none; }\n  .pf-c-notification-drawer__list-item:not(.pf-m-read) + .pf-c-notification-drawer__list-item.pf-m-read {\n    --pf-c-notification-drawer__list-item--BoxShadow: var(--pf-c-notification-drawer__list-item--list-item--m-read--BoxShadow);\n    --pf-c-notification-drawer__list-item--before--Top: var(--pf-c-notification-drawer__list-item--list-item--m-read--before--Top); }\n  .pf-c-notification-drawer__list-item::before {\n    position: absolute;\n    top: var(--pf-c-notification-drawer__list-item--before--Top);\n    bottom: var(--pf-c-notification-drawer__list-item--before--Bottom);\n    width: var(--pf-c-notification-drawer__list-item--before--Width);\n    content: "";\n    background-color: var(--pf-c-notification-drawer__list-item--before--BackgroundColor); }\n  .pf-c-notification-drawer__list-item.pf-m-info {\n    --pf-c-notification-drawer__list-item--before--BackgroundColor: var(--pf-c-notification-drawer__list-item--m-info__list-item--before--BackgroundColor);\n    --pf-c-notification-drawer__list-item-header-icon--Color: var(--pf-c-notification-drawer__list-item--m-info__list-item-header-icon--Color); }\n  .pf-c-notification-drawer__list-item.pf-m-warning {\n    --pf-c-notification-drawer__list-item--before--BackgroundColor: var(--pf-c-notification-drawer__list-item--m-warning__list-item--before--BackgroundColor);\n    --pf-c-notification-drawer__list-item-header-icon--Color: var(--pf-c-notification-drawer__list-item--m-warning__list-item-header-icon--Color); }\n  .pf-c-notification-drawer__list-item.pf-m-danger {\n    --pf-c-notification-drawer__list-item--before--BackgroundColor: var(--pf-c-notification-drawer__list-item--m-danger__list-item--before--BackgroundColor);\n    --pf-c-notification-drawer__list-item-header-icon--Color: var(--pf-c-notification-drawer__list-item--m-danger__list-item-header-icon--Color); }\n  .pf-c-notification-drawer__list-item.pf-m-success {\n    --pf-c-notification-drawer__list-item--before--BackgroundColor: var(--pf-c-notification-drawer__list-item--m-success__list-item--before--BackgroundColor);\n    --pf-c-notification-drawer__list-item-header-icon--Color: var(--pf-c-notification-drawer__list-item--m-success__list-item-header-icon--Color); }\n  .pf-c-notification-drawer__list-item.pf-m-default {\n    --pf-c-notification-drawer__list-item--before--BackgroundColor: var(--pf-c-notification-drawer__list-item--m-default__list-item--before--BackgroundColor);\n    --pf-c-notification-drawer__list-item-header-icon--Color: var(--pf-c-notification-drawer__list-item--m-default__list-item-header-icon--Color); }\n  .pf-c-notification-drawer__list-item.pf-m-read {\n    --pf-c-notification-drawer__list-item--BorderBottomColor: var(--pf-c-notification-drawer__list-item--m-read--BorderBottomColor);\n    --pf-c-notification-drawer__list-item--BackgroundColor: var(--pf-c-notification-drawer__list-item--m-read--BackgroundColor);\n    --pf-c-notification-drawer__list-item--before--Top: var(--pf-c-notification-drawer__list-item--m-read--before--Top);\n    --pf-c-notification-drawer__list-item--before--Bottom: var(--pf-c-notification-drawer__list-item--m-read--before--Bottom);\n    --pf-c-notification-drawer__list-item--before--BackgroundColor: var(--pf-c-notification-drawer__list-item--m-read--before--BackgroundColor);\n    --pf-c-notification-drawer__list-item-header-title--FontWeight: var(--pf-c-notification-drawer__list-item--m-read__list-item-header-title--FontWeight);\n    position: relative; }\n  .pf-c-notification-drawer__list-item.pf-m-hoverable {\n    cursor: pointer; }\n    .pf-c-notification-drawer__list-item.pf-m-hoverable:hover {\n      z-index: var(--pf-c-notification-drawer__list-item--m-hoverable--hover--ZIndex);\n      box-shadow: var(--pf-c-notification-drawer__list-item--m-hoverable--hover--BoxShadow); }\n\n.pf-c-notification-drawer__list-item-header {\n  display: flex;\n  align-items: baseline;\n  grid-column: 1 / 2;\n  grid-row: 1 / 2;\n  margin-bottom: var(--pf-c-notification-drawer__list-item-header--MarginBottom); }\n\n.pf-c-notification-drawer__list-item-header-icon {\n  margin-right: var(--pf-c-notification-drawer__list-item-header-icon--MarginRight);\n  color: var(--pf-c-notification-drawer__list-item-header-icon--Color); }\n\n.pf-c-notification-drawer__list-item-header-title {\n  font-weight: var(--pf-c-notification-drawer__list-item-header-title--FontWeight);\n  word-break: break-word; }\n  .pf-c-notification-drawer__list-item-header-title.pf-m-truncate {\n    display: -webkit-box;\n    -webkit-box-orient: vertical;\n    -webkit-line-clamp: var(--pf-c-notification-drawer__list-item-header-title--max-lines);\n    overflow: hidden; }\n\n.pf-c-notification-drawer__list-item-action {\n  grid-column: 2 / 3;\n  grid-row: 1 / 3; }\n\n.pf-c-notification-drawer__list-item-description {\n  grid-row: 2 / 3;\n  grid-column: 1 / 2;\n  margin-bottom: var(--pf-c-notification-drawer__list-item-description--MarginBottom);\n  word-break: break-word; }\n\n.pf-c-notification-drawer__list-item-timestamp {\n  grid-row: 3 / 4;\n  grid-column: 1 / 2;\n  font-size: var(--pf-c-notification-drawer__list-item-timestamp--FontSize);\n  color: var(--pf-c-notification-drawer__list-item-timestamp--Color); }\n\n.pf-c-notification-drawer__group-list {\n  display: flex;\n  flex-direction: column; }\n\n.pf-c-notification-drawer__group.pf-m-expanded {\n  min-height: var(--pf-c-notification-drawer__group--m-expanded--MinHeight); }\n  .pf-c-notification-drawer__group.pf-m-expanded + .pf-c-notification-drawer__group {\n    border-top: var(--pf-c-notification-drawer__group--m-expanded--group--BorderTopWidth) solid var(--pf-c-notification-drawer__group--m-expanded--group--BorderTopColor); }\n\n.pf-c-notification-drawer__group .pf-c-notification-drawer__list-item:last-child {\n  --pf-c-notification-drawer__list-item--BorderBottomWidth: 0;\n  --pf-c-notification-drawer__list-item--before--Bottom: 0; }\n\n.pf-c-notification-drawer__group-toggle {\n  display: flex;\n  align-items: baseline;\n  width: 100%;\n  padding: var(--pf-c-notification-drawer__group-toggle--PaddingTop) var(--pf-c-notification-drawer__group-toggle--PaddingRight) var(--pf-c-notification-drawer__group-toggle--PaddingBottom) var(--pf-c-notification-drawer__group-toggle--PaddingLeft);\n  background-color: var(--pf-c-notification-drawer__group-toggle--BackgroundColor);\n  border: solid var(--pf-c-notification-drawer__group-toggle--BorderColor);\n  border-width: 0 0 var(--pf-c-notification-drawer__group-toggle--BorderBottomWidth) 0;\n  outline-offset: var(--pf-c-notification-drawer__group-toggle--OutlineOffset); }\n\n.pf-c-notification-drawer__group-toggle-title {\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: var(--pf-c-notification-drawer__group-toggle-title--max-lines);\n  overflow: hidden;\n  margin-right: var(--pf-c-notification-drawer__group-toggle-title--MarginRight);\n  text-align: left;\n  word-break: break-word; }\n\n.pf-c-notification-drawer__group-toggle-count {\n  margin-right: var(--pf-c-notification-drawer__group-toggle-count--MarginRight);\n  margin-left: auto; }\n\n.pf-c-notification-drawer__group-toggle-icon {\n  margin-right: var(--pf-c-notification-drawer__group-toggle-icon--MarginRight);\n  color: var(--pf-c-notification-drawer__group-toggle-icon--Color);\n  transition: var(--pf-c-notification-drawer__group-toggle-icon--Transition); }\n  .pf-c-notification-drawer__group.pf-m-expanded .pf-c-notification-drawer__group-toggle-icon {\n    transform: rotate(var(--pf-c-notification-drawer__group--m-expanded__group-toggle-icon--Rotate)); }\n\n.pf-c-options-menu {\n  --pf-c-options-menu__toggle--BackgroundColor: transparent;\n  --pf-c-options-menu__toggle--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-options-menu__toggle--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__toggle--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-options-menu__toggle--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__toggle--MinWidth: var(--pf-global--target-size--MinWidth);\n  --pf-c-options-menu__toggle--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-options-menu__toggle--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-options-menu__toggle--BorderTopColor: var(--pf-global--BorderColor--300);\n  --pf-c-options-menu__toggle--BorderRightColor: var(--pf-global--BorderColor--300);\n  --pf-c-options-menu__toggle--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-options-menu__toggle--BorderLeftColor: var(--pf-global--BorderColor--300);\n  --pf-c-options-menu__toggle--Color: var(--pf-global--Color--100);\n  --pf-c-options-menu__toggle--hover--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-options-menu__toggle--active--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-options-menu__toggle--active--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-options-menu__toggle--focus--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-options-menu__toggle--focus--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-options-menu__toggle--expanded--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-options-menu__toggle--expanded--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-options-menu__toggle--disabled--BackgroundColor: var(--pf-global--disabled-color--300);\n  --pf-c-options-menu__toggle--m-plain--Color: var(--pf-global--Color--200);\n  --pf-c-options-menu__toggle--m-plain--hover--Color: var(--pf-global--Color--100);\n  --pf-c-options-menu__toggle--m-plain--disabled--Color: var(--pf-global--disabled-color--200);\n  --pf-c-options-menu__toggle-icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__toggle-icon--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-options-menu--m-top--m-expanded__toggle-icon--Rotate: 180deg;\n  --pf-c-options-menu__toggle-button--BackgroundColor: transparent;\n  --pf-c-options-menu__toggle-button--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-options-menu__toggle-button--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__toggle-button--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-options-menu__toggle-button--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__menu--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-options-menu__menu--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-options-menu__menu--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__menu--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__menu--Top: calc(100% + var(--pf-global--spacer--xs));\n  --pf-c-options-menu__menu--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-options-menu--m-top__menu--Top: 0;\n  --pf-c-options-menu--m-top__menu--TranslateY: calc(-100% - var(--pf-global--spacer--xs));\n  --pf-c-options-menu__menu-item--BackgroundColor: transparent;\n  --pf-c-options-menu__menu-item--Color: var(--pf-global--Color--100);\n  --pf-c-options-menu__menu-item--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-options-menu__menu-item--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__menu-item--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-options-menu__menu-item--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__menu-item--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-options-menu__menu-item--disabled--Color: var(--pf-global--Color--dark-200);\n  --pf-c-options-menu__menu-item--hover--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-options-menu__menu-item--disabled--BackgroundColor: transparent;\n  --pf-c-options-menu__menu-item-icon--Color: var(--pf-global--active-color--100);\n  --pf-c-options-menu__menu-item-icon--FontSize: var(--pf-global--icon--FontSize--sm);\n  --pf-c-options-menu__menu-item-icon--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-options-menu__group--group--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__group-title--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__group-title--PaddingRight: var(--pf-c-options-menu__menu-item--PaddingRight);\n  --pf-c-options-menu__group-title--PaddingBottom: var(--pf-c-options-menu__menu-item--PaddingBottom);\n  --pf-c-options-menu__group-title--PaddingLeft: var(--pf-c-options-menu__menu-item--PaddingLeft);\n  --pf-c-options-menu__group-title--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-options-menu__group-title--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-options-menu__group-title--Color: var(--pf-global--Color--dark-200);\n  --pf-c-options-menu--c-divider--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-options-menu--c-divider--MarginBottom: var(--pf-global--spacer--sm);\n  position: relative;\n  display: inline-block;\n  max-width: 100%; }\n  .pf-c-options-menu .pf-c-divider {\n    margin-top: var(--pf-c-options-menu--c-divider--MarginTop);\n    margin-bottom: var(--pf-c-options-menu--c-divider--MarginBottom); }\n    .pf-c-options-menu .pf-c-divider:last-child {\n      --pf-c-options-menu--c-divider--MarginBottom: 0; }\n\n.pf-c-options-menu__toggle:not(.pf-m-plain)::before,\n.pf-c-options-menu.pf-m-text:not(.pf-m-plain) .pf-c-options-menu__toggle-button::before {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  content: "";\n  border: var(--pf-c-options-menu__toggle--BorderWidth) solid;\n  border-color: var(--pf-c-options-menu__toggle--BorderTopColor) var(--pf-c-options-menu__toggle--BorderRightColor) var(--pf-c-options-menu__toggle--BorderBottomColor) var(--pf-c-options-menu__toggle--BorderLeftColor); }\n\n.pf-c-options-menu__toggle:not(.pf-m-plain):hover::before,\n.pf-c-options-menu.pf-m-text:not(.pf-m-plain) .pf-c-options-menu__toggle-button:hover::before {\n  --pf-c-options-menu__toggle--BorderBottomColor: var(--pf-c-options-menu__toggle--hover--BorderBottomColor); }\n\n.pf-c-options-menu__toggle:not(.pf-m-plain):active::before, .pf-c-options-menu__toggle:not(.pf-m-plain).pf-m-active::before,\n.pf-c-options-menu.pf-m-text:not(.pf-m-plain) .pf-c-options-menu__toggle-button:active::before,\n.pf-c-options-menu.pf-m-text:not(.pf-m-plain) .pf-c-options-menu__toggle-button.pf-m-active::before {\n  --pf-c-options-menu__toggle--BorderBottomColor: var(--pf-c-options-menu__toggle--active--BorderBottomColor);\n  border-bottom-width: var(--pf-c-options-menu__toggle--active--BorderBottomWidth); }\n\n.pf-c-options-menu__toggle:not(.pf-m-plain):focus::before,\n.pf-c-options-menu.pf-m-text:not(.pf-m-plain) .pf-c-options-menu__toggle-button:focus::before {\n  --pf-c-options-menu__toggle--BorderBottomColor: var(--pf-c-options-menu__toggle--focus--BorderBottomColor);\n  border-bottom-width: var(--pf-c-options-menu__toggle--focus--BorderBottomWidth); }\n\n.pf-c-options-menu__toggle {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  min-width: var(--pf-c-options-menu__toggle--MinWidth);\n  max-width: 100%;\n  padding-left: var(--pf-c-options-menu__toggle--PaddingLeft);\n  line-height: var(--pf-c-options-menu__toggle--LineHeight);\n  color: var(--pf-c-options-menu__toggle--Color);\n  background-color: var(--pf-c-options-menu__toggle--BackgroundColor);\n  border: none; }\n  .pf-c-options-menu__toggle:not(.pf-m-text) {\n    padding-top: var(--pf-c-options-menu__toggle--PaddingTop);\n    padding-right: var(--pf-c-options-menu__toggle--PaddingRight);\n    padding-bottom: var(--pf-c-options-menu__toggle--PaddingBottom); }\n  .pf-c-options-menu.pf-m-expanded > .pf-c-options-menu__toggle::before {\n    --pf-c-options-menu__toggle--BorderBottomColor: var(--pf-c-options-menu__toggle--expanded--BorderBottomColor);\n    border-bottom-width: var(--pf-c-options-menu__toggle--expanded--BorderBottomWidth); }\n  .pf-c-options-menu__toggle.pf-m-plain:not(.pf-m-text) {\n    justify-content: center;\n    color: var(--pf-c-options-menu__toggle--m-plain--Color); }\n  .pf-c-options-menu__toggle.pf-m-plain .pf-c-options-menu__toggle-button-icon {\n    line-height: var(--pf-c-options-menu__toggle--LineHeight); }\n  .pf-c-options-menu__toggle.pf-m-plain:hover, .pf-c-options-menu__toggle.pf-m-plain:active, .pf-c-options-menu__toggle.pf-m-plain.pf-m-active, .pf-c-options-menu__toggle.pf-m-plain:focus,\n  .pf-c-options-menu.pf-m-expanded > .pf-c-options-menu__toggle.pf-m-plain {\n    --pf-c-options-menu__toggle--m-plain--Color: var(--pf-c-options-menu__toggle--m-plain--hover--Color); }\n  .pf-c-options-menu__toggle.pf-m-plain.pf-m-disabled, .pf-c-options-menu__toggle.pf-m-plain:disabled {\n    --pf-c-options-menu__toggle--m-plain--Color: var(--pf-c-options-menu__toggle--m-plain--disabled--Color); }\n  .pf-c-options-menu__toggle.pf-m-disabled, .pf-c-options-menu__toggle:disabled {\n    pointer-events: none; }\n    .pf-c-options-menu__toggle.pf-m-disabled:not(.pf-m-plain), .pf-c-options-menu__toggle.pf-m-disabled.pf-m-text, .pf-c-options-menu__toggle:disabled:not(.pf-m-plain), .pf-c-options-menu__toggle:disabled.pf-m-text {\n      --pf-c-options-menu__toggle--BackgroundColor: var(--pf-c-options-menu__toggle--disabled--BackgroundColor); }\n    .pf-c-options-menu__toggle.pf-m-disabled::before, .pf-c-options-menu__toggle:disabled::before {\n      border: 0; }\n\n.pf-c-options-menu__toggle-button-icon {\n  position: relative; }\n\n.pf-c-options-menu__toggle-button {\n  padding: var(--pf-c-options-menu__toggle-button--PaddingTop) var(--pf-c-options-menu__toggle-button--PaddingRight) var(--pf-c-options-menu__toggle-button--PaddingBottom) var(--pf-c-options-menu__toggle-button--PaddingLeft);\n  background-color: var(--pf-c-options-menu__toggle-button--BackgroundColor);\n  border: 0; }\n\n.pf-c-options-menu__toggle-text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.pf-c-options-menu__toggle-icon {\n  margin-right: var(--pf-c-options-menu__toggle-icon--MarginRight);\n  margin-left: var(--pf-c-options-menu__toggle-icon--MarginLeft); }\n  .pf-c-options-menu.pf-m-top.pf-m-expanded .pf-c-options-menu__toggle-icon {\n    transform: rotate(var(--pf-c-options-menu--m-top--m-expanded__toggle-icon--Rotate)); }\n\n.pf-c-options-menu__menu {\n  position: absolute;\n  top: var(--pf-c-options-menu__menu--Top);\n  z-index: var(--pf-c-options-menu__menu--ZIndex);\n  min-width: 100%;\n  padding-top: var(--pf-c-options-menu__menu--PaddingTop);\n  padding-bottom: var(--pf-c-options-menu__menu--PaddingBottom);\n  background-color: var(--pf-c-options-menu__menu--BackgroundColor);\n  background-clip: padding-box;\n  box-shadow: var(--pf-c-options-menu__menu--BoxShadow); }\n  .pf-c-options-menu__menu.pf-m-align-right {\n    right: 0; }\n  .pf-c-options-menu.pf-m-top .pf-c-options-menu__menu {\n    --pf-c-options-menu__menu--Top: var(--pf-c-options-menu--m-top__menu--Top);\n    transform: translateY(var(--pf-c-options-menu--m-top__menu--TranslateY)); }\n\n.pf-c-options-menu__menu-item {\n  display: flex;\n  align-items: baseline;\n  width: 100%;\n  padding: var(--pf-c-options-menu__menu-item--PaddingTop) var(--pf-c-options-menu__menu-item--PaddingRight) var(--pf-c-options-menu__menu-item--PaddingBottom) var(--pf-c-options-menu__menu-item--PaddingLeft);\n  font-size: var(--pf-c-options-menu__menu-item--FontSize);\n  color: var(--pf-c-options-menu__menu-item--Color);\n  white-space: nowrap;\n  background-color: var(--pf-c-options-menu__menu-item--BackgroundColor);\n  border: none; }\n  .pf-c-options-menu__menu-item:hover, .pf-c-options-menu__menu-item:focus {\n    text-decoration: none;\n    background-color: var(--pf-c-options-menu__menu-item--hover--BackgroundColor); }\n  .pf-c-options-menu__menu-item:disabled, .pf-c-options-menu__menu-item.pf-m-disabled {\n    color: var(--pf-c-options-menu__menu-item--disabled--Color);\n    pointer-events: none;\n    background-color: var(--pf-c-options-menu__menu-item--disabled--BackgroundColor); }\n\n.pf-c-options-menu__menu-item-icon {\n  align-self: center;\n  width: auto;\n  padding-left: var(--pf-c-options-menu__menu-item-icon--PaddingLeft);\n  margin-left: auto;\n  font-size: var(--pf-c-options-menu__menu-item-icon--FontSize);\n  color: var(--pf-c-options-menu__menu-item-icon--Color); }\n\n.pf-c-options-menu__group + .pf-c-options-menu__group {\n  padding-top: var(--pf-c-options-menu__group--group--PaddingTop); }\n\n.pf-c-options-menu__group-title {\n  padding-top: var(--pf-c-options-menu__group-title--PaddingTop);\n  padding-right: var(--pf-c-options-menu__group-title--PaddingRight);\n  padding-bottom: var(--pf-c-options-menu__group-title--PaddingBottom);\n  padding-left: var(--pf-c-options-menu__group-title--PaddingLeft);\n  font-size: var(--pf-c-options-menu__group-title--FontSize);\n  font-weight: var(--pf-c-options-menu__group-title--FontWeight);\n  color: var(--pf-c-options-menu__group-title--Color); }\n\n.pf-c-overflow-menu {\n  --pf-c-overflow-menu--spacer--base: var(--pf-global--spacer--md);\n  --pf-c-overflow-menu--spacer: var(--pf-global--spacer--sm);\n  --pf-c-overflow-menu__group--spacer: var(--pf-c-overflow-menu--spacer--base);\n  --pf-c-overflow-menu__item--spacer: var(--pf-c-overflow-menu--spacer--base);\n  --pf-c-overflow-menu--c-divider--m-vertical--spacer: var(--pf-c-overflow-menu--spacer--base);\n  --pf-c-overflow-menu__group--m-button-group--spacer: var(--pf-c-overflow-menu--spacer--base);\n  --pf-c-overflow-menu__group--m-button-group--space-items: var(--pf-global--spacer--sm);\n  --pf-c-overflow-menu__group--m-icon-button-group--spacer: var(--pf-c-overflow-menu--spacer--base);\n  --pf-c-overflow-menu__group--m-icon-button-group--space-items: 0;\n  display: inline-flex;\n  align-items: center; }\n\n.pf-c-overflow-menu__content {\n  display: flex;\n  align-items: center; }\n\n.pf-c-overflow-menu__group {\n  --pf-c-overflow-menu--spacer: var(--pf-c-overflow-menu__group--spacer);\n  display: flex;\n  align-items: center; }\n  .pf-c-overflow-menu__group.pf-m-button-group {\n    --pf-c-overflow-menu--spacer: var(--pf-c-overflow-menu__group--m-button-group--spacer); }\n    .pf-c-overflow-menu__group.pf-m-button-group > * {\n      --pf-c-overflow-menu--spacer: var(--pf-c-overflow-menu__group--m-button-group--space-items); }\n  .pf-c-overflow-menu__group.pf-m-icon-button-group {\n    --pf-c-overflow-menu--spacer: var(--pf-c-overflow-menu__group--m-icon-button-group--spacer); }\n    .pf-c-overflow-menu__group.pf-m-icon-button-group > * {\n      --pf-c-overflow-menu--spacer: var(--pf-c-overflow-menu__group--m-icon-button-group--space-items); }\n\n.pf-c-overflow-menu__item {\n  --pf-c-overflow-menu--spacer: var(--pf-c-overflow-menu__item--spacer); }\n\n.pf-c-overflow-menu__content,\n.pf-c-overflow-menu__control,\n.pf-c-overflow-menu__group,\n.pf-c-overflow-menu__item {\n  margin-right: var(--pf-c-overflow-menu--spacer); }\n  .pf-c-overflow-menu__content:last-child,\n  .pf-c-overflow-menu__control:last-child,\n  .pf-c-overflow-menu__group:last-child,\n  .pf-c-overflow-menu__item:last-child {\n    --pf-c-overflow-menu--spacer: 0; }\n\n.pf-c-overflow-menu > .pf-c-divider,\n.pf-c-overflow-menu__group > .pf-c-divider {\n  --pf-c-overflow-menu--spacer: var(--pf-c-overflow-menu--c-divider--m-vertical--spacer); }\n\n.pf-c-overflow-menu > .pf-c-divider.pf-m-vertical,\n.pf-c-overflow-menu__group > .pf-c-divider.pf-m-vertical {\n  margin-right: var(--pf-c-overflow-menu--spacer); }\n  .pf-c-overflow-menu > .pf-c-divider.pf-m-vertical:last-child,\n  .pf-c-overflow-menu__group > .pf-c-divider.pf-m-vertical:last-child {\n    --pf-c-overflow-menu--spacer: 0; }\n\n.pf-c-page {\n  --pf-c-page--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-page__header--BackgroundColor: var(--pf-global--BackgroundColor--dark-100);\n  --pf-c-page__header--ZIndex: var(--pf-global--ZIndex--md);\n  --pf-c-page__header--MinHeight: 4.75rem;\n  --pf-c-page__header-brand--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-page__header-brand--xl--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-page__header-brand--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-page__header-sidebar-toggle__c-button--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-page__header-sidebar-toggle__c-button--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-page__header-sidebar-toggle__c-button--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-page__header-sidebar-toggle__c-button--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-page__header-sidebar-toggle__c-button--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-page__header-sidebar-toggle__c-button--MarginLeft: calc(var(--pf-c-page__header-sidebar-toggle__c-button--PaddingLeft) * -1);\n  --pf-c-page__header-sidebar-toggle__c-button--FontSize: var(--pf-global--FontSize--2xl);\n  --pf-c-page__header-brand-link--c-brand--MaxHeight: 3.75rem;\n  --pf-c-page__header-nav--BackgroundColor: var(--pf-global--BackgroundColor--dark-300);\n  --pf-c-page__header-nav--xl--BackgroundColor: transparent;\n  --pf-c-page__header-nav--xl--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-page__header-nav--xl--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-page__header-tools--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-page__header-tools--xl--MarginRight: var(--pf-global--spacer--lg);\n  --pf-c-page__header-tools--c-avatar--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-page__header-tools-group--MarginLeft: var(--pf-global--spacer--xl);\n  --pf-c-page__header-tools-group--Display: flex;\n  --pf-c-page__header-tools-item--Display: block;\n  --pf-c-page__header-tools-item--c-notification-badge--hover--BackgroundColor: var(--pf-global--BackgroundColor--dark-200);\n  --pf-c-page__header-tools--c-button--notification-badge--m-unread--after--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-page__header-tools--c-button--notification-badge--m-attention--after--BackgroundColor: var(--pf-global--danger-color--200);\n  --pf-c-page__header-tools--c-button--m-selected--notification-badge--m-unread--after--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-page__header-tools--c-button--m-selected--notification-badge--m-attention--after--BackgroundColor: var(--pf-global--danger-color--200);\n  --pf-c-page__header-tools--c-button--m-selected--before--Width: auto;\n  --pf-c-page__header-tools--c-button--m-selected--before--Height: auto;\n  --pf-c-page__header-tools--c-button--m-selected--before--BackgroundColor: var(--pf-global--BackgroundColor--dark-200);\n  --pf-c-page__header-tools--c-button--m-selected--before--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-page__header-tools--c-button--m-selected--c-notification-badge--m-unread--after--BorderColor: transparent;\n  --pf-c-page__sidebar--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-page__sidebar--Width: 80%;\n  --pf-c-page__sidebar--Width: 18.125rem;\n  --pf-c-page__sidebar--BackgroundColor: var(--pf-global--BackgroundColor--dark-300);\n  --pf-c-page__sidebar--m-light--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-page__sidebar--BoxShadow: var(--pf-global--BoxShadow--lg-right);\n  --pf-c-page__sidebar--Transition: var(--pf-global--Transition);\n  --pf-c-page__sidebar--TranslateX: -100%;\n  --pf-c-page__sidebar--TranslateZ: 0;\n  --pf-c-page__sidebar--m-expanded--TranslateX: 0;\n  --pf-c-page__sidebar--xl--TranslateX: 0;\n  --pf-c-page__sidebar-body--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-page__sidebar-body--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-page__main--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-page__main-section--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-page__main-section--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-page__main-section--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-page__main-section--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-page__main-section--xl--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-page__main-section--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-page__main-section--xl--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-page__main-section--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-page__main-breadcrumb--main-section--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-page__main-section--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-page__main-section--m-light--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-page__main-section--m-dark-100--BackgroundColor: var(--pf-global--BackgroundColor--dark-transparent-100);\n  --pf-c-page__main-section--m-dark-200--BackgroundColor: var(--pf-global--BackgroundColor--dark-transparent-200);\n  --pf-c-page--section--m-limit-width--MaxWidth: calc(125rem - var(--pf-c-page__sidebar--Width));\n  --pf-c-page--section--m-sticky-top--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-page--section--m-sticky-top--BoxShadow: var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-page--section--m-sticky-bottom--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-page--section--m-sticky-bottom--BoxShadow: var(--pf-global--BoxShadow--sm-top);\n  --pf-c-page--section--m-shadow-bottom--BoxShadow: var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-page--section--m-shadow-bottom--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-page--section--m-shadow-top--BoxShadow: var(--pf-global--BoxShadow--sm-top);\n  --pf-c-page--section--m-shadow-top--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-page__main-nav--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-page__main-nav--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-page__main-nav--PaddingRight: 0;\n  --pf-c-page__main-nav--PaddingLeft: 0;\n  --pf-c-page__main-nav--m-sticky-top--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-page__main-nav--xl--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-page__main-nav--xl--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-page__main-breadcrumb--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-page__main-breadcrumb--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-page__main-breadcrumb--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-page__main-breadcrumb--PaddingBottom: 0;\n  --pf-c-page__main-breadcrumb--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-page__main-breadcrumb--m-sticky-top--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-page__main-breadcrumb--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-page__main-breadcrumb--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-page__main-wizard--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-page__main-wizard--BorderTopColor: var(--pf-global--BorderColor--100);\n  --pf-c-page__main-wizard--BorderTopWidth: var(--pf-global--BorderWidth--sm);\n  display: grid;\n  height: 100%;\n  grid-template-columns: 1fr;\n  grid-template-rows: max-content 1fr;\n  grid-template-areas: "header" "main";\n  background-color: var(--pf-c-page--BackgroundColor); }\n  @media (min-width: 1200px) {\n    .pf-c-page {\n      --pf-c-page__header-brand--PaddingLeft: var(--pf-c-page__header-brand--xl--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-page {\n      --pf-c-page__header-nav--BackgroundColor: var(--pf-c-page__header-nav--xl--BackgroundColor);\n      --pf-c-page__header-nav--PaddingRight: var(--pf-c-page__header-nav--xl--PaddingRight);\n      --pf-c-page__header-nav--PaddingLeft: var(--pf-c-page__header-nav--xl--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-page {\n      --pf-c-page__header-tools--MarginRight: var(--pf-c-page__header-tools--xl--MarginRight); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-page {\n      --pf-c-page__sidebar--TranslateX: var(--pf-c-page__sidebar--xl--TranslateX); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-page {\n      --pf-c-page__main-section--PaddingTop: var(--pf-c-page__main-section--xl--PaddingTop);\n      --pf-c-page__main-section--PaddingRight: var(--pf-c-page__main-section--xl--PaddingRight);\n      --pf-c-page__main-section--PaddingBottom: var(--pf-c-page__main-section--xl--PaddingBottom);\n      --pf-c-page__main-section--PaddingLeft: var(--pf-c-page__main-section--xl--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-page {\n      --pf-c-page__main-nav--PaddingRight: var(--pf-c-page__main-nav--xl--PaddingRight);\n      --pf-c-page__main-nav--PaddingLeft: var(--pf-c-page__main-nav--xl--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-page {\n      --pf-c-page__main-breadcrumb--PaddingRight: var(--pf-c-page__main-breadcrumb--xl--PaddingRight);\n      --pf-c-page__main-breadcrumb--PaddingLeft: var(--pf-c-page__main-breadcrumb--xl--PaddingLeft); } }\n  @media (min-width: 1200px) {\n    .pf-c-page {\n      grid-template-columns: max-content 1fr;\n      grid-template-areas: "header header" "nav main"; } }\n\n.pf-c-page__header {\n  color: var(--pf-global--Color--100);\n  z-index: var(--pf-c-page__header--ZIndex);\n  grid-template-columns: auto auto;\n  display: grid;\n  grid-area: header;\n  align-items: center;\n  min-width: 0;\n  min-height: var(--pf-c-page__header--MinHeight);\n  background-color: var(--pf-c-page__header--BackgroundColor); }\n  .pf-c-page__header > * {\n    display: flex;\n    align-items: center; }\n  @media screen and (min-width: 992px) {\n    .pf-c-page__header {\n      grid-template-columns: auto 1fr auto; } }\n\n.pf-c-page__header-brand {\n  grid-column: 1 / 2;\n  padding-left: var(--pf-c-page__header-brand--PaddingLeft); }\n  @media (min-width: 1200px) {\n    .pf-c-page__header-brand {\n      padding-right: var(--pf-c-page__header-brand--xl--PaddingRight); } }\n\n.pf-c-page__header-brand-link {\n  display: flex;\n  flex: 1;\n  align-items: center; }\n  .pf-c-page__header-brand-link .pf-c-brand {\n    max-height: var(--pf-c-page__header-brand-link--c-brand--MaxHeight); }\n\n.pf-c-page__header-brand-toggle .pf-c-button {\n  padding: var(--pf-c-page__header-sidebar-toggle__c-button--PaddingTop) var(--pf-c-page__header-sidebar-toggle__c-button--PaddingRight) var(--pf-c-page__header-sidebar-toggle__c-button--PaddingBottom) var(--pf-c-page__header-sidebar-toggle__c-button--PaddingLeft);\n  margin-right: var(--pf-c-page__header-sidebar-toggle__c-button--MarginRight);\n  margin-left: var(--pf-c-page__header-sidebar-toggle__c-button--MarginLeft);\n  font-size: var(--pf-c-page__header-sidebar-toggle__c-button--FontSize);\n  line-height: 1; }\n\n.pf-c-page__header-nav {\n  align-self: stretch;\n  min-width: 0;\n  padding-right: var(--pf-c-page__header-nav--PaddingRight);\n  padding-left: var(--pf-c-page__header-nav--PaddingLeft);\n  background-color: var(--pf-c-page__header-nav--BackgroundColor);\n  grid-column: 1 / -1;\n  grid-row: 2 / 3; }\n  @media screen and (min-width: 1200px) {\n    .pf-c-page__header-nav {\n      grid-column: 2 / 3;\n      grid-row: 1 / 2; } }\n  .pf-c-page__header-nav .pf-c-nav {\n    align-self: stretch; }\n\n.pf-c-page__header-tools {\n  grid-column: 2 / 3;\n  margin-right: var(--pf-c-page__header-tools--MarginRight);\n  margin-left: auto; }\n  .pf-c-page__header-tools .pf-c-avatar {\n    margin-left: var(--pf-c-page__header-tools--c-avatar--MarginLeft); }\n  @media screen and (min-width: 992px) {\n    .pf-c-page__header-tools {\n      grid-column: 3 / 4; } }\n\n.pf-c-page__header-tools-group {\n  --pf-hidden-visible--visible--Display: var(--pf-c-page__header-tools-group--Display);\n  align-items: center; }\n  .pf-c-page__header-tools-group + .pf-c-page__header-tools-group {\n    margin-left: var(--pf-c-page__header-tools-group--MarginLeft); }\n\n.pf-c-page__header-tools-item {\n  --pf-hidden-visible--visible--Display: var(--pf-c-page__header-tools-item--Display); }\n  .pf-c-page__header-tools-item .pf-c-notification-badge.pf-m-read:hover {\n    --pf-c-notification-badge--after--BackgroundColor: var(--pf-c-page__header-tools-item--c-notification-badge--hover--BackgroundColor); }\n  .pf-c-page__header-tools-item.pf-m-selected .pf-c-button {\n    background-color: var(--pf-c-page__header-tools--c-button--m-selected--before--BackgroundColor);\n    border-radius: var(--pf-c-page__header-tools--c-button--m-selected--before--BorderRadius); }\n    .pf-c-page__header-tools-item.pf-m-selected .pf-c-button::before {\n      position: absolute;\n      top: 0;\n      right: 0;\n      bottom: 0;\n      left: 0;\n      width: var(--pf-c-page__header-tools--c-button--m-selected--before--Width);\n      height: var(--pf-c-page__header-tools--c-button--m-selected--before--Height);\n      content: ""; }\n    .pf-c-page__header-tools-item.pf-m-selected .pf-c-button .pf-c-notification-badge.pf-m-unread {\n      --pf-c-notification-badge--after--BackgroundColor: var(--pf-c-page__header-tools--c-button--m-selected--notification-badge--m-unread--after--BackgroundColor); }\n      .pf-c-page__header-tools-item.pf-m-selected .pf-c-button .pf-c-notification-badge.pf-m-unread::after {\n        border-color: var(--pf-c-page__header-tools--c-button--m-selected--c-notification-badge--m-unread--after--BorderColor); }\n    .pf-c-page__header-tools-item.pf-m-selected .pf-c-button .pf-c-notification-badge.pf-m-attention {\n      --pf-c-notification-badge--after--BackgroundColor: var(--pf-global--danger-color--200); }\n  .pf-c-page__header-tools-item .pf-c-button:focus .pf-c-notification-badge.pf-m-unread {\n    --pf-c-notification-badge--after--BackgroundColor: var(--pf-c-page__header-tools--c-button--notification-badge--m-unread--after--BackgroundColor); }\n  .pf-c-page__header-tools-item .pf-c-button:focus .pf-c-notification-badge.pf-m-attention {\n    --pf-c-notification-badge--after--BackgroundColor: var(--pf-c-page__header-tools--c-button--notification-badge--m-attention--after--BackgroundColor); }\n\n.pf-c-page__sidebar {\n  grid-area: nav;\n  grid-row-start: 2;\n  grid-column-start: 1;\n  z-index: var(--pf-c-page__sidebar--ZIndex);\n  width: var(--pf-c-page__sidebar--Width);\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-overflow-scrolling: touch;\n  background-color: var(--pf-c-page__sidebar--BackgroundColor);\n  transition: var(--pf-c-page__sidebar--Transition);\n  transform: translateX(var(--pf-c-page__sidebar--TranslateX)) translateZ(var(--pf-c-page__sidebar--TranslateZ)); }\n  @media screen and (min-width: 1200px) {\n    .pf-c-page__sidebar {\n      box-shadow: var(--pf-c-page__sidebar--BoxShadow); } }\n  .pf-c-page__sidebar.pf-m-expanded {\n    --pf-c-page__sidebar--TranslateX: var(--pf-c-page__sidebar--m-expanded--TranslateX);\n    box-shadow: var(--pf-c-page__sidebar--BoxShadow); }\n  .pf-c-page__sidebar.pf-m-collapsed {\n    max-width: 0;\n    overflow: hidden; }\n  .pf-c-page__sidebar.pf-m-light {\n    color: var(--pf-global--Color--100);\n    --pf-c-page__sidebar--BackgroundColor: var(--pf-c-page__sidebar--m-light--BackgroundColor); }\n\n.pf-c-page__sidebar-body {\n  padding-top: var(--pf-c-page__sidebar-body--PaddingTop);\n  padding-bottom: var(--pf-c-page__sidebar-body--PaddingBottom); }\n\n.pf-c-page__main-nav.pf-m-limit-width,\n.pf-c-page__main-breadcrumb.pf-m-limit-width,\n.pf-c-page__main-section.pf-m-limit-width,\n.pf-c-page__main-wizard.pf-m-limit-width {\n  display: flex;\n  flex-direction: column;\n  padding: 0; }\n  .pf-c-page__main-nav.pf-m-limit-width > .pf-c-page__main-body,\n  .pf-c-page__main-breadcrumb.pf-m-limit-width > .pf-c-page__main-body,\n  .pf-c-page__main-section.pf-m-limit-width > .pf-c-page__main-body,\n  .pf-c-page__main-wizard.pf-m-limit-width > .pf-c-page__main-body {\n    flex: 1;\n    max-width: var(--pf-c-page--section--m-limit-width--MaxWidth); }\n\n.pf-c-page__main-nav,\n.pf-c-page__main-breadcrumb,\n.pf-c-page__main-section,\n.pf-c-page__main-wizard,\n.pf-c-page__main-group {\n  flex-shrink: 0; }\n  .pf-c-page__main-nav.pf-m-sticky-top,\n  .pf-c-page__main-breadcrumb.pf-m-sticky-top,\n  .pf-c-page__main-section.pf-m-sticky-top,\n  .pf-c-page__main-wizard.pf-m-sticky-top,\n  .pf-c-page__main-group.pf-m-sticky-top {\n    position: sticky;\n    top: 0;\n    z-index: var(--pf-c-page--section--m-sticky-top--ZIndex);\n    box-shadow: var(--pf-c-page--section--m-sticky-top--BoxShadow); }\n  .pf-c-page__main-nav.pf-m-sticky-bottom,\n  .pf-c-page__main-breadcrumb.pf-m-sticky-bottom,\n  .pf-c-page__main-section.pf-m-sticky-bottom,\n  .pf-c-page__main-wizard.pf-m-sticky-bottom,\n  .pf-c-page__main-group.pf-m-sticky-bottom {\n    position: sticky;\n    bottom: 0;\n    z-index: var(--pf-c-page--section--m-sticky-bottom--ZIndex);\n    box-shadow: var(--pf-c-page--section--m-sticky-bottom--BoxShadow); }\n  .pf-c-page__main-nav.pf-m-overflow-scroll,\n  .pf-c-page__main-breadcrumb.pf-m-overflow-scroll,\n  .pf-c-page__main-section.pf-m-overflow-scroll,\n  .pf-c-page__main-wizard.pf-m-overflow-scroll,\n  .pf-c-page__main-group.pf-m-overflow-scroll {\n    position: relative;\n    flex-shrink: 1;\n    overflow: auto; }\n  .pf-c-page__main-nav.pf-m-shadow-bottom,\n  .pf-c-page__main-breadcrumb.pf-m-shadow-bottom,\n  .pf-c-page__main-section.pf-m-shadow-bottom,\n  .pf-c-page__main-wizard.pf-m-shadow-bottom,\n  .pf-c-page__main-group.pf-m-shadow-bottom {\n    z-index: var(--pf-c-page--section--m-shadow-bottom--ZIndex);\n    box-shadow: var(--pf-c-page--section--m-shadow-bottom--BoxShadow); }\n  .pf-c-page__main-nav.pf-m-shadow-top,\n  .pf-c-page__main-breadcrumb.pf-m-shadow-top,\n  .pf-c-page__main-section.pf-m-shadow-top,\n  .pf-c-page__main-wizard.pf-m-shadow-top,\n  .pf-c-page__main-group.pf-m-shadow-top {\n    z-index: var(--pf-c-page--section--m-shadow-top--ZIndex);\n    box-shadow: var(--pf-c-page--section--m-shadow-top--BoxShadow); }\n\n.pf-c-page__main,\n.pf-c-page__drawer {\n  grid-area: main;\n  z-index: var(--pf-c-page__main--ZIndex);\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-overflow-scrolling: touch; }\n  .pf-c-page__main:focus,\n  .pf-c-page__drawer:focus {\n    outline: 0; }\n\n.pf-c-page__main,\n.pf-c-page__main-drawer,\n.pf-c-page__main-group {\n  display: flex;\n  flex-direction: column; }\n\n.pf-c-page__main-nav {\n  padding-top: var(--pf-c-page__main-nav--PaddingTop);\n  padding-right: var(--pf-c-page__main-nav--PaddingRight);\n  padding-left: var(--pf-c-page__main-nav--PaddingLeft);\n  background-color: var(--pf-c-page__main-nav--BackgroundColor); }\n  .pf-c-page__main-nav.pf-m-sticky-top,\n  .pf-c-page__main-group.pf-m-sticky-top .pf-c-page__main-nav:last-child {\n    padding-bottom: var(--pf-c-page__main-nav--m-sticky-top--PaddingBottom); }\n\n.pf-c-page__main-breadcrumb {\n  padding: var(--pf-c-page__main-breadcrumb--PaddingTop) var(--pf-c-page__main-breadcrumb--PaddingRight) var(--pf-c-page__main-breadcrumb--PaddingBottom) var(--pf-c-page__main-breadcrumb--PaddingLeft);\n  background-color: var(--pf-c-page__main-breadcrumb--BackgroundColor); }\n  .pf-c-page__main-breadcrumb + .pf-c-page__main-section {\n    --pf-c-page__main-section--PaddingTop: var(--pf-c-page__main-breadcrumb--main-section--PaddingTop); }\n  .pf-c-page__main-breadcrumb.pf-m-sticky-top,\n  .pf-c-page__main-group.pf-m-sticky-top .pf-c-page__main-breadcrumb:last-child {\n    --pf-c-page__main-breadcrumb--PaddingBottom: var(--pf-c-page__main-breadcrumb--m-sticky-top--PaddingBottom); }\n\n.pf-c-page__main-section:last-child, .pf-c-page__main-section:only-child, .pf-c-page__main-section.pf-m-fill,\n.pf-c-page__main-group:last-child,\n.pf-c-page__main-group:only-child,\n.pf-c-page__main-group.pf-m-fill,\n.pf-c-page__main-wizard:last-child,\n.pf-c-page__main-wizard:only-child,\n.pf-c-page__main-wizard.pf-m-fill {\n  flex-grow: 1; }\n\n.pf-c-page__main-section.pf-m-no-fill,\n.pf-c-page__main-group.pf-m-no-fill,\n.pf-c-page__main-wizard.pf-m-no-fill {\n  flex-grow: 0; }\n\n.pf-c-page__main-section {\n  padding: var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft);\n  background-color: var(--pf-c-page__main-section--BackgroundColor); }\n  .pf-c-page__main-section.pf-m-light {\n    --pf-c-page__main-section--BackgroundColor: var(--pf-c-page__main-section--m-light--BackgroundColor); }\n  .pf-c-page__main-section[class*="pf-m-dark-"] {\n    color: var(--pf-global--Color--100); }\n  .pf-c-page__main-section.pf-m-dark-100 {\n    --pf-c-page__main-section--BackgroundColor: var(--pf-c-page__main-section--m-dark-100--BackgroundColor); }\n  .pf-c-page__main-section.pf-m-dark-200 {\n    --pf-c-page__main-section--BackgroundColor: var(--pf-c-page__main-section--m-dark-200--BackgroundColor); }\n  .pf-c-page__main-section.pf-m-padding {\n    padding: var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft); }\n  .pf-c-page__main-section.pf-m-no-padding {\n    --pf-c-page__main-section--PaddingTop: 0;\n    --pf-c-page__main-section--PaddingRight: 0;\n    --pf-c-page__main-section--PaddingBottom: 0;\n    --pf-c-page__main-section--PaddingLeft: 0; }\n  @media (min-width: 576px) {\n    .pf-c-page__main-section.pf-m-padding-on-sm {\n      padding: var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft); }\n    .pf-c-page__main-section.pf-m-no-padding-on-sm {\n      --pf-c-page__main-section--PaddingTop: 0;\n      --pf-c-page__main-section--PaddingRight: 0;\n      --pf-c-page__main-section--PaddingBottom: 0;\n      --pf-c-page__main-section--PaddingLeft: 0; } }\n  @media (min-width: 768px) {\n    .pf-c-page__main-section.pf-m-padding-on-md {\n      padding: var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft); }\n    .pf-c-page__main-section.pf-m-no-padding-on-md {\n      --pf-c-page__main-section--PaddingTop: 0;\n      --pf-c-page__main-section--PaddingRight: 0;\n      --pf-c-page__main-section--PaddingBottom: 0;\n      --pf-c-page__main-section--PaddingLeft: 0; } }\n  @media (min-width: 992px) {\n    .pf-c-page__main-section.pf-m-padding-on-lg {\n      padding: var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft); }\n    .pf-c-page__main-section.pf-m-no-padding-on-lg {\n      --pf-c-page__main-section--PaddingTop: 0;\n      --pf-c-page__main-section--PaddingRight: 0;\n      --pf-c-page__main-section--PaddingBottom: 0;\n      --pf-c-page__main-section--PaddingLeft: 0; } }\n  @media (min-width: 1200px) {\n    .pf-c-page__main-section.pf-m-padding-on-xl {\n      padding: var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft); }\n    .pf-c-page__main-section.pf-m-no-padding-on-xl {\n      --pf-c-page__main-section--PaddingTop: 0;\n      --pf-c-page__main-section--PaddingRight: 0;\n      --pf-c-page__main-section--PaddingBottom: 0;\n      --pf-c-page__main-section--PaddingLeft: 0; } }\n  @media (min-width: 1450px) {\n    .pf-c-page__main-section.pf-m-padding-on-2xl {\n      padding: var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft); }\n    .pf-c-page__main-section.pf-m-no-padding-on-2xl {\n      --pf-c-page__main-section--PaddingTop: 0;\n      --pf-c-page__main-section--PaddingRight: 0;\n      --pf-c-page__main-section--PaddingBottom: 0;\n      --pf-c-page__main-section--PaddingLeft: 0; } }\n\n.pf-c-page__main-wizard {\n  flex-grow: 1;\n  background-color: var(--pf-c-page__main-wizard--BackgroundColor);\n  border-top: var(--pf-c-page__main-wizard--BorderTopWidth) solid var(--pf-c-page__main-wizard--BorderTopColor); }\n\n.pf-c-page__main-group {\n  flex-shrink: 0; }\n\n.pf-c-page__main-nav .pf-c-page__main-body {\n  padding-top: var(--pf-c-page__main-nav--PaddingTop);\n  padding-right: var(--pf-c-page__main-nav--PaddingRight);\n  padding-left: var(--pf-c-page__main-nav--PaddingLeft); }\n\n.pf-c-page__main-breadcrumb .pf-c-page__main-body {\n  padding: var(--pf-c-page__main-breadcrumb--PaddingTop) var(--pf-c-page__main-breadcrumb--PaddingRight) var(--pf-c-page__main-breadcrumb--PaddingBottom) var(--pf-c-page__main-breadcrumb--PaddingLeft); }\n\n.pf-c-page__main-section .pf-c-page__main-body {\n  padding: var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft); }\n\n.pf-c-page__drawer {\n  grid-area: main; }\n  .pf-c-page__drawer > .pf-c-drawer {\n    flex: 1 0 auto; }\n\n.pf-c-pagination {\n  --pf-c-pagination--child--MarginRight: var(--pf-global--spacer--lg);\n  --pf-c-pagination--m-bottom--child--MarginRight: 0;\n  --pf-c-pagination--m-bottom--child--md--MarginRight: var(--pf-global--spacer--lg);\n  --pf-c-pagination--m-compact--child--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-pagination--c-options-menu__toggle--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-pagination__nav-control--c-button--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-pagination__nav-control--c-button--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-pagination__nav-control--c-button--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-pagination--m-bottom__nav-control--c-button--OutlineOffset: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-pagination--m-bottom__nav-control--c-button--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-bottom__nav-control--c-button--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-bottom__nav-control--c-button--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-bottom__nav-control--c-button--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-pagination--m-compact__nav-control--nav-control--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-pagination__nav-page-select--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-pagination__nav-page-select--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-pagination__nav-page-select--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-pagination__nav-page-select--child--MarginRight: var(--pf-global--spacer--xs);\n  --pf-c-pagination__nav-page-select--c-form-control--width-base: 3.5ch;\n  --pf-c-pagination__nav-page-select--c-form-control--width-chars: 2;\n  --pf-c-pagination__nav-page-select--c-form-control--Width: calc(var(--pf-c-pagination__nav-page-select--c-form-control--width-base) + (var(--pf-c-pagination__nav-page-select--c-form-control--width-chars) * 1ch));\n  --pf-c-pagination--m-sticky--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-pagination--m-sticky--BoxShadow: var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-pagination--m-sticky--md--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-sticky--md--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-sticky--md--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-sticky--md--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-sticky--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-pagination--m-sticky--Top: 0;\n  --pf-c-pagination--m-bottom--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-pagination--m-bottom--BoxShadow: var(--pf-global--BoxShadow--sm-top);\n  --pf-c-pagination--m-bottom--Bottom: 0;\n  --pf-c-pagination--m-bottom--md--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-bottom--md--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-bottom--md--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-bottom--md--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-bottom--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-pagination--m-bottom--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-pagination--m-bottom--m-sticky--BoxShadow: var(--pf-global--BoxShadow--sm-top);\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: flex-end; }\n  @media screen and (min-width: 768px) {\n    .pf-c-pagination {\n      --pf-c-pagination--m-bottom__nav-control--c-button--PaddingTop: var(--pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingTop);\n      --pf-c-pagination--m-bottom__nav-control--c-button--PaddingRight: var(--pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingRight);\n      --pf-c-pagination--m-bottom__nav-control--c-button--PaddingBottom: var(--pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingBottom);\n      --pf-c-pagination--m-bottom__nav-control--c-button--PaddingLeft: var(--pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingLeft);\n      --pf-c-pagination--m-bottom--child--MarginRight: var(--pf-c-pagination--m-bottom--child--md--MarginRight);\n      --pf-c-pagination--m-bottom__nav-control--c-button--OutlineOffset: 0;\n      --pf-c-pagination--m-bottom--BoxShadow: none; } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-pagination {\n      --pf-c-pagination--m-bottom--md--PaddingRight: var(--pf-c-pagination--m-bottom--xl--PaddingRight);\n      --pf-c-pagination--m-bottom--md--PaddingLeft: var(--pf-c-pagination--m-bottom--xl--PaddingLeft); } }\n  .pf-c-pagination > *:not(:last-child):not(.pf-c-pagination__total-items) {\n    margin-right: var(--pf-c-pagination--child--MarginRight); }\n  .pf-c-pagination:not(.pf-m-bottom) .pf-c-options-menu,\n  .pf-c-pagination:not(.pf-m-bottom) .pf-c-pagination__nav {\n    display: none;\n    visibility: hidden; }\n    @media screen and (min-width: 768px) {\n      .pf-c-pagination:not(.pf-m-bottom) .pf-c-options-menu,\n      .pf-c-pagination:not(.pf-m-bottom) .pf-c-pagination__nav {\n        display: flex;\n        visibility: visible; } }\n  .pf-c-pagination.pf-m-bottom {\n    --pf-c-pagination--child--MarginRight: var(--pf-c-pagination--m-bottom--child--MarginRight);\n    --pf-c-pagination__nav-control--c-button--PaddingRight: var(--pf-c-pagination--m-bottom__nav-control--c-button--PaddingRight);\n    --pf-c-pagination__nav-control--c-button--PaddingLeft: var(--pf-c-pagination--m-bottom__nav-control--c-button--PaddingRight);\n    --pf-c-pagination--m-sticky--BoxShadow: var(--pf-c-pagination--m-bottom--m-sticky--BoxShadow);\n    --pf-c-pagination--m-sticky--Top: auto;\n    position: sticky;\n    bottom: var(--pf-c-pagination--m-bottom--Bottom);\n    justify-content: center;\n    background-color: var(--pf-c-pagination--m-bottom--BackgroundColor);\n    box-shadow: var(--pf-c-pagination--m-bottom--BoxShadow); }\n    .pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-control .pf-c-button {\n      --pf-c-button--PaddingTop: var(--pf-c-pagination--m-bottom__nav-control--c-button--PaddingTop);\n      --pf-c-button--PaddingBottom: var(--pf-c-pagination--m-bottom__nav-control--c-button--PaddingBottom);\n      outline-offset: var(--pf-c-pagination--m-bottom__nav-control--c-button--OutlineOffset); }\n    .pf-c-pagination.pf-m-bottom.pf-m-static {\n      --pf-c-pagination--m-bottom--MarginTop: 0;\n      --pf-c-pagination--m-bottom--BorderTopWidth: 0;\n      position: relative;\n      box-shadow: none; }\n    .pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-control.pf-m-first,\n    .pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-control.pf-m-last,\n    .pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-page-select {\n      display: none;\n      visibility: hidden; }\n    .pf-c-pagination.pf-m-bottom .pf-c-options-menu {\n      position: absolute; }\n    .pf-c-pagination.pf-m-bottom .pf-c-pagination__nav {\n      display: flex;\n      flex-basis: 100%;\n      justify-content: space-between; }\n    @media screen and (min-width: 768px) {\n      .pf-c-pagination.pf-m-bottom {\n        --pf-c-pagination--m-bottom--BorderTopWidth: 0;\n        --pf-c-pagination--m-bottom--MarginTop: 0;\n        --pf-c-pagination--m-bottom--Bottom: auto;\n        position: relative;\n        justify-content: flex-end;\n        padding: var(--pf-c-pagination--m-bottom--md--PaddingTop) var(--pf-c-pagination--m-bottom--md--PaddingRight) var(--pf-c-pagination--m-bottom--md--PaddingBottom) var(--pf-c-pagination--m-bottom--md--PaddingLeft); }\n        .pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-control.pf-m-first,\n        .pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-control.pf-m-last,\n        .pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-page-select {\n          display: block;\n          visibility: visible; }\n        .pf-c-pagination.pf-m-bottom .pf-c-options-menu {\n          position: relative; }\n        .pf-c-pagination.pf-m-bottom .pf-c-pagination__nav {\n          display: inline-flex;\n          flex-basis: auto; } }\n  .pf-c-pagination.pf-m-sticky {\n    --pf-c-pagination--m-bottom--Bottom: 0;\n    position: sticky;\n    top: var(--pf-c-pagination--m-sticky--Top);\n    z-index: var(--pf-c-pagination--m-sticky--ZIndex);\n    padding-top: var(--pf-c-pagination--m-sticky--PaddingTop);\n    padding-right: var(--pf-c-pagination--m-sticky--PaddingRight);\n    padding-bottom: var(--pf-c-pagination--m-sticky--PaddingBottom);\n    padding-left: var(--pf-c-pagination--m-sticky--PaddingLeft);\n    background-color: var(--pf-c-pagination--m-sticky--BackgroundColor);\n    box-shadow: var(--pf-c-pagination--m-sticky--BoxShadow); }\n    @media screen and (min-width: 768px) {\n      .pf-c-pagination.pf-m-sticky {\n        padding: var(--pf-c-pagination--m-sticky--md--PaddingTop) var(--pf-c-pagination--m-sticky--md--PaddingRight) var(--pf-c-pagination--m-sticky--md--PaddingBottom) var(--pf-c-pagination--m-sticky--md--PaddingLeft); } }\n  .pf-c-pagination .pf-c-options-menu__toggle {\n    font-size: var(--pf-c-pagination--c-options-menu__toggle--FontSize); }\n  .pf-c-pagination.pf-m-compact {\n    --pf-c-pagination--child--MarginRight: var(--pf-c-pagination--m-compact--child--MarginRight); }\n\n.pf-c-pagination__nav {\n  display: inline-flex;\n  justify-content: flex-end; }\n\n.pf-c-pagination__nav-control .pf-c-button {\n  padding-right: var(--pf-c-pagination__nav-control--c-button--PaddingRight);\n  padding-left: var(--pf-c-pagination__nav-control--c-button--PaddingLeft);\n  font-size: var(--pf-c-pagination__nav-control--c-button--FontSize); }\n\n.pf-c-pagination.pf-m-compact .pf-c-pagination__nav-control + .pf-c-pagination__nav-control {\n  margin-left: var(--pf-c-pagination--m-compact__nav-control--nav-control--MarginLeft); }\n\n.pf-c-pagination__nav-page-select {\n  display: flex;\n  align-items: center;\n  padding-right: var(--pf-c-pagination__nav-page-select--PaddingRight);\n  padding-left: var(--pf-c-pagination__nav-page-select--PaddingLeft); }\n  .pf-c-pagination__nav-page-select > * {\n    font-size: var(--pf-c-pagination__nav-page-select--FontSize);\n    white-space: nowrap; }\n    .pf-c-pagination__nav-page-select > *:not(:last-child) {\n      margin-right: var(--pf-c-pagination__nav-page-select--child--MarginRight); }\n  .pf-c-pagination__nav-page-select .pf-c-form-control {\n    width: var(--pf-c-pagination__nav-page-select--c-form-control--Width); }\n\n@media screen and (min-width: 768px) {\n  .pf-c-pagination__total-items {\n    display: none;\n    visibility: hidden; } }\n\n.pf-c-popover {\n  --pf-c-popover--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-popover--MinWidth: calc(var(--pf-c-popover__content--PaddingLeft) + var(--pf-c-popover__content--PaddingRight) + 18.75rem);\n  --pf-c-popover--MaxWidth: calc(var(--pf-c-popover__content--PaddingLeft) + var(--pf-c-popover__content--PaddingRight) + 18.75rem);\n  --pf-c-popover--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-popover__content--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-popover__content--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-popover__content--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-popover__content--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-popover__content--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-popover__arrow--Width: var(--pf-global--arrow--width-lg);\n  --pf-c-popover__arrow--Height: var(--pf-global--arrow--width-lg);\n  --pf-c-popover__arrow--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-popover__arrow--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-popover__arrow--m-top--TranslateX: -50%;\n  --pf-c-popover__arrow--m-top--TranslateY: 50%;\n  --pf-c-popover__arrow--m-top--Rotate: 45deg;\n  --pf-c-popover__arrow--m-right--TranslateX: -50%;\n  --pf-c-popover__arrow--m-right--TranslateY: -50%;\n  --pf-c-popover__arrow--m-right--Rotate: 45deg;\n  --pf-c-popover__arrow--m-bottom--TranslateX: -50%;\n  --pf-c-popover__arrow--m-bottom--TranslateY: -50%;\n  --pf-c-popover__arrow--m-bottom--Rotate: 45deg;\n  --pf-c-popover__arrow--m-left--TranslateX: 50%;\n  --pf-c-popover__arrow--m-left--TranslateY: -50%;\n  --pf-c-popover__arrow--m-left--Rotate: 45deg;\n  --pf-c-popover--c-button--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-popover--c-button--Top: calc(var(--pf-c-popover__content--PaddingTop) - var(--pf-global--spacer--form-element));\n  --pf-c-popover--c-button--Right: var(--pf-global--spacer--md);\n  --pf-c-popover--c-button--sibling--PaddingRight: var(--pf-global--spacer--2xl);\n  --pf-c-popover--c-title--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-popover__footer--MarginTop: var(--pf-global--spacer--md);\n  position: relative;\n  min-width: var(--pf-c-popover--MinWidth);\n  max-width: var(--pf-c-popover--MaxWidth);\n  font-size: var(--pf-c-popover--FontSize);\n  box-shadow: var(--pf-c-popover--BoxShadow); }\n  .pf-c-popover.pf-m-no-padding {\n    --pf-c-popover__content--PaddingTop: 0px;\n    --pf-c-popover__content--PaddingRight: 0px;\n    --pf-c-popover__content--PaddingBottom: 0px;\n    --pf-c-popover__content--PaddingLeft: 0px; }\n  .pf-c-popover.pf-m-width-auto {\n    --pf-c-popover--MinWidth: auto;\n    --pf-c-popover--MaxWidth: none; }\n  .pf-c-popover.pf-m-top .pf-c-popover__arrow {\n    bottom: 0;\n    left: 50%;\n    transform: translateX(var(--pf-c-popover__arrow--m-top--TranslateX)) translateY(var(--pf-c-popover__arrow--m-top--TranslateY)) rotate(var(--pf-c-popover__arrow--m-top--Rotate)); }\n  .pf-c-popover.pf-m-bottom .pf-c-popover__arrow {\n    top: 0;\n    left: 50%;\n    transform: translateX(var(--pf-c-popover__arrow--m-bottom--TranslateX)) translateY(var(--pf-c-popover__arrow--m-bottom--TranslateY)) rotate(var(--pf-c-popover__arrow--m-bottom--Rotate)); }\n  .pf-c-popover.pf-m-left .pf-c-popover__arrow {\n    top: 50%;\n    right: 0;\n    transform: translateX(var(--pf-c-popover__arrow--m-left--TranslateX)) translateY(var(--pf-c-popover__arrow--m-left--TranslateY)) rotate(var(--pf-c-popover__arrow--m-left--Rotate)); }\n  .pf-c-popover.pf-m-right .pf-c-popover__arrow {\n    top: 50%;\n    left: 0;\n    transform: translateX(var(--pf-c-popover__arrow--m-right--TranslateX)) translateY(var(--pf-c-popover__arrow--m-right--TranslateY)) rotate(var(--pf-c-popover__arrow--m-right--Rotate)); }\n\n.pf-c-popover__content {\n  position: relative;\n  padding: var(--pf-c-popover__content--PaddingTop) var(--pf-c-popover__content--PaddingRight) var(--pf-c-popover__content--PaddingBottom) var(--pf-c-popover__content--PaddingLeft);\n  background-color: var(--pf-c-popover__content--BackgroundColor); }\n  .pf-c-popover__content > .pf-c-title {\n    margin-bottom: var(--pf-c-popover--c-title--MarginBottom); }\n  .pf-c-popover__content > .pf-c-button {\n    position: absolute;\n    top: var(--pf-c-popover--c-button--Top);\n    right: var(--pf-c-popover--c-button--Right); }\n    .pf-c-popover__content > .pf-c-button + * {\n      padding-right: var(--pf-c-popover--c-button--sibling--PaddingRight); }\n\n.pf-c-popover__arrow {\n  position: absolute;\n  width: var(--pf-c-popover__arrow--Width);\n  height: var(--pf-c-popover__arrow--Height);\n  pointer-events: none;\n  background-color: var(--pf-c-popover__arrow--BackgroundColor);\n  box-shadow: var(--pf-c-popover__arrow--BoxShadow); }\n\n.pf-c-popover__body {\n  word-wrap: break-word; }\n\n.pf-c-popover__footer {\n  margin-top: var(--pf-c-popover__footer--MarginTop); }\n\n.pf-c-progress {\n  --pf-c-progress--GridGap: var(--pf-global--spacer--md);\n  --pf-c-progress__bar--before--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-progress__bar--Height: var(--pf-global--spacer--md);\n  --pf-c-progress__bar--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-progress__status-icon--Color: var(--pf-global--Color--100);\n  --pf-c-progress__status-icon--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-progress__bar--before--Opacity: .2;\n  --pf-c-progress__indicator--Height: var(--pf-c-progress__bar--Height);\n  --pf-c-progress__indicator--BackgroundColor: var(--pf-c-progress__bar--before--BackgroundColor);\n  --pf-c-progress--m-success__bar--BackgroundColor: var(--pf-global--success-color--100);\n  --pf-c-progress--m-warning__bar--BackgroundColor: var(--pf-global--warning-color--100);\n  --pf-c-progress--m-danger__bar--BackgroundColor: var(--pf-global--danger-color--100);\n  --pf-c-progress--m-success__status-icon--Color: var(--pf-global--success-color--100);\n  --pf-c-progress--m-warning__status-icon--Color: var(--pf-global--warning-color--100);\n  --pf-c-progress--m-danger__status-icon--Color: var(--pf-global--danger-color--100);\n  --pf-c-progress--m-inside__indicator--MinWidth: var(--pf-global--spacer--xl);\n  --pf-c-progress--m-inside__measure--Color: var(--pf-global--Color--light-100);\n  --pf-c-progress--m-success--m-inside__measure--Color: var(--pf-global--Color--light-100);\n  --pf-c-progress--m-warning--m-inside__measure--Color: var(--pf-global--Color--dark-100);\n  --pf-c-progress--m-inside__measure--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-progress--m-outside__measure--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-progress--m-sm__bar--Height: var(--pf-global--spacer--sm);\n  --pf-c-progress--m-sm__description--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-progress--m-sm__measure--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-progress--m-lg__bar--Height: var(--pf-global--spacer--lg);\n  display: grid;\n  align-items: end;\n  grid-gap: var(--pf-c-progress--GridGap);\n  grid-template-columns: auto auto;\n  grid-template-rows: 1fr auto; }\n  .pf-c-progress.pf-m-sm {\n    --pf-c-progress__bar--Height: var(--pf-c-progress--m-sm__bar--Height); }\n    .pf-c-progress.pf-m-sm .pf-c-progress__description {\n      font-size: var(--pf-c-progress--m-sm__description--FontSize); }\n    .pf-c-progress.pf-m-sm .pf-c-progress__measure {\n      font-size: var(--pf-c-progress--m-sm__measure--FontSize); }\n  .pf-c-progress.pf-m-lg {\n    --pf-c-progress__bar--Height: var(--pf-c-progress--m-lg__bar--Height); }\n  .pf-c-progress.pf-m-inside .pf-c-progress__indicator {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    min-width: var(--pf-c-progress--m-inside__indicator--MinWidth); }\n  .pf-c-progress.pf-m-inside .pf-c-progress__measure {\n    font-size: var(--pf-c-progress--m-inside__measure--FontSize);\n    color: var(--pf-c-progress--m-inside__measure--Color);\n    text-align: center; }\n  .pf-c-progress.pf-m-outside .pf-c-progress__description {\n    grid-column: 1 / 3; }\n  .pf-c-progress.pf-m-outside .pf-c-progress__status {\n    grid-column: 2 / 3;\n    grid-row: 2 / 3;\n    align-self: center; }\n  .pf-c-progress.pf-m-outside .pf-c-progress__measure {\n    font-size: var(--pf-c-progress--m-outside__measure--FontSize); }\n  .pf-c-progress.pf-m-outside .pf-c-progress__bar,\n  .pf-c-progress.pf-m-outside .pf-c-progress__indicator {\n    grid-column: 1 / 2; }\n  .pf-c-progress.pf-m-singleline {\n    grid-template-rows: 1fr; }\n    .pf-c-progress.pf-m-singleline .pf-c-progress__description {\n      display: none;\n      visibility: hidden; }\n    .pf-c-progress.pf-m-singleline .pf-c-progress__bar {\n      grid-row: 1 / 2;\n      grid-column: 1 / 2; }\n    .pf-c-progress.pf-m-singleline .pf-c-progress__status {\n      grid-row: 1 / 2;\n      grid-column: 2 / 3; }\n  .pf-c-progress.pf-m-outside, .pf-c-progress.pf-m-singleline {\n    grid-template-columns: 1fr fit-content(50%); }\n  .pf-c-progress.pf-m-success {\n    --pf-c-progress__bar--before--BackgroundColor: var(--pf-c-progress--m-success__bar--BackgroundColor);\n    --pf-c-progress__status-icon--Color: var(--pf-c-progress--m-success__status-icon--Color);\n    --pf-c-progress--m-inside__measure--Color: var(--pf-c-progress--m-success--m-inside__measure--Color); }\n  .pf-c-progress.pf-m-warning {\n    --pf-c-progress__bar--before--BackgroundColor: var(--pf-c-progress--m-warning__bar--BackgroundColor);\n    --pf-c-progress__status-icon--Color: var(--pf-c-progress--m-warning__status-icon--Color);\n    --pf-c-progress--m-inside__measure--Color: var(--pf-c-progress--m-warning--m-inside__measure--Color); }\n  .pf-c-progress.pf-m-danger {\n    --pf-c-progress__bar--before--BackgroundColor: var(--pf-c-progress--m-danger__bar--BackgroundColor);\n    --pf-c-progress__status-icon--Color: var(--pf-c-progress--m-danger__status-icon--Color); }\n\n.pf-c-progress__description {\n  word-break: break-word;\n  grid-column: 1 / 2; }\n  .pf-c-progress__description.pf-m-truncate {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n\n.pf-c-progress__status {\n  grid-column: 2 / 3;\n  grid-row: 1 / 2;\n  text-align: right;\n  word-break: break-word; }\n\n.pf-c-progress__status-icon {\n  margin-left: var(--pf-c-progress__status-icon--MarginLeft);\n  color: var(--pf-c-progress__status-icon--Color); }\n\n.pf-c-progress__bar {\n  position: relative;\n  grid-column: 1 / 3;\n  grid-row: 2 / 3;\n  align-self: center;\n  height: var(--pf-c-progress__bar--Height);\n  background-color: var(--pf-c-progress__bar--BackgroundColor); }\n  .pf-c-progress__bar::before {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    content: "";\n    background-color: var(--pf-c-progress__bar--before--BackgroundColor);\n    opacity: var(--pf-c-progress__bar--before--Opacity); }\n\n.pf-c-progress__indicator {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: var(--pf-c-progress__indicator--Height);\n  background-color: var(--pf-c-progress__indicator--BackgroundColor); }\n\n.pf-c-radio {\n  --pf-c-radio--GridGap: var(--pf-global--spacer--xs) var(--pf-global--spacer--sm);\n  --pf-c-radio__label--disabled--Color: var(--pf-global--disabled-color--100);\n  --pf-c-radio__label--Color: var(--pf-global--Color--100);\n  --pf-c-radio__label--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-radio__label--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-radio__label--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-radio__input--MarginTop: -0.1875rem;\n  --pf-c-radio__input--first-child--MarginLeft: 0.0625rem;\n  --pf-c-radio__input--last-child--MarginRight: 0.0625rem;\n  --pf-c-radio__description--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-radio__description--Color: var(--pf-global--Color--200);\n  display: grid;\n  grid-template-columns: auto 1fr;\n  grid-gap: var(--pf-c-radio--GridGap);\n  align-items: center;\n  justify-items: start; }\n\n.pf-c-radio__label {\n  font-size: var(--pf-c-radio__label--FontSize);\n  font-weight: var(--pf-c-radio__label--FontWeight);\n  line-height: var(--pf-c-radio__label--LineHeight);\n  color: var(--pf-c-radio__label--Color); }\n\n.pf-c-radio__input {\n  margin-top: var(--pf-c-radio__input--MarginTop); }\n  .pf-c-radio__input:first-child {\n    margin-left: var(--pf-c-radio__input--first-child--MarginLeft); }\n  .pf-c-radio__input:last-child {\n    margin-right: var(--pf-c-radio__input--last-child--MarginRight); }\n\n.pf-c-radio__description {\n  grid-column: 2;\n  font-size: var(--pf-c-radio__description--FontSize);\n  color: var(--pf-c-radio__description--Color); }\n\nlabel.pf-c-radio, .pf-c-radio__label,\n.pf-c-radio__input {\n  cursor: pointer; }\n\n.pf-c-radio__label:disabled, .pf-c-radio__label.pf-m-disabled,\n.pf-c-radio__input:disabled,\n.pf-c-radio__input.pf-m-disabled {\n  --pf-c-radio__label--Color: var(--pf-c-radio__label--disabled--Color);\n  cursor: not-allowed; }\n\n.pf-c-search-input {\n  --pf-c-search-input__text--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-search-input__text--before--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-search-input__text--after--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-search-input__text--after--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-search-input--hover__text--after--BorderBottomColor: var(--pf-global--primary-color--100);\n  --pf-c-search-input__text--focus-within--after--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-search-input__text--focus-within--after--BorderBottomColor: var(--pf-global--primary-color--100);\n  --pf-c-search-input__text-input--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-search-input__text-input--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-search-input__text-input--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-search-input__text-input--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-search-input__text-input--MinWidth: 6ch;\n  --pf-c-search-input__icon--Left: var(--pf-global--spacer--sm);\n  --pf-c-search-input__icon--Color: var(--pf-global--Color--200);\n  --pf-c-search-input__text--hover__icon--Color: var(--pf-global--Color--100);\n  --pf-c-search-input__icon--TranslateY: -50%;\n  --pf-c-search-input__utilities--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-search-input__utilities--MarginLeft: var(--pf-global--spacer--xs);\n  --pf-c-search-input__utilities--child--MarginLeft: var(--pf-global--spacer--xs);\n  --pf-c-search-input__utilities--c-button--PaddingRight: var(--pf-global--spacer--xs);\n  --pf-c-search-input__utilities--c-button--PaddingLeft: var(--pf-global--spacer--xs);\n  position: relative;\n  display: flex;\n  padding: var(--pf-c-search-input--PaddingTop) var(--pf-c-search-input--PaddingRight) var(--pf-c-search-input--PaddingBottom) var(--pf-c-search-input--PaddingLeft); }\n  .pf-c-search-input:hover {\n    --pf-c-search-input__text--after--BorderBottomColor: var(--pf-c-search-input--hover__text--after--BorderBottomColor); }\n\n.pf-c-search-input__text {\n  flex: 1; }\n  .pf-c-search-input__text::before, .pf-c-search-input__text::after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    pointer-events: none;\n    content: ""; }\n  .pf-c-search-input__text::before {\n    border: var(--pf-c-search-input__text--before--BorderWidth) solid var(--pf-c-search-input__text--before--BorderColor); }\n  .pf-c-search-input__text::after {\n    border-bottom: var(--pf-c-search-input__text--after--BorderBottomWidth) solid var(--pf-c-search-input__text--after--BorderBottomColor); }\n  .pf-c-search-input__text:hover, .pf-c-search-input__text:focus-within {\n    --pf-c-search-input__icon--Color: var(--pf-c-search-input__text--hover__icon--Color); }\n  .pf-c-search-input__text:focus-within {\n    --pf-c-search-input__text--after--BorderBottomWidth: var(--pf-c-search-input__text--focus-within--after--BorderBottomWidth);\n    --pf-c-search-input__text--after--BorderBottomColor: var(--pf-c-search-input__text--focus-within--after--BorderBottomColor); }\n\n.pf-c-search-input__icon {\n  position: absolute;\n  top: 50%;\n  left: var(--pf-c-search-input__icon--Left);\n  color: var(--pf-c-search-input__icon--Color);\n  transform: translateY(var(--pf-c-search-input__icon--TranslateY)); }\n\n.pf-c-search-input__text-input {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  position: relative;\n  width: 100%;\n  min-width: var(--pf-c-search-input__text-input--MinWidth);\n  padding: var(--pf-c-search-input__text-input--PaddingTop) var(--pf-c-search-input__text-input--PaddingRight) var(--pf-c-search-input__text-input--PaddingBottom) var(--pf-c-search-input__text-input--PaddingLeft);\n  border: 0; }\n\n.pf-c-search-input__utilities {\n  display: flex;\n  margin-right: var(--pf-c-search-input__utilities--MarginRight);\n  margin-left: var(--pf-c-search-input__utilities--MarginLeft); }\n  .pf-c-search-input__utilities > * + * {\n    margin-left: var(--pf-c-search-input__utilities--child--MarginLeft); }\n  .pf-c-search-input__utilities .pf-c-button {\n    --pf-c-button--PaddingRight: var(--pf-c-search-input__utilities--c-button--PaddingRight);\n    --pf-c-button--PaddingLeft: var(--pf-c-search-input__utilities--c-button--PaddingLeft); }\n\n.pf-c-search-input__nav {\n  display: flex; }\n\n.pf-c-search-input__count {\n  display: flex;\n  align-items: center; }\n\n.pf-c-select {\n  color: var(--pf-global--Color--100);\n  --pf-c-select__toggle--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-select__toggle--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-select__toggle--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-select__toggle--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-select__toggle--MinWidth: var(--pf-global--target-size--MinWidth);\n  --pf-c-select__toggle--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-select__toggle--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-select__toggle--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-select__toggle--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-select__toggle--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-select__toggle--before--BorderTopColor: var(--pf-global--BorderColor--300);\n  --pf-c-select__toggle--before--BorderRightColor: var(--pf-global--BorderColor--300);\n  --pf-c-select__toggle--before--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-select__toggle--before--BorderLeftColor: var(--pf-global--BorderColor--300);\n  --pf-c-select__toggle--Color: var(--pf-global--Color--100);\n  --pf-c-select__toggle--hover--before--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-select__toggle--focus--before--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-select__toggle--active--before--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-select__toggle--m-expanded--before--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-select__toggle--focus--before--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-select__toggle--active--before--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-select__toggle--m-expanded--before--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-select__toggle--disabled--BackgroundColor: var(--pf-global--disabled-color--300);\n  --pf-c-select__toggle--m-plain--before--BorderColor: transparent;\n  --pf-c-select__toggle-wrapper--not-last-child--MarginRight: var(--pf-global--spacer--xs);\n  --pf-c-select__toggle-wrapper--MaxWidth: calc(100% - var(--pf-global--spacer--lg));\n  --pf-c-select__toggle-wrapper--c-chip-group--MarginTop: 0.3125rem;\n  --pf-c-select__toggle-wrapper--c-chip-group--MarginBottom: 0.3125rem;\n  --pf-c-select__toggle-typeahead--FlexBasis: 10em;\n  --pf-c-select__toggle-typeahead--BackgroundColor: transparent;\n  --pf-c-select__toggle-typeahead--BorderTop: none;\n  --pf-c-select__toggle-typeahead--BorderRight: none;\n  --pf-c-select__toggle-typeahead--BorderLeft: none;\n  --pf-c-select__toggle-typeahead--MinWidth: 7.5rem;\n  --pf-c-select__toggle-typeahead--focus--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-global--BorderWidth--sm));\n  --pf-c-select__toggle-icon--toggle-text--MarginLeft: var(--pf-global--spacer--xs);\n  --pf-c-select__toggle-badge--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-select__toggle-arrow--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-select__toggle-arrow--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-select__toggle-arrow--with-clear--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-select__toggle-arrow--m-top--m-expanded__toggle-arrow--Rotate: 180deg;\n  --pf-c-select__toggle-clear--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-select__toggle-clear--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-select__toggle-clear--toggle-button--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-select__toggle-button--Color: var(--pf-global--Color--100);\n  --pf-c-select__menu--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-select__menu--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-select__menu--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-select__menu--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-select__menu--Top: calc(100% + var(--pf-global--spacer--xs));\n  --pf-c-select__menu--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-select__menu--m-top--TranslateY: calc(-100% - var(--pf-global--spacer--xs));\n  --pf-c-select__menu-item--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-select__menu-item--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-select__menu-item--m-selected--PaddingRight: var(--pf-global--spacer--2xl);\n  --pf-c-select__menu-item--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-select__menu-item--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-select__menu-item--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-select__menu-item--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-select__menu-item--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-select__menu-item--Color: var(--pf-global--Color--dark-100);\n  --pf-c-select__menu-item--Width: 100%;\n  --pf-c-select__menu-item--disabled--Color: var(--pf-global--Color--dark-200);\n  --pf-c-select__menu-item--hover--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-select__menu-item--focus--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-select__menu-item--disabled--BackgroundColor: transparent;\n  --pf-c-select__menu-item--m-link--Width: auto;\n  --pf-c-select__menu-item--m-link--hover--BackgroundColor: transparent;\n  --pf-c-select__menu-item--m-link--focus--BackgroundColor: transparent;\n  --pf-c-select__menu-item--m-action--Color: var(--pf-global--disabled-color--200);\n  --pf-c-select__menu-item--m-action--Width: auto;\n  --pf-c-select__menu-item--m-action--FontSize: var(--pf-global--icon--FontSize--sm);\n  --pf-c-select__menu-item--m-action--hover--BackgroundColor: transparent;\n  --pf-c-select__menu-item--m-action--focus--BackgroundColor: transparent;\n  --pf-c-select__menu-item--hover__menu-item--m-action--Color: var(--pf-global--Color--200);\n  --pf-c-select__menu-item--m-action--hover--Color: var(--pf-global--Color--100);\n  --pf-c-select__menu-item--m-action--focus--Color: var(--pf-global--Color--100);\n  --pf-c-select__menu-wrapper--m-favorite__menu-item--m-favorite-action--Color: var(--pf-global--palette--gold-400);\n  --pf-c-select__menu-item-icon--Color: var(--pf-global--active-color--100);\n  --pf-c-select__menu-item-icon--FontSize: var(--pf-global--icon--FontSize--sm);\n  --pf-c-select__menu-item-icon--Right: var(--pf-global--spacer--md);\n  --pf-c-select__menu-item-icon--Top: 50%;\n  --pf-c-select__menu-item-icon--TranslateY: -50%;\n  --pf-c-select__menu-item-action-icon--MinHeight: calc(var(--pf-c-select__menu-item--FontSize) * var(--pf-c-select__menu-item--LineHeight));\n  --pf-c-select__menu-item--match--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-select__menu-search--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-select__menu-search--PaddingRight: var(--pf-c-select__menu-item--PaddingRight);\n  --pf-c-select__menu-search--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-select__menu-search--PaddingLeft: var(--pf-c-select__menu-item--PaddingLeft);\n  --pf-c-select__menu-group--menu-group--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-select__menu-group-title--PaddingTop: var(--pf-c-select__menu-item--PaddingTop);\n  --pf-c-select__menu-group-title--PaddingRight: var(--pf-c-select__menu-item--PaddingRight);\n  --pf-c-select__menu-group-title--PaddingBottom: var(--pf-c-select__menu-item--PaddingBottom);\n  --pf-c-select__menu-group-title--PaddingLeft: var(--pf-c-select__menu-item--PaddingLeft);\n  --pf-c-select__menu-group-title--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-select__menu-group-title--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-select__menu-group-title--Color: var(--pf-global--Color--dark-200);\n  --pf-c-select__menu-item-description--FontSize: var(--pf-global--FontSize--xs);\n  --pf-c-select__menu-item-description--Color: var(--pf-global--Color--200);\n  --pf-c-select__menu-item-description--PaddingRight: var(--pf-c-select__menu-item--PaddingRight);\n  --pf-c-select__menu-item-main--PaddingRight: var(--pf-c-select__menu-item--PaddingRight);\n  --pf-c-select__menu-item--m-selected__menu-item-main--PaddingRight: var(--pf-c-select__menu-item--m-selected--PaddingRight);\n  --pf-c-select-menu--c-divider--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-select-menu--c-divider--MarginBottom: var(--pf-global--spacer--sm);\n  position: relative;\n  display: inline-block;\n  width: 100%; }\n  .pf-c-select .pf-c-divider {\n    margin-top: var(--pf-c-select-menu--c-divider--MarginTop);\n    margin-bottom: var(--pf-c-select-menu--c-divider--MarginBottom); }\n    .pf-c-select .pf-c-divider:last-child {\n      --pf-c-select-menu--c-divider--MarginBottom: 0; }\n\n.pf-c-select__menu-search + .pf-c-divider {\n  --pf-c-select-menu--c-divider--MarginTop: 0; }\n\n.pf-c-select__toggle {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  width: 100%;\n  min-width: var(--pf-c-select__toggle--MinWidth);\n  padding: var(--pf-c-select__toggle--PaddingTop) var(--pf-c-select__toggle--PaddingRight) var(--pf-c-select__toggle--PaddingBottom) var(--pf-c-select__toggle--PaddingLeft);\n  font-size: var(--pf-c-select__toggle--FontSize);\n  font-weight: var(--pf-c-select__toggle--FontWeight);\n  line-height: var(--pf-c-select__toggle--LineHeight);\n  color: var(--pf-c-select__toggle--Color);\n  white-space: nowrap;\n  cursor: pointer;\n  background-color: var(--pf-c-select__toggle--BackgroundColor);\n  border: none; }\n  .pf-c-select__toggle.pf-m-disabled, .pf-c-select__toggle:disabled {\n    --pf-c-select__toggle--BackgroundColor: var(--pf-c-select__toggle--disabled--BackgroundColor);\n    pointer-events: none; }\n    .pf-c-select__toggle.pf-m-disabled::before, .pf-c-select__toggle:disabled::before {\n      border: 0; }\n  .pf-c-select__toggle::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    border: var(--pf-c-select__toggle--before--BorderWidth) solid;\n    border-color: var(--pf-c-select__toggle--before--BorderTopColor) var(--pf-c-select__toggle--before--BorderRightColor) var(--pf-c-select__toggle--before--BorderBottomColor) var(--pf-c-select__toggle--before--BorderLeftColor); }\n  .pf-c-select__toggle:hover::before {\n    --pf-c-select__toggle--before--BorderBottomColor: var(--pf-c-select__toggle--hover--before--BorderBottomColor); }\n  .pf-c-select__toggle:focus::before, .pf-c-select__toggle:focus-within::before {\n    --pf-c-select__toggle--before--BorderBottomColor: var(--pf-c-select__toggle--focus--before--BorderBottomColor);\n    border-bottom-width: var(--pf-c-select__toggle--focus--before--BorderBottomWidth); }\n  .pf-c-select__toggle:active::before, .pf-c-select__toggle.pf-m-active::before {\n    --pf-c-select__toggle--before--BorderBottomColor: var(--pf-c-select__toggle--active--before--BorderBottomColor);\n    border-bottom-width: var(--pf-c-select__toggle--active--before--BorderBottomWidth); }\n  .pf-m-expanded > .pf-c-select__toggle::before {\n    --pf-c-select__toggle--before--BorderBottomColor: var(--pf-c-select__toggle--m-expanded--before--BorderBottomColor);\n    border-bottom-width: var(--pf-c-select__toggle--m-expanded--before--BorderBottomWidth); }\n  .pf-c-select__toggle.pf-m-plain::before {\n    border-color: var(--pf-c-select__toggle--m-plain--before--BorderColor); }\n  .pf-c-select__toggle.pf-m-typeahead {\n    --pf-c-select__toggle--PaddingTop: 0;\n    --pf-c-select__toggle--PaddingRight: 0;\n    --pf-c-select__toggle--PaddingBottom: 0; }\n    .pf-c-select__toggle.pf-m-typeahead .pf-c-form-control {\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n      position: relative;\n      height: auto; }\n  .pf-c-select__toggle .pf-c-select__toggle-clear {\n    padding-right: var(--pf-c-select__toggle-clear--PaddingRight);\n    padding-left: var(--pf-c-select__toggle-clear--PaddingLeft);\n    margin-left: auto; }\n  .pf-c-select__toggle .pf-c-select__toggle-button {\n    color: var(--pf-c-select__toggle-button--Color); }\n  .pf-c-select__toggle .pf-c-select__toggle-clear + .pf-c-select__toggle-button {\n    padding-left: var(--pf-c-select__toggle-clear--toggle-button--PaddingLeft); }\n\n* + .pf-c-select__toggle-arrow {\n  margin-right: var(--pf-c-select__toggle-arrow--MarginRight);\n  margin-left: var(--pf-c-select__toggle-arrow--MarginLeft); }\n\n.pf-c-select.pf-m-top.pf-m-expanded .pf-c-select__toggle-arrow {\n  transform: rotate(var(--pf-c-select__toggle-arrow--m-top--m-expanded__toggle-arrow--Rotate)); }\n\n.pf-c-select__toggle-text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.pf-c-select__toggle-wrapper {\n  display: flex;\n  flex: 1;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: flex-start;\n  min-width: 0;\n  max-width: var(--pf-c-select__toggle-wrapper--MaxWidth);\n  white-space: normal; }\n  .pf-c-select__toggle-wrapper > :not(:last-child) {\n    margin-right: var(--pf-c-select__toggle-wrapper--not-last-child--MarginRight); }\n  .pf-c-select__toggle-wrapper > .pf-c-form-control {\n    margin-top: calc(-1 * var(--pf-c-select__toggle-wrapper--m-typeahead--PaddingTop)); }\n  .pf-c-select__toggle-wrapper .pf-c-chip-group {\n    margin-top: var(--pf-c-select__toggle-wrapper--c-chip-group--MarginTop);\n    margin-bottom: var(--pf-c-select__toggle-wrapper--c-chip-group--MarginBottom); }\n  .pf-c-select__toggle-wrapper > .pf-c-select__toggle-typeahead:first-child {\n    margin-left: calc(-1 * var(--pf-c-select__toggle--PaddingLeft)); }\n\n.pf-c-select__toggle-icon + .pf-c-select__toggle-text {\n  margin-left: var(--pf-c-select__toggle-icon--toggle-text--MarginLeft); }\n\n.pf-c-select__toggle-badge {\n  display: flex;\n  padding-left: var(--pf-c-select__toggle-badge--PaddingLeft); }\n\n.pf-c-select__toggle-typeahead {\n  flex-basis: var(--pf-c-select__toggle-typeahead--FlexBasis);\n  flex-grow: 1;\n  min-width: var(--pf-c-select__toggle-typeahead--MinWidth);\n  background-color: var(--pf-c-select__toggle-typeahead--BackgroundColor);\n  border-top: var(--pf-c-select__toggle-typeahead--BorderTop);\n  border-right: var(--pf-c-select__toggle-typeahead--BorderRight);\n  border-bottom-color: inherit;\n  border-bottom-style: inherit;\n  border-bottom-width: inherit;\n  border-left: var(--pf-c-select__toggle-typeahead--BorderLeft);\n  flex-shrink: 0; }\n  .pf-c-select__toggle-typeahead:focus {\n    padding-bottom: var(--pf-c-select__toggle-typeahead--focus--PaddingBottom); }\n\n.pf-c-select__menu {\n  position: absolute;\n  top: var(--pf-c-select__menu--Top);\n  z-index: var(--pf-c-select__menu--ZIndex);\n  min-width: 100%;\n  padding-top: var(--pf-c-select__menu--PaddingTop);\n  padding-bottom: var(--pf-c-select__menu--PaddingBottom);\n  background-color: var(--pf-c-select__menu--BackgroundColor);\n  background-clip: padding-box;\n  box-shadow: var(--pf-c-select__menu--BoxShadow); }\n  .pf-c-select__menu.pf-m-align-right {\n    right: 0; }\n  .pf-c-select.pf-m-top .pf-c-select__menu {\n    top: 0;\n    transform: translateY(var(--pf-c-select__menu--m-top--TranslateY)); }\n\n.pf-c-select__menu-fieldset {\n  border: 0; }\n\n.pf-c-select__menu-wrapper {\n  display: flex; }\n  .pf-c-select__menu-wrapper.pf-m-favorite .pf-c-select__menu-item.pf-m-favorite-action {\n    --pf-c-select__menu-item--Color: var(--pf-c-select__menu-wrapper--m-favorite__menu-item--m-favorite-action--Color); }\n\n.pf-c-select__menu-item {\n  position: relative;\n  width: var(--pf-c-select__menu-item--Width);\n  padding: var(--pf-c-select__menu-item--PaddingTop) var(--pf-c-select__menu-item--PaddingRight) var(--pf-c-select__menu-item--PaddingBottom) var(--pf-c-select__menu-item--PaddingLeft);\n  font-size: var(--pf-c-select__menu-item--FontSize);\n  font-weight: var(--pf-c-select__menu-item--FontWeight);\n  line-height: var(--pf-c-select__menu-item--LineHeight);\n  color: var(--pf-c-select__menu-item--Color);\n  text-align: left;\n  white-space: nowrap;\n  background-color: transparent;\n  border: none; }\n  .pf-c-select__menu-item:hover, .pf-c-select__menu-item:focus, .pf-c-select__menu-item.pf-m-focus {\n    --pf-c-select__menu-item--m-action--Color: var(--pf-c-select__menu-item--hover__menu-item--m-action--Color);\n    text-decoration: none; }\n  .pf-c-select__menu-wrapper:hover, .pf-c-select__menu-item:hover {\n    background-color: var(--pf-c-select__menu-item--hover--BackgroundColor); }\n  .pf-c-select__menu-wrapper:focus-within,\n  .pf-c-select__menu-wrapper.pf-m-focus, .pf-c-select__menu-item:focus, .pf-c-select__menu-item.pf-m-focus {\n    position: relative;\n    background-color: var(--pf-c-select__menu-item--focus--BackgroundColor); }\n  .pf-c-select__menu-item.pf-m-link {\n    --pf-c-select__menu-item--PaddingRight: 0;\n    --pf-c-select__menu-item-main--PaddingRight: 0;\n    --pf-c-select__menu-item-description--PaddingRight: 0;\n    --pf-c-select__menu-item--Width: var(--pf-c-select__menu-item--m-link--Width);\n    --pf-c-select__menu-item--hover--BackgroundColor: var(--pf-c-select__menu-item--m-link--hover--BackgroundColor);\n    --pf-c-select__menu-item--focus--BackgroundColor: var(--pf-c-select__menu-item--m-link--focus--BackgroundColor);\n    flex-grow: 1; }\n  .pf-c-select__menu-item.pf-m-action {\n    --pf-c-select__menu-item--Color: var(--pf-c-select__menu-item--m-action--Color);\n    --pf-c-select__menu-item--Width: var(--pf-c-select__menu-item--m-action--Width);\n    --pf-c-select__menu-item--hover--BackgroundColor: var(--pf-c-select__menu-item--m-action--hover--BackgroundColor);\n    --pf-c-select__menu-item--focus--BackgroundColor: var(--pf-c-select__menu-item--m-action--focus--BackgroundColor);\n    display: flex;\n    align-items: flex-start;\n    font-size: var(--pf-c-select__menu-item--m-action--FontSize); }\n    .pf-c-select__menu-item.pf-m-action:hover {\n      --pf-c-select__menu-item--m-action--Color: var(--pf-c-select__menu-item--m-action--hover--Color); }\n    .pf-c-select__menu-item.pf-m-action:focus {\n      --pf-c-select__menu-item--m-action--Color: var(--pf-c-select__menu-item--m-action--focus--Color); }\n  .pf-c-select__menu-item.pf-m-selected {\n    --pf-c-select__menu-item--PaddingRight: var(--pf-c-select__menu-item--m-selected--PaddingRight);\n    --pf-c-select__menu-item-main--PaddingRight: var(--pf-c-select__menu-item--m-selected__menu-item-main--PaddingRight); }\n  .pf-c-select__menu-item.pf-m-description {\n    white-space: normal; }\n    .pf-c-select__menu-item.pf-m-description:not(.pf-c-check) {\n      --pf-c-select__menu-item--PaddingRight: 0; }\n    .pf-c-select__menu-item.pf-m-description .pf-c-check__label {\n      white-space: nowrap; }\n  .pf-c-select__menu-wrapper.pf-m-disabled, .pf-c-select__menu-item:disabled, .pf-c-select__menu-item.pf-m-disabled {\n    color: var(--pf-c-select__menu-item--disabled--Color);\n    pointer-events: none;\n    background-color: var(--pf-c-select__menu-item--disabled--BackgroundColor); }\n\n.pf-c-select__menu-item-main {\n  position: relative;\n  display: block;\n  padding-right: var(--pf-c-select__menu-item-main--PaddingRight);\n  white-space: nowrap; }\n\n.pf-c-select__menu-item-description {\n  display: block;\n  padding-right: var(--pf-c-select__menu-item-description--PaddingRight);\n  font-size: var(--pf-c-select__menu-item-description--FontSize);\n  color: var(--pf-c-select__menu-item-description--Color); }\n\n.pf-c-select__menu-item-icon {\n  position: absolute;\n  top: var(--pf-c-select__menu-item-icon--Top);\n  right: var(--pf-c-select__menu-item-icon--Right);\n  font-size: var(--pf-c-select__menu-item-icon--FontSize);\n  color: var(--pf-c-select__menu-item-icon--Color);\n  transform: translateY(var(--pf-c-select__menu-item-icon--TranslateY)); }\n\n.pf-c-select__menu-item-action-icon {\n  display: flex;\n  align-items: center;\n  min-height: var(--pf-c-select__menu-item-action-icon--MinHeight); }\n\n.pf-c-select__menu-item--match {\n  font-weight: var(--pf-c-select__menu-item--match--FontWeight);\n  background-color: inherit; }\n\n.pf-c-select__menu-group + .pf-c-select__menu-group {\n  padding-top: var(--pf-c-select__menu-group--menu-group--PaddingTop); }\n\n.pf-c-select__menu-search {\n  padding: var(--pf-c-select__menu-search--PaddingTop) var(--pf-c-select__menu-search--PaddingRight) var(--pf-c-select__menu-search--PaddingBottom) var(--pf-c-select__menu-search--PaddingLeft); }\n\n.pf-c-select__menu-group-title {\n  padding-top: var(--pf-c-select__menu-group-title--PaddingTop);\n  padding-right: var(--pf-c-select__menu-group-title--PaddingRight);\n  padding-bottom: var(--pf-c-select__menu-group-title--PaddingBottom);\n  padding-left: var(--pf-c-select__menu-group-title--PaddingLeft);\n  font-size: var(--pf-c-select__menu-group-title--FontSize);\n  font-weight: var(--pf-c-select__menu-group-title--FontWeight);\n  color: var(--pf-c-select__menu-group-title--Color); }\n\n.pf-c-simple-list {\n  --pf-c-simple-list__item-link--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-simple-list__item-link--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-simple-list__item-link--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-simple-list__item-link--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-simple-list__item-link--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-simple-list__item-link--Color: var(--pf-global--Color--100);\n  --pf-c-simple-list__item-link--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-simple-list__item-link--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-simple-list__item-link--m-current--Color: var(--pf-global--link--Color);\n  --pf-c-simple-list__item-link--m-current--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-simple-list__item-link--m-current--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-simple-list__item-link--hover--Color: var(--pf-global--link--Color);\n  --pf-c-simple-list__item-link--hover--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-simple-list__item-link--focus--Color: var(--pf-global--link--Color);\n  --pf-c-simple-list__item-link--focus--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-simple-list__item-link--focus--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-simple-list__item-link--active--Color: var(--pf-global--link--Color);\n  --pf-c-simple-list__item-link--active--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-simple-list__item-link--active--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-simple-list__title--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-simple-list__title--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-simple-list__title--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-simple-list__title--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-simple-list__title--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-simple-list__title--Color: var(--pf-global--Color--dark-200);\n  --pf-c-simple-list__title--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-simple-list__section--section--MarginTop: var(--pf-global--spacer--sm); }\n\n.pf-c-simple-list__item-link {\n  display: block;\n  width: 100%;\n  padding: var(--pf-c-simple-list__item-link--PaddingTop) var(--pf-c-simple-list__item-link--PaddingRight) var(--pf-c-simple-list__item-link--PaddingBottom) var(--pf-c-simple-list__item-link--PaddingLeft);\n  font-size: var(--pf-c-simple-list__item-link--FontSize);\n  font-weight: var(--pf-c-simple-list__item-link--FontWeight);\n  color: var(--pf-c-simple-list__item-link--Color);\n  text-align: left;\n  background-color: var(--pf-c-simple-list__item-link--BackgroundColor);\n  border: none; }\n  .pf-c-simple-list__item-link.pf-m-current {\n    --pf-c-simple-list__item-link--FontWeight: var(--pf-c-simple-list__item-link--m-current--FontWeight);\n    --pf-c-simple-list__item-link--BackgroundColor: var(--pf-c-simple-list__item-link--m-current--BackgroundColor);\n    --pf-c-simple-list__item-link--Color: var(--pf-c-simple-list__item-link--m-current--Color); }\n  .pf-c-simple-list__item-link:hover {\n    text-decoration: none;\n    --pf-c-simple-list__item-link--BackgroundColor: var(--pf-c-simple-list__item-link--hover--BackgroundColor);\n    --pf-c-simple-list__item-link--Color: var(--pf-c-simple-list__item-link--hover--Color); }\n  .pf-c-simple-list__item-link:focus {\n    --pf-c-simple-list__item-link--FontWeight: var(--pf-c-simple-list__item-link--focus--FontWeight);\n    --pf-c-simple-list__item-link--BackgroundColor: var(--pf-c-simple-list__item-link--focus--BackgroundColor);\n    --pf-c-simple-list__item-link--Color: var(--pf-c-simple-list__item-link--focus--Color); }\n  .pf-c-simple-list__item-link:active {\n    --pf-c-simple-list__item-link--FontWeight: var(--pf-c-simple-list__item-link--active--FontWeight);\n    --pf-c-simple-list__item-link--BackgroundColor: var(--pf-c-simple-list__item-link--active--BackgroundColor);\n    --pf-c-simple-list__item-link--Color: var(--pf-c-simple-list__item-link--active--Color); }\n\n.pf-c-simple-list__title {\n  padding: var(--pf-c-simple-list__title--PaddingTop) var(--pf-c-simple-list__title--PaddingRight) var(--pf-c-simple-list__title--PaddingBottom) var(--pf-c-simple-list__title--PaddingLeft);\n  font-size: var(--pf-c-simple-list__title--FontSize);\n  font-weight: var(--pf-c-simple-list__title--FontWeight);\n  color: var(--pf-c-simple-list__title--Color); }\n\n.pf-c-simple-list__section + .pf-c-simple-list__section {\n  margin-top: var(--pf-c-simple-list__section--section--MarginTop); }\n\n.pf-c-skeleton {\n  --pf-c-skeleton--BackgroundColor: var(--pf-global--palette--black-150);\n  --pf-c-skeleton--Width: auto;\n  --pf-c-skeleton--Height: auto;\n  --pf-c-skeleton--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-skeleton--before--PaddingBottom: 0;\n  --pf-c-skeleton--before--Height: auto;\n  --pf-c-skeleton--before--Content: "\\00a0";\n  --pf-c-skeleton--after--LinearGradientAngle: 90deg;\n  --pf-c-skeleton--after--LinearGradientColorStop1: rgba(237, 237, 237, 0);\n  --pf-c-skeleton--after--LinearGradientColorStop2: #ededed;\n  --pf-c-skeleton--after--LinearGradientColorStop3: rgba(237, 237, 237, 0);\n  --pf-c-skeleton--after--TranslateX: -100%;\n  --pf-c-skeleton--after--AnimationName: pf-c-skeleton-loading;\n  --pf-c-skeleton--after--AnimationDuration: 2s;\n  --pf-c-skeleton--after--AnimationIterationCount: infinite;\n  --pf-c-skeleton--after--AnimationTimingFunction: linear;\n  --pf-c-skeleton--after--AnimationDelay: .5s;\n  --pf-c-skeleton--m-circle--BorderRadius: var(--pf-global--BorderRadius--lg);\n  --pf-c-skeleton--m-circle--before--PaddingBottom: 100%;\n  --pf-c-skeleton--m-text-4xl--Height: calc(var(--pf-global--FontSize--4xl) * var(--pf-global--LineHeight--sm));\n  --pf-c-skeleton--m-text-3xl--Height: calc(var(--pf-global--FontSize--3xl) * var(--pf-global--LineHeight--sm));\n  --pf-c-skeleton--m-text-2xl--Height: calc(var(--pf-global--FontSize--2xl) * var(--pf-global--LineHeight--sm));\n  --pf-c-skeleton--m-text-xl--Height: calc(var(--pf-global--FontSize--xl) * var(--pf-global--LineHeight--sm));\n  --pf-c-skeleton--m-text-lg--Height: calc(var(--pf-global--FontSize--lg) * var(--pf-global--LineHeight--md));\n  --pf-c-skeleton--m-text-md--Height: calc(var(--pf-global--FontSize--md) * var(--pf-global--LineHeight--md));\n  --pf-c-skeleton--m-text-sm--Height: calc(var(--pf-global--FontSize--sm) * var(--pf-global--LineHeight--md));\n  --pf-c-skeleton--m-width-sm--Width: 6.25rem;\n  --pf-c-skeleton--m-width-md--Width: 12.5rem;\n  --pf-c-skeleton--m-width-lg--Width: 18.75rem;\n  --pf-c-skeleton--m-width-25--Width: 25%;\n  --pf-c-skeleton--m-width-33--Width: calc(100% / 3);\n  --pf-c-skeleton--m-width-50--Width: 50%;\n  --pf-c-skeleton--m-width-66--Width: calc(100% / 3 * 2);\n  --pf-c-skeleton--m-width-75--Width: 75%;\n  --pf-c-skeleton--m-height-sm--Height: 6.25rem;\n  --pf-c-skeleton--m-height-md--Height: 12.5rem;\n  --pf-c-skeleton--m-height-lg--Height: 18.75rem;\n  --pf-c-skeleton--m-height-25--Height: 25%;\n  --pf-c-skeleton--m-height-33--Height: calc(100% / 3);\n  --pf-c-skeleton--m-height-50--Height: 50%;\n  --pf-c-skeleton--m-height-66--Height: calc(100% / 3 * 2);\n  --pf-c-skeleton--m-height-75--Height: 75%;\n  --pf-c-skeleton--m-height-100--Height: 100%;\n  position: relative;\n  width: var(--pf-c-skeleton--Width);\n  height: var(--pf-c-skeleton--Height);\n  overflow: hidden;\n  background-color: var(--pf-c-skeleton--BackgroundColor);\n  border-radius: var(--pf-c-skeleton--BorderRadius);\n  transform: translate(0); }\n  .pf-c-skeleton::before {\n    display: block;\n    height: var(--pf-c-skeleton--before--Height);\n    padding-bottom: var(--pf-c-skeleton--before--PaddingBottom);\n    content: var(--pf-c-skeleton--before--Content); }\n  .pf-c-skeleton::after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    display: block;\n    content: "";\n    background: linear-gradient(var(--pf-c-skeleton--after--LinearGradientAngle), var(--pf-c-skeleton--after--LinearGradientColorStop1), var(--pf-c-skeleton--after--LinearGradientColorStop2), var(--pf-c-skeleton--after--LinearGradientColorStop3));\n    transform: translateX(var(--pf-c-skeleton--after--TranslateX));\n    animation: var(--pf-c-skeleton--after--AnimationName) var(--pf-c-skeleton--after--AnimationDuration) var(--pf-c-skeleton--after--AnimationTimingFunction) var(--pf-c-skeleton--after--AnimationDelay) var(--pf-c-skeleton--after--AnimationIterationCount); }\n  .pf-c-skeleton.pf-m-circle {\n    --pf-c-skeleton--BorderRadius: var(--pf-c-skeleton--m-circle--BorderRadius); }\n  .pf-c-skeleton.pf-m-square, .pf-c-skeleton.pf-m-circle {\n    --pf-c-skeleton--before--Height: 0;\n    --pf-c-skeleton--before--PaddingBottom: var(--pf-c-skeleton--m-circle--before--PaddingBottom); }\n  .pf-c-skeleton.pf-m-width-sm {\n    --pf-c-skeleton--Width: var(--pf-c-skeleton--m-width-sm--Width); }\n  .pf-c-skeleton.pf-m-width-md {\n    --pf-c-skeleton--Width: var(--pf-c-skeleton--m-width-md--Width); }\n  .pf-c-skeleton.pf-m-width-lg {\n    --pf-c-skeleton--Width: var(--pf-c-skeleton--m-width-lg--Width); }\n  .pf-c-skeleton.pf-m-width-25 {\n    --pf-c-skeleton--Width: var(--pf-c-skeleton--m-width-25--Width); }\n  .pf-c-skeleton.pf-m-width-33 {\n    --pf-c-skeleton--Width: var(--pf-c-skeleton--m-width-33--Width); }\n  .pf-c-skeleton.pf-m-width-50 {\n    --pf-c-skeleton--Width: var(--pf-c-skeleton--m-width-50--Width); }\n  .pf-c-skeleton.pf-m-width-66 {\n    --pf-c-skeleton--Width: var(--pf-c-skeleton--m-width-66--Width); }\n  .pf-c-skeleton.pf-m-width-75 {\n    --pf-c-skeleton--Width: var(--pf-c-skeleton--m-width-75--Width); }\n  .pf-c-skeleton.pf-m-height-sm {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-height-sm--Height); }\n  .pf-c-skeleton.pf-m-height-md {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-height-md--Height); }\n  .pf-c-skeleton.pf-m-height-lg {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-height-lg--Height); }\n  .pf-c-skeleton.pf-m-height-25 {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-height-25--Height); }\n  .pf-c-skeleton.pf-m-height-33 {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-height-33--Height); }\n  .pf-c-skeleton.pf-m-height-50 {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-height-50--Height); }\n  .pf-c-skeleton.pf-m-height-66 {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-height-66--Height); }\n  .pf-c-skeleton.pf-m-height-75 {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-height-75--Height); }\n  .pf-c-skeleton.pf-m-height-100 {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-height-100--Height); }\n  .pf-c-skeleton.pf-m-text-4xl {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-text-4xl--Height); }\n  .pf-c-skeleton.pf-m-text-3xl {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-text-3xl--Height); }\n  .pf-c-skeleton.pf-m-text-2xl {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-text-2xl--Height); }\n  .pf-c-skeleton.pf-m-text-xl {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-text-xl--Height); }\n  .pf-c-skeleton.pf-m-text-lg {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-text-lg--Height); }\n  .pf-c-skeleton.pf-m-text-md {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-text-md--Height); }\n  .pf-c-skeleton.pf-m-text-sm {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-text-sm--Height); }\n\n@keyframes pf-c-skeleton-loading {\n  0% {\n    transform: translateX(-100%); }\n  60% {\n    transform: translateX(100%); }\n  100% {\n    transform: translateX(100%); } }\n\n.pf-c-skip-to-content {\n  --pf-c-skip-to-content--Top: var(--pf-global--spacer--md);\n  --pf-c-skip-to-content--ZIndex: var(--pf-global--ZIndex--2xl);\n  --pf-c-skip-to-content--focus--Left: var(--pf-global--spacer--md);\n  position: absolute;\n  top: var(--pf-c-skip-to-content--Top);\n  left: -300%;\n  z-index: var(--pf-c-skip-to-content--ZIndex); }\n  .pf-c-skip-to-content:focus {\n    left: var(--pf-c-skip-to-content--focus--Left); }\n\n.pf-c-spinner {\n  --pf-c-spinner--AnimationDuration: 1.5s;\n  --pf-c-spinner--AnimationTimingFunction: cubic-bezier(.77, .005, .315, 1);\n  --pf-c-spinner--diameter: var(--pf-global--icon--FontSize--xl);\n  --pf-c-spinner--stroke-width-multiplier: .1;\n  --pf-c-spinner--stroke-width: calc(var(--pf-c-spinner--diameter) * var(--pf-c-spinner--stroke-width-multiplier));\n  --pf-c-spinner--Width: var(--pf-c-spinner--diameter);\n  --pf-c-spinner--Height: var(--pf-c-spinner--diameter);\n  --pf-c-spinner--Color: var(--pf-global--primary-color--100);\n  --pf-c-spinner--m-sm--diameter: var(--pf-global--icon--FontSize--sm);\n  --pf-c-spinner--m-md--diameter: var(--pf-global--icon--FontSize--md);\n  --pf-c-spinner--m-lg--diameter: var(--pf-global--icon--FontSize--lg);\n  --pf-c-spinner--m-xl--diameter: var(--pf-global--icon--FontSize--xl);\n  --pf-c-spinner__clipper--Width: var(--pf-c-spinner--diameter);\n  --pf-c-spinner__clipper--Height: var(--pf-c-spinner--diameter);\n  --pf-c-spinner__clipper--after--BoxShadowColor: var(--pf-c-spinner--Color);\n  --pf-c-spinner__clipper--after--Width: var(--pf-c-spinner--diameter);\n  --pf-c-spinner__clipper--after--Height: var(--pf-c-spinner--diameter);\n  --pf-c-spinner__clipper--after--BoxShadowSpreadRadius: var(--pf-c-spinner--stroke-width);\n  --pf-c-spinner__lead-ball--after--BackgroundColor: var(--pf-c-spinner--Color);\n  --pf-c-spinner__ball--after--Width: var(--pf-c-spinner--stroke-width);\n  --pf-c-spinner__ball--after--Height: var(--pf-c-spinner--stroke-width);\n  --pf-c-spinner__tail-ball--after--BackgroundColor: var(--pf-c-spinner--Color);\n  position: relative;\n  display: inline-block;\n  width: var(--pf-c-spinner--Width);\n  height: var(--pf-c-spinner--Height);\n  text-align: left;\n  animation: pf-animation-spinner-parent calc(var(--pf-c-spinner--AnimationDuration) * 2) var(--pf-c-spinner--AnimationTimingFunction) infinite; }\n  .pf-c-spinner.pf-m-sm {\n    --pf-c-spinner--diameter: var(--pf-c-spinner--m-sm--diameter); }\n  .pf-c-spinner.pf-m-md {\n    --pf-c-spinner--diameter: var(--pf-c-spinner--m-md--diameter); }\n  .pf-c-spinner.pf-m-lg {\n    --pf-c-spinner--diameter: var(--pf-c-spinner--m-lg--diameter); }\n  .pf-c-spinner.pf-m-xl {\n    --pf-c-spinner--diameter: var(--pf-c-spinner--m-xl--diameter); }\n\n@keyframes pf-animation-spinner-parent {\n  0% {\n    transform: rotate(0deg); }\n  50% {\n    transform: rotate(-540deg); }\n  100% {\n    transform: rotate(-1080deg); } }\n\n.pf-c-spinner__clipper {\n  position: absolute;\n  width: var(--pf-c-spinner__clipper--Width);\n  height: var(--pf-c-spinner__clipper--Height);\n  clip-path: inset(0 0 50% 50%);\n  animation: pf-animation-spinner__clipper var(--pf-c-spinner--AnimationDuration) linear infinite; }\n\n@keyframes pf-animation-spinner__clipper {\n  0% {\n    transform: rotate(0deg); }\n  100% {\n    transform: rotate(-270deg); } }\n\n.pf-c-spinner__clipper::after {\n  position: absolute;\n  width: var(--pf-c-spinner__clipper--after--Width);\n  height: var(--pf-c-spinner__clipper--after--Height);\n  clip-path: inset(0 0 0 50%);\n  content: "";\n  border-radius: 50%;\n  box-shadow: inset 0 0 0 var(--pf-c-spinner__clipper--after--BoxShadowSpreadRadius) var(--pf-c-spinner__clipper--after--BoxShadowColor);\n  animation: pf-animation-spinner__clipper-after var(--pf-c-spinner--AnimationDuration) linear infinite; }\n\n@keyframes pf-animation-spinner__clipper-after {\n  0% {\n    transform: rotate(90deg); }\n  100% {\n    transform: rotate(-180deg); } }\n\n.pf-c-spinner__lead-ball {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  animation: pf-animation-spinner__lead-ball var(--pf-c-spinner--AnimationDuration) linear infinite; }\n  .pf-c-spinner__lead-ball::after {\n    position: absolute;\n    top: calc(50% - (var(--pf-c-spinner__ball--after--Height) / 2));\n    right: 0;\n    width: var(--pf-c-spinner__ball--after--Width);\n    height: var(--pf-c-spinner__ball--after--Height);\n    content: "";\n    background-color: var(--pf-c-spinner__lead-ball--after--BackgroundColor);\n    border-radius: 50%;\n    transform-origin: top right; }\n\n@keyframes pf-animation-spinner__lead-ball {\n  0% {\n    transform: rotate(0deg); }\n  34% {\n    transform: rotate(-180deg); }\n  100% {\n    transform: rotate(-360deg); } }\n\n.pf-c-spinner__tail-ball {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  animation: pf-animation-spinner__tail-ball var(--pf-c-spinner--AnimationDuration) linear infinite; }\n  .pf-c-spinner__tail-ball::after {\n    position: absolute;\n    top: calc(50% - (var(--pf-c-spinner__ball--after--Height) / 2));\n    right: 0;\n    width: var(--pf-c-spinner__ball--after--Width);\n    height: var(--pf-c-spinner__ball--after--Height);\n    content: "";\n    background-color: var(--pf-c-spinner__tail-ball--after--BackgroundColor);\n    border-radius: 50%;\n    transform-origin: top right; }\n\n@keyframes pf-animation-spinner__tail-ball {\n  0% {\n    transform: rotate(0deg); }\n  67.5% {\n    transform: rotate(-180deg); }\n  100% {\n    transform: rotate(-360deg); } }\n\n.pf-c-switch {\n  --pf-c-switch--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-switch__toggle-icon--FontSize: calc(var(--pf-c-switch--FontSize) * .625);\n  --pf-c-switch__toggle-icon--Color: var(--pf-global--Color--light-100);\n  --pf-c-switch__toggle-icon--Left: calc(var(--pf-c-switch--FontSize) * .4);\n  --pf-c-switch__toggle-icon--Offset: 0.125rem;\n  --pf-c-switch--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-switch--Height: calc(var(--pf-c-switch--FontSize) * var(--pf-c-switch--LineHeight));\n  --pf-c-switch__input--checked__toggle--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-switch__input--checked__toggle--before--TranslateX: calc(100% + var(--pf-c-switch__toggle-icon--Offset));\n  --pf-c-switch__input--checked__label--Color: var(--pf-global--Color--dark-100);\n  --pf-c-switch__input--not-checked__label--Color: var(--pf-global--disabled-color--100);\n  --pf-c-switch__input--disabled__label--Color: var(--pf-global--disabled-color--100);\n  --pf-c-switch__input--disabled__toggle--BackgroundColor: var(--pf-global--Color--dark-200);\n  --pf-c-switch__input--disabled__toggle--before--BackgroundColor: var(--pf-global--disabled-color--200);\n  --pf-c-switch__input--focus__toggle--OutlineWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-switch__input--focus__toggle--OutlineOffset: var(--pf-global--spacer--sm);\n  --pf-c-switch__input--focus__toggle--OutlineColor: var(--pf-global--primary-color--100);\n  --pf-c-switch__toggle--Height: calc(var(--pf-c-switch--FontSize) * var(--pf-c-switch--LineHeight));\n  --pf-c-switch__toggle--BackgroundColor: var(--pf-global--disabled-color--200);\n  --pf-c-switch__toggle--BorderRadius: var(--pf-c-switch--Height);\n  --pf-c-switch__toggle--before--Width: calc(var(--pf-c-switch--FontSize) - var(--pf-c-switch__toggle-icon--Offset));\n  --pf-c-switch__toggle--before--Height: var(--pf-c-switch__toggle--before--Width);\n  --pf-c-switch__toggle--before--Top: calc((var(--pf-c-switch--Height) - var(--pf-c-switch__toggle--before--Height)) / 2);\n  --pf-c-switch__toggle--before--Left: var(--pf-c-switch__toggle--before--Top);\n  --pf-c-switch__toggle--before--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-switch__toggle--before--BorderRadius: var(--pf-global--BorderRadius--lg);\n  --pf-c-switch__toggle--before--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-switch__toggle--before--Transition: transform .25s ease 0s;\n  --pf-c-switch__toggle--Width: calc(var(--pf-c-switch--Height) + var(--pf-c-switch__toggle-icon--Offset) + var(--pf-c-switch__toggle--before--Width));\n  --pf-c-switch__label--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-switch__label--Color: var(--pf-global--Color--dark-100);\n  position: relative;\n  display: inline-block;\n  height: var(--pf-c-switch--Height);\n  font-size: var(--pf-c-switch--FontSize);\n  line-height: var(--pf-c-switch--LineHeight);\n  vertical-align: middle;\n  cursor: pointer; }\n\n.pf-c-switch__input {\n  position: absolute;\n  cursor: pointer;\n  opacity: 0; }\n  .pf-c-switch__input:focus ~ .pf-c-switch__toggle {\n    outline: var(--pf-c-switch__input--focus__toggle--OutlineWidth) solid var(--pf-c-switch__input--focus__toggle--OutlineColor);\n    outline-offset: var(--pf-c-switch__input--focus__toggle--OutlineOffset); }\n  .pf-c-switch__input:checked ~ .pf-c-switch__label {\n    color: var(--pf-c-switch__input--checked__label--Color); }\n  .pf-c-switch__input:checked ~ .pf-c-switch__toggle {\n    background-color: var(--pf-c-switch__input--checked__toggle--BackgroundColor); }\n    .pf-c-switch__input:checked ~ .pf-c-switch__toggle::before {\n      transform: translateX(var(--pf-c-switch__input--checked__toggle--before--TranslateX)); }\n  .pf-c-switch__input:checked ~ .pf-m-off {\n    display: none; }\n  .pf-c-switch__input:not(:checked) ~ .pf-c-switch__label {\n    color: var(--pf-c-switch__input--not-checked__label--Color); }\n  .pf-c-switch__input:not(:checked) ~ .pf-c-switch__toggle .pf-c-switch__toggle-icon {\n    display: none;\n    visibility: hidden; }\n  .pf-c-switch__input:not(:checked) ~ .pf-m-on {\n    display: none; }\n  .pf-c-switch__input:disabled {\n    cursor: not-allowed; }\n    .pf-c-switch__input:disabled ~ .pf-c-switch__label {\n      color: var(--pf-c-switch__input--disabled__label--Color);\n      cursor: not-allowed; }\n    .pf-c-switch__input:disabled ~ .pf-c-switch__toggle {\n      cursor: not-allowed;\n      background-color: var(--pf-c-switch__input--disabled__toggle--BackgroundColor); }\n      .pf-c-switch__input:disabled ~ .pf-c-switch__toggle::before {\n        background-color: var(--pf-c-switch__input--disabled__toggle--before--BackgroundColor); }\n\n.pf-c-switch__toggle {\n  position: relative;\n  display: inline-block;\n  width: var(--pf-c-switch__toggle--Width);\n  height: var(--pf-c-switch__toggle--Height);\n  background-color: var(--pf-c-switch__toggle--BackgroundColor);\n  border-radius: var(--pf-c-switch__toggle--BorderRadius); }\n  .pf-c-switch__toggle::before {\n    position: absolute;\n    top: var(--pf-c-switch__toggle--before--Top);\n    left: var(--pf-c-switch__toggle--before--Left);\n    display: block;\n    width: var(--pf-c-switch__toggle--before--Width);\n    height: var(--pf-c-switch__toggle--before--Height);\n    content: "";\n    background-color: var(--pf-c-switch__toggle--before--BackgroundColor);\n    border-radius: var(--pf-c-switch__toggle--before--BorderRadius);\n    box-shadow: var(--pf-c-switch__toggle--before--BoxShadow);\n    transition: var(--pf-c-switch__toggle--before--Transition); }\n\n.pf-c-switch__toggle-icon {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: var(--pf-c-switch__toggle-icon--Left);\n  display: flex;\n  align-items: center;\n  font-size: var(--pf-c-switch__toggle-icon--FontSize);\n  color: var(--pf-c-switch__toggle-icon--Color); }\n\n.pf-c-switch__label {\n  display: inline-block;\n  padding-left: var(--pf-c-switch__label--PaddingLeft);\n  color: var(--pf-c-switch__label--Color);\n  vertical-align: top; }\n\n.pf-c-tab-content {\n  --pf-c-tab-content--m-light-300: var(--pf-global--BackgroundColor--light-300); }\n  .pf-c-tab-content.pf-m-light-300 {\n    background-color: var(--pf-c-tab-content--m-light-300); }\n\n.pf-c-table[class*="pf-m-grid"] {\n  --pf-c-table--responsive--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-table--tbody--responsive--border-width--base: var(--pf-global--spacer--sm);\n  --pf-c-table--tbody--after--border-width--base: var(--pf-global--BorderWidth--lg);\n  --pf-c-table--tbody--after--BorderLeftWidth: 0;\n  --pf-c-table--tbody--after--BorderColor: var(--pf-global--active-color--100);\n  --pf-c-table-tr--responsive--border-width--base: var(--pf-global--spacer--sm);\n  --pf-c-table-tr--responsive--last-child--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-table-tr--responsive--GridColumnGap: var(--pf-global--spacer--md);\n  --pf-c-table-tr--responsive--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-table-tr--responsive--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-table-tr--responsive--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-table-tr--responsive--xl--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-table-tr--responsive--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-table-tr--responsive--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-table-tr--responsive--xl--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-table-tr--responsive--nested-table--PaddingTop: var(--pf-global--spacer--xl);\n  --pf-c-table-tr--responsive--nested-table--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-table-tr--responsive--nested-table--PaddingBottom: var(--pf-global--spacer--xl);\n  --pf-c-table-tr--responsive--nested-table--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-table--m-grid--cell--hidden-visible--Display: grid;\n  --pf-c-table--m-grid--cell--PaddingTop: 0;\n  --pf-c-table--m-grid--cell--PaddingRight: 0;\n  --pf-c-table--m-grid--cell--PaddingBottom: 0;\n  --pf-c-table--m-grid--cell--PaddingLeft: 0;\n  --pf-c-table-td--responsive--GridColumnGap: var(--pf-global--spacer--md);\n  --pf-c-table--cell--responsive--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-table--cell--responsive--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-table--cell--first-child--responsive--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-table--cell--responsive--PaddingRight: 0;\n  --pf-c-table--cell--responsive--PaddingLeft: 0;\n  --pf-c-table--m-compact-tr--responsive--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-table--m-compact-tr--responsive--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-table--m-compact-tr-td--responsive--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-table--m-compact-tr-td--responsive--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-table--m-compact__action--responsive--MarginTop: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-table--m-compact__action--responsive--MarginBottom: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-table--m-compact__toggle--c-button--responsive--MarginBottom: calc(0.375rem * -1);\n  --pf-c-table__expandable-row-content--responsive--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-table__expandable-row-content--responsive--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-table__expandable-row-content--responsive--xl--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-table__expandable-row-content--responsive--xl--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-table__expandable-row-content--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-table__check--responsive--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-table__check--responsive--MarginTop: 0.875rem;\n  --pf-c-table--m-grid__favorite--MarginTop: 0.5rem;\n  --pf-c-table--m-grid__check--favorite--MarginLeft: var(--pf-global--spacer--xl);\n  --pf-c-table--m-grid__action--MarginTop: 0.375rem;\n  --pf-c-table__action--responsive--MarginLeft: var(--pf-global--spacer--xl);\n  --pf-c-table--m-grid__favorite--action--MarginLeft: var(--pf-global--spacer--2xl);\n  --pf-c-table--m-grid__check--favorite--action--MarginLeft: calc(var(--pf-c-table--m-grid__check--favorite--MarginLeft) + var(--pf-c-table--m-grid__favorite--action--MarginLeft));\n  --pf-c-table__toggle__icon--Transition: .2s ease-in 0s;\n  --pf-c-table__toggle--m-expanded__icon--Rotate: 180deg; }\n  @media screen and (max-width: 1200px) {\n    .pf-c-table[class*="pf-m-grid"] {\n      --pf-c-table-tr--responsive--PaddingRight: var(--pf-c-table-tr--responsive--xl--PaddingRight);\n      --pf-c-table-tr--responsive--PaddingLeft: var(--pf-c-table-tr--responsive--xl--PaddingLeft); } }\n  @media screen and (max-width: 1200px) {\n    .pf-c-table[class*="pf-m-grid"] {\n      --pf-c-table__expandable-row-content--responsive--PaddingRight: var(--pf-c-table__expandable-row-content--responsive--xl--PaddingRight);\n      --pf-c-table__expandable-row-content--responsive--PaddingLeft: var(--pf-c-table__expandable-row-content--responsive--xl--PaddingLeft); } }\n\n.pf-m-grid.pf-c-table {\n  --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n  --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n  --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n  --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft);\n  --pf-c-table__favorite--c-button--MarginTop: auto;\n  --pf-c-table__favorite--c-button--MarginRight: auto;\n  --pf-c-table__favorite--c-button--MarginBottom: auto;\n  --pf-c-table__favorite--c-button--MarginLeft: auto;\n  display: grid;\n  border: none; }\n  .pf-m-grid.pf-c-table tr > * {\n    width: auto;\n    min-width: 0;\n    max-width: none;\n    overflow: visible;\n    text-overflow: clip;\n    white-space: normal; }\n  .pf-m-grid.pf-c-table .pf-c-table__text {\n    position: relative;\n    width: auto;\n    min-width: 0;\n    max-width: none;\n    overflow: var(--pf-c-table--cell--Overflow);\n    text-overflow: var(--pf-c-table--cell--TextOverflow);\n    white-space: var(--pf-c-table--cell--WhiteSpace); }\n  .pf-m-grid.pf-c-table thead {\n    display: none;\n    visibility: hidden; }\n  .pf-m-grid.pf-c-table tbody {\n    display: block; }\n    .pf-m-grid.pf-c-table tbody:first-of-type {\n      border-top: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n  .pf-m-grid.pf-c-table table.pf-m-compact > tbody {\n    border-top: 0; }\n  .pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) {\n    border-bottom: var(--pf-c-table-tr--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n  .pf-m-grid.pf-c-table tr:last-child,\n  .pf-m-grid.pf-c-table tbody:last-of-type:not(:only-of-type) > tr {\n    border-bottom-width: var(--pf-c-table-tr--responsive--last-child--BorderBottomWidth); }\n  .pf-m-grid.pf-c-table tbody.pf-m-expanded {\n    border-bottom: var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor); }\n    .pf-m-grid.pf-c-table tbody.pf-m-expanded tr:not(.pf-c-table__expandable-row) {\n      border-bottom: 0; }\n    .pf-m-grid.pf-c-table tbody.pf-m-expanded:not(:last-of-type) {\n      border-bottom: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n  .pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) {\n    display: grid;\n    grid-template-columns: 1fr;\n    height: auto;\n    grid-auto-columns: max-content;\n    grid-column-gap: var(--pf-c-table-tr--responsive--GridColumnGap);\n    padding: var(--pf-c-table-tr--responsive--PaddingTop) var(--pf-c-table-tr--responsive--PaddingRight) var(--pf-c-table-tr--responsive--PaddingBottom) var(--pf-c-table-tr--responsive--PaddingLeft); }\n    .pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) > * {\n      padding: var(--pf-c-table--cell--responsive--PaddingTop) var(--pf-c-table--cell--responsive--PaddingRight) var(--pf-c-table--cell--responsive--PaddingBottom) var(--pf-c-table--cell--responsive--PaddingLeft); }\n      .pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) > *:first-child {\n        --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--cell--first-child--responsive--PaddingTop); }\n  .pf-m-grid.pf-c-table.pf-m-compact {\n    --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table--m-compact-tr--responsive--PaddingTop);\n    --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr--responsive--PaddingBottom);\n    --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--m-compact-tr-td--responsive--PaddingTop);\n    --pf-c-table--cell--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr-td--responsive--PaddingBottom);\n    --pf-c-table__check--input--MarginTop: 0; }\n    .pf-m-grid.pf-c-table.pf-m-compact .pf-c-table__action {\n      margin-top: var(--pf-c-table--m-compact__action--responsive--MarginTop);\n      margin-bottom: var(--pf-c-table--m-compact__action--responsive--MarginTop); }\n    .pf-m-grid.pf-c-table.pf-m-compact .pf-c-table__toggle .pf-c-button {\n      margin-bottom: var(--pf-c-table--m-compact__toggle--c-button--responsive--MarginBottom); }\n  .pf-m-grid.pf-c-table .pf-c-table__icon > * {\n    text-align: left; }\n  .pf-m-grid.pf-c-table [data-label] {\n    --pf-c-table--cell--hidden-visible--Display: var(--pf-c-table--m-grid--cell--hidden-visible--Display);\n    grid-column: 1;\n    grid-column-gap: var(--pf-c-table-td--responsive--GridColumnGap);\n    grid-template-columns: 1fr minmax(0, 1.5fr);\n    align-items: start; }\n    .pf-m-grid.pf-c-table [data-label] > * {\n      grid-column: 2; }\n    .pf-m-grid.pf-c-table [data-label]::before {\n      font-weight: bold;\n      text-align: left;\n      content: attr(data-label); }\n  .pf-m-grid.pf-c-table tr > *:first-child {\n    --pf-c-table--cell--PaddingLeft: 0; }\n  .pf-m-grid.pf-c-table tr > *:last-child {\n    --pf-c-table--cell--PaddingRight: 0; }\n  .pf-m-grid.pf-c-table .pf-c-table {\n    --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table-tr--responsive--nested-table--PaddingTop);\n    --pf-c-table-tr--responsive--PaddingRight: var(--pf-c-table-tr--responsive--nested-table--PaddingRight);\n    --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table-tr--responsive--nested-table--PaddingBottom);\n    --pf-c-table-tr--responsive--PaddingLeft: var(--pf-c-table-tr--responsive--nested-table--PaddingLeft);\n    border: 0; }\n    .pf-m-grid.pf-c-table .pf-c-table tr:not(.pf-c-table__expandable-row) + tr:not(.pf-c-table__expandable-row) {\n      --pf-c-table-tr--responsive--PaddingTop: 0; }\n  .pf-m-grid.pf-c-table .pf-c-table__compound-expansion-toggle {\n    --pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth: 0;\n    --pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth: 0;\n    --pf-c-table__compound-expansion-toggle__button--after--Top: 100%; }\n  .pf-m-grid.pf-c-table tbody {\n    position: relative; }\n    .pf-m-grid.pf-c-table tbody::after {\n      position: absolute;\n      top: 0;\n      bottom: 0;\n      left: 0;\n      content: "";\n      border: 0;\n      border-left: var(--pf-c-table--tbody--after--BorderLeftWidth) solid var(--pf-c-table--tbody--after--BorderColor); }\n    .pf-m-grid.pf-c-table tbody.pf-m-expanded {\n      --pf-c-table--tbody--after--BorderLeftWidth: var(--pf-c-table--tbody--after--border-width--base); }\n      .pf-m-grid.pf-c-table tbody.pf-m-expanded tbody {\n        --pf-c-table--tbody--after--BorderLeftWidth: 0; }\n    .pf-m-grid.pf-c-table tbody > tr > :first-child:not(.pf-c-table__check)::after {\n      --pf-c-table__expandable-row--after--BorderLeftWidth: 0;\n      position: static;\n      width: auto;\n      background-color: transparent; }\n  .pf-m-grid.pf-c-table .pf-c-table__expandable-row {\n    --pf-c-table--cell--responsive--PaddingTop: 0;\n    --pf-c-table--cell--responsive--PaddingRight: 0;\n    --pf-c-table--cell--responsive--PaddingBottom: 0;\n    --pf-c-table--cell--responsive--PaddingLeft: 0;\n    --pf-c-table--cell--PaddingRight: 0;\n    --pf-c-table--cell--PaddingLeft: 0;\n    display: block;\n    max-height: var(--pf-c-table__expandable-row--MaxHeight);\n    overflow-y: auto;\n    border-bottom: none;\n    box-shadow: none; }\n    .pf-m-grid.pf-c-table .pf-c-table__expandable-row > * {\n      position: static;\n      display: block; }\n    .pf-m-grid.pf-c-table .pf-c-table__expandable-row.pf-m-expanded {\n      border-top-color: var(--pf-c-table--BorderColor); }\n    .pf-m-grid.pf-c-table .pf-c-table__expandable-row > :first-child:not(.pf-c-table__check)::after {\n      content: none; }\n    .pf-m-grid.pf-c-table .pf-c-table__expandable-row td.pf-m-no-padding .pf-c-table__expandable-row-content, .pf-m-grid.pf-c-table .pf-c-table__expandable-row th.pf-m-no-padding .pf-c-table__expandable-row-content {\n      padding: 0; }\n    .pf-m-grid.pf-c-table .pf-c-table__expandable-row:not(.pf-m-expanded) {\n      display: none;\n      visibility: hidden; }\n    .pf-m-grid.pf-c-table .pf-c-table__expandable-row .pf-c-table__expandable-row-content {\n      padding-right: var(--pf-c-table__expandable-row-content--responsive--PaddingRight);\n      padding-left: var(--pf-c-table__expandable-row-content--responsive--PaddingLeft); }\n  .pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__toggle,\n  .pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__check,\n  .pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__favorite,\n  .pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__action {\n    width: auto;\n    padding: 0; }\n  .pf-m-grid.pf-c-table .pf-c-table__toggle {\n    grid-row-start: 20;\n    grid-column: -1;\n    justify-self: end;\n    padding-right: 0; }\n    .pf-m-grid.pf-c-table .pf-c-table__toggle::after {\n      content: none; }\n  .pf-m-grid.pf-c-table .pf-c-table__button {\n    --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n    --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n    --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n    --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft); }\n  .pf-m-grid.pf-c-table .pf-c-table__check,\n  .pf-m-grid.pf-c-table .pf-c-table__favorite,\n  .pf-m-grid.pf-c-table .pf-c-table__action {\n    grid-row-start: 1;\n    grid-column-start: 2; }\n  .pf-m-grid.pf-c-table .pf-c-table__check {\n    margin-top: var(--pf-c-table__check--responsive--MarginTop);\n    margin-left: var(--pf-c-table__check--responsive--MarginLeft); }\n    .pf-m-grid.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite {\n      margin-left: var(--pf-c-table--m-grid__check--favorite--MarginLeft); }\n      .pf-m-grid.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite ~ .pf-c-table__action {\n        margin-left: var(--pf-c-table--m-grid__check--favorite--action--MarginLeft); }\n    .pf-m-grid.pf-c-table .pf-c-table__check ~ .pf-c-table__action {\n      margin-left: var(--pf-c-table__action--responsive--MarginLeft); }\n  .pf-m-grid.pf-c-table .pf-c-table__favorite {\n    margin-top: var(--pf-c-table--m-grid__favorite--MarginTop); }\n    .pf-m-grid.pf-c-table .pf-c-table__favorite ~ .pf-c-table__action {\n      margin-left: var(--pf-c-table--m-grid__favorite--action--MarginLeft); }\n  .pf-m-grid.pf-c-table .pf-c-table__action {\n    margin-top: var(--pf-c-table--m-grid__action--MarginTop);\n    text-align: right; }\n    @media screen and (max-width: 576px) {\n      .pf-m-grid.pf-c-table .pf-c-table__action {\n        grid-row-start: 1;\n        grid-column-start: 2;\n        margin-left: 0; } }\n  .pf-m-grid.pf-c-table .pf-c-table__inline-edit-action {\n    grid-column: 2;\n    grid-row: 2; }\n  .pf-m-grid.pf-c-table .pf-c-table__toggle-icon {\n    transition: var(--pf-c-table__toggle__icon--Transition); }\n    .pf-c-button.pf-m-expanded > .pf-m-grid.pf-c-table .pf-c-table__toggle-icon {\n      transform: rotate(var(--pf-c-table__toggle--m-expanded__icon--Rotate)); }\n  .pf-m-grid.pf-c-table .pf-m-nowrap {\n    --pf-c-table--cell--Overflow: auto; }\n  .pf-m-grid.pf-c-table .pf-m-fit-content {\n    width: auto;\n    white-space: normal; }\n  .pf-m-grid.pf-c-table .pf-m-truncate {\n    --pf-c-table--cell--MaxWidth: 100%; }\n  .pf-m-grid.pf-c-table [class*="pf-m-width"] {\n    --pf-c-table--cell--Width: auto; }\n\n@media screen and (max-width: 768px) {\n  .pf-m-grid-md.pf-c-table {\n    --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n    --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n    --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n    --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft);\n    --pf-c-table__favorite--c-button--MarginTop: auto;\n    --pf-c-table__favorite--c-button--MarginRight: auto;\n    --pf-c-table__favorite--c-button--MarginBottom: auto;\n    --pf-c-table__favorite--c-button--MarginLeft: auto;\n    display: grid;\n    border: none; }\n    .pf-m-grid-md.pf-c-table tr > * {\n      width: auto;\n      min-width: 0;\n      max-width: none;\n      overflow: visible;\n      text-overflow: clip;\n      white-space: normal; }\n    .pf-m-grid-md.pf-c-table .pf-c-table__text {\n      position: relative;\n      width: auto;\n      min-width: 0;\n      max-width: none;\n      overflow: var(--pf-c-table--cell--Overflow);\n      text-overflow: var(--pf-c-table--cell--TextOverflow);\n      white-space: var(--pf-c-table--cell--WhiteSpace); }\n    .pf-m-grid-md.pf-c-table thead {\n      display: none;\n      visibility: hidden; }\n    .pf-m-grid-md.pf-c-table tbody {\n      display: block; }\n      .pf-m-grid-md.pf-c-table tbody:first-of-type {\n        border-top: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-md.pf-c-table table.pf-m-compact > tbody {\n      border-top: 0; }\n    .pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) {\n      border-bottom: var(--pf-c-table-tr--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-md.pf-c-table tr:last-child,\n    .pf-m-grid-md.pf-c-table tbody:last-of-type:not(:only-of-type) > tr {\n      border-bottom-width: var(--pf-c-table-tr--responsive--last-child--BorderBottomWidth); }\n    .pf-m-grid-md.pf-c-table tbody.pf-m-expanded {\n      border-bottom: var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor); }\n      .pf-m-grid-md.pf-c-table tbody.pf-m-expanded tr:not(.pf-c-table__expandable-row) {\n        border-bottom: 0; }\n      .pf-m-grid-md.pf-c-table tbody.pf-m-expanded:not(:last-of-type) {\n        border-bottom: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) {\n      display: grid;\n      grid-template-columns: 1fr;\n      height: auto;\n      grid-auto-columns: max-content;\n      grid-column-gap: var(--pf-c-table-tr--responsive--GridColumnGap);\n      padding: var(--pf-c-table-tr--responsive--PaddingTop) var(--pf-c-table-tr--responsive--PaddingRight) var(--pf-c-table-tr--responsive--PaddingBottom) var(--pf-c-table-tr--responsive--PaddingLeft); }\n      .pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) > * {\n        padding: var(--pf-c-table--cell--responsive--PaddingTop) var(--pf-c-table--cell--responsive--PaddingRight) var(--pf-c-table--cell--responsive--PaddingBottom) var(--pf-c-table--cell--responsive--PaddingLeft); }\n        .pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) > *:first-child {\n          --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--cell--first-child--responsive--PaddingTop); }\n    .pf-m-grid-md.pf-c-table.pf-m-compact {\n      --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table--m-compact-tr--responsive--PaddingTop);\n      --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr--responsive--PaddingBottom);\n      --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--m-compact-tr-td--responsive--PaddingTop);\n      --pf-c-table--cell--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr-td--responsive--PaddingBottom);\n      --pf-c-table__check--input--MarginTop: 0; }\n      .pf-m-grid-md.pf-c-table.pf-m-compact .pf-c-table__action {\n        margin-top: var(--pf-c-table--m-compact__action--responsive--MarginTop);\n        margin-bottom: var(--pf-c-table--m-compact__action--responsive--MarginTop); }\n      .pf-m-grid-md.pf-c-table.pf-m-compact .pf-c-table__toggle .pf-c-button {\n        margin-bottom: var(--pf-c-table--m-compact__toggle--c-button--responsive--MarginBottom); }\n    .pf-m-grid-md.pf-c-table .pf-c-table__icon > * {\n      text-align: left; }\n    .pf-m-grid-md.pf-c-table [data-label] {\n      --pf-c-table--cell--hidden-visible--Display: var(--pf-c-table--m-grid--cell--hidden-visible--Display);\n      grid-column: 1;\n      grid-column-gap: var(--pf-c-table-td--responsive--GridColumnGap);\n      grid-template-columns: 1fr minmax(0, 1.5fr);\n      align-items: start; }\n      .pf-m-grid-md.pf-c-table [data-label] > * {\n        grid-column: 2; }\n      .pf-m-grid-md.pf-c-table [data-label]::before {\n        font-weight: bold;\n        text-align: left;\n        content: attr(data-label); }\n    .pf-m-grid-md.pf-c-table tr > *:first-child {\n      --pf-c-table--cell--PaddingLeft: 0; }\n    .pf-m-grid-md.pf-c-table tr > *:last-child {\n      --pf-c-table--cell--PaddingRight: 0; }\n    .pf-m-grid-md.pf-c-table .pf-c-table {\n      --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table-tr--responsive--nested-table--PaddingTop);\n      --pf-c-table-tr--responsive--PaddingRight: var(--pf-c-table-tr--responsive--nested-table--PaddingRight);\n      --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table-tr--responsive--nested-table--PaddingBottom);\n      --pf-c-table-tr--responsive--PaddingLeft: var(--pf-c-table-tr--responsive--nested-table--PaddingLeft);\n      border: 0; }\n      .pf-m-grid-md.pf-c-table .pf-c-table tr:not(.pf-c-table__expandable-row) + tr:not(.pf-c-table__expandable-row) {\n        --pf-c-table-tr--responsive--PaddingTop: 0; }\n    .pf-m-grid-md.pf-c-table .pf-c-table__compound-expansion-toggle {\n      --pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth: 0;\n      --pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth: 0;\n      --pf-c-table__compound-expansion-toggle__button--after--Top: 100%; }\n    .pf-m-grid-md.pf-c-table tbody {\n      position: relative; }\n      .pf-m-grid-md.pf-c-table tbody::after {\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        content: "";\n        border: 0;\n        border-left: var(--pf-c-table--tbody--after--BorderLeftWidth) solid var(--pf-c-table--tbody--after--BorderColor); }\n      .pf-m-grid-md.pf-c-table tbody.pf-m-expanded {\n        --pf-c-table--tbody--after--BorderLeftWidth: var(--pf-c-table--tbody--after--border-width--base); }\n        .pf-m-grid-md.pf-c-table tbody.pf-m-expanded tbody {\n          --pf-c-table--tbody--after--BorderLeftWidth: 0; }\n      .pf-m-grid-md.pf-c-table tbody > tr > :first-child:not(.pf-c-table__check)::after {\n        --pf-c-table__expandable-row--after--BorderLeftWidth: 0;\n        position: static;\n        width: auto;\n        background-color: transparent; }\n    .pf-m-grid-md.pf-c-table .pf-c-table__expandable-row {\n      --pf-c-table--cell--responsive--PaddingTop: 0;\n      --pf-c-table--cell--responsive--PaddingRight: 0;\n      --pf-c-table--cell--responsive--PaddingBottom: 0;\n      --pf-c-table--cell--responsive--PaddingLeft: 0;\n      --pf-c-table--cell--PaddingRight: 0;\n      --pf-c-table--cell--PaddingLeft: 0;\n      display: block;\n      max-height: var(--pf-c-table__expandable-row--MaxHeight);\n      overflow-y: auto;\n      border-bottom: none;\n      box-shadow: none; }\n      .pf-m-grid-md.pf-c-table .pf-c-table__expandable-row > * {\n        position: static;\n        display: block; }\n      .pf-m-grid-md.pf-c-table .pf-c-table__expandable-row.pf-m-expanded {\n        border-top-color: var(--pf-c-table--BorderColor); }\n      .pf-m-grid-md.pf-c-table .pf-c-table__expandable-row > :first-child:not(.pf-c-table__check)::after {\n        content: none; }\n      .pf-m-grid-md.pf-c-table .pf-c-table__expandable-row td.pf-m-no-padding .pf-c-table__expandable-row-content, .pf-m-grid-md.pf-c-table .pf-c-table__expandable-row th.pf-m-no-padding .pf-c-table__expandable-row-content {\n        padding: 0; }\n      .pf-m-grid-md.pf-c-table .pf-c-table__expandable-row:not(.pf-m-expanded) {\n        display: none;\n        visibility: hidden; }\n      .pf-m-grid-md.pf-c-table .pf-c-table__expandable-row .pf-c-table__expandable-row-content {\n        padding-right: var(--pf-c-table__expandable-row-content--responsive--PaddingRight);\n        padding-left: var(--pf-c-table__expandable-row-content--responsive--PaddingLeft); }\n    .pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__toggle,\n    .pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__check,\n    .pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__favorite,\n    .pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__action {\n      width: auto;\n      padding: 0; }\n    .pf-m-grid-md.pf-c-table .pf-c-table__toggle {\n      grid-row-start: 20;\n      grid-column: -1;\n      justify-self: end;\n      padding-right: 0; }\n      .pf-m-grid-md.pf-c-table .pf-c-table__toggle::after {\n        content: none; }\n    .pf-m-grid-md.pf-c-table .pf-c-table__button {\n      --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n      --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n      --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n      --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft); }\n    .pf-m-grid-md.pf-c-table .pf-c-table__check,\n    .pf-m-grid-md.pf-c-table .pf-c-table__favorite,\n    .pf-m-grid-md.pf-c-table .pf-c-table__action {\n      grid-row-start: 1;\n      grid-column-start: 2; }\n    .pf-m-grid-md.pf-c-table .pf-c-table__check {\n      margin-top: var(--pf-c-table__check--responsive--MarginTop);\n      margin-left: var(--pf-c-table__check--responsive--MarginLeft); }\n      .pf-m-grid-md.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite {\n        margin-left: var(--pf-c-table--m-grid__check--favorite--MarginLeft); }\n        .pf-m-grid-md.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite ~ .pf-c-table__action {\n          margin-left: var(--pf-c-table--m-grid__check--favorite--action--MarginLeft); }\n      .pf-m-grid-md.pf-c-table .pf-c-table__check ~ .pf-c-table__action {\n        margin-left: var(--pf-c-table__action--responsive--MarginLeft); }\n    .pf-m-grid-md.pf-c-table .pf-c-table__favorite {\n      margin-top: var(--pf-c-table--m-grid__favorite--MarginTop); }\n      .pf-m-grid-md.pf-c-table .pf-c-table__favorite ~ .pf-c-table__action {\n        margin-left: var(--pf-c-table--m-grid__favorite--action--MarginLeft); }\n    .pf-m-grid-md.pf-c-table .pf-c-table__action {\n      margin-top: var(--pf-c-table--m-grid__action--MarginTop);\n      text-align: right; } }\n    @media screen and (max-width: 768px) and (max-width: 576px) {\n      .pf-m-grid-md.pf-c-table .pf-c-table__action {\n        grid-row-start: 1;\n        grid-column-start: 2;\n        margin-left: 0; } }\n\n@media screen and (max-width: 768px) {\n    .pf-m-grid-md.pf-c-table .pf-c-table__inline-edit-action {\n      grid-column: 2;\n      grid-row: 2; }\n    .pf-m-grid-md.pf-c-table .pf-c-table__toggle-icon {\n      transition: var(--pf-c-table__toggle__icon--Transition); }\n      .pf-c-button.pf-m-expanded > .pf-m-grid-md.pf-c-table .pf-c-table__toggle-icon {\n        transform: rotate(var(--pf-c-table__toggle--m-expanded__icon--Rotate)); }\n    .pf-m-grid-md.pf-c-table .pf-m-nowrap {\n      --pf-c-table--cell--Overflow: auto; }\n    .pf-m-grid-md.pf-c-table .pf-m-fit-content {\n      width: auto;\n      white-space: normal; }\n    .pf-m-grid-md.pf-c-table .pf-m-truncate {\n      --pf-c-table--cell--MaxWidth: 100%; }\n    .pf-m-grid-md.pf-c-table [class*="pf-m-width"] {\n      --pf-c-table--cell--Width: auto; } }\n\n@media screen and (max-width: 992px) {\n  .pf-m-grid-lg.pf-c-table {\n    --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n    --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n    --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n    --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft);\n    --pf-c-table__favorite--c-button--MarginTop: auto;\n    --pf-c-table__favorite--c-button--MarginRight: auto;\n    --pf-c-table__favorite--c-button--MarginBottom: auto;\n    --pf-c-table__favorite--c-button--MarginLeft: auto;\n    display: grid;\n    border: none; }\n    .pf-m-grid-lg.pf-c-table tr > * {\n      width: auto;\n      min-width: 0;\n      max-width: none;\n      overflow: visible;\n      text-overflow: clip;\n      white-space: normal; }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__text {\n      position: relative;\n      width: auto;\n      min-width: 0;\n      max-width: none;\n      overflow: var(--pf-c-table--cell--Overflow);\n      text-overflow: var(--pf-c-table--cell--TextOverflow);\n      white-space: var(--pf-c-table--cell--WhiteSpace); }\n    .pf-m-grid-lg.pf-c-table thead {\n      display: none;\n      visibility: hidden; }\n    .pf-m-grid-lg.pf-c-table tbody {\n      display: block; }\n      .pf-m-grid-lg.pf-c-table tbody:first-of-type {\n        border-top: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-lg.pf-c-table table.pf-m-compact > tbody {\n      border-top: 0; }\n    .pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) {\n      border-bottom: var(--pf-c-table-tr--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-lg.pf-c-table tr:last-child,\n    .pf-m-grid-lg.pf-c-table tbody:last-of-type:not(:only-of-type) > tr {\n      border-bottom-width: var(--pf-c-table-tr--responsive--last-child--BorderBottomWidth); }\n    .pf-m-grid-lg.pf-c-table tbody.pf-m-expanded {\n      border-bottom: var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor); }\n      .pf-m-grid-lg.pf-c-table tbody.pf-m-expanded tr:not(.pf-c-table__expandable-row) {\n        border-bottom: 0; }\n      .pf-m-grid-lg.pf-c-table tbody.pf-m-expanded:not(:last-of-type) {\n        border-bottom: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) {\n      display: grid;\n      grid-template-columns: 1fr;\n      height: auto;\n      grid-auto-columns: max-content;\n      grid-column-gap: var(--pf-c-table-tr--responsive--GridColumnGap);\n      padding: var(--pf-c-table-tr--responsive--PaddingTop) var(--pf-c-table-tr--responsive--PaddingRight) var(--pf-c-table-tr--responsive--PaddingBottom) var(--pf-c-table-tr--responsive--PaddingLeft); }\n      .pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) > * {\n        padding: var(--pf-c-table--cell--responsive--PaddingTop) var(--pf-c-table--cell--responsive--PaddingRight) var(--pf-c-table--cell--responsive--PaddingBottom) var(--pf-c-table--cell--responsive--PaddingLeft); }\n        .pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) > *:first-child {\n          --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--cell--first-child--responsive--PaddingTop); }\n    .pf-m-grid-lg.pf-c-table.pf-m-compact {\n      --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table--m-compact-tr--responsive--PaddingTop);\n      --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr--responsive--PaddingBottom);\n      --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--m-compact-tr-td--responsive--PaddingTop);\n      --pf-c-table--cell--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr-td--responsive--PaddingBottom);\n      --pf-c-table__check--input--MarginTop: 0; }\n      .pf-m-grid-lg.pf-c-table.pf-m-compact .pf-c-table__action {\n        margin-top: var(--pf-c-table--m-compact__action--responsive--MarginTop);\n        margin-bottom: var(--pf-c-table--m-compact__action--responsive--MarginTop); }\n      .pf-m-grid-lg.pf-c-table.pf-m-compact .pf-c-table__toggle .pf-c-button {\n        margin-bottom: var(--pf-c-table--m-compact__toggle--c-button--responsive--MarginBottom); }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__icon > * {\n      text-align: left; }\n    .pf-m-grid-lg.pf-c-table [data-label] {\n      --pf-c-table--cell--hidden-visible--Display: var(--pf-c-table--m-grid--cell--hidden-visible--Display);\n      grid-column: 1;\n      grid-column-gap: var(--pf-c-table-td--responsive--GridColumnGap);\n      grid-template-columns: 1fr minmax(0, 1.5fr);\n      align-items: start; }\n      .pf-m-grid-lg.pf-c-table [data-label] > * {\n        grid-column: 2; }\n      .pf-m-grid-lg.pf-c-table [data-label]::before {\n        font-weight: bold;\n        text-align: left;\n        content: attr(data-label); }\n    .pf-m-grid-lg.pf-c-table tr > *:first-child {\n      --pf-c-table--cell--PaddingLeft: 0; }\n    .pf-m-grid-lg.pf-c-table tr > *:last-child {\n      --pf-c-table--cell--PaddingRight: 0; }\n    .pf-m-grid-lg.pf-c-table .pf-c-table {\n      --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table-tr--responsive--nested-table--PaddingTop);\n      --pf-c-table-tr--responsive--PaddingRight: var(--pf-c-table-tr--responsive--nested-table--PaddingRight);\n      --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table-tr--responsive--nested-table--PaddingBottom);\n      --pf-c-table-tr--responsive--PaddingLeft: var(--pf-c-table-tr--responsive--nested-table--PaddingLeft);\n      border: 0; }\n      .pf-m-grid-lg.pf-c-table .pf-c-table tr:not(.pf-c-table__expandable-row) + tr:not(.pf-c-table__expandable-row) {\n        --pf-c-table-tr--responsive--PaddingTop: 0; }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__compound-expansion-toggle {\n      --pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth: 0;\n      --pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth: 0;\n      --pf-c-table__compound-expansion-toggle__button--after--Top: 100%; }\n    .pf-m-grid-lg.pf-c-table tbody {\n      position: relative; }\n      .pf-m-grid-lg.pf-c-table tbody::after {\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        content: "";\n        border: 0;\n        border-left: var(--pf-c-table--tbody--after--BorderLeftWidth) solid var(--pf-c-table--tbody--after--BorderColor); }\n      .pf-m-grid-lg.pf-c-table tbody.pf-m-expanded {\n        --pf-c-table--tbody--after--BorderLeftWidth: var(--pf-c-table--tbody--after--border-width--base); }\n        .pf-m-grid-lg.pf-c-table tbody.pf-m-expanded tbody {\n          --pf-c-table--tbody--after--BorderLeftWidth: 0; }\n      .pf-m-grid-lg.pf-c-table tbody > tr > :first-child:not(.pf-c-table__check)::after {\n        --pf-c-table__expandable-row--after--BorderLeftWidth: 0;\n        position: static;\n        width: auto;\n        background-color: transparent; }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row {\n      --pf-c-table--cell--responsive--PaddingTop: 0;\n      --pf-c-table--cell--responsive--PaddingRight: 0;\n      --pf-c-table--cell--responsive--PaddingBottom: 0;\n      --pf-c-table--cell--responsive--PaddingLeft: 0;\n      --pf-c-table--cell--PaddingRight: 0;\n      --pf-c-table--cell--PaddingLeft: 0;\n      display: block;\n      max-height: var(--pf-c-table__expandable-row--MaxHeight);\n      overflow-y: auto;\n      border-bottom: none;\n      box-shadow: none; }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row > * {\n        position: static;\n        display: block; }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row.pf-m-expanded {\n        border-top-color: var(--pf-c-table--BorderColor); }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row > :first-child:not(.pf-c-table__check)::after {\n        content: none; }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row td.pf-m-no-padding .pf-c-table__expandable-row-content, .pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row th.pf-m-no-padding .pf-c-table__expandable-row-content {\n        padding: 0; }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row:not(.pf-m-expanded) {\n        display: none;\n        visibility: hidden; }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row .pf-c-table__expandable-row-content {\n        padding-right: var(--pf-c-table__expandable-row-content--responsive--PaddingRight);\n        padding-left: var(--pf-c-table__expandable-row-content--responsive--PaddingLeft); }\n    .pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__toggle,\n    .pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__check,\n    .pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__favorite,\n    .pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__action {\n      width: auto;\n      padding: 0; }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__toggle {\n      grid-row-start: 20;\n      grid-column: -1;\n      justify-self: end;\n      padding-right: 0; }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__toggle::after {\n        content: none; }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__button {\n      --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n      --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n      --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n      --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft); }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__check,\n    .pf-m-grid-lg.pf-c-table .pf-c-table__favorite,\n    .pf-m-grid-lg.pf-c-table .pf-c-table__action {\n      grid-row-start: 1;\n      grid-column-start: 2; }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__check {\n      margin-top: var(--pf-c-table__check--responsive--MarginTop);\n      margin-left: var(--pf-c-table__check--responsive--MarginLeft); }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite {\n        margin-left: var(--pf-c-table--m-grid__check--favorite--MarginLeft); }\n        .pf-m-grid-lg.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite ~ .pf-c-table__action {\n          margin-left: var(--pf-c-table--m-grid__check--favorite--action--MarginLeft); }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__check ~ .pf-c-table__action {\n        margin-left: var(--pf-c-table__action--responsive--MarginLeft); }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__favorite {\n      margin-top: var(--pf-c-table--m-grid__favorite--MarginTop); }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__favorite ~ .pf-c-table__action {\n        margin-left: var(--pf-c-table--m-grid__favorite--action--MarginLeft); }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__action {\n      margin-top: var(--pf-c-table--m-grid__action--MarginTop);\n      text-align: right; } }\n    @media screen and (max-width: 992px) and (max-width: 576px) {\n      .pf-m-grid-lg.pf-c-table .pf-c-table__action {\n        grid-row-start: 1;\n        grid-column-start: 2;\n        margin-left: 0; } }\n\n@media screen and (max-width: 992px) {\n    .pf-m-grid-lg.pf-c-table .pf-c-table__inline-edit-action {\n      grid-column: 2;\n      grid-row: 2; }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__toggle-icon {\n      transition: var(--pf-c-table__toggle__icon--Transition); }\n      .pf-c-button.pf-m-expanded > .pf-m-grid-lg.pf-c-table .pf-c-table__toggle-icon {\n        transform: rotate(var(--pf-c-table__toggle--m-expanded__icon--Rotate)); }\n    .pf-m-grid-lg.pf-c-table .pf-m-nowrap {\n      --pf-c-table--cell--Overflow: auto; }\n    .pf-m-grid-lg.pf-c-table .pf-m-fit-content {\n      width: auto;\n      white-space: normal; }\n    .pf-m-grid-lg.pf-c-table .pf-m-truncate {\n      --pf-c-table--cell--MaxWidth: 100%; }\n    .pf-m-grid-lg.pf-c-table [class*="pf-m-width"] {\n      --pf-c-table--cell--Width: auto; } }\n\n@media screen and (max-width: 1200px) {\n  .pf-m-grid-xl.pf-c-table {\n    --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n    --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n    --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n    --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft);\n    --pf-c-table__favorite--c-button--MarginTop: auto;\n    --pf-c-table__favorite--c-button--MarginRight: auto;\n    --pf-c-table__favorite--c-button--MarginBottom: auto;\n    --pf-c-table__favorite--c-button--MarginLeft: auto;\n    display: grid;\n    border: none; }\n    .pf-m-grid-xl.pf-c-table tr > * {\n      width: auto;\n      min-width: 0;\n      max-width: none;\n      overflow: visible;\n      text-overflow: clip;\n      white-space: normal; }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__text {\n      position: relative;\n      width: auto;\n      min-width: 0;\n      max-width: none;\n      overflow: var(--pf-c-table--cell--Overflow);\n      text-overflow: var(--pf-c-table--cell--TextOverflow);\n      white-space: var(--pf-c-table--cell--WhiteSpace); }\n    .pf-m-grid-xl.pf-c-table thead {\n      display: none;\n      visibility: hidden; }\n    .pf-m-grid-xl.pf-c-table tbody {\n      display: block; }\n      .pf-m-grid-xl.pf-c-table tbody:first-of-type {\n        border-top: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-xl.pf-c-table table.pf-m-compact > tbody {\n      border-top: 0; }\n    .pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) {\n      border-bottom: var(--pf-c-table-tr--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-xl.pf-c-table tr:last-child,\n    .pf-m-grid-xl.pf-c-table tbody:last-of-type:not(:only-of-type) > tr {\n      border-bottom-width: var(--pf-c-table-tr--responsive--last-child--BorderBottomWidth); }\n    .pf-m-grid-xl.pf-c-table tbody.pf-m-expanded {\n      border-bottom: var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor); }\n      .pf-m-grid-xl.pf-c-table tbody.pf-m-expanded tr:not(.pf-c-table__expandable-row) {\n        border-bottom: 0; }\n      .pf-m-grid-xl.pf-c-table tbody.pf-m-expanded:not(:last-of-type) {\n        border-bottom: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) {\n      display: grid;\n      grid-template-columns: 1fr;\n      height: auto;\n      grid-auto-columns: max-content;\n      grid-column-gap: var(--pf-c-table-tr--responsive--GridColumnGap);\n      padding: var(--pf-c-table-tr--responsive--PaddingTop) var(--pf-c-table-tr--responsive--PaddingRight) var(--pf-c-table-tr--responsive--PaddingBottom) var(--pf-c-table-tr--responsive--PaddingLeft); }\n      .pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) > * {\n        padding: var(--pf-c-table--cell--responsive--PaddingTop) var(--pf-c-table--cell--responsive--PaddingRight) var(--pf-c-table--cell--responsive--PaddingBottom) var(--pf-c-table--cell--responsive--PaddingLeft); }\n        .pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) > *:first-child {\n          --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--cell--first-child--responsive--PaddingTop); }\n    .pf-m-grid-xl.pf-c-table.pf-m-compact {\n      --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table--m-compact-tr--responsive--PaddingTop);\n      --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr--responsive--PaddingBottom);\n      --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--m-compact-tr-td--responsive--PaddingTop);\n      --pf-c-table--cell--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr-td--responsive--PaddingBottom);\n      --pf-c-table__check--input--MarginTop: 0; }\n      .pf-m-grid-xl.pf-c-table.pf-m-compact .pf-c-table__action {\n        margin-top: var(--pf-c-table--m-compact__action--responsive--MarginTop);\n        margin-bottom: var(--pf-c-table--m-compact__action--responsive--MarginTop); }\n      .pf-m-grid-xl.pf-c-table.pf-m-compact .pf-c-table__toggle .pf-c-button {\n        margin-bottom: var(--pf-c-table--m-compact__toggle--c-button--responsive--MarginBottom); }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__icon > * {\n      text-align: left; }\n    .pf-m-grid-xl.pf-c-table [data-label] {\n      --pf-c-table--cell--hidden-visible--Display: var(--pf-c-table--m-grid--cell--hidden-visible--Display);\n      grid-column: 1;\n      grid-column-gap: var(--pf-c-table-td--responsive--GridColumnGap);\n      grid-template-columns: 1fr minmax(0, 1.5fr);\n      align-items: start; }\n      .pf-m-grid-xl.pf-c-table [data-label] > * {\n        grid-column: 2; }\n      .pf-m-grid-xl.pf-c-table [data-label]::before {\n        font-weight: bold;\n        text-align: left;\n        content: attr(data-label); }\n    .pf-m-grid-xl.pf-c-table tr > *:first-child {\n      --pf-c-table--cell--PaddingLeft: 0; }\n    .pf-m-grid-xl.pf-c-table tr > *:last-child {\n      --pf-c-table--cell--PaddingRight: 0; }\n    .pf-m-grid-xl.pf-c-table .pf-c-table {\n      --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table-tr--responsive--nested-table--PaddingTop);\n      --pf-c-table-tr--responsive--PaddingRight: var(--pf-c-table-tr--responsive--nested-table--PaddingRight);\n      --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table-tr--responsive--nested-table--PaddingBottom);\n      --pf-c-table-tr--responsive--PaddingLeft: var(--pf-c-table-tr--responsive--nested-table--PaddingLeft);\n      border: 0; }\n      .pf-m-grid-xl.pf-c-table .pf-c-table tr:not(.pf-c-table__expandable-row) + tr:not(.pf-c-table__expandable-row) {\n        --pf-c-table-tr--responsive--PaddingTop: 0; }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__compound-expansion-toggle {\n      --pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth: 0;\n      --pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth: 0;\n      --pf-c-table__compound-expansion-toggle__button--after--Top: 100%; }\n    .pf-m-grid-xl.pf-c-table tbody {\n      position: relative; }\n      .pf-m-grid-xl.pf-c-table tbody::after {\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        content: "";\n        border: 0;\n        border-left: var(--pf-c-table--tbody--after--BorderLeftWidth) solid var(--pf-c-table--tbody--after--BorderColor); }\n      .pf-m-grid-xl.pf-c-table tbody.pf-m-expanded {\n        --pf-c-table--tbody--after--BorderLeftWidth: var(--pf-c-table--tbody--after--border-width--base); }\n        .pf-m-grid-xl.pf-c-table tbody.pf-m-expanded tbody {\n          --pf-c-table--tbody--after--BorderLeftWidth: 0; }\n      .pf-m-grid-xl.pf-c-table tbody > tr > :first-child:not(.pf-c-table__check)::after {\n        --pf-c-table__expandable-row--after--BorderLeftWidth: 0;\n        position: static;\n        width: auto;\n        background-color: transparent; }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row {\n      --pf-c-table--cell--responsive--PaddingTop: 0;\n      --pf-c-table--cell--responsive--PaddingRight: 0;\n      --pf-c-table--cell--responsive--PaddingBottom: 0;\n      --pf-c-table--cell--responsive--PaddingLeft: 0;\n      --pf-c-table--cell--PaddingRight: 0;\n      --pf-c-table--cell--PaddingLeft: 0;\n      display: block;\n      max-height: var(--pf-c-table__expandable-row--MaxHeight);\n      overflow-y: auto;\n      border-bottom: none;\n      box-shadow: none; }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row > * {\n        position: static;\n        display: block; }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row.pf-m-expanded {\n        border-top-color: var(--pf-c-table--BorderColor); }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row > :first-child:not(.pf-c-table__check)::after {\n        content: none; }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row td.pf-m-no-padding .pf-c-table__expandable-row-content, .pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row th.pf-m-no-padding .pf-c-table__expandable-row-content {\n        padding: 0; }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row:not(.pf-m-expanded) {\n        display: none;\n        visibility: hidden; }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row .pf-c-table__expandable-row-content {\n        padding-right: var(--pf-c-table__expandable-row-content--responsive--PaddingRight);\n        padding-left: var(--pf-c-table__expandable-row-content--responsive--PaddingLeft); }\n    .pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__toggle,\n    .pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__check,\n    .pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__favorite,\n    .pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__action {\n      width: auto;\n      padding: 0; }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__toggle {\n      grid-row-start: 20;\n      grid-column: -1;\n      justify-self: end;\n      padding-right: 0; }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__toggle::after {\n        content: none; }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__button {\n      --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n      --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n      --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n      --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft); }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__check,\n    .pf-m-grid-xl.pf-c-table .pf-c-table__favorite,\n    .pf-m-grid-xl.pf-c-table .pf-c-table__action {\n      grid-row-start: 1;\n      grid-column-start: 2; }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__check {\n      margin-top: var(--pf-c-table__check--responsive--MarginTop);\n      margin-left: var(--pf-c-table__check--responsive--MarginLeft); }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite {\n        margin-left: var(--pf-c-table--m-grid__check--favorite--MarginLeft); }\n        .pf-m-grid-xl.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite ~ .pf-c-table__action {\n          margin-left: var(--pf-c-table--m-grid__check--favorite--action--MarginLeft); }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__check ~ .pf-c-table__action {\n        margin-left: var(--pf-c-table__action--responsive--MarginLeft); }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__favorite {\n      margin-top: var(--pf-c-table--m-grid__favorite--MarginTop); }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__favorite ~ .pf-c-table__action {\n        margin-left: var(--pf-c-table--m-grid__favorite--action--MarginLeft); }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__action {\n      margin-top: var(--pf-c-table--m-grid__action--MarginTop);\n      text-align: right; } }\n    @media screen and (max-width: 1200px) and (max-width: 576px) {\n      .pf-m-grid-xl.pf-c-table .pf-c-table__action {\n        grid-row-start: 1;\n        grid-column-start: 2;\n        margin-left: 0; } }\n\n@media screen and (max-width: 1200px) {\n    .pf-m-grid-xl.pf-c-table .pf-c-table__inline-edit-action {\n      grid-column: 2;\n      grid-row: 2; }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__toggle-icon {\n      transition: var(--pf-c-table__toggle__icon--Transition); }\n      .pf-c-button.pf-m-expanded > .pf-m-grid-xl.pf-c-table .pf-c-table__toggle-icon {\n        transform: rotate(var(--pf-c-table__toggle--m-expanded__icon--Rotate)); }\n    .pf-m-grid-xl.pf-c-table .pf-m-nowrap {\n      --pf-c-table--cell--Overflow: auto; }\n    .pf-m-grid-xl.pf-c-table .pf-m-fit-content {\n      width: auto;\n      white-space: normal; }\n    .pf-m-grid-xl.pf-c-table .pf-m-truncate {\n      --pf-c-table--cell--MaxWidth: 100%; }\n    .pf-m-grid-xl.pf-c-table [class*="pf-m-width"] {\n      --pf-c-table--cell--Width: auto; } }\n\n@media screen and (max-width: 1450px) {\n  .pf-m-grid-2xl.pf-c-table {\n    --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n    --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n    --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n    --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft);\n    --pf-c-table__favorite--c-button--MarginTop: auto;\n    --pf-c-table__favorite--c-button--MarginRight: auto;\n    --pf-c-table__favorite--c-button--MarginBottom: auto;\n    --pf-c-table__favorite--c-button--MarginLeft: auto;\n    display: grid;\n    border: none; }\n    .pf-m-grid-2xl.pf-c-table tr > * {\n      width: auto;\n      min-width: 0;\n      max-width: none;\n      overflow: visible;\n      text-overflow: clip;\n      white-space: normal; }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__text {\n      position: relative;\n      width: auto;\n      min-width: 0;\n      max-width: none;\n      overflow: var(--pf-c-table--cell--Overflow);\n      text-overflow: var(--pf-c-table--cell--TextOverflow);\n      white-space: var(--pf-c-table--cell--WhiteSpace); }\n    .pf-m-grid-2xl.pf-c-table thead {\n      display: none;\n      visibility: hidden; }\n    .pf-m-grid-2xl.pf-c-table tbody {\n      display: block; }\n      .pf-m-grid-2xl.pf-c-table tbody:first-of-type {\n        border-top: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-2xl.pf-c-table table.pf-m-compact > tbody {\n      border-top: 0; }\n    .pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) {\n      border-bottom: var(--pf-c-table-tr--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-2xl.pf-c-table tr:last-child,\n    .pf-m-grid-2xl.pf-c-table tbody:last-of-type:not(:only-of-type) > tr {\n      border-bottom-width: var(--pf-c-table-tr--responsive--last-child--BorderBottomWidth); }\n    .pf-m-grid-2xl.pf-c-table tbody.pf-m-expanded {\n      border-bottom: var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor); }\n      .pf-m-grid-2xl.pf-c-table tbody.pf-m-expanded tr:not(.pf-c-table__expandable-row) {\n        border-bottom: 0; }\n      .pf-m-grid-2xl.pf-c-table tbody.pf-m-expanded:not(:last-of-type) {\n        border-bottom: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) {\n      display: grid;\n      grid-template-columns: 1fr;\n      height: auto;\n      grid-auto-columns: max-content;\n      grid-column-gap: var(--pf-c-table-tr--responsive--GridColumnGap);\n      padding: var(--pf-c-table-tr--responsive--PaddingTop) var(--pf-c-table-tr--responsive--PaddingRight) var(--pf-c-table-tr--responsive--PaddingBottom) var(--pf-c-table-tr--responsive--PaddingLeft); }\n      .pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) > * {\n        padding: var(--pf-c-table--cell--responsive--PaddingTop) var(--pf-c-table--cell--responsive--PaddingRight) var(--pf-c-table--cell--responsive--PaddingBottom) var(--pf-c-table--cell--responsive--PaddingLeft); }\n        .pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) > *:first-child {\n          --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--cell--first-child--responsive--PaddingTop); }\n    .pf-m-grid-2xl.pf-c-table.pf-m-compact {\n      --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table--m-compact-tr--responsive--PaddingTop);\n      --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr--responsive--PaddingBottom);\n      --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--m-compact-tr-td--responsive--PaddingTop);\n      --pf-c-table--cell--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr-td--responsive--PaddingBottom);\n      --pf-c-table__check--input--MarginTop: 0; }\n      .pf-m-grid-2xl.pf-c-table.pf-m-compact .pf-c-table__action {\n        margin-top: var(--pf-c-table--m-compact__action--responsive--MarginTop);\n        margin-bottom: var(--pf-c-table--m-compact__action--responsive--MarginTop); }\n      .pf-m-grid-2xl.pf-c-table.pf-m-compact .pf-c-table__toggle .pf-c-button {\n        margin-bottom: var(--pf-c-table--m-compact__toggle--c-button--responsive--MarginBottom); }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__icon > * {\n      text-align: left; }\n    .pf-m-grid-2xl.pf-c-table [data-label] {\n      --pf-c-table--cell--hidden-visible--Display: var(--pf-c-table--m-grid--cell--hidden-visible--Display);\n      grid-column: 1;\n      grid-column-gap: var(--pf-c-table-td--responsive--GridColumnGap);\n      grid-template-columns: 1fr minmax(0, 1.5fr);\n      align-items: start; }\n      .pf-m-grid-2xl.pf-c-table [data-label] > * {\n        grid-column: 2; }\n      .pf-m-grid-2xl.pf-c-table [data-label]::before {\n        font-weight: bold;\n        text-align: left;\n        content: attr(data-label); }\n    .pf-m-grid-2xl.pf-c-table tr > *:first-child {\n      --pf-c-table--cell--PaddingLeft: 0; }\n    .pf-m-grid-2xl.pf-c-table tr > *:last-child {\n      --pf-c-table--cell--PaddingRight: 0; }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table {\n      --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table-tr--responsive--nested-table--PaddingTop);\n      --pf-c-table-tr--responsive--PaddingRight: var(--pf-c-table-tr--responsive--nested-table--PaddingRight);\n      --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table-tr--responsive--nested-table--PaddingBottom);\n      --pf-c-table-tr--responsive--PaddingLeft: var(--pf-c-table-tr--responsive--nested-table--PaddingLeft);\n      border: 0; }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table tr:not(.pf-c-table__expandable-row) + tr:not(.pf-c-table__expandable-row) {\n        --pf-c-table-tr--responsive--PaddingTop: 0; }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__compound-expansion-toggle {\n      --pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth: 0;\n      --pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth: 0;\n      --pf-c-table__compound-expansion-toggle__button--after--Top: 100%; }\n    .pf-m-grid-2xl.pf-c-table tbody {\n      position: relative; }\n      .pf-m-grid-2xl.pf-c-table tbody::after {\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        content: "";\n        border: 0;\n        border-left: var(--pf-c-table--tbody--after--BorderLeftWidth) solid var(--pf-c-table--tbody--after--BorderColor); }\n      .pf-m-grid-2xl.pf-c-table tbody.pf-m-expanded {\n        --pf-c-table--tbody--after--BorderLeftWidth: var(--pf-c-table--tbody--after--border-width--base); }\n        .pf-m-grid-2xl.pf-c-table tbody.pf-m-expanded tbody {\n          --pf-c-table--tbody--after--BorderLeftWidth: 0; }\n      .pf-m-grid-2xl.pf-c-table tbody > tr > :first-child:not(.pf-c-table__check)::after {\n        --pf-c-table__expandable-row--after--BorderLeftWidth: 0;\n        position: static;\n        width: auto;\n        background-color: transparent; }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row {\n      --pf-c-table--cell--responsive--PaddingTop: 0;\n      --pf-c-table--cell--responsive--PaddingRight: 0;\n      --pf-c-table--cell--responsive--PaddingBottom: 0;\n      --pf-c-table--cell--responsive--PaddingLeft: 0;\n      --pf-c-table--cell--PaddingRight: 0;\n      --pf-c-table--cell--PaddingLeft: 0;\n      display: block;\n      max-height: var(--pf-c-table__expandable-row--MaxHeight);\n      overflow-y: auto;\n      border-bottom: none;\n      box-shadow: none; }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row > * {\n        position: static;\n        display: block; }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row.pf-m-expanded {\n        border-top-color: var(--pf-c-table--BorderColor); }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row > :first-child:not(.pf-c-table__check)::after {\n        content: none; }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row td.pf-m-no-padding .pf-c-table__expandable-row-content, .pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row th.pf-m-no-padding .pf-c-table__expandable-row-content {\n        padding: 0; }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row:not(.pf-m-expanded) {\n        display: none;\n        visibility: hidden; }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row .pf-c-table__expandable-row-content {\n        padding-right: var(--pf-c-table__expandable-row-content--responsive--PaddingRight);\n        padding-left: var(--pf-c-table__expandable-row-content--responsive--PaddingLeft); }\n    .pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__toggle,\n    .pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__check,\n    .pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__favorite,\n    .pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__action {\n      width: auto;\n      padding: 0; }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__toggle {\n      grid-row-start: 20;\n      grid-column: -1;\n      justify-self: end;\n      padding-right: 0; }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__toggle::after {\n        content: none; }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__button {\n      --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n      --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n      --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n      --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft); }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__check,\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__favorite,\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__action {\n      grid-row-start: 1;\n      grid-column-start: 2; }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__check {\n      margin-top: var(--pf-c-table__check--responsive--MarginTop);\n      margin-left: var(--pf-c-table__check--responsive--MarginLeft); }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite {\n        margin-left: var(--pf-c-table--m-grid__check--favorite--MarginLeft); }\n        .pf-m-grid-2xl.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite ~ .pf-c-table__action {\n          margin-left: var(--pf-c-table--m-grid__check--favorite--action--MarginLeft); }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__check ~ .pf-c-table__action {\n        margin-left: var(--pf-c-table__action--responsive--MarginLeft); }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__favorite {\n      margin-top: var(--pf-c-table--m-grid__favorite--MarginTop); }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__favorite ~ .pf-c-table__action {\n        margin-left: var(--pf-c-table--m-grid__favorite--action--MarginLeft); }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__action {\n      margin-top: var(--pf-c-table--m-grid__action--MarginTop);\n      text-align: right; } }\n    @media screen and (max-width: 1450px) and (max-width: 576px) {\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__action {\n        grid-row-start: 1;\n        grid-column-start: 2;\n        margin-left: 0; } }\n\n@media screen and (max-width: 1450px) {\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__inline-edit-action {\n      grid-column: 2;\n      grid-row: 2; }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__toggle-icon {\n      transition: var(--pf-c-table__toggle__icon--Transition); }\n      .pf-c-button.pf-m-expanded > .pf-m-grid-2xl.pf-c-table .pf-c-table__toggle-icon {\n        transform: rotate(var(--pf-c-table__toggle--m-expanded__icon--Rotate)); }\n    .pf-m-grid-2xl.pf-c-table .pf-m-nowrap {\n      --pf-c-table--cell--Overflow: auto; }\n    .pf-m-grid-2xl.pf-c-table .pf-m-fit-content {\n      width: auto;\n      white-space: normal; }\n    .pf-m-grid-2xl.pf-c-table .pf-m-truncate {\n      --pf-c-table--cell--MaxWidth: 100%; }\n    .pf-m-grid-2xl.pf-c-table [class*="pf-m-width"] {\n      --pf-c-table--cell--Width: auto; } }\n\n.pf-c-table {\n  --pf-c-table--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-table--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-table--border-width--base: var(--pf-global--BorderWidth--sm);\n  --pf-c-table-caption--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-table-caption--Color: var(--pf-global--Color--200);\n  --pf-c-table-caption--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-table-caption--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-table-caption--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-table-caption--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-table-caption--xl--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-table-caption--xl--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-table--thead--cell--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-table--thead--cell--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-table--tbody--cell--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-table--tbody--cell--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-table--cell--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-table--cell--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-table--cell--Color: var(--pf-global--Color--100);\n  --pf-c-table--cell--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-table--cell--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-table--cell--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-table--cell--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-table--cell--first-last-child--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-table--cell--first-last-child--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-table--cell--first-last-child--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-table--cell--first-last-child--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-table--cell--MinWidth: 0;\n  --pf-c-table--cell--MaxWidth: none;\n  --pf-c-table--cell--Width: auto;\n  --pf-c-table--cell--Overflow: visible;\n  --pf-c-table--cell--TextOverflow: clip;\n  --pf-c-table--cell--WhiteSpace: normal;\n  --pf-c-table--cell--WordBreak: normal;\n  --pf-c-table--cell--m-help--MinWidth: 11ch;\n  --pf-c-table--m-truncate--cell--MaxWidth: 1px;\n  --pf-c-table--m-truncate--cell--MinWidth: calc(5ch + var(--pf-c-table--cell--PaddingRight) + var(--pf-c-table--cell--PaddingLeft));\n  --pf-c-table--cell--hidden-visible--Display: table-cell;\n  --pf-c-table__toggle--c-button--MarginTop: calc(0.375rem * -1);\n  --pf-c-table__toggle--c-button__toggle-icon--Rotate: 270deg;\n  --pf-c-table__toggle--c-button__toggle-icon--Transition: .2s ease-in 0s;\n  --pf-c-table__toggle--c-button--m-expanded__toggle-icon--Rotate: 360deg;\n  --pf-c-table__button--BackgroundColor: transparent;\n  --pf-c-table__button--Color: var(--pf-global--Color--100);\n  --pf-c-table__button--hover--Color: var(--pf-global--Color--100);\n  --pf-c-table__button--focus--Color: var(--pf-global--Color--100);\n  --pf-c-table__button--active--Color: var(--pf-global--Color--100);\n  --pf-c-table__button--OutlineOffset: calc(var(--pf-global--BorderWidth--lg) * -1);\n  --pf-c-table--m-compact__toggle--PaddingTop: 0;\n  --pf-c-table--m-compact__toggle--PaddingBottom: 0;\n  --pf-c-table__check--input--MarginTop: 0.25rem;\n  --pf-c-table__check--input--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-table--cell--m-favorite--Color: var(--pf-global--Color--light-300);\n  --pf-c-table__favorite--c-button--Color: var(--pf-global--Color--light-300);\n  --pf-c-table__favorite--c-button--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-table__favorite--c-button--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-table__favorite--c-button--MarginRight: calc(var(--pf-global--spacer--md) * -1);\n  --pf-c-table__favorite--c-button--MarginBottom: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-table__favorite--c-button--MarginLeft: calc(var(--pf-global--spacer--md) * -1);\n  --pf-c-table__favorite--m-favorited--c-button--Color: var(--pf-global--palette--gold-400);\n  --pf-c-table__action--PaddingTop: 0;\n  --pf-c-table__action--PaddingRight: 0;\n  --pf-c-table__action--PaddingBottom: 0;\n  --pf-c-table__action--PaddingLeft: 0;\n  --pf-c-table__inline-edit-action--PaddingTop: 0;\n  --pf-c-table__inline-edit-action--PaddingRight: 0;\n  --pf-c-table__inline-edit-action--PaddingBottom: 0;\n  --pf-c-table__inline-edit-action--PaddingLeft: 0;\n  --pf-c-table__expandable-row--Transition: var(--pf-global--Transition);\n  --pf-c-table__expandable-row--MaxHeight: 28.125rem;\n  --pf-c-table__expandable-row-content--Transition: var(--pf-global--Transition);\n  --pf-c-table__expandable-row-content--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-table__expandable-row-content--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-table__expandable-row--after--Top: calc(var(--pf-c-table--border-width--base) * -1);\n  --pf-c-table__expandable-row--after--Bottom: calc(var(--pf-c-table--border-width--base) * -1);\n  --pf-c-table__expandable-row--after--border-width--base: var(--pf-global--BorderWidth--lg);\n  --pf-c-table__expandable-row--after--BorderLeftWidth: 0;\n  --pf-c-table__expandable-row--after--BorderColor: var(--pf-global--active-color--100);\n  --pf-c-table__icon-inline--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-table__sort--MinWidth: calc(6ch + var(--pf-c-table--cell--PaddingRight) + var(--pf-c-table--cell--PaddingLeft) + var(--pf-c-table__sort-indicator--MarginLeft));\n  --pf-c-table__sort__button--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-table__sort__button--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-table__sort__button--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-table__sort__button--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-table__sort__button--MarginTop: calc(var(--pf-c-table__sort__button--PaddingTop) * -1);\n  --pf-c-table__sort__button--MarginBottom: calc(var(--pf-c-table__sort__button--PaddingBottom) * -1);\n  --pf-c-table__sort__button--MarginLeft: calc(var(--pf-c-table__sort__button--PaddingLeft) * -1);\n  --pf-c-table__sort__button--Color: var(--pf-global--Color--100);\n  --pf-c-table__sort--m-selected__button--Color: var(--pf-global--active-color--100);\n  --pf-c-table__sort--m-help--MinWidth: 15ch;\n  --pf-c-table__sort-indicator--Color: var(--pf-global--disabled-color--200);\n  --pf-c-table__sort-indicator--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-table__sort--m-selected__sort-indicator--Color: var(--pf-global--active-color--100);\n  --pf-c-table__sort__button--hover__sort-indicator--Color: var(--pf-global--Color--100);\n  --pf-c-table__sort__button--active__sort-indicator--Color: var(--pf-global--Color--100);\n  --pf-c-table__sort__button--focus__sort-indicator--Color: var(--pf-global--Color--100);\n  --pf-c-table--th--m-help--MinWidth: 11ch;\n  --pf-c-table__column-help--MarginLeft: var(--pf-global--spacer--xs);\n  --pf-c-table__column-help--TranslateY: 0.125rem;\n  --pf-c-table__column-help--c-button--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-table__column-help--c-button--MarginBottom: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-table__column-help--c-button--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-table__column-help--c-button--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-table__compound-expansion-toggle__button--Color: var(--pf-global--active-color--100);\n  --pf-c-table__compound-expansion-toggle__button--hover--Color: var(--pf-global--link--Color--hover);\n  --pf-c-table__compound-expansion-toggle__button--focus--Color: var(--pf-global--link--Color--hover);\n  --pf-c-table__compound-expansion-toggle__button--active--Color: var(--pf-global--link--Color--hover);\n  --pf-c-table__compound-expansion-toggle__button--before--border-width--base: var(--pf-global--BorderWidth--sm);\n  --pf-c-table__compound-expansion-toggle__button--before--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth: 0;\n  --pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth: 0;\n  --pf-c-table__compound-expansion-toggle__button--before--Bottom: calc(var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base) * -1);\n  --pf-c-table__compound-expansion-toggle__button--before--Left: calc(var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base) * -1);\n  --pf-c-table__compound-expansion-toggle__button--after--border-width--base: var(--pf-global--BorderWidth--lg);\n  --pf-c-table__compound-expansion-toggle__button--after--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-table__compound-expansion-toggle__button--after--BorderTopWidth: 0;\n  --pf-c-table__compound-expansion-toggle__button--after--Top: calc(var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base) * -1);\n  --pf-c-table__compound-expansion-toggle__button--after--Left: calc(var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base) * -1);\n  --pf-c-table--m-compact-th--PaddingTop: calc(var(--pf-global--spacer--sm) + var(--pf-global--spacer--xs));\n  --pf-c-table--m-compact-th--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-table--m-compact--cell--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-table--m-compact--cell--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-table--m-compact--cell--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-table--m-compact--cell--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-table--m-compact--cell--first-last-child--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-table--m-compact--cell--first-last-child--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-table--m-compact--cell--first-last-child--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-table--m-compact--cell--first-last-child--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-table--m-compact--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-table--m-compact__expandable-row-content--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-table--m-compact__expandable-row-content--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-table--m-compact__expandable-row-content--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-table--m-compact__expandable-row-content--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-table--nested--first-last-child--PaddingRight: var(--pf-global--spacer--3xl);\n  --pf-c-table--nested--first-last-child--PaddingLeft: var(--pf-global--spacer--3xl);\n  --pf-c-table__expandable-row--m-expanded--BorderBottomColor: var(--pf-global--BorderColor--100);\n  color: var(--pf-global--Color--100);\n  width: 100%;\n  background-color: var(--pf-c-table--BackgroundColor); }\n  @media screen and (max-width: 1200px) {\n    .pf-c-table {\n      --pf-c-table-caption--PaddingRight: var(--pf-c-table-caption--xl--PaddingRight);\n      --pf-c-table-caption--PaddingLeft: var(--pf-c-table-caption--xl--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-table {\n      --pf-c-table--cell--first-last-child--PaddingRight: var(--pf-c-table--cell--first-last-child--xl--PaddingRight);\n      --pf-c-table--cell--first-last-child--PaddingLeft: var(--pf-c-table--cell--first-last-child--xl--PaddingLeft);\n      --pf-c-table--m-compact--cell--first-last-child--PaddingLeft: var(--pf-c-table--m-compact--cell--first-last-child--xl--PaddingLeft);\n      --pf-c-table--m-compact--cell--first-last-child--PaddingRight: var(--pf-c-table--m-compact--cell--first-last-child--xl--PaddingRight); } }\n  .pf-c-table.pf-m-fixed {\n    table-layout: fixed; }\n  .pf-c-table.pf-m-sticky-header {\n    position: relative; }\n    .pf-c-table.pf-m-sticky-header > thead > tr {\n      border-bottom: 0; }\n      .pf-c-table.pf-m-sticky-header > thead > tr > * {\n        position: sticky;\n        top: 0;\n        z-index: var(--pf-global--ZIndex--xs);\n        background: var(--pf-c-table--BackgroundColor); }\n        .pf-c-table.pf-m-sticky-header > thead > tr > *::after {\n          position: absolute;\n          right: 0;\n          bottom: 0;\n          left: 0;\n          content: "";\n          border-bottom: var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor); }\n  .pf-c-table tr:not(.pf-c-table__expandable-row) {\n    border-bottom: var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor); }\n  .pf-c-table tr > * {\n    --pf-hidden-visible--visible--Display: var(--pf-c-table--cell--hidden-visible--Display);\n    position: relative;\n    width: var(--pf-c-table--cell--Width);\n    min-width: var(--pf-c-table--cell--MinWidth);\n    max-width: var(--pf-c-table--cell--MaxWidth);\n    padding: var(--pf-c-table--cell--PaddingTop) var(--pf-c-table--cell--PaddingRight) var(--pf-c-table--cell--PaddingBottom) var(--pf-c-table--cell--PaddingLeft);\n    overflow: var(--pf-c-table--cell--Overflow);\n    font-size: var(--pf-c-table--cell--FontSize);\n    font-weight: var(--pf-c-table--cell--FontWeight);\n    color: var(--pf-c-table--cell--Color);\n    text-overflow: var(--pf-c-table--cell--TextOverflow);\n    word-break: var(--pf-c-table--cell--WordBreak);\n    white-space: var(--pf-c-table--cell--WhiteSpace); }\n    .pf-c-table tr > *:first-child {\n      --pf-c-table--cell--PaddingLeft: var(--pf-c-table--cell--first-last-child--PaddingLeft); }\n    .pf-c-table tr > *:last-child {\n      --pf-c-table--cell--PaddingRight: var(--pf-c-table--cell--first-last-child--PaddingRight); }\n    .pf-c-table tr > *.pf-m-center {\n      text-align: center; }\n    .pf-c-table tr > *:empty {\n      width: auto;\n      min-width: 0;\n      padding: 0; }\n    .pf-c-table tr > *.pf-m-help {\n      --pf-c-table--cell--MinWidth: var(--pf-c-table--cell--m-help--MinWidth); }\n    .pf-c-table tr > *.pf-m-favorite {\n      --pf-c-table__button--Color: var(--pf-c-table--cell--m-favorite--Color);\n      --pf-c-table__sort--MinWidth: fit-content;\n      --pf-c-table--cell--MaxWidth: fit-content;\n      --pf-c-table--cell--Overflow: visible; }\n  .pf-c-table caption {\n    padding-top: var(--pf-c-table-caption--PaddingTop);\n    padding-bottom: var(--pf-c-table-caption--PaddingBottom);\n    padding-left: var(--pf-c-table-caption--PaddingLeft);\n    font-size: var(--pf-c-table-caption--FontSize);\n    color: var(--pf-c-table-caption--Color);\n    text-align: left;\n    background-color: var(--pf-c-table--BackgroundColor); }\n  .pf-c-table thead {\n    --pf-c-table--cell--FontSize: var(--pf-c-table--thead--cell--FontSize);\n    --pf-c-table--cell--FontWeight: var(--pf-c-table--thead--cell--FontWeight);\n    vertical-align: bottom; }\n  .pf-c-table tbody {\n    --pf-c-table--cell--PaddingTop: var(--pf-c-table--tbody--cell--PaddingTop);\n    --pf-c-table--cell--PaddingBottom: var(--pf-c-table--tbody--cell--PaddingBottom); }\n    .pf-c-table tbody > tr > * {\n      overflow-wrap: break-word;\n      vertical-align: baseline; }\n    .pf-c-table tbody > tr > :first-child::after {\n      position: absolute;\n      top: var(--pf-c-table__expandable-row--after--Top);\n      bottom: var(--pf-c-table__expandable-row--after--Bottom);\n      left: 0;\n      content: "";\n      background-color: transparent;\n      border-left: var(--pf-c-table__expandable-row--after--BorderLeftWidth) solid var(--pf-c-table__expandable-row--after--BorderColor); }\n    .pf-c-table tbody .pf-c-table__check > input {\n      margin-top: var(--pf-c-table__check--input--MarginTop);\n      vertical-align: top; }\n  .pf-c-table .pf-c-table__compound-expansion-toggle, .pf-c-table .pf-c-table__compound-expansion-toggle:first-child, .pf-c-table .pf-c-table__compound-expansion-toggle:last-child {\n    padding: 0; }\n  .pf-c-table .pf-c-table__sort {\n    min-width: var(--pf-c-table__sort--MinWidth); }\n  .pf-c-table .pf-m-help {\n    min-width: var(--pf-c-table--th--m-help--MinWidth); }\n  .pf-c-table thead,\n  .pf-c-table .pf-m-truncate {\n    --pf-c-table--cell--MinWidth: var(--pf-c-table--m-truncate--cell--MinWidth);\n    --pf-c-table--cell--MaxWidth: var(--pf-c-table--m-truncate--cell--MaxWidth);\n    --pf-c-table--cell--Overflow: hidden;\n    --pf-c-table--cell--TextOverflow: ellipsis;\n    --pf-c-table--cell--WhiteSpace: nowrap; }\n  .pf-c-table .pf-m-wrap {\n    --pf-c-table--cell--MinWidth: 0;\n    --pf-c-table--cell--MaxWidth: none;\n    --pf-c-table--cell--Overflow: visible;\n    --pf-c-table--cell--TextOverflow: clip;\n    --pf-c-table--cell--WhiteSpace: normal; }\n  .pf-c-table .pf-m-nowrap {\n    --pf-c-table--cell--MinWidth: 0;\n    --pf-c-table--cell--MaxWidth: none;\n    --pf-c-table--cell--Overflow: visible;\n    --pf-c-table--cell--TextOverflow: clip;\n    --pf-c-table--cell--WhiteSpace: nowrap; }\n  .pf-c-table .pf-c-table__icon,\n  .pf-c-table .pf-m-fit-content {\n    --pf-c-table--cell--MinWidth: fit-content;\n    --pf-c-table--cell--MaxWidth: fit-content;\n    --pf-c-table--cell--Width: 1%;\n    --pf-c-table--cell--Overflow: visible;\n    --pf-c-table--cell--TextOverflow: clip;\n    --pf-c-table--cell--WhiteSpace: nowrap; }\n  .pf-c-table .pf-m-break-word {\n    --pf-c-table--cell--WordBreak: break-word;\n    --pf-c-table--cell--WhiteSpace: normal; }\n\n.pf-c-table__text {\n  --pf-c-table--cell--MaxWidth: 100%;\n  position: relative;\n  display: block;\n  width: var(--pf-c-table--cell--Width);\n  min-width: var(--pf-c-table--cell--MinWidth);\n  max-width: var(--pf-c-table--cell--MaxWidth);\n  overflow: var(--pf-c-table--cell--Overflow);\n  text-overflow: var(--pf-c-table--cell--TextOverflow);\n  word-break: var(--pf-c-table--cell--WordBreak);\n  white-space: var(--pf-c-table--cell--WhiteSpace); }\n  .pf-c-table__text.pf-m-truncate {\n    --pf-c-table--cell--MinWidth: 100%; }\n    .pf-c-table__text.pf-m-truncate > * {\n      overflow: var(--pf-c-table--cell--Overflow);\n      text-overflow: var(--pf-c-table--cell--TextOverflow);\n      white-space: var(--pf-c-table--cell--WhiteSpace); }\n\n.pf-c-table__button {\n  position: static;\n  width: 100%;\n  padding: var(--pf-c-table--cell--PaddingTop) var(--pf-c-table--cell--PaddingRight) var(--pf-c-table--cell--PaddingBottom) var(--pf-c-table--cell--PaddingLeft);\n  font-size: inherit;\n  font-weight: inherit;\n  color: var(--pf-c-table__button--Color);\n  text-align: left;\n  white-space: inherit;\n  user-select: text;\n  background-color: var(--pf-c-table__button--BackgroundColor);\n  border: 0; }\n  .pf-c-table__button::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    cursor: pointer;\n    content: ""; }\n  .pf-c-table__button:hover {\n    color: var(--pf-c-table__button--hover--Color); }\n  .pf-c-table__button:focus {\n    color: var(--pf-c-table__button--focus--Color); }\n  .pf-c-table__button:active {\n    color: var(--pf-c-table__button--active--Color); }\n\n.pf-c-table__sort .pf-c-table__text,\n.pf-c-table__compound-expansion-toggle .pf-c-table__text {\n  display: block;\n  width: auto;\n  overflow: var(--pf-c-table--cell--Overflow);\n  text-overflow: var(--pf-c-table--cell--TextOverflow);\n  white-space: var(--pf-c-table--cell--WhiteSpace); }\n\n.pf-c-table__sort .pf-c-table__text {\n  --pf-c-table--cell--MinWidth: 0; }\n\n.pf-c-table__button-content,\n.pf-c-table__column-help {\n  display: inline-grid;\n  align-items: end;\n  justify-content: start;\n  grid-template-columns: auto max-content; }\n  .pf-c-table__button-content .pf-c-table__text,\n  .pf-c-table__column-help .pf-c-table__text {\n    min-width: auto; }\n  .pf-c-table thead.pf-m-nowrap .pf-c-table__button-content,\n  .pf-c-table tr.pf-m-nowrap .pf-c-table__button-content,\n  .pf-c-table th.pf-m-nowrap .pf-c-table__button-content, .pf-c-table thead.pf-m-nowrap\n  .pf-c-table__column-help,\n  .pf-c-table tr.pf-m-nowrap\n  .pf-c-table__column-help,\n  .pf-c-table th.pf-m-nowrap\n  .pf-c-table__column-help {\n    grid-template-columns: min-content max-content; }\n  .pf-c-table thead.pf-m-fit-content .pf-c-table__button-content,\n  .pf-c-table tr.pf-m-fit-content .pf-c-table__button-content,\n  .pf-c-table th.pf-m-fit-content .pf-c-table__button-content, .pf-c-table thead.pf-m-fit-content\n  .pf-c-table__column-help,\n  .pf-c-table tr.pf-m-fit-content\n  .pf-c-table__column-help,\n  .pf-c-table th.pf-m-fit-content\n  .pf-c-table__column-help {\n    grid-template-columns: fit-content max-content; }\n  .pf-c-table thead.pf-m-wrap .pf-c-table__button-content,\n  .pf-c-table tr.pf-m-wrap .pf-c-table__button-content,\n  .pf-c-table th.pf-m-wrap .pf-c-table__button-content,\n  .pf-c-table thead.pf-m-truncate .pf-c-table__button-content,\n  .pf-c-table tr.pf-m-truncate .pf-c-table__button-content,\n  .pf-c-table th.pf-m-truncate .pf-c-table__button-content, .pf-c-table thead.pf-m-wrap\n  .pf-c-table__column-help,\n  .pf-c-table tr.pf-m-wrap\n  .pf-c-table__column-help,\n  .pf-c-table th.pf-m-wrap\n  .pf-c-table__column-help,\n  .pf-c-table thead.pf-m-truncate\n  .pf-c-table__column-help,\n  .pf-c-table tr.pf-m-truncate\n  .pf-c-table__column-help,\n  .pf-c-table th.pf-m-truncate\n  .pf-c-table__column-help {\n    grid-template-columns: auto max-content; }\n\n.pf-c-table .pf-c-table__toggle,\n.pf-c-table .pf-c-table__action,\n.pf-c-table .pf-c-table__inline-edit-action {\n  --pf-c-table--cell--PaddingBottom: 0; }\n\n.pf-c-table .pf-c-table__check,\n.pf-c-table .pf-c-table__toggle,\n.pf-c-table .pf-c-table__action,\n.pf-c-table .pf-c-table__favorite,\n.pf-c-table th.pf-m-favorite,\n.pf-c-table .pf-c-table__inline-edit-action {\n  --pf-c-table--cell--MinWidth: 0;\n  --pf-c-table--cell--Width: 1%; }\n\n.pf-c-table__toggle {\n  --pf-c-table--cell--PaddingRight: 0;\n  --pf-c-table--cell--PaddingLeft: 0;\n  vertical-align: top; }\n  .pf-c-table__toggle .pf-c-button {\n    margin-top: var(--pf-c-table__toggle--c-button--MarginTop); }\n    .pf-c-table__toggle .pf-c-button.pf-m-expanded .pf-c-table__toggle-icon {\n      transform: rotate(var(--pf-c-table__toggle--c-button--m-expanded__toggle-icon--Rotate)); }\n  .pf-c-table__toggle .pf-c-table__toggle-icon {\n    transition: var(--pf-c-table__toggle--c-button__toggle-icon--Transition);\n    transform: rotate(var(--pf-c-table__toggle--c-button__toggle-icon--Rotate)); }\n  .pf-c-table__toggle svg {\n    pointer-events: none; }\n\n.pf-c-table__check {\n  --pf-c-table--cell--FontSize: var(--pf-c-table__check--input--FontSize); }\n\n.pf-c-table__favorite .pf-c-button {\n  --pf-c-button--m-plain--Color: var(--pf-c-table__favorite--c-button--Color);\n  --pf-c-button--FontSize: var(--pf-c-table__favorite--c-button--FontSize);\n  margin: var(--pf-c-table__favorite--c-button--MarginTop) var(--pf-c-table__favorite--c-button--MarginRight) var(--pf-c-table__favorite--c-button--MarginBottom) var(--pf-c-table__favorite--c-button--MarginLeft); }\n  .pf-m-favorited.pf-c-table__favorite .pf-c-button {\n    --pf-c-button--m-plain--Color: var(--pf-c-table__favorite--m-favorited--c-button--Color); }\n\n.pf-c-table__action,\n.pf-c-table__inline-edit-action {\n  --pf-c-table--cell--PaddingTop: 0;\n  --pf-c-table--cell--PaddingRight: var(--pf-c-table__action--PaddingRight);\n  --pf-c-table--cell--PaddingBottom: 0;\n  --pf-c-table--cell--PaddingLeft: var(--pf-c-table__action--PaddingLeft);\n  padding-top: 0;\n  padding-bottom: 0;\n  vertical-align: middle; }\n\n.pf-c-table__inline-edit-action {\n  --pf-c-table--cell--PaddingLeft: 0;\n  --pf-c-table--cell--PaddingRight: 0;\n  text-align: right; }\n\n.pf-c-table__compound-expansion-toggle {\n  --pf-c-table__button--Color: var(--pf-c-table__compound-expansion-toggle__button--Color);\n  --pf-c-table__button--hover--Color: var(--pf-c-table__compound-expansion-toggle__button--hover--Color);\n  --pf-c-table__button--focus--Color: var(--pf-c-table__compound-expansion-toggle__button--focus--Color);\n  --pf-c-table__button--active--Color: var(--pf-c-table__compound-expansion-toggle__button--active--Color);\n  position: relative; }\n  .pf-c-table__compound-expansion-toggle.pf-m-truncate {\n    overflow: visible; }\n  .pf-c-table__compound-expansion-toggle .pf-c-table__button {\n    min-width: 100%;\n    overflow: hidden; }\n    .pf-c-table__compound-expansion-toggle .pf-c-table__button:hover, .pf-c-table__compound-expansion-toggle .pf-c-table__button:focus, .pf-c-table__compound-expansion-toggle .pf-c-table__button:active {\n      outline: 0; }\n  .pf-c-table__compound-expansion-toggle .pf-c-table__button::before,\n  .pf-c-table__compound-expansion-toggle .pf-c-table__button::after {\n    position: absolute;\n    right: 0;\n    content: "";\n    border-style: solid;\n    border-width: 0; }\n  .pf-c-table__compound-expansion-toggle .pf-c-table__button::before {\n    top: 0;\n    bottom: var(--pf-c-table__compound-expansion-toggle__button--before--Bottom);\n    left: var(--pf-c-table__compound-expansion-toggle__button--before--Left);\n    border-color: var(--pf-c-table__compound-expansion-toggle__button--before--BorderColor);\n    border-right-width: var(--pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth);\n    border-left-width: var(--pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth); }\n  .pf-c-table__compound-expansion-toggle .pf-c-table__button::after {\n    top: var(--pf-c-table__compound-expansion-toggle__button--after--Top);\n    left: var(--pf-c-table__compound-expansion-toggle__button--after--Left);\n    pointer-events: none;\n    border-color: var(--pf-c-table__compound-expansion-toggle__button--after--BorderColor);\n    border-top-width: var(--pf-c-table__compound-expansion-toggle__button--after--BorderTopWidth); }\n  .pf-c-table__compound-expansion-toggle:hover, .pf-c-table__compound-expansion-toggle:focus-within, .pf-c-table__compound-expansion-toggle.pf-m-expanded {\n    --pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth: var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base);\n    --pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth: var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base);\n    --pf-c-table__compound-expansion-toggle__button--after--BorderTopWidth: var(--pf-c-table__compound-expansion-toggle__button--after--border-width--base); }\n  .pf-c-table__compound-expansion-toggle:first-child {\n    --pf-c-table__compound-expansion-toggle__button--before--Left: 0;\n    --pf-c-table__compound-expansion-toggle__button--after--Left: 0; }\n  .pf-c-table__compound-expansion-toggle.pf-m-expanded .pf-c-table__button::before {\n    border-bottom: var(--pf-c-table--BackgroundColor) solid var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base); }\n  .pf-c-table__compound-expansion-toggle.pf-m-expanded:first-child {\n    --pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth: 0; }\n  .pf-c-table__compound-expansion-toggle:focus-within {\n    outline-offset: var(--pf-c-table__button--OutlineOffset); }\n    @media (-webkit-min-device-pixel-ratio: 0) {\n      .pf-c-table__compound-expansion-toggle:focus-within {\n        outline-style: auto;\n        outline-color: -webkit-focus-ring-color; } }\n\n.pf-c-table__column-help-action {\n  margin-left: var(--pf-c-table__column-help--MarginLeft);\n  transform: translateY(var(--pf-c-table__column-help--TranslateY)); }\n  .pf-c-table__column-help-action .pf-c-button {\n    --pf-c-button--PaddingRight: var(--pf-c-table__column-help--c-button--PaddingRight);\n    --pf-c-button--PaddingLeft: var(--pf-c-table__column-help--c-button--PaddingLeft);\n    margin-top: var(--pf-c-table__column-help--c-button--MarginTop);\n    margin-bottom: var(--pf-c-table__column-help--c-button--MarginBottom);\n    font-size: inherit;\n    line-height: 1; }\n\n.pf-c-table__sort .pf-c-table__button {\n  --pf-c-table--cell--PaddingTop: var(--pf-c-table__sort__button--PaddingTop);\n  --pf-c-table--cell--PaddingRight: var(--pf-c-table__sort__button--PaddingRight);\n  --pf-c-table--cell--PaddingBottom: var(--pf-c-table__sort__button--PaddingBottom);\n  --pf-c-table--cell--PaddingLeft: var(--pf-c-table__sort__button--PaddingLeft);\n  display: flex;\n  width: auto;\n  margin-top: var(--pf-c-table__sort__button--MarginTop);\n  margin-bottom: var(--pf-c-table__sort__button--MarginBottom);\n  margin-left: var(--pf-c-table__sort__button--MarginLeft); }\n  .pf-c-table__sort .pf-c-table__button:hover {\n    --pf-c-table__sort-indicator--Color: var(--pf-c-table__sort__button--hover__sort-indicator--Color); }\n  .pf-c-table__sort .pf-c-table__button:focus {\n    --pf-c-table__sort-indicator--Color: var(--pf-c-table__sort__button--focus__sort-indicator--Color); }\n  .pf-c-table__sort .pf-c-table__button:active {\n    --pf-c-table__sort-indicator--Color: var(--pf-c-table__sort__button--active__sort-indicator--Color); }\n\n.pf-c-table__sort.pf-m-selected .pf-c-table__button {\n  --pf-c-table__sort-indicator--Color: var(--pf-c-table__sort--m-selected__sort-indicator--Color);\n  color: var(--pf-c-table__sort--m-selected__button--Color); }\n\n.pf-c-table__sort.pf-m-help {\n  --pf-c-table--th--m-help--MinWidth: var(--pf-c-table__sort--m-help--MinWidth); }\n\n.pf-c-table__sort-indicator {\n  grid-column: 2;\n  margin-left: var(--pf-c-table__sort-indicator--MarginLeft);\n  color: var(--pf-c-table__sort-indicator--Color);\n  pointer-events: none; }\n\n.pf-c-table__expandable-row {\n  --pf-c-table--cell--PaddingTop: 0;\n  --pf-c-table--cell--PaddingBottom: 0;\n  position: relative;\n  border-bottom: 0 solid transparent;\n  box-shadow: 0 0 0 0 transparent; }\n  .pf-c-table__expandable-row,\n  .pf-c-table__expandable-row td:first-child::after {\n    transition: var(--pf-c-table__expandable-row--Transition); }\n  .pf-c-table__expandable-row td.pf-m-no-padding,\n  .pf-c-table__expandable-row th.pf-m-no-padding {\n    padding: 0 0 0 var(--pf-c-table__expandable-row--after--border-width--base); }\n    .pf-c-table__expandable-row td.pf-m-no-padding .pf-c-table__expandable-row-content,\n    .pf-c-table__expandable-row th.pf-m-no-padding .pf-c-table__expandable-row-content {\n      padding: 0; }\n  .pf-c-table__expandable-row .pf-c-table__expandable-row-content {\n    padding-top: var(--pf-c-table__expandable-row-content--PaddingTop);\n    padding-bottom: var(--pf-c-table__expandable-row-content--PaddingBottom); }\n  .pf-c-table__expandable-row.pf-m-expanded {\n    border-bottom-color: var(--pf-c-table__expandable-row--m-expanded--BorderBottomColor);\n    border-bottom-width: var(--pf-c-table--border-width--base);\n    box-shadow: var(--pf-c-table__expandable-row--m-expanded--BoxShadow); }\n  .pf-c-table__expandable-row:not(.pf-m-expanded) {\n    display: none;\n    visibility: hidden; }\n\n.pf-c-table__compound-expansion-toggle.pf-m-expanded:first-child,\n.pf-c-table__expandable-row.pf-m-expanded > :first-child,\n.pf-c-table tbody.pf-m-expanded > tr > :not(.pf-c-table__compound-expansion-toggle) {\n  --pf-c-table__expandable-row--after--BorderLeftWidth: var(--pf-c-table__expandable-row--after--border-width--base); }\n\n.pf-c-table .pf-c-table tr > *:first-child {\n  --pf-c-table--cell--PaddingLeft: var(--pf-c-table--nested--first-last-child--PaddingLeft); }\n\n.pf-c-table .pf-c-table tr > *:last-child {\n  --pf-c-table--cell--PaddingRight: var(--pf-c-table--nested--first-last-child--PaddingRight); }\n\n.pf-c-table.pf-m-compact {\n  --pf-c-table--cell--FontSize: var(--pf-c-table--m-compact--FontSize);\n  --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-compact--cell--PaddingTop);\n  --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-compact--cell--PaddingRight);\n  --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-compact--cell--PaddingBottom);\n  --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-compact--cell--PaddingLeft); }\n  .pf-c-table.pf-m-compact.pf-m-no-border-rows:not(.pf-m-expandable) tbody {\n    --pf-c-table--border-width--base: 0;\n    --pf-c-table--BorderColor: transparent; }\n  .pf-c-table.pf-m-compact tr {\n    --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-compact--cell--PaddingLeft);\n    --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-compact--cell--PaddingRight); }\n    .pf-c-table.pf-m-compact tr:not(.pf-c-table__expandable-row) {\n      --pf-c-table--cell--FontSize: var(--pf-c-table--m-compact--FontSize);\n      --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-compact--cell--PaddingTop);\n      --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-compact--cell--PaddingBottom); }\n      .pf-c-table.pf-m-compact tr:not(.pf-c-table__expandable-row) > *:first-child {\n        --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-compact--cell--first-last-child--PaddingLeft); }\n      .pf-c-table.pf-m-compact tr:not(.pf-c-table__expandable-row) > *:last-child {\n        --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-compact--cell--first-last-child--PaddingRight); }\n  .pf-c-table.pf-m-compact thead th {\n    --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-compact-th--PaddingTop);\n    --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-compact-th--PaddingBottom); }\n  .pf-c-table.pf-m-compact .pf-c-table__action {\n    --pf-c-table--cell--PaddingTop: var(--pf-c-table__action--PaddingTop);\n    --pf-c-table--cell--PaddingBottom: var(--pf-c-table__action--PaddingBottom);\n    --pf-c-table--cell--PaddingLeft: var(--pf-c-table__action--PaddingLeft); }\n  .pf-c-table.pf-m-compact .pf-c-table__toggle {\n    --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-compact__toggle--PaddingTop);\n    --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-compact__toggle--PaddingBottom); }\n  .pf-c-table.pf-m-compact .pf-c-table__icon {\n    width: auto;\n    min-width: 0;\n    text-align: center; }\n  .pf-c-table .pf-c-table.pf-m-compact tr > *:first-child {\n    --pf-c-table--cell--PaddingLeft: var(--pf-c-table--nested--first-last-child--PaddingLeft); }\n  .pf-c-table .pf-c-table.pf-m-compact tr > *:last-child {\n    --pf-c-table--cell--PaddingRight: var(--pf-c-table--nested--first-last-child--PaddingRight); }\n  .pf-c-table.pf-m-compact .pf-c-table__expandable-row-content {\n    --pf-c-table__expandable-row-content--PaddingTop: var(--pf-c-table--m-compact__expandable-row-content--PaddingTop);\n    --pf-c-table__expandable-row-content--PaddingBottom: var(--pf-c-table--m-compact__expandable-row-content--PaddingBottom); }\n\n.pf-c-table__icon-inline {\n  display: flex;\n  align-items: center; }\n  .pf-c-table__icon-inline > :not(:last-child) {\n    margin-right: var(--pf-c-table__icon-inline--MarginRight); }\n\n.pf-c-table .pf-m-width-10 {\n  --pf-c-table--cell--Width: 10%; }\n\n.pf-c-table .pf-m-width-15 {\n  --pf-c-table--cell--Width: 15%; }\n\n.pf-c-table .pf-m-width-20 {\n  --pf-c-table--cell--Width: 20%; }\n\n.pf-c-table .pf-m-width-25 {\n  --pf-c-table--cell--Width: 25%; }\n\n.pf-c-table .pf-m-width-30 {\n  --pf-c-table--cell--Width: 30%; }\n\n.pf-c-table .pf-m-width-35 {\n  --pf-c-table--cell--Width: 35%; }\n\n.pf-c-table .pf-m-width-40 {\n  --pf-c-table--cell--Width: 40%; }\n\n.pf-c-table .pf-m-width-45 {\n  --pf-c-table--cell--Width: 45%; }\n\n.pf-c-table .pf-m-width-50 {\n  --pf-c-table--cell--Width: 50%; }\n\n.pf-c-table .pf-m-width-60 {\n  --pf-c-table--cell--Width: 60%; }\n\n.pf-c-table .pf-m-width-70 {\n  --pf-c-table--cell--Width: 70%; }\n\n.pf-c-table .pf-m-width-80 {\n  --pf-c-table--cell--Width: 80%; }\n\n.pf-c-table .pf-m-width-90 {\n  --pf-c-table--cell--Width: 90%; }\n\n.pf-c-table .pf-m-width-100 {\n  --pf-c-table--cell--Width: 100%; }\n\n.pf-c-tabs {\n  --pf-c-tabs--inset: 0;\n  --pf-c-tabs--before--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-tabs--before--border-width--base: var(--pf-global--BorderWidth--sm);\n  --pf-c-tabs--before--BorderTopWidth: 0;\n  --pf-c-tabs--before--BorderRightWidth: 0;\n  --pf-c-tabs--before--BorderBottomWidth: var(--pf-c-tabs--before--border-width--base);\n  --pf-c-tabs--before--BorderLeftWidth: 0;\n  --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--lg);\n  --pf-c-tabs--m-vertical--MaxWidth: 15.625rem;\n  --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--xl);\n  --pf-c-tabs--m-box__item--m-current--first-child__link--before--BorderLeftWidth: var(--pf-c-tabs__link--before--border-width--base);\n  --pf-c-tabs--m-box__item--m-current--last-child__link--before--BorderRightWidth: var(--pf-c-tabs--before--border-width--base);\n  --pf-c-tabs--m-color-scheme--light-300__link--BackgroundColor: transparent;\n  --pf-c-tabs--m-color-scheme--light-300__item--m-current__link--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-tabs__link--Color: var(--pf-global--Color--200);\n  --pf-c-tabs__link--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-tabs__link--BackgroundColor: transparent;\n  --pf-c-tabs__link--OutlineOffset: calc(-1 * 0.375rem);\n  --pf-c-tabs__link--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-tabs__link--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-tabs__link--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-tabs__link--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-tabs__item--m-current__link--Color: var(--pf-global--Color--100);\n  --pf-c-tabs__item--m-current__link--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-tabs--m-vertical__link--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-tabs--m-vertical__link--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-tabs--m-box__link--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-tabs--m-secondary__link--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-tabs__link--before--border-color--base: var(--pf-global--BorderColor--100);\n  --pf-c-tabs__link--before--BorderRightColor: var(--pf-c-tabs__link--before--border-color--base);\n  --pf-c-tabs__link--before--BorderBottomColor: var(--pf-c-tabs__link--before--border-color--base);\n  --pf-c-tabs__link--before--border-width--base: var(--pf-global--BorderWidth--sm);\n  --pf-c-tabs__link--before--BorderTopWidth: 0;\n  --pf-c-tabs__link--before--BorderRightWidth: 0;\n  --pf-c-tabs__link--before--BorderBottomWidth: 0;\n  --pf-c-tabs__link--before--BorderLeftWidth: 0;\n  --pf-c-tabs__link--before--Left: calc(var(--pf-c-tabs__link--before--border-width--base) * -1);\n  --pf-c-tabs__link--after--Top: auto;\n  --pf-c-tabs__link--after--Right: 0;\n  --pf-c-tabs__link--after--Bottom: 0;\n  --pf-c-tabs__link--after--BorderColor: var(--pf-global--BorderColor--light-100);\n  --pf-c-tabs__link--after--BorderWidth: 0;\n  --pf-c-tabs__link--after--BorderTopWidth: 0;\n  --pf-c-tabs__link--after--BorderRightWidth: 0;\n  --pf-c-tabs__link--after--BorderLeftWidth: 0;\n  --pf-c-tabs__link--hover--after--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-tabs__link--focus--after--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-tabs__link--active--after--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-tabs__item--m-current__link--after--BorderColor: var(--pf-global--active-color--100);\n  --pf-c-tabs__item--m-current__link--after--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-tabs__link--child--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-tabs__scroll-button--Color: var(--pf-global--Color--100);\n  --pf-c-tabs__scroll-button--hover--Color: var(--pf-global--active-color--100);\n  --pf-c-tabs__scroll-button--disabled--Color: var(--pf-global--disabled-color--200);\n  --pf-c-tabs__scroll-button--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-tabs__scroll-button--Width: var(--pf-global--spacer--2xl);\n  --pf-c-tabs__scroll-button--xl--Width: var(--pf-global--spacer--3xl);\n  --pf-c-tabs__scroll-button--OutlineOffset: calc(-1 * var(--pf-global--spacer--xs));\n  --pf-c-tabs__scroll-button--TransitionDuration--margin: .125s;\n  --pf-c-tabs__scroll-button--TransitionDuration--transform: .125s;\n  --pf-c-tabs__scroll-button--TransitionDuration--opacity: .125s;\n  --pf-c-tabs__scroll-button--before--BorderColor: var(--pf-c-tabs--before--BorderColor);\n  --pf-c-tabs__scroll-button--before--border-width--base: var(--pf-global--BorderWidth--sm);\n  --pf-c-tabs__scroll-button--before--BorderRightWidth: 0;\n  --pf-c-tabs__scroll-button--before--BorderBottomWidth: var(--pf-c-tabs__scroll-button--before--border-width--base);\n  --pf-c-tabs__scroll-button--before--BorderLeftWidth: 0;\n  position: relative;\n  display: flex;\n  padding-right: var(--pf-c-tabs--inset);\n  padding-left: var(--pf-c-tabs--inset);\n  overflow: hidden; }\n  @media screen and (min-width: 1200px) {\n    .pf-c-tabs {\n      --pf-c-tabs__scroll-button--Width: var(--pf-c-tabs__scroll-button--xl--Width); } }\n  .pf-c-tabs::before {\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    border: solid var(--pf-c-tabs--before--BorderColor);\n    border-width: var(--pf-c-tabs--before--BorderTopWidth) var(--pf-c-tabs--before--BorderRightWidth) var(--pf-c-tabs--before--BorderBottomWidth) var(--pf-c-tabs--before--BorderLeftWidth); }\n  .pf-c-tabs.pf-m-fill .pf-c-tabs__list {\n    flex-basis: 100%; }\n  .pf-c-tabs.pf-m-fill .pf-c-tabs__item {\n    flex-grow: 1; }\n    .pf-c-tabs.pf-m-fill .pf-c-tabs__item:first-child {\n      --pf-c-tabs--m-box__item--m-current--first-child__link--before--BorderLeftWidth: 0; }\n    .pf-c-tabs.pf-m-fill .pf-c-tabs__item:last-child {\n      --pf-c-tabs--m-box__item--m-current--last-child__link--before--BorderRightWidth: 0; }\n  .pf-c-tabs.pf-m-fill .pf-c-tabs__link {\n    flex-basis: 100%;\n    justify-content: center; }\n  .pf-c-tabs.pf-m-scrollable .pf-c-tabs__scroll-button {\n    opacity: 1; }\n  .pf-c-tabs.pf-m-scrollable .pf-c-tabs__scroll-button:nth-of-type(1) {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-tabs.pf-m-scrollable .pf-c-tabs__scroll-button:nth-of-type(2) {\n    margin-left: 0;\n    transform: translateX(0); }\n  .pf-c-tabs.pf-m-secondary, .pf-c-tabs.pf-m-no-border-bottom {\n    --pf-c-tabs--before--BorderBottomWidth: 0; }\n  .pf-c-tabs.pf-m-box .pf-c-tabs__link, .pf-c-tabs.pf-m-vertical .pf-c-tabs__link {\n    --pf-c-tabs__link--after--BorderBottomWidth: 0; }\n  .pf-c-tabs.pf-m-box {\n    --pf-c-tabs__link--BackgroundColor: var(--pf-c-tabs--m-box__link--BackgroundColor);\n    --pf-c-tabs__link--before--BorderBottomWidth: var(--pf-c-tabs__link--before--border-width--base);\n    --pf-c-tabs__link--before--BorderRightWidth: var(--pf-c-tabs__link--before--border-width--base);\n    --pf-c-tabs__link--after--Top: 0;\n    --pf-c-tabs__link--after--Bottom: auto; }\n    .pf-c-tabs.pf-m-box .pf-c-tabs__link {\n      --pf-c-tabs__link--after--BorderTopWidth: var(--pf-c-tabs__link--after--BorderWidth); }\n    .pf-c-tabs.pf-m-box .pf-c-tabs__item:last-child {\n      --pf-c-tabs__link--before--BorderRightWidth: 0; }\n    .pf-c-tabs.pf-m-box .pf-c-tabs__item.pf-m-current {\n      --pf-c-tabs__link--BackgroundColor: var(--pf-c-tabs__item--m-current__link--BackgroundColor);\n      --pf-c-tabs__link--before--BorderBottomColor: var(--pf-c-tabs__link--BackgroundColor); }\n    .pf-c-tabs.pf-m-box .pf-c-tabs__item.pf-m-current:first-child .pf-c-tabs__link::before {\n      border-left-width: var(--pf-c-tabs--m-box__item--m-current--first-child__link--before--BorderLeftWidth); }\n    .pf-c-tabs.pf-m-box .pf-c-tabs__item.pf-m-current:last-child .pf-c-tabs__link::before {\n      border-right-width: var(--pf-c-tabs--m-box__item--m-current--last-child__link--before--BorderRightWidth); }\n    .pf-c-tabs.pf-m-box.pf-m-scrollable .pf-c-tabs__item.pf-m-current:first-child .pf-c-tabs__link::before {\n      left: calc(var(--pf-c-tabs__link--before--border-width--base) * -1); }\n    .pf-c-tabs.pf-m-box.pf-m-scrollable .pf-c-tabs__scroll-button:nth-of-type(2)::before {\n      left: calc(var(--pf-c-tabs__link--before--border-width--base) * -1); }\n    .pf-c-tabs.pf-m-box .pf-c-tabs__item.pf-m-current + .pf-c-tabs__item {\n      --pf-c-tabs__link--before--Left: 0; }\n    .pf-c-tabs.pf-m-box.pf-m-color-scheme--light-300 {\n      --pf-c-tabs__link--BackgroundColor: var(--pf-c-tabs--m-color-scheme--light-300__link--BackgroundColor);\n      --pf-c-tabs__item--m-current__link--BackgroundColor: var(--pf-c-tabs--m-color-scheme--light-300__item--m-current__link--BackgroundColor); }\n  .pf-c-tabs.pf-m-vertical {\n    --pf-c-tabs--inset: var(--pf-c-tabs--m-vertical--inset);\n    --pf-c-tabs--before--BorderBottomWidth: 0;\n    --pf-c-tabs--before--BorderLeftWidth: var(--pf-c-tabs--before--border-width--base);\n    --pf-c-tabs__link--PaddingTop: var(--pf-c-tabs--m-vertical__link--PaddingTop);\n    --pf-c-tabs__link--PaddingBottom: var(--pf-c-tabs--m-vertical__link--PaddingBottom);\n    --pf-c-tabs__link--before--Left: 0;\n    --pf-c-tabs__link--after--Top: 0;\n    --pf-c-tabs__link--after--Bottom: 0;\n    --pf-c-tabs__link--after--Right: auto;\n    display: inline-flex;\n    flex-direction: column;\n    height: 100%;\n    padding: 0; }\n    .pf-c-tabs.pf-m-vertical::before {\n      top: 0;\n      right: auto; }\n    .pf-c-tabs.pf-m-vertical .pf-c-tabs__list {\n      flex-direction: column;\n      max-width: var(--pf-c-tabs--m-vertical--MaxWidth); }\n    .pf-c-tabs.pf-m-vertical .pf-c-tabs__item:first-child {\n      margin-top: var(--pf-c-tabs--inset); }\n    .pf-c-tabs.pf-m-vertical .pf-c-tabs__item:last-child {\n      margin-bottom: var(--pf-c-tabs--inset); }\n    .pf-c-tabs.pf-m-vertical .pf-c-tabs__link {\n      --pf-c-tabs__link--after--BorderTopWidth: 0;\n      --pf-c-tabs__link--after--BorderLeftWidth: var(--pf-c-tabs__link--after--BorderWidth);\n      max-width: 100%;\n      text-align: left; }\n    .pf-c-tabs.pf-m-vertical .pf-c-tabs__item-text {\n      max-width: 100%;\n      overflow-wrap: break-word; }\n  .pf-c-tabs.pf-m-box.pf-m-vertical {\n    --pf-c-tabs--inset: var(--pf-c-tabs--m-vertical--m-box--inset);\n    --pf-c-tabs--before--BorderLeftWidth: 0;\n    --pf-c-tabs--before--BorderRightWidth: var(--pf-c-tabs--before--border-width--base); }\n    .pf-c-tabs.pf-m-box.pf-m-vertical::before {\n      right: 0;\n      left: auto; }\n    .pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__item:last-child {\n      --pf-c-tabs__link--before--BorderBottomWidth: 0;\n      --pf-c-tabs__link--before--BorderRightWidth: var(--pf-c-tabs__link--before--border-width--base); }\n    .pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__item.pf-m-current {\n      --pf-c-tabs__link--before--BorderRightColor: var(--pf-c-tabs__item--m-current__link--BackgroundColor);\n      --pf-c-tabs__link--before--BorderBottomColor: var(--pf-c-tabs__link--before--border-color--base);\n      --pf-c-tabs__link--before--BorderBottomWidth: var(--pf-c-tabs__link--before--border-width--base); }\n      .pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__item.pf-m-current:first-child {\n        --pf-c-tabs__link--before--BorderTopWidth: var(--pf-c-tabs__link--before--border-width--base); }\n    .pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__item:first-child.pf-m-current {\n      --pf-c-tabs__link--before--BorderTopWidth: var(--pf-c-tabs__link--before--border-width--base); }\n    .pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__link::after {\n      top: calc(var(--pf-c-tabs__link--before--border-width--base) * -1); }\n    .pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__item:first-child .pf-c-tabs__link::after,\n    .pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__item.pf-m-current + .pf-c-tabs__item .pf-c-tabs__link::after {\n      top: 0; }\n  .pf-c-tabs.pf-m-secondary {\n    --pf-c-tabs__link--FontSize: var(--pf-c-tabs--m-secondary__link--FontSize); }\n\n.pf-c-tabs__list {\n  scrollbar-width: none;\n  -ms-overflow-style: -ms-autohiding-scrollbar;\n  position: relative;\n  display: flex;\n  max-width: 100%;\n  overflow-x: auto;\n  scroll-behavior: smooth;\n  -webkit-overflow-scrolling: touch; }\n  .pf-c-tabs__list::-webkit-scrollbar {\n    display: none; }\n\n.pf-c-tabs__item {\n  display: flex;\n  flex: none; }\n  .pf-c-tabs__item.pf-m-current {\n    --pf-c-tabs__link--Color: var(--pf-c-tabs__item--m-current__link--Color);\n    --pf-c-tabs__link--after--BorderColor: var(--pf-c-tabs__item--m-current__link--after--BorderColor);\n    --pf-c-tabs__link--after--BorderWidth: var(--pf-c-tabs__item--m-current__link--after--BorderWidth); }\n\n.pf-c-tabs__link,\n.pf-c-tabs__scroll-button {\n  border: 0; }\n\n.pf-c-tabs::before,\n.pf-c-tabs__link::before,\n.pf-c-tabs__link::after,\n.pf-c-tabs__scroll-button::before {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  content: "";\n  border-style: solid; }\n\n.pf-c-tabs__link::before,\n.pf-c-tabs__link::after,\n.pf-c-tabs__scroll-button::before {\n  top: 0; }\n\n.pf-c-tabs__link {\n  --pf-c-tabs__link--after--BorderBottomWidth: var(--pf-c-tabs__link--after--BorderWidth);\n  position: relative;\n  display: flex;\n  flex: 1;\n  padding: var(--pf-c-tabs__link--PaddingTop) var(--pf-c-tabs__link--PaddingRight) var(--pf-c-tabs__link--PaddingBottom) var(--pf-c-tabs__link--PaddingLeft);\n  font-size: var(--pf-c-tabs__link--FontSize);\n  color: var(--pf-c-tabs__link--Color);\n  text-decoration: none;\n  background-color: var(--pf-c-tabs__link--BackgroundColor);\n  outline-offset: var(--pf-c-tabs__link--OutlineOffset); }\n  .pf-c-tabs__link::before {\n    pointer-events: none;\n    border-color: var(--pf-c-tabs__link--before--border-color--base);\n    border-width: var(--pf-c-tabs__link--before--BorderTopWidth) var(--pf-c-tabs__link--before--BorderRightWidth) var(--pf-c-tabs__link--before--BorderBottomWidth) var(--pf-c-tabs__link--before--BorderLeftWidth);\n    border-right-color: var(--pf-c-tabs__link--before--BorderRightColor);\n    border-bottom-color: var(--pf-c-tabs__link--before--BorderBottomColor); }\n  .pf-c-tabs__link::after {\n    top: var(--pf-c-tabs__link--after--Top);\n    right: var(--pf-c-tabs__link--after--Right);\n    bottom: var(--pf-c-tabs__link--after--Bottom);\n    left: var(--pf-c-tabs__link--before--Left);\n    border-color: var(--pf-c-tabs__link--after--BorderColor);\n    border-width: var(--pf-c-tabs__link--after--BorderTopWidth) var(--pf-c-tabs__link--after--BorderRightWidth) var(--pf-c-tabs__link--after--BorderBottomWidth) var(--pf-c-tabs__link--after--BorderLeftWidth); }\n  .pf-c-tabs__link:hover {\n    --pf-c-tabs__link--after--BorderWidth: var(--pf-c-tabs__link--hover--after--BorderWidth); }\n  .pf-c-tabs__link:focus {\n    --pf-c-tabs__link--after--BorderWidth: var(--pf-c-tabs__link--focus--after--BorderWidth); }\n  .pf-c-tabs__link:active {\n    --pf-c-tabs__link--after--BorderWidth: var(--pf-c-tabs__link--active--after--BorderWidth); }\n  .pf-c-tabs__link .pf-c-tabs__item-icon,\n  .pf-c-tabs__link .pf-c-tabs__item-text {\n    margin-right: var(--pf-c-tabs__link--child--MarginRight); }\n    .pf-c-tabs__link .pf-c-tabs__item-icon:last-child,\n    .pf-c-tabs__link .pf-c-tabs__item-text:last-child {\n      --pf-c-tabs__link--child--MarginRight: 0; }\n\n.pf-c-tabs__scroll-button {\n  flex: none;\n  width: var(--pf-c-tabs__scroll-button--Width);\n  line-height: 1;\n  color: var(--pf-c-tabs__scroll-button--Color);\n  background-color: var(--pf-c-tabs__scroll-button--BackgroundColor);\n  outline-offset: var(--pf-c-tabs__scroll-button--OutlineOffset);\n  opacity: 0;\n  transition: margin var(--pf-c-tabs__scroll-button--TransitionDuration--margin), transform var(--pf-c-tabs__scroll-button--TransitionDuration--transform), opacity var(--pf-c-tabs__scroll-button--TransitionDuration--opacity); }\n  .pf-c-tabs__scroll-button:hover, .pf-c-tabs__scroll-button:active, .pf-c-tabs__scroll-button:focus {\n    --pf-c-tabs__scroll-button--Color: var(--pf-c-tabs__scroll-button--hover--Color); }\n  .pf-c-tabs__scroll-button::before {\n    border-color: var(--pf-c-tabs__scroll-button--before--BorderColor);\n    border-width: 0 var(--pf-c-tabs__scroll-button--before--BorderRightWidth) var(--pf-c-tabs__scroll-button--before--BorderBottomWidth) var(--pf-c-tabs__scroll-button--before--BorderLeftWidth); }\n  .pf-c-tabs__scroll-button:nth-of-type(1) {\n    --pf-c-tabs__scroll-button--before--BorderRightWidth: var(--pf-c-tabs__scroll-button--before--border-width--base);\n    margin-right: calc(var(--pf-c-tabs__scroll-button--Width) * -1);\n    transform: translateX(-100%); }\n  .pf-c-tabs__scroll-button:nth-of-type(2) {\n    --pf-c-tabs__scroll-button--before--BorderLeftWidth: var(--pf-c-tabs__scroll-button--before--border-width--base);\n    margin-left: calc(var(--pf-c-tabs__scroll-button--Width) * -1);\n    transform: translateX(100%); }\n  .pf-c-tabs__scroll-button:disabled {\n    --pf-c-tabs__scroll-button--Color: var(--pf-c-tabs__scroll-button--disabled--Color);\n    pointer-events: none; }\n\n.pf-c-tabs.pf-m-inset-none {\n  --pf-c-tabs--inset: 0;\n  --pf-c-tabs--m-vertical--inset: 0;\n  --pf-c-tabs--m-vertical--m-box--inset: 0; }\n\n.pf-c-tabs.pf-m-inset-sm {\n  --pf-c-tabs--inset: var(--pf-global--spacer--sm);\n  --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--sm);\n  --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--sm); }\n\n.pf-c-tabs.pf-m-inset-md {\n  --pf-c-tabs--inset: var(--pf-global--spacer--md);\n  --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--md);\n  --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--md); }\n\n.pf-c-tabs.pf-m-inset-lg {\n  --pf-c-tabs--inset: var(--pf-global--spacer--lg);\n  --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--lg);\n  --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--lg); }\n\n.pf-c-tabs.pf-m-inset-xl {\n  --pf-c-tabs--inset: var(--pf-global--spacer--xl);\n  --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--xl);\n  --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--xl); }\n\n.pf-c-tabs.pf-m-inset-2xl {\n  --pf-c-tabs--inset: var(--pf-global--spacer--2xl);\n  --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--2xl);\n  --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--2xl); }\n\n@media (min-width: 576px) {\n  .pf-c-tabs.pf-m-inset-none-on-sm {\n    --pf-c-tabs--inset: 0;\n    --pf-c-tabs--m-vertical--inset: 0;\n    --pf-c-tabs--m-vertical--m-box--inset: 0; }\n  .pf-c-tabs.pf-m-inset-sm-on-sm {\n    --pf-c-tabs--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--sm); }\n  .pf-c-tabs.pf-m-inset-md-on-sm {\n    --pf-c-tabs--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--md); }\n  .pf-c-tabs.pf-m-inset-lg-on-sm {\n    --pf-c-tabs--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--lg); }\n  .pf-c-tabs.pf-m-inset-xl-on-sm {\n    --pf-c-tabs--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--xl); }\n  .pf-c-tabs.pf-m-inset-2xl-on-sm {\n    --pf-c-tabs--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--2xl); } }\n\n@media (min-width: 768px) {\n  .pf-c-tabs.pf-m-inset-none-on-md {\n    --pf-c-tabs--inset: 0;\n    --pf-c-tabs--m-vertical--inset: 0;\n    --pf-c-tabs--m-vertical--m-box--inset: 0; }\n  .pf-c-tabs.pf-m-inset-sm-on-md {\n    --pf-c-tabs--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--sm); }\n  .pf-c-tabs.pf-m-inset-md-on-md {\n    --pf-c-tabs--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--md); }\n  .pf-c-tabs.pf-m-inset-lg-on-md {\n    --pf-c-tabs--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--lg); }\n  .pf-c-tabs.pf-m-inset-xl-on-md {\n    --pf-c-tabs--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--xl); }\n  .pf-c-tabs.pf-m-inset-2xl-on-md {\n    --pf-c-tabs--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--2xl); } }\n\n@media (min-width: 992px) {\n  .pf-c-tabs.pf-m-inset-none-on-lg {\n    --pf-c-tabs--inset: 0;\n    --pf-c-tabs--m-vertical--inset: 0;\n    --pf-c-tabs--m-vertical--m-box--inset: 0; }\n  .pf-c-tabs.pf-m-inset-sm-on-lg {\n    --pf-c-tabs--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--sm); }\n  .pf-c-tabs.pf-m-inset-md-on-lg {\n    --pf-c-tabs--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--md); }\n  .pf-c-tabs.pf-m-inset-lg-on-lg {\n    --pf-c-tabs--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--lg); }\n  .pf-c-tabs.pf-m-inset-xl-on-lg {\n    --pf-c-tabs--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--xl); }\n  .pf-c-tabs.pf-m-inset-2xl-on-lg {\n    --pf-c-tabs--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--2xl); } }\n\n@media (min-width: 1200px) {\n  .pf-c-tabs.pf-m-inset-none-on-xl {\n    --pf-c-tabs--inset: 0;\n    --pf-c-tabs--m-vertical--inset: 0;\n    --pf-c-tabs--m-vertical--m-box--inset: 0; }\n  .pf-c-tabs.pf-m-inset-sm-on-xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--sm); }\n  .pf-c-tabs.pf-m-inset-md-on-xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--md); }\n  .pf-c-tabs.pf-m-inset-lg-on-xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--lg); }\n  .pf-c-tabs.pf-m-inset-xl-on-xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--xl); }\n  .pf-c-tabs.pf-m-inset-2xl-on-xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--2xl); } }\n\n@media (min-width: 1450px) {\n  .pf-c-tabs.pf-m-inset-none-on-2xl {\n    --pf-c-tabs--inset: 0;\n    --pf-c-tabs--m-vertical--inset: 0;\n    --pf-c-tabs--m-vertical--m-box--inset: 0; }\n  .pf-c-tabs.pf-m-inset-sm-on-2xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--sm); }\n  .pf-c-tabs.pf-m-inset-md-on-2xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--md); }\n  .pf-c-tabs.pf-m-inset-lg-on-2xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--lg); }\n  .pf-c-tabs.pf-m-inset-xl-on-2xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--xl); }\n  .pf-c-tabs.pf-m-inset-2xl-on-2xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--2xl); } }\n\n.pf-c-tile {\n  --pf-c-tile--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-tile--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-tile--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-tile--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-tile--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-tile--before--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-tile--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-tile--before--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-tile--hover--before--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-tile--m-selected--before--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-tile--m-selected--before--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-tile--focus--before--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-tile--focus--before--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-tile--m-disabled--BackgroundColor: var(--pf-global--disabled-color--300);\n  --pf-c-tile__title--Color: var(--pf-global--Color--100);\n  --pf-c-tile--hover__title--Color: var(--pf-global--primary-color--100);\n  --pf-c-tile--m-selected__title--Color: var(--pf-global--primary-color--100);\n  --pf-c-tile--focus__title--Color: var(--pf-global--primary-color--100);\n  --pf-c-tile--m-disabled__title--Color: var(--pf-global--disabled-color--100);\n  --pf-c-tile__icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-tile__icon--FontSize: var(--pf-global--icon--FontSize--md);\n  --pf-c-tile__icon--Color: var(--pf-global--Color--100);\n  --pf-c-tile--hover__icon--Color: var(--pf-global--primary-color--100);\n  --pf-c-tile--m-selected__icon--Color: var(--pf-global--primary-color--100);\n  --pf-c-tile--m-disabled__icon--Color: var(--pf-global--disabled-color--100);\n  --pf-c-tile--focus__icon--Color: var(--pf-global--primary-color--100);\n  --pf-c-tile__header--m-stacked__icon--MarginBottom: var(--pf-global--spacer--xs);\n  --pf-c-tile__header--m-stacked__icon--FontSize: var(--pf-global--icon--FontSize--lg);\n  --pf-c-tile--m-display-lg__header--m-stacked__icon--FontSize: var(--pf-global--icon--FontSize--xl);\n  --pf-c-tile__body--Color: var(--pf-global--Color--100);\n  --pf-c-tile__body--FontSize: var(--pf-global--FontSize--xs);\n  --pf-c-tile--m-disabled__body--Color: var(--pf-global--disabled-color--100);\n  position: relative;\n  display: inline-grid;\n  padding: var(--pf-c-tile--PaddingTop) var(--pf-c-tile--PaddingRight) var(--pf-c-tile--PaddingBottom) var(--pf-c-tile--PaddingLeft);\n  text-align: center;\n  cursor: pointer;\n  background-color: var(--pf-c-tile--BackgroundColor);\n  grid-template-rows: min-content; }\n  .pf-c-tile::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    pointer-events: none;\n    content: "";\n    border: var(--pf-c-tile--before--BorderWidth) solid var(--pf-c-tile--before--BorderColor);\n    border-radius: var(--pf-c-tile--before--BorderRadius); }\n  .pf-c-tile:hover {\n    --pf-c-tile__title--Color: var(--pf-c-tile--hover__title--Color);\n    --pf-c-tile__icon--Color: var(--pf-c-tile--hover__icon--Color);\n    --pf-c-tile--before--BorderColor: var(--pf-c-tile--hover--before--BorderColor); }\n  .pf-c-tile.pf-m-selected {\n    --pf-c-tile__title--Color: var(--pf-c-tile--m-selected__title--Color);\n    --pf-c-tile__icon--Color: var(--pf-c-tile--m-selected__icon--Color);\n    --pf-c-tile--before--BorderWidth: var(--pf-c-tile--m-selected--before--BorderWidth);\n    --pf-c-tile--before--BorderColor: var(--pf-c-tile--m-selected--before--BorderColor); }\n  .pf-c-tile:focus {\n    --pf-c-tile__title--Color: var(--pf-c-tile--focus__title--Color);\n    --pf-c-tile__icon--Color: var(--pf-c-tile--focus__icon--Color);\n    --pf-c-tile--before--BorderWidth: var(--pf-c-tile--focus--before--BorderWidth);\n    --pf-c-tile--before--BorderColor: var(--pf-c-tile--focus--before--BorderColor); }\n  .pf-c-tile.pf-m-disabled {\n    --pf-c-tile--BackgroundColor: var(--pf-c-tile--m-disabled--BackgroundColor);\n    --pf-c-tile__title--Color: var(--pf-c-tile--m-disabled__title--Color);\n    --pf-c-tile__body--Color: var(--pf-c-tile--m-disabled__body--Color);\n    --pf-c-tile--before--BorderWidth: 0;\n    --pf-c-tile__icon--Color: var(--pf-c-tile--m-disabled__icon--Color);\n    pointer-events: none; }\n  .pf-c-tile.pf-m-display-lg .pf-c-tile__header.pf-m-stacked {\n    --pf-c-tile__icon--FontSize: var(--pf-c-tile--m-display-lg__header--m-stacked__icon--FontSize); }\n\n.pf-c-tile__header {\n  display: flex;\n  align-items: center;\n  justify-content: center; }\n  .pf-c-tile__header.pf-m-stacked {\n    --pf-c-tile__icon--MarginRight: 0;\n    --pf-c-tile__icon--FontSize: var(--pf-c-tile__header--m-stacked__icon--FontSize);\n    flex-direction: column;\n    justify-content: initial; }\n    .pf-c-tile__header.pf-m-stacked .pf-c-tile__icon {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      margin-bottom: var(--pf-c-tile__header--m-stacked__icon--MarginBottom); }\n\n.pf-c-tile__title {\n  color: var(--pf-c-tile__title--Color); }\n\n.pf-c-tile__body {\n  font-size: var(--pf-c-tile__body--FontSize);\n  color: var(--pf-c-tile__body--Color); }\n\n.pf-c-tile__icon {\n  margin-right: var(--pf-c-tile__icon--MarginRight);\n  font-size: var(--pf-c-tile__icon--FontSize);\n  color: var(--pf-c-tile__icon--Color); }\n\n.pf-c-title {\n  --pf-c-title--FontFamily: var(--pf-global--FontFamily--heading--sans-serif);\n  --pf-c-title--m-4xl--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-title--m-4xl--FontSize: var(--pf-global--FontSize--4xl);\n  --pf-c-title--m-4xl--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-title--m-3xl--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-title--m-3xl--FontSize: var(--pf-global--FontSize--3xl);\n  --pf-c-title--m-3xl--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-title--m-2xl--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-title--m-2xl--FontSize: var(--pf-global--FontSize--2xl);\n  --pf-c-title--m-2xl--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-title--m-xl--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-title--m-xl--FontSize: var(--pf-global--FontSize--xl);\n  --pf-c-title--m-xl--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-title--m-lg--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-title--m-lg--FontSize: var(--pf-global--FontSize--lg);\n  --pf-c-title--m-lg--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-title--m-md--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-title--m-md--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-title--m-md--FontWeight: var(--pf-global--FontWeight--normal);\n  font-family: var(--pf-c-title--FontFamily);\n  word-break: break-word; }\n  .pf-c-title.pf-m-4xl {\n    font-size: var(--pf-c-title--m-4xl--FontSize);\n    font-weight: var(--pf-c-title--m-4xl--FontWeight);\n    line-height: var(--pf-c-title--m-4xl--LineHeight); }\n  .pf-c-title.pf-m-3xl {\n    font-size: var(--pf-c-title--m-3xl--FontSize);\n    font-weight: var(--pf-c-title--m-3xl--FontWeight);\n    line-height: var(--pf-c-title--m-3xl--LineHeight); }\n  .pf-c-title.pf-m-2xl {\n    font-size: var(--pf-c-title--m-2xl--FontSize);\n    font-weight: var(--pf-c-title--m-2xl--FontWeight);\n    line-height: var(--pf-c-title--m-2xl--LineHeight); }\n  .pf-c-title.pf-m-xl {\n    font-size: var(--pf-c-title--m-xl--FontSize);\n    font-weight: var(--pf-c-title--m-xl--FontWeight);\n    line-height: var(--pf-c-title--m-xl--LineHeight); }\n  .pf-c-title.pf-m-lg {\n    font-size: var(--pf-c-title--m-lg--FontSize);\n    font-weight: var(--pf-c-title--m-lg--FontWeight);\n    line-height: var(--pf-c-title--m-lg--LineHeight); }\n  .pf-c-title.pf-m-md {\n    font-size: var(--pf-c-title--m-md--FontSize);\n    font-weight: var(--pf-c-title--m-md--FontWeight);\n    line-height: var(--pf-c-title--m-md--LineHeight); }\n\n.pf-m-overpass-font .pf-c-title {\n  --pf-c-title--m-md--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-title--m-lg--FontWeight: var(--pf-global--FontWeight--semi-bold); }\n\n.pf-c-toggle-group {\n  --pf-c-toggle-group__button--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-toggle-group__button--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-toggle-group__button--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-toggle-group__button--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-toggle-group__button--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-toggle-group__button--LineHeight: calc(var(--pf-global--FontSize--md) * var(--pf-global--LineHeight--md));\n  --pf-c-toggle-group__button--Color: var(--pf-global--Color--100);\n  --pf-c-toggle-group__button--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-toggle-group__button--hover--BackgroundColor: var(--pf-global--disabled-color--200);\n  --pf-c-toggle-group__button--focus--BackgroundColor: var(--pf-global--disabled-color--200);\n  --pf-c-toggle-group__button--disabled--BackgroundColor: var(--pf-global--disabled-color--200);\n  --pf-c-toggle-group__button--disabled--Color: var(--pf-global--disabled-color--100);\n  --pf-c-toggle-group__item--first-child__button--BorderTopLeftRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-toggle-group__item--first-child__button--BorderBottomLeftRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-toggle-group__item--last-child__button--BorderTopRightRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-toggle-group__item--last-child__button--BorderBottomRightRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-toggle-group__icon--text--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-toggle-group__button--m-light--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-toggle-group__button--m-selected--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-toggle-group__button--m-selected--Color: var(--pf-global--Color--light-100);\n  display: flex; }\n\n.pf-c-toggle-group__item:first-child .pf-c-toggle-group__button {\n  border-top-left-radius: var(--pf-c-toggle-group__item--first-child__button--BorderTopLeftRadius);\n  border-bottom-left-radius: var(--pf-c-toggle-group__item--first-child__button--BorderBottomLeftRadius); }\n\n.pf-c-toggle-group__item:last-child .pf-c-toggle-group__button {\n  border-top-right-radius: var(--pf-c-toggle-group__item--last-child__button--BorderTopRightRadius);\n  border-bottom-right-radius: var(--pf-c-toggle-group__item--last-child__button--BorderBottomRightRadius); }\n\n.pf-c-toggle-group__button {\n  display: inline-flex;\n  padding: var(--pf-c-toggle-group__button--PaddingTop) var(--pf-c-toggle-group__button--PaddingRight) var(--pf-c-toggle-group__button--PaddingBottom) var(--pf-c-toggle-group__button--PaddingLeft);\n  font-size: var(--pf-c-toggle-group__button--FontSize);\n  line-height: var(--pf-c-toggle-group__button--LineHeight);\n  color: var(--pf-c-toggle-group__button--Color);\n  background-color: var(--pf-c-toggle-group__button--BackgroundColor);\n  border: 0; }\n  .pf-c-toggle-group__button.pf-m-light {\n    --pf-c-toggle-group__button--BackgroundColor: var(--pf-c-toggle-group__button--m-light--BackgroundColor); }\n  .pf-c-toggle-group__button:hover {\n    --pf-c-toggle-group__button--BackgroundColor: var(--pf-c-toggle-group__button--hover--BackgroundColor);\n    text-decoration: none; }\n  .pf-c-toggle-group__button:focus {\n    --pf-c-toggle-group__button--BackgroundColor: var(--pf-c-toggle-group__button--focus--BackgroundColor); }\n  .pf-c-toggle-group__button.pf-m-selected {\n    --pf-c-toggle-group__button--BackgroundColor: var(--pf-c-toggle-group__button--m-selected--BackgroundColor);\n    --pf-c-toggle-group__button--Color: var(--pf-c-toggle-group__button--m-selected--Color); }\n  .pf-c-toggle-group__button:disabled, .pf-c-toggle-group__button.pf-m-disabled {\n    --pf-c-toggle-group__button--BackgroundColor: var(--pf-c-toggle-group__button--disabled--BackgroundColor);\n    --pf-c-toggle-group__button--Color: var(--pf-c-toggle-group__button--disabled--Color);\n    pointer-events: none; }\n\n.pf-c-toggle-group__icon + .pf-c-toggle-group__text,\n.pf-c-toggle-group__text + .pf-c-toggle-group__icon {\n  margin-left: var(--pf-c-toggle-group__icon--text--MarginLeft); }\n\n.pf-c-tooltip {\n  --pf-c-tooltip--MaxWidth: 18.75rem;\n  --pf-c-tooltip--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-tooltip__content--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-tooltip__content--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-tooltip__content--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-tooltip__content--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-tooltip__content--Color: var(--pf-global--Color--light-100);\n  --pf-c-tooltip__content--BackgroundColor: var(--pf-global--BackgroundColor--dark-100);\n  --pf-c-tooltip__content--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-tooltip__arrow--Width: var(--pf-global--arrow--width);\n  --pf-c-tooltip__arrow--Height: var(--pf-global--arrow--width);\n  --pf-c-tooltip__arrow--m-top--TranslateX: -50%;\n  --pf-c-tooltip__arrow--m-top--TranslateY: 50%;\n  --pf-c-tooltip__arrow--m-top--Rotate: 45deg;\n  --pf-c-tooltip__arrow--m-right--TranslateX: -50%;\n  --pf-c-tooltip__arrow--m-right--TranslateY: -50%;\n  --pf-c-tooltip__arrow--m-right--Rotate: 45deg;\n  --pf-c-tooltip__arrow--m-bottom--TranslateX: -50%;\n  --pf-c-tooltip__arrow--m-bottom--TranslateY: -50%;\n  --pf-c-tooltip__arrow--m-bottom--Rotate: 45deg;\n  --pf-c-tooltip__arrow--m-left--TranslateX: 50%;\n  --pf-c-tooltip__arrow--m-left--TranslateY: -50%;\n  --pf-c-tooltip__arrow--m-left--Rotate: 45deg;\n  position: relative;\n  max-width: var(--pf-c-tooltip--MaxWidth);\n  box-shadow: var(--pf-c-tooltip--BoxShadow); }\n  .pf-c-tooltip.pf-m-top .pf-c-tooltip__arrow {\n    bottom: 0;\n    left: 50%;\n    transform: translateX(var(--pf-c-tooltip__arrow--m-top--TranslateX)) translateY(var(--pf-c-tooltip__arrow--m-top--TranslateY)) rotate(var(--pf-c-tooltip__arrow--m-top--Rotate)); }\n  .pf-c-tooltip.pf-m-bottom .pf-c-tooltip__arrow {\n    top: 0;\n    left: 50%;\n    transform: translateX(var(--pf-c-tooltip__arrow--m-bottom--TranslateX)) translateY(var(--pf-c-tooltip__arrow--m-bottom--TranslateY)) rotate(var(--pf-c-tooltip__arrow--m-bottom--Rotate)); }\n  .pf-c-tooltip.pf-m-left .pf-c-tooltip__arrow {\n    top: 50%;\n    right: 0;\n    transform: translateX(var(--pf-c-tooltip__arrow--m-left--TranslateX)) translateY(var(--pf-c-tooltip__arrow--m-left--TranslateY)) rotate(var(--pf-c-tooltip__arrow--m-left--Rotate)); }\n  .pf-c-tooltip.pf-m-right .pf-c-tooltip__arrow {\n    top: 50%;\n    left: 0;\n    transform: translateX(var(--pf-c-tooltip__arrow--m-right--TranslateX)) translateY(var(--pf-c-tooltip__arrow--m-right--TranslateY)) rotate(var(--pf-c-tooltip__arrow--m-right--Rotate)); }\n\n.pf-c-tooltip__content {\n  position: relative;\n  padding: var(--pf-c-tooltip__content--PaddingTop) var(--pf-c-tooltip__content--PaddingRight) var(--pf-c-tooltip__content--PaddingBottom) var(--pf-c-tooltip__content--PaddingLeft);\n  font-size: var(--pf-c-tooltip__content--FontSize);\n  color: var(--pf-c-tooltip__content--Color);\n  text-align: center;\n  word-break: break-word;\n  background-color: var(--pf-c-tooltip__content--BackgroundColor); }\n  .pf-c-tooltip__content.pf-m-text-align-left {\n    text-align: left; }\n\n.pf-c-tooltip__arrow {\n  position: absolute;\n  width: var(--pf-c-tooltip__arrow--Width);\n  height: var(--pf-c-tooltip__arrow--Height);\n  pointer-events: none;\n  background-color: var(--pf-c-tooltip__content--BackgroundColor); }\n\n.pf-c-touchspin {\n  --pf-c-touchspin__unit--c-input-group--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-touchspin__icon--FontSize: var(--pf-global--FontSize--xs);\n  --pf-c-touchspin--c-form-control--width-base: calc(var(--pf-global--spacer--sm) * 2);\n  --pf-c-touchspin--c-form-control--width-chars: 4;\n  --pf-c-touchspin--c-form-control--Width: calc(var(--pf-c-touchspin--c-form-control--width-base) + var(--pf-c-touchspin--c-form-control--width-chars) * 1ch);\n  display: inline-flex;\n  align-items: center; }\n  .pf-c-touchspin .pf-c-form-control {\n    display: inline-flex;\n    width: var(--pf-c-touchspin--c-form-control--Width);\n    text-align: right; }\n\n.pf-c-input-group + .pf-c-touchspin__unit,\n.pf-c-touchspin__unit + .pf-c-input-group {\n  margin-left: var(--pf-c-touchspin__unit--c-input-group--MarginLeft); }\n\n.pf-c-touchspin__icon {\n  font-size: var(--pf-c-touchspin__icon--FontSize); }\n\n.pf-c-tree-view {\n  --pf-c-tree-view--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-tree-view--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__node--indent--base: calc(var(--pf-global--spacer--lg) + var(--pf-global--spacer--md));\n  --pf-c-tree-view__node--nested-indent--base: var(--pf-global--spacer--lg);\n  --pf-c-tree-view__node--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__node--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__node--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__node--PaddingLeft: 0;\n  --pf-c-tree-view__node--Color: var(--pf-global--Color--100);\n  --pf-c-tree-view__node--m-current--Color: var(--pf-global--link--Color);\n  --pf-c-tree-view__node--m-current--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-tree-view__node--hover--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-tree-view__node--focus--BackgroundColor: var(--pf-global--palette--black-200);\n  --pf-c-tree-view__list-item__list-item__node-toggle--Top: var(--pf-c-tree-view__node--PaddingTop);\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft);\n  --pf-c-tree-view__list-item__list-item__node-toggle--TranslateX: -100%;\n  --pf-c-tree-view__node-toggle--Transition: var(--pf-global--Transition);\n  --pf-c-tree-view__node-toggle-button--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-tree-view__node-toggle-button--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-tree-view__node-toggle-button--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-tree-view__node-toggle-button--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-tree-view__node-toggle-button--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-tree-view__node-toggle-button--MarginBottom: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-tree-view__node-check--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__node-count--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__node-count--c-badge--m-read--BackgroundColor: var(--pf-global--disabled-color--200);\n  --pf-c-tree-view__search--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__search--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__search--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__search--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__node-icon--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__node-icon--Color: var(--pf-global--icon--Color--light);\n  --pf-c-tree-view__node-text--max-lines: 1;\n  --pf-c-tree-view__action--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-tree-view__action--focus--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-tree-view__action--Color: var(--pf-global--icon--Color--light);\n  --pf-c-tree-view__action--hover--Color: var(--pf-global--icon--Color--dark);\n  --pf-c-tree-view__action--focus--Color: var(--pf-global--icon--Color--dark);\n  padding-top: var(--pf-c-tree-view--PaddingTop);\n  padding-bottom: var(--pf-c-tree-view--PaddingBottom); }\n\n.pf-c-tree-view__list-item.pf-m-expanded > .pf-c-tree-view__content > .pf-c-tree-view__node > .pf-c-tree-view__node-toggle > .pf-c-tree-view__node-toggle-icon {\n  transform: rotate(90deg); }\n\n.pf-c-tree-view__node {\n  position: relative;\n  display: flex;\n  flex: 1 1;\n  align-items: center;\n  min-width: 0;\n  padding: var(--pf-c-tree-view__node--PaddingTop) var(--pf-c-tree-view__node--PaddingRight) var(--pf-c-tree-view__node--PaddingBottom) var(--pf-c-tree-view__node--PaddingLeft);\n  color: var(--pf-c-tree-view__node--Color);\n  text-align: left;\n  cursor: pointer;\n  border: 0; }\n  .pf-c-tree-view__node.pf-m-current {\n    --pf-c-tree-view__node--Color: var(--pf-c-tree-view__node--m-current--Color);\n    font-weight: var(--pf-c-tree-view__node--m-current--FontWeight); }\n  .pf-c-tree-view__node:focus {\n    background-color: var(--pf-c-tree-view__node--focus--BackgroundColor); }\n  .pf-c-tree-view__node .pf-c-tree-view__node-count {\n    margin-left: var(--pf-c-tree-view__node-count--MarginLeft); }\n    .pf-c-tree-view__node .pf-c-tree-view__node-count .pf-c-badge.pf-m-read {\n      --pf-c-badge--m-read--BackgroundColor: var(--pf-c-tree-view__node-count--c-badge--m-read--BackgroundColor); }\n\n.pf-c-tree-view__node-toggle-icon {\n  transition: var(--pf-c-tree-view__node-toggle--Transition); }\n\n.pf-c-tree-view__node-check {\n  margin-right: var(--pf-c-tree-view__node-check--MarginRight); }\n\n.pf-c-tree-view__node-toggle {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  padding: var(--pf-c-tree-view__node-toggle-button--PaddingTop) var(--pf-c-tree-view__node-toggle-button--PaddingRight) var(--pf-c-tree-view__node-toggle-button--PaddingBottom) var(--pf-c-tree-view__node-toggle-button--PaddingLeft);\n  margin-top: var(--pf-c-tree-view__node-toggle-button--MarginTop);\n  margin-bottom: var(--pf-c-tree-view__node-toggle-button--MarginBottom);\n  border: 0; }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__node-toggle {\n  position: absolute;\n  top: var(--pf-c-tree-view__list-item__list-item__node-toggle--Top);\n  left: var(--pf-c-tree-view__list-item__list-item__node-toggle--Left);\n  transform: translateX(var(--pf-c-tree-view__list-item__list-item__node-toggle--TranslateX)); }\n\n.pf-c-tree-view__node-text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.pf-c-tree-view__search {\n  padding: var(--pf-c-tree-view__search--PaddingTop) var(--pf-c-tree-view__search--PaddingRight) var(--pf-c-tree-view__search--PaddingBottom) var(--pf-c-tree-view__search--PaddingLeft); }\n\n.pf-c-tree-view__node-icon {\n  padding-right: var(--pf-c-tree-view__node-icon--PaddingRight);\n  color: var(--pf-c-tree-view__node-icon--Color); }\n\n.pf-c-tree-view__content {\n  display: flex;\n  align-items: center; }\n\n.pf-c-tree-view__content:hover,\n.pf-c-tree-view__content:focus-within {\n  background-color: var(--pf-c-tree-view__node--hover--BackgroundColor); }\n\n.pf-c-tree-view__action {\n  margin-left: var(--pf-c-tree-view__action--MarginLeft);\n  color: var(--pf-c-tree-view__action--Color);\n  border: 0; }\n  .pf-c-tree-view__action:hover {\n    --pf-c-tree-view__action--Color: var(--pf-c-tree-view__action--hover--Color); }\n  .pf-c-tree-view__action:focus {\n    --pf-c-tree-view__action--Color: var(--pf-c-tree-view__action--focus--Color);\n    background-color: var(--pf-c-tree-view__action--focus--BackgroundColor); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 1));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 2));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 3));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 4));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 5));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 6));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 7));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 8));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 9));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 10));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-wizard {\n  --pf-c-wizard--Height: 100%;\n  --pf-c-modal-box--c-wizard--FlexBasis: 47.625rem;\n  --pf-c-wizard__header--BackgroundColor: var(--pf-global--BackgroundColor--dark-100);\n  --pf-c-wizard__header--ZIndex: var(--pf-global--ZIndex--md);\n  --pf-c-wizard__header--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-wizard__header--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-wizard__header--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-wizard__header--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-wizard__header--lg--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-wizard__header--lg--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-wizard__header--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-wizard__header--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-wizard__close--Top: calc(var(--pf-global--spacer--lg) - var(--pf-global--spacer--form-element));\n  --pf-c-wizard__close--Right: 0;\n  --pf-c-wizard__close--xl--Right: var(--pf-global--spacer--lg);\n  --pf-c-wizard__close--FontSize: var(--pf-global--FontSize--xl);\n  --pf-c-wizard__title--PaddingRight: var(--pf-global--spacer--2xl);\n  --pf-c-wizard__description--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-wizard__description--Color: var(--pf-global--Color--light-200);\n  --pf-c-wizard__nav-link--Color: var(--pf-global--Color--100);\n  --pf-c-wizard__nav-link--TextDecoration: var(--pf-global--link--TextDecoration);\n  --pf-c-wizard__nav-link--hover--Color: var(--pf-global--link--Color);\n  --pf-c-wizard__nav-link--focus--Color: var(--pf-global--link--Color);\n  --pf-c-wizard__nav-link--m-current--Color: var(--pf-global--link--Color);\n  --pf-c-wizard__nav-link--m-current--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-wizard__nav-link--m-disabled--Color: var(--pf-global--Color--dark-200);\n  --pf-c-wizard__nav-list__nav-list__nav-link--m-current--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-wizard__nav-link--before--Width: 1.5rem;\n  --pf-c-wizard__nav-link--before--Height: 1.5rem;\n  --pf-c-wizard__nav-link--before--Top: 0;\n  --pf-c-wizard__nav-link--before--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-wizard__nav-link--before--BorderRadius: var(--pf-global--BorderRadius--lg);\n  --pf-c-wizard__nav-link--before--Color: var(--pf-global--Color--100);\n  --pf-c-wizard__nav-link--before--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-wizard__nav-link--before--TranslateX: calc(-100% - var(--pf-global--spacer--sm));\n  --pf-c-wizard__nav-link--m-current--before--BackgroundColor: var(--pf-global--active-color--100);\n  --pf-c-wizard__nav-link--m-current--before--Color: var(--pf-global--Color--light-100);\n  --pf-c-wizard__nav-link--m-disabled--before--BackgroundColor: transparent;\n  --pf-c-wizard__nav-link--m-disabled--before--Color: var(--pf-global--Color--dark-200);\n  --pf-c-wizard__toggle--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-wizard__toggle--ZIndex: var(--pf-global--ZIndex--md);\n  --pf-c-wizard__toggle--BoxShadow: var(--pf-global--BoxShadow--md-bottom);\n  --pf-c-wizard__toggle--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-wizard__toggle--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-wizard__toggle--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-wizard__toggle--PaddingLeft: calc(var(--pf-global--spacer--md) + var(--pf-c-wizard__nav-link--before--Width) + var(--pf-global--spacer--sm));\n  --pf-c-wizard__toggle--m-expanded--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-wizard__toggle--m-expanded--BorderBottomColor: var(--pf-global--BorderColor--100);\n  --pf-c-wizard--m-in-page__toggle--xl--PaddingLeft: calc(var(--pf-global--spacer--xl) + var(--pf-c-wizard__nav-link--before--Width) + var(--pf-global--spacer--sm));\n  --pf-c-wizard__toggle-num--before--Top: 0;\n  --pf-c-wizard__toggle-list-item--not-last-child--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-wizard__toggle-list-item--MarginBottom: var(--pf-global--spacer--xs);\n  --pf-c-wizard__toggle-list--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-wizard__toggle-list--MarginBottom: calc(var(--pf-c-wizard__toggle-list-item--MarginBottom) * -1);\n  --pf-c-wizard__toggle-separator--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-wizard__toggle-separator--Color: var(--pf-global--BorderColor--200);\n  --pf-c-wizard__toggle-icon--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-wizard__toggle--m-expanded__toggle-icon--Rotate: 180deg;\n  --pf-c-wizard__nav--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-wizard__nav--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-wizard__nav--BoxShadow: var(--pf-global--BoxShadow--md-bottom);\n  --pf-c-wizard__nav--Width: 100%;\n  --pf-c-wizard__nav--lg--Width: 15.625rem;\n  --pf-c-wizard__nav--lg--BorderRightWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-wizard__nav--lg--BorderRightColor: var(--pf-global--BorderColor--100);\n  --pf-c-wizard__nav-list--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-wizard__nav-list--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-wizard__nav-list--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-wizard__nav-list--PaddingLeft: calc(var(--pf-global--spacer--md) + var(--pf-c-wizard__nav-link--before--Width) + var(--pf-global--spacer--sm));\n  --pf-c-wizard__nav-list--lg--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-wizard__nav-list--lg--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-wizard__nav-list--lg--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-wizard__nav-list--xl--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-wizard__nav-list--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-wizard__nav-list--xl--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-wizard__nav-list--xl--PaddingLeft: calc(var(--pf-global--spacer--lg) + var(--pf-c-wizard__nav-link--before--Width) + var(--pf-global--spacer--sm));\n  --pf-c-wizard__nav-list--nested--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-wizard__nav-list--nested--MarginTop: var(--pf-global--spacer--md);\n  --pf-c-wizard__nav-item--MarginTop: var(--pf-global--spacer--md);\n  --pf-c-wizard__outer-wrap--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-wizard__outer-wrap--lg--PaddingLeft: var(--pf-c-wizard__nav--Width);\n  --pf-c-wizard__main--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-wizard__main-body--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-wizard__main-body--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-wizard__main-body--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-wizard__main-body--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-wizard__main-body--xl--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-wizard__main-body--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-wizard__main-body--xl--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-wizard__main-body--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-wizard__footer--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-wizard__footer--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-wizard__footer--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-wizard__footer--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-wizard__footer--xl--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-wizard__footer--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-wizard__footer--xl--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-wizard__footer--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-wizard__footer--child--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-wizard__footer--child--MarginBottom: var(--pf-global--spacer--sm);\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  height: var(--pf-c-wizard--Height); }\n  @media screen and (min-width: 992px) {\n    .pf-c-wizard {\n      --pf-c-wizard__header--PaddingRight: var(--pf-c-wizard__header--lg--PaddingRight);\n      --pf-c-wizard__header--PaddingLeft: var(--pf-c-wizard__header--lg--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-wizard {\n      --pf-c-wizard__header--PaddingRight: var(--pf-c-wizard__header--xl--PaddingRight);\n      --pf-c-wizard__header--PaddingLeft: var(--pf-c-wizard__header--xl--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-wizard {\n      --pf-c-wizard__close--Right: var(--pf-c-wizard__close--xl--Right); } }\n  @media screen and (min-width: 992px) {\n    .pf-c-wizard {\n      --pf-c-wizard__nav--Width: var(--pf-c-wizard__nav--lg--Width);\n      --pf-c-wizard__nav--BoxShadow: none; } }\n  @media screen and (min-width: 992px) {\n    .pf-c-wizard {\n      --pf-c-wizard__nav-list--PaddingTop: var(--pf-c-wizard__nav-list--lg--PaddingTop);\n      --pf-c-wizard__nav-list--PaddingRight: var(--pf-c-wizard__nav-list--lg--PaddingRight);\n      --pf-c-wizard__nav-list--PaddingBottom: var(--pf-c-wizard__nav-list--lg--PaddingBottom); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-wizard {\n      --pf-c-wizard__nav-list--PaddingTop: var(--pf-c-wizard__nav-list--xl--PaddingTop);\n      --pf-c-wizard__nav-list--PaddingRight: var(--pf-c-wizard__nav-list--xl--PaddingRight);\n      --pf-c-wizard__nav-list--PaddingBottom: var(--pf-c-wizard__nav-list--xl--PaddingBottom);\n      --pf-c-wizard__nav-list--PaddingLeft: var(--pf-c-wizard__nav-list--xl--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-wizard {\n      --pf-c-wizard__main-body--PaddingTop: var(--pf-c-wizard__main-body--xl--PaddingTop);\n      --pf-c-wizard__main-body--PaddingRight: var(--pf-c-wizard__main-body--xl--PaddingRight);\n      --pf-c-wizard__main-body--PaddingBottom: var(--pf-c-wizard__main-body--xl--PaddingBottom);\n      --pf-c-wizard__main-body--PaddingLeft: var(--pf-c-wizard__main-body--xl--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-wizard {\n      --pf-c-wizard__footer--PaddingTop: var(--pf-c-wizard__footer--xl--PaddingTop);\n      --pf-c-wizard__footer--PaddingRight: var(--pf-c-wizard__footer--xl--PaddingRight);\n      --pf-c-wizard__footer--PaddingBottom: var(--pf-c-wizard__footer--xl--PaddingBottom);\n      --pf-c-wizard__footer--PaddingLeft: var(--pf-c-wizard__footer--xl--PaddingLeft); } }\n  .pf-c-modal-box .pf-c-wizard {\n    flex: 1 1 var(--pf-c-modal-box--c-wizard--FlexBasis);\n    min-height: 0; }\n  .pf-c-wizard > *:not(.pf-c-wizard__outer-wrap) {\n    flex-shrink: 0; }\n  .pf-c-wizard.pf-m-finished {\n    --pf-c-wizard__outer-wrap--lg--PaddingLeft: 0; }\n    .pf-c-wizard.pf-m-finished .pf-c-wizard__nav,\n    .pf-c-wizard.pf-m-finished .pf-c-wizard__footer,\n    .pf-c-wizard.pf-m-finished .pf-c-wizard__toggle {\n      display: none;\n      visibility: hidden; }\n\n.pf-c-wizard__header {\n  color: var(--pf-global--Color--100);\n  position: relative;\n  z-index: var(--pf-c-wizard__header--ZIndex);\n  padding: var(--pf-c-wizard__header--PaddingTop) var(--pf-c-wizard__header--PaddingRight) var(--pf-c-wizard__header--PaddingBottom) var(--pf-c-wizard__header--PaddingLeft);\n  background-color: var(--pf-c-wizard__header--BackgroundColor); }\n  .pf-c-wizard__header .pf-c-wizard__close {\n    position: absolute;\n    top: var(--pf-c-wizard__close--Top);\n    right: var(--pf-c-wizard__close--Right);\n    font-size: var(--pf-c-wizard__close--FontSize); }\n\n.pf-c-wizard__title {\n  padding-right: var(--pf-c-wizard__title--PaddingRight);\n  word-wrap: break-word; }\n\n.pf-c-wizard__description {\n  display: none;\n  padding-top: var(--pf-c-wizard__description--PaddingTop);\n  color: var(--pf-c-wizard__description--Color);\n  visibility: hidden; }\n  @media screen and (min-width: 992px) {\n    .pf-c-wizard__description {\n      display: block;\n      visibility: visible; } }\n\n.pf-c-wizard__toggle {\n  position: relative;\n  z-index: var(--pf-c-wizard__toggle--ZIndex);\n  display: flex;\n  justify-content: space-between;\n  width: 100%;\n  padding: var(--pf-c-wizard__toggle--PaddingTop) var(--pf-c-wizard__toggle--PaddingRight) var(--pf-c-wizard__toggle--PaddingBottom) var(--pf-c-wizard__toggle--PaddingLeft);\n  background-color: var(--pf-c-wizard__toggle--BackgroundColor);\n  border: 0;\n  box-shadow: var(--pf-c-wizard__toggle--BoxShadow); }\n  @media screen and (min-width: 992px) {\n    .pf-c-wizard__toggle {\n      display: none;\n      visibility: hidden; } }\n  .pf-c-wizard__toggle.pf-m-expanded {\n    --pf-c-wizard__toggle--BoxShadow: none;\n    border-bottom: var(--pf-c-wizard__toggle--m-expanded--BorderBottomWidth) solid var(--pf-c-wizard__toggle--m-expanded--BorderBottomColor); }\n    .pf-c-wizard__toggle.pf-m-expanded .pf-c-wizard__toggle-icon {\n      transform: rotate(var(--pf-c-wizard__toggle--m-expanded__toggle-icon--Rotate)); }\n\n.pf-c-wizard__toggle-list {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\n  margin-right: var(--pf-c-wizard__toggle-list--MarginRight);\n  margin-bottom: var(--pf-c-wizard__toggle-list--MarginBottom);\n  list-style: none; }\n\n.pf-c-wizard__toggle-list-item {\n  margin-bottom: var(--pf-c-wizard__toggle-list-item--MarginBottom);\n  text-align: left;\n  word-break: break-word; }\n  .pf-c-wizard__toggle-list-item:not(:last-child) {\n    margin-right: var(--pf-c-wizard__toggle-list-item--not-last-child--MarginRight); }\n\n.pf-c-wizard__toggle-num {\n  --pf-c-wizard__nav-link--before--Top: var(--pf-c-wizard__toggle-num--before--Top); }\n\n.pf-c-wizard__toggle-separator {\n  margin-left: var(--pf-c-wizard__toggle-separator--MarginLeft);\n  color: var(--pf-c-wizard__toggle-separator--Color); }\n\n.pf-c-wizard__toggle-icon {\n  line-height: var(--pf-c-wizard__toggle-icon--LineHeight); }\n\n.pf-c-wizard__outer-wrap {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  min-height: 0;\n  background-color: var(--pf-c-wizard__outer-wrap--BackgroundColor); }\n  @media screen and (min-width: 992px) {\n    .pf-c-wizard__outer-wrap {\n      padding-left: var(--pf-c-wizard__outer-wrap--lg--PaddingLeft); } }\n\n.pf-c-wizard__inner-wrap {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  min-height: 0; }\n  @media screen and (min-width: 992px) {\n    .pf-c-wizard__inner-wrap {\n      position: static; } }\n\n.pf-c-wizard__nav {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: var(--pf-c-wizard__nav--ZIndex);\n  display: none;\n  width: var(--pf-c-wizard__nav--Width);\n  max-height: 100%;\n  overflow-y: auto;\n  -webkit-overflow-scrolling: touch;\n  visibility: hidden;\n  background-color: var(--pf-c-wizard__nav--BackgroundColor);\n  box-shadow: var(--pf-c-wizard__nav--BoxShadow); }\n  .pf-c-wizard__nav.pf-m-expanded {\n    display: block;\n    visibility: visible; }\n  @media screen and (min-width: 992px) {\n    .pf-c-wizard__nav {\n      display: block;\n      height: 100%;\n      visibility: visible;\n      border-right: var(--pf-c-wizard__nav--lg--BorderRightWidth) solid var(--pf-c-wizard__nav--lg--BorderRightColor); } }\n\n.pf-c-wizard__nav-list {\n  padding-top: var(--pf-c-wizard__nav-list--PaddingTop);\n  padding-right: var(--pf-c-wizard__nav-list--PaddingRight);\n  padding-bottom: var(--pf-c-wizard__nav-list--PaddingBottom);\n  padding-left: var(--pf-c-wizard__nav-list--PaddingLeft);\n  list-style: none;\n  counter-reset: wizard-nav-count; }\n  .pf-c-wizard__nav-list .pf-c-wizard__nav-list {\n    padding: 0;\n    margin-top: var(--pf-c-wizard__nav-list--nested--MarginTop);\n    margin-left: var(--pf-c-wizard__nav-list--nested--MarginLeft); }\n    .pf-c-wizard__nav-list .pf-c-wizard__nav-list .pf-c-wizard__nav-link::before {\n      content: none; }\n    .pf-c-wizard__nav-list .pf-c-wizard__nav-list .pf-c-wizard__nav-link.pf-m-current {\n      font-weight: var(--pf-c-wizard__nav-list__nav-list__nav-link--m-current--FontWeight); }\n\n.pf-c-wizard__nav-item + .pf-c-wizard__nav-item {\n  margin-top: var(--pf-c-wizard__nav-item--MarginTop); }\n\n.pf-c-wizard__nav-link {\n  position: relative;\n  display: inline-block;\n  color: var(--pf-c-wizard__nav-link--Color);\n  text-align: left;\n  text-decoration: var(--pf-c-wizard__nav-link--TextDecoration);\n  word-break: break-word;\n  border: 0; }\n  .pf-c-wizard__toggle-num, .pf-c-wizard__nav-link::before {\n    position: absolute;\n    top: var(--pf-c-wizard__nav-link--before--Top);\n    left: 0;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: var(--pf-c-wizard__nav-link--before--Width);\n    height: var(--pf-c-wizard__nav-link--before--Height);\n    font-size: var(--pf-c-wizard__nav-link--before--FontSize);\n    line-height: 1;\n    color: var(--pf-c-wizard__nav-link--before--Color);\n    background-color: var(--pf-c-wizard__nav-link--before--BackgroundColor);\n    border-radius: var(--pf-c-wizard__nav-link--before--BorderRadius);\n    transform: translateX(var(--pf-c-wizard__nav-link--before--TranslateX)); }\n  .pf-c-wizard__nav-link::before {\n    top: 0;\n    content: counter(wizard-nav-count);\n    counter-increment: wizard-nav-count; }\n  .pf-c-wizard__nav-link:hover {\n    --pf-c-wizard__nav-link--Color: var(--pf-c-wizard__nav-link--hover--Color); }\n  .pf-c-wizard__nav-link:focus {\n    --pf-c-wizard__nav-link--Color: var(--pf-c-wizard__nav-link--focus--Color); }\n  .pf-c-wizard__nav-link.pf-m-current {\n    --pf-c-wizard__nav-link--Color: var(--pf-c-wizard__nav-link--m-current--Color);\n    font-weight: var(--pf-c-wizard__nav-link--m-current--FontWeight); }\n    .pf-c-wizard__toggle-num, .pf-c-wizard__nav-link.pf-m-current::before {\n      --pf-c-wizard__nav-link--before--BackgroundColor: var(--pf-c-wizard__nav-link--m-current--before--BackgroundColor);\n      --pf-c-wizard__nav-link--before--Color: var(--pf-c-wizard__nav-link--m-current--before--Color); }\n  .pf-c-wizard__nav-link:disabled, .pf-c-wizard__nav-link.pf-m-disabled {\n    --pf-c-wizard__nav-link--Color: var(--pf-c-wizard__nav-link--m-disabled--Color);\n    pointer-events: none; }\n    .pf-c-wizard__nav-link:disabled::before, .pf-c-wizard__nav-link.pf-m-disabled::before {\n      --pf-c-wizard__nav-link--before--BackgroundColor: var(--pf-c-wizard__nav-link--m-disabled--before--BackgroundColor);\n      --pf-c-wizard__nav-link--before--Color: var(--pf-c-wizard__nav-link--m-disabled--before--Color); }\n\n.pf-c-wizard__main {\n  z-index: var(--pf-c-wizard__main--ZIndex);\n  flex: 1 1 auto;\n  overflow-x: hidden;\n  overflow-y: auto;\n  word-break: break-word; }\n\n.pf-c-wizard__main-body {\n  padding: var(--pf-c-wizard__main-body--PaddingTop) var(--pf-c-wizard__main-body--PaddingRight) var(--pf-c-wizard__main-body--PaddingBottom) var(--pf-c-wizard__main-body--PaddingLeft); }\n  .pf-c-wizard__main-body.pf-m-no-padding {\n    padding: 0; }\n\n.pf-c-wizard__footer {\n  display: flex;\n  flex-wrap: wrap;\n  flex-shrink: 0;\n  padding: var(--pf-c-wizard__footer--PaddingTop) var(--pf-c-wizard__footer--PaddingRight) var(--pf-c-wizard__footer--PaddingBottom) var(--pf-c-wizard__footer--PaddingLeft); }\n  .pf-c-wizard__footer > * {\n    margin-bottom: var(--pf-c-wizard__footer--child--MarginBottom); }\n    .pf-c-wizard__footer > *:not(:last-child) {\n      margin-right: var(--pf-c-wizard__footer--child--MarginRight); }\n\n.pf-l-bullseye {\n  --pf-l-bullseye--Padding: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: 100%;\n  padding: var(--pf-l-bullseye--Padding);\n  margin: 0; }\n\n.pf-l-flex {\n  --pf-l-flex--Display: flex;\n  --pf-l-flex--FlexWrap: wrap;\n  --pf-l-flex--AlignItems: baseline;\n  --pf-l-flex--m-row--AlignItems: baseline;\n  --pf-l-flex--m-row-reverse--AlignItems: baseline;\n  --pf-l-flex--item--Order: 0;\n  --pf-l-flex--spacer-base: var(--pf-global--spacer--md);\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer-base);\n  --pf-l-flex--spacer--none: 0;\n  --pf-l-flex--spacer--xs: var(--pf-global--spacer--xs);\n  --pf-l-flex--spacer--sm: var(--pf-global--spacer--sm);\n  --pf-l-flex--spacer--md: var(--pf-global--spacer--md);\n  --pf-l-flex--spacer--lg: var(--pf-global--spacer--lg);\n  --pf-l-flex--spacer--xl: var(--pf-global--spacer--xl);\n  --pf-l-flex--spacer--2xl: var(--pf-global--spacer--2xl);\n  --pf-l-flex--spacer--3xl: var(--pf-global--spacer--3xl);\n  --pf-l-flex--spacer--4xl: var(--pf-global--spacer--4xl);\n  display: var(--pf-l-flex--Display);\n  flex-wrap: var(--pf-l-flex--FlexWrap);\n  align-items: var(--pf-l-flex--AlignItems); }\n  .pf-l-flex:last-child {\n    --pf-l-flex--spacer: 0; }\n\n.pf-l-flex > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer-base);\n  order: var(--pf-l-flex--item--Order);\n  max-width: 100%;\n  margin-right: var(--pf-l-flex--spacer); }\n  @media screen and (min-width: 576px) {\n    .pf-l-flex > * {\n      order: var(--pf-l-flex--item--Order-on-sm, var(--pf-l-flex--item--Order)); } }\n  @media screen and (min-width: 768px) {\n    .pf-l-flex > * {\n      order: var(--pf-l-flex--item--Order-on-md, var(--pf-l-flex--item--Order-on-sm, var(--pf-l-flex--item--Order))); } }\n  @media screen and (min-width: 992px) {\n    .pf-l-flex > * {\n      order: var(--pf-l-flex--item--Order-on-lg, var(--pf-l-flex--item--Order-on-md, var(--pf-l-flex--item--Order-on-sm, var(--pf-l-flex--item--Order)))); } }\n  @media screen and (min-width: 1200px) {\n    .pf-l-flex > * {\n      order: var(--pf-l-flex--item--Order-on-xl, var(--pf-l-flex--item--Order-on-lg, var(--pf-l-flex--item--Order-on-md, var(--pf-l-flex--item--Order-on-sm, var(--pf-l-flex--item--Order))))); } }\n  @media screen and (min-width: 1450px) {\n    .pf-l-flex > * {\n      order: var(--pf-l-flex--item--Order-on-2xl, var(--pf-l-flex--item--Order-on-xl, var(--pf-l-flex--item--Order-on-lg, var(--pf-l-flex--item--Order-on-md, var(--pf-l-flex--item--Order-on-sm, var(--pf-l-flex--item--Order)))))); } }\n  .pf-l-flex > *:last-child {\n    --pf-l-flex--spacer: 0; }\n\n.pf-l-flex.pf-m-flex {\n  display: var(--pf-l-flex--Display); }\n\n.pf-l-flex.pf-m-inline-flex {\n  --pf-l-flex--Display: inline-flex; }\n\n.pf-l-flex.pf-m-column {\n  flex-direction: column;\n  align-items: normal; }\n  .pf-l-flex.pf-m-column > * {\n    margin: 0 0 var(--pf-l-flex--spacer) 0; }\n\n.pf-l-flex.pf-m-column-reverse {\n  flex-direction: column-reverse;\n  align-items: normal; }\n  .pf-l-flex.pf-m-column-reverse > * {\n    margin: var(--pf-l-flex--spacer) 0 0 0; }\n\n.pf-l-flex.pf-m-row {\n  flex-direction: row;\n  align-items: var(--pf-l-flex--m-row--AlignItems); }\n  .pf-l-flex.pf-m-row > * {\n    margin: 0 var(--pf-l-flex--spacer) 0 0; }\n\n.pf-l-flex.pf-m-row-reverse {\n  flex-direction: row-reverse;\n  align-items: var(--pf-l-flex--m-row-reverse--AlignItems); }\n  .pf-l-flex.pf-m-row-reverse > * {\n    margin: 0 0 0 var(--pf-l-flex--spacer); }\n\n.pf-l-flex.pf-m-wrap {\n  flex-wrap: wrap; }\n\n.pf-l-flex.pf-m-wrap-reverse {\n  flex-wrap: wrap-reverse; }\n\n.pf-l-flex.pf-m-nowrap {\n  flex-wrap: nowrap; }\n\n.pf-l-flex.pf-m-justify-content-flex-start {\n  justify-content: flex-start; }\n\n.pf-l-flex.pf-m-justify-content-flex-end {\n  justify-content: flex-end; }\n\n.pf-l-flex.pf-m-justify-content-center {\n  justify-content: center; }\n\n.pf-l-flex.pf-m-justify-content-space-between {\n  justify-content: space-between; }\n\n.pf-l-flex.pf-m-justify-content-space-around {\n  justify-content: space-around; }\n\n.pf-l-flex.pf-m-justify-content-space-evenly {\n  justify-content: space-evenly; }\n\n.pf-l-flex.pf-m-align-items-flex-start {\n  align-items: flex-start; }\n\n.pf-l-flex.pf-m-align-items-flex-end {\n  align-items: flex-end; }\n\n.pf-l-flex.pf-m-align-items-center {\n  align-items: center; }\n\n.pf-l-flex.pf-m-align-items-stretch {\n  align-items: stretch; }\n\n.pf-l-flex.pf-m-align-items-baseline {\n  align-items: baseline; }\n\n.pf-l-flex.pf-m-align-content-flex-start {\n  align-content: flex-start; }\n\n.pf-l-flex.pf-m-align-content-flex-end {\n  align-content: flex-end; }\n\n.pf-l-flex.pf-m-align-content-center {\n  align-content: center; }\n\n.pf-l-flex.pf-m-align-content-stretch {\n  align-content: stretch; }\n\n.pf-l-flex.pf-m-align-content-space-between {\n  align-content: space-between; }\n\n.pf-l-flex.pf-m-align-content-space-around {\n  align-content: space-around; }\n\n.pf-l-flex > .pf-m-align-right {\n  margin-left: auto; }\n\n.pf-l-flex > .pf-m-align-left {\n  margin-left: 0; }\n\n.pf-l-flex > .pf-m-grow {\n  flex-grow: 1; }\n\n.pf-l-flex > .pf-m-shrink {\n  flex-shrink: 1; }\n\n.pf-l-flex > .pf-m-full-width {\n  width: 100%;\n  margin-right: 0; }\n\n.pf-l-flex > .pf-m-flex-1 {\n  flex: 1 0 0; }\n\n.pf-l-flex > .pf-m-flex-2 {\n  flex: 2 0 0; }\n\n.pf-l-flex > .pf-m-flex-3 {\n  flex: 3 0 0; }\n\n.pf-l-flex > .pf-m-flex-4 {\n  flex: 4 0 0; }\n\n.pf-l-flex > .pf-m-flex-default {\n  flex: 0 1 auto; }\n\n.pf-l-flex > .pf-m-flex-none {\n  flex: none; }\n\n.pf-l-flex > .pf-m-align-self-flex-start {\n  align-self: flex-start; }\n\n.pf-l-flex > .pf-m-align-self-flex-end {\n  align-self: flex-end; }\n\n.pf-l-flex > .pf-m-align-self-center {\n  align-self: center; }\n\n.pf-l-flex > .pf-m-align-self-baseline {\n  align-self: baseline; }\n\n.pf-l-flex > .pf-m-align-self-stretch {\n  align-self: stretch; }\n\n@media (min-width: 576px) {\n  .pf-l-flex.pf-m-flex-on-sm {\n    display: var(--pf-l-flex--Display); }\n  .pf-l-flex.pf-m-inline-flex-on-sm {\n    --pf-l-flex--Display: inline-flex; }\n  .pf-l-flex.pf-m-column-on-sm {\n    flex-direction: column;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-on-sm > * {\n      margin: 0 0 var(--pf-l-flex--spacer) 0; }\n  .pf-l-flex.pf-m-column-reverse-on-sm {\n    flex-direction: column-reverse;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-reverse-on-sm > * {\n      margin: var(--pf-l-flex--spacer) 0 0 0; }\n  .pf-l-flex.pf-m-row-on-sm {\n    flex-direction: row;\n    align-items: var(--pf-l-flex--m-row--AlignItems); }\n    .pf-l-flex.pf-m-row-on-sm > * {\n      margin: 0 var(--pf-l-flex--spacer) 0 0; }\n  .pf-l-flex.pf-m-row-reverse-on-sm {\n    flex-direction: row-reverse;\n    align-items: var(--pf-l-flex--m-row-reverse--AlignItems); }\n    .pf-l-flex.pf-m-row-reverse-on-sm > * {\n      margin: 0 0 0 var(--pf-l-flex--spacer); }\n  .pf-l-flex.pf-m-wrap-on-sm {\n    flex-wrap: wrap; }\n  .pf-l-flex.pf-m-wrap-reverse-on-sm {\n    flex-wrap: wrap-reverse; }\n  .pf-l-flex.pf-m-nowrap-on-sm {\n    flex-wrap: nowrap; }\n  .pf-l-flex.pf-m-justify-content-flex-start-on-sm {\n    justify-content: flex-start; }\n  .pf-l-flex.pf-m-justify-content-flex-end-on-sm {\n    justify-content: flex-end; }\n  .pf-l-flex.pf-m-justify-content-center-on-sm {\n    justify-content: center; }\n  .pf-l-flex.pf-m-justify-content-space-between-on-sm {\n    justify-content: space-between; }\n  .pf-l-flex.pf-m-justify-content-space-around-on-sm {\n    justify-content: space-around; }\n  .pf-l-flex.pf-m-justify-content-space-evenly-on-sm {\n    justify-content: space-evenly; }\n  .pf-l-flex.pf-m-align-items-flex-start-on-sm {\n    align-items: flex-start; }\n  .pf-l-flex.pf-m-align-items-flex-end-on-sm {\n    align-items: flex-end; }\n  .pf-l-flex.pf-m-align-items-center-on-sm {\n    align-items: center; }\n  .pf-l-flex.pf-m-align-items-stretch-on-sm {\n    align-items: stretch; }\n  .pf-l-flex.pf-m-align-items-baseline-on-sm {\n    align-items: baseline; }\n  .pf-l-flex.pf-m-align-content-flex-start-on-sm {\n    align-content: flex-start; }\n  .pf-l-flex.pf-m-align-content-flex-end-on-sm {\n    align-content: flex-end; }\n  .pf-l-flex.pf-m-align-content-center-on-sm {\n    align-content: center; }\n  .pf-l-flex.pf-m-align-content-stretch-on-sm {\n    align-content: stretch; }\n  .pf-l-flex.pf-m-align-content-space-between-on-sm {\n    align-content: space-between; }\n  .pf-l-flex.pf-m-align-content-space-around-on-sm {\n    align-content: space-around; }\n  .pf-l-flex > .pf-m-align-right-on-sm {\n    margin-left: auto; }\n  .pf-l-flex > .pf-m-align-left-on-sm {\n    margin-left: 0; }\n  .pf-l-flex > .pf-m-grow-on-sm {\n    flex-grow: 1; }\n  .pf-l-flex > .pf-m-shrink-on-sm {\n    flex-shrink: 1; }\n  .pf-l-flex > .pf-m-full-width-on-sm {\n    width: 100%;\n    margin-right: 0; }\n  .pf-l-flex > .pf-m-flex-1-on-sm {\n    flex: 1 0 0; }\n  .pf-l-flex > .pf-m-flex-2-on-sm {\n    flex: 2 0 0; }\n  .pf-l-flex > .pf-m-flex-3-on-sm {\n    flex: 3 0 0; }\n  .pf-l-flex > .pf-m-flex-4-on-sm {\n    flex: 4 0 0; }\n  .pf-l-flex > .pf-m-flex-default-on-sm {\n    flex: 0 1 auto; }\n  .pf-l-flex > .pf-m-flex-none-on-sm {\n    flex: none; }\n  .pf-l-flex > .pf-m-align-self-flex-start-on-sm {\n    align-self: flex-start; }\n  .pf-l-flex > .pf-m-align-self-flex-end-on-sm {\n    align-self: flex-end; }\n  .pf-l-flex > .pf-m-align-self-center-on-sm {\n    align-self: center; }\n  .pf-l-flex > .pf-m-align-self-baseline-on-sm {\n    align-self: baseline; }\n  .pf-l-flex > .pf-m-align-self-stretch-on-sm {\n    align-self: stretch; } }\n\n@media (min-width: 768px) {\n  .pf-l-flex.pf-m-flex-on-md {\n    display: var(--pf-l-flex--Display); }\n  .pf-l-flex.pf-m-inline-flex-on-md {\n    --pf-l-flex--Display: inline-flex; }\n  .pf-l-flex.pf-m-column-on-md {\n    flex-direction: column;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-on-md > * {\n      margin: 0 0 var(--pf-l-flex--spacer) 0; }\n  .pf-l-flex.pf-m-column-reverse-on-md {\n    flex-direction: column-reverse;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-reverse-on-md > * {\n      margin: var(--pf-l-flex--spacer) 0 0 0; }\n  .pf-l-flex.pf-m-row-on-md {\n    flex-direction: row;\n    align-items: var(--pf-l-flex--m-row--AlignItems); }\n    .pf-l-flex.pf-m-row-on-md > * {\n      margin: 0 var(--pf-l-flex--spacer) 0 0; }\n  .pf-l-flex.pf-m-row-reverse-on-md {\n    flex-direction: row-reverse;\n    align-items: var(--pf-l-flex--m-row-reverse--AlignItems); }\n    .pf-l-flex.pf-m-row-reverse-on-md > * {\n      margin: 0 0 0 var(--pf-l-flex--spacer); }\n  .pf-l-flex.pf-m-wrap-on-md {\n    flex-wrap: wrap; }\n  .pf-l-flex.pf-m-wrap-reverse-on-md {\n    flex-wrap: wrap-reverse; }\n  .pf-l-flex.pf-m-nowrap-on-md {\n    flex-wrap: nowrap; }\n  .pf-l-flex.pf-m-justify-content-flex-start-on-md {\n    justify-content: flex-start; }\n  .pf-l-flex.pf-m-justify-content-flex-end-on-md {\n    justify-content: flex-end; }\n  .pf-l-flex.pf-m-justify-content-center-on-md {\n    justify-content: center; }\n  .pf-l-flex.pf-m-justify-content-space-between-on-md {\n    justify-content: space-between; }\n  .pf-l-flex.pf-m-justify-content-space-around-on-md {\n    justify-content: space-around; }\n  .pf-l-flex.pf-m-justify-content-space-evenly-on-md {\n    justify-content: space-evenly; }\n  .pf-l-flex.pf-m-align-items-flex-start-on-md {\n    align-items: flex-start; }\n  .pf-l-flex.pf-m-align-items-flex-end-on-md {\n    align-items: flex-end; }\n  .pf-l-flex.pf-m-align-items-center-on-md {\n    align-items: center; }\n  .pf-l-flex.pf-m-align-items-stretch-on-md {\n    align-items: stretch; }\n  .pf-l-flex.pf-m-align-items-baseline-on-md {\n    align-items: baseline; }\n  .pf-l-flex.pf-m-align-content-flex-start-on-md {\n    align-content: flex-start; }\n  .pf-l-flex.pf-m-align-content-flex-end-on-md {\n    align-content: flex-end; }\n  .pf-l-flex.pf-m-align-content-center-on-md {\n    align-content: center; }\n  .pf-l-flex.pf-m-align-content-stretch-on-md {\n    align-content: stretch; }\n  .pf-l-flex.pf-m-align-content-space-between-on-md {\n    align-content: space-between; }\n  .pf-l-flex.pf-m-align-content-space-around-on-md {\n    align-content: space-around; }\n  .pf-l-flex > .pf-m-align-right-on-md {\n    margin-left: auto; }\n  .pf-l-flex > .pf-m-align-left-on-md {\n    margin-left: 0; }\n  .pf-l-flex > .pf-m-grow-on-md {\n    flex-grow: 1; }\n  .pf-l-flex > .pf-m-shrink-on-md {\n    flex-shrink: 1; }\n  .pf-l-flex > .pf-m-full-width-on-md {\n    width: 100%;\n    margin-right: 0; }\n  .pf-l-flex > .pf-m-flex-1-on-md {\n    flex: 1 0 0; }\n  .pf-l-flex > .pf-m-flex-2-on-md {\n    flex: 2 0 0; }\n  .pf-l-flex > .pf-m-flex-3-on-md {\n    flex: 3 0 0; }\n  .pf-l-flex > .pf-m-flex-4-on-md {\n    flex: 4 0 0; }\n  .pf-l-flex > .pf-m-flex-default-on-md {\n    flex: 0 1 auto; }\n  .pf-l-flex > .pf-m-flex-none-on-md {\n    flex: none; }\n  .pf-l-flex > .pf-m-align-self-flex-start-on-md {\n    align-self: flex-start; }\n  .pf-l-flex > .pf-m-align-self-flex-end-on-md {\n    align-self: flex-end; }\n  .pf-l-flex > .pf-m-align-self-center-on-md {\n    align-self: center; }\n  .pf-l-flex > .pf-m-align-self-baseline-on-md {\n    align-self: baseline; }\n  .pf-l-flex > .pf-m-align-self-stretch-on-md {\n    align-self: stretch; } }\n\n@media (min-width: 992px) {\n  .pf-l-flex.pf-m-flex-on-lg {\n    display: var(--pf-l-flex--Display); }\n  .pf-l-flex.pf-m-inline-flex-on-lg {\n    --pf-l-flex--Display: inline-flex; }\n  .pf-l-flex.pf-m-column-on-lg {\n    flex-direction: column;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-on-lg > * {\n      margin: 0 0 var(--pf-l-flex--spacer) 0; }\n  .pf-l-flex.pf-m-column-reverse-on-lg {\n    flex-direction: column-reverse;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-reverse-on-lg > * {\n      margin: var(--pf-l-flex--spacer) 0 0 0; }\n  .pf-l-flex.pf-m-row-on-lg {\n    flex-direction: row;\n    align-items: var(--pf-l-flex--m-row--AlignItems); }\n    .pf-l-flex.pf-m-row-on-lg > * {\n      margin: 0 var(--pf-l-flex--spacer) 0 0; }\n  .pf-l-flex.pf-m-row-reverse-on-lg {\n    flex-direction: row-reverse;\n    align-items: var(--pf-l-flex--m-row-reverse--AlignItems); }\n    .pf-l-flex.pf-m-row-reverse-on-lg > * {\n      margin: 0 0 0 var(--pf-l-flex--spacer); }\n  .pf-l-flex.pf-m-wrap-on-lg {\n    flex-wrap: wrap; }\n  .pf-l-flex.pf-m-wrap-reverse-on-lg {\n    flex-wrap: wrap-reverse; }\n  .pf-l-flex.pf-m-nowrap-on-lg {\n    flex-wrap: nowrap; }\n  .pf-l-flex.pf-m-justify-content-flex-start-on-lg {\n    justify-content: flex-start; }\n  .pf-l-flex.pf-m-justify-content-flex-end-on-lg {\n    justify-content: flex-end; }\n  .pf-l-flex.pf-m-justify-content-center-on-lg {\n    justify-content: center; }\n  .pf-l-flex.pf-m-justify-content-space-between-on-lg {\n    justify-content: space-between; }\n  .pf-l-flex.pf-m-justify-content-space-around-on-lg {\n    justify-content: space-around; }\n  .pf-l-flex.pf-m-justify-content-space-evenly-on-lg {\n    justify-content: space-evenly; }\n  .pf-l-flex.pf-m-align-items-flex-start-on-lg {\n    align-items: flex-start; }\n  .pf-l-flex.pf-m-align-items-flex-end-on-lg {\n    align-items: flex-end; }\n  .pf-l-flex.pf-m-align-items-center-on-lg {\n    align-items: center; }\n  .pf-l-flex.pf-m-align-items-stretch-on-lg {\n    align-items: stretch; }\n  .pf-l-flex.pf-m-align-items-baseline-on-lg {\n    align-items: baseline; }\n  .pf-l-flex.pf-m-align-content-flex-start-on-lg {\n    align-content: flex-start; }\n  .pf-l-flex.pf-m-align-content-flex-end-on-lg {\n    align-content: flex-end; }\n  .pf-l-flex.pf-m-align-content-center-on-lg {\n    align-content: center; }\n  .pf-l-flex.pf-m-align-content-stretch-on-lg {\n    align-content: stretch; }\n  .pf-l-flex.pf-m-align-content-space-between-on-lg {\n    align-content: space-between; }\n  .pf-l-flex.pf-m-align-content-space-around-on-lg {\n    align-content: space-around; }\n  .pf-l-flex > .pf-m-align-right-on-lg {\n    margin-left: auto; }\n  .pf-l-flex > .pf-m-align-left-on-lg {\n    margin-left: 0; }\n  .pf-l-flex > .pf-m-grow-on-lg {\n    flex-grow: 1; }\n  .pf-l-flex > .pf-m-shrink-on-lg {\n    flex-shrink: 1; }\n  .pf-l-flex > .pf-m-full-width-on-lg {\n    width: 100%;\n    margin-right: 0; }\n  .pf-l-flex > .pf-m-flex-1-on-lg {\n    flex: 1 0 0; }\n  .pf-l-flex > .pf-m-flex-2-on-lg {\n    flex: 2 0 0; }\n  .pf-l-flex > .pf-m-flex-3-on-lg {\n    flex: 3 0 0; }\n  .pf-l-flex > .pf-m-flex-4-on-lg {\n    flex: 4 0 0; }\n  .pf-l-flex > .pf-m-flex-default-on-lg {\n    flex: 0 1 auto; }\n  .pf-l-flex > .pf-m-flex-none-on-lg {\n    flex: none; }\n  .pf-l-flex > .pf-m-align-self-flex-start-on-lg {\n    align-self: flex-start; }\n  .pf-l-flex > .pf-m-align-self-flex-end-on-lg {\n    align-self: flex-end; }\n  .pf-l-flex > .pf-m-align-self-center-on-lg {\n    align-self: center; }\n  .pf-l-flex > .pf-m-align-self-baseline-on-lg {\n    align-self: baseline; }\n  .pf-l-flex > .pf-m-align-self-stretch-on-lg {\n    align-self: stretch; } }\n\n@media (min-width: 1200px) {\n  .pf-l-flex.pf-m-flex-on-xl {\n    display: var(--pf-l-flex--Display); }\n  .pf-l-flex.pf-m-inline-flex-on-xl {\n    --pf-l-flex--Display: inline-flex; }\n  .pf-l-flex.pf-m-column-on-xl {\n    flex-direction: column;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-on-xl > * {\n      margin: 0 0 var(--pf-l-flex--spacer) 0; }\n  .pf-l-flex.pf-m-column-reverse-on-xl {\n    flex-direction: column-reverse;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-reverse-on-xl > * {\n      margin: var(--pf-l-flex--spacer) 0 0 0; }\n  .pf-l-flex.pf-m-row-on-xl {\n    flex-direction: row;\n    align-items: var(--pf-l-flex--m-row--AlignItems); }\n    .pf-l-flex.pf-m-row-on-xl > * {\n      margin: 0 var(--pf-l-flex--spacer) 0 0; }\n  .pf-l-flex.pf-m-row-reverse-on-xl {\n    flex-direction: row-reverse;\n    align-items: var(--pf-l-flex--m-row-reverse--AlignItems); }\n    .pf-l-flex.pf-m-row-reverse-on-xl > * {\n      margin: 0 0 0 var(--pf-l-flex--spacer); }\n  .pf-l-flex.pf-m-wrap-on-xl {\n    flex-wrap: wrap; }\n  .pf-l-flex.pf-m-wrap-reverse-on-xl {\n    flex-wrap: wrap-reverse; }\n  .pf-l-flex.pf-m-nowrap-on-xl {\n    flex-wrap: nowrap; }\n  .pf-l-flex.pf-m-justify-content-flex-start-on-xl {\n    justify-content: flex-start; }\n  .pf-l-flex.pf-m-justify-content-flex-end-on-xl {\n    justify-content: flex-end; }\n  .pf-l-flex.pf-m-justify-content-center-on-xl {\n    justify-content: center; }\n  .pf-l-flex.pf-m-justify-content-space-between-on-xl {\n    justify-content: space-between; }\n  .pf-l-flex.pf-m-justify-content-space-around-on-xl {\n    justify-content: space-around; }\n  .pf-l-flex.pf-m-justify-content-space-evenly-on-xl {\n    justify-content: space-evenly; }\n  .pf-l-flex.pf-m-align-items-flex-start-on-xl {\n    align-items: flex-start; }\n  .pf-l-flex.pf-m-align-items-flex-end-on-xl {\n    align-items: flex-end; }\n  .pf-l-flex.pf-m-align-items-center-on-xl {\n    align-items: center; }\n  .pf-l-flex.pf-m-align-items-stretch-on-xl {\n    align-items: stretch; }\n  .pf-l-flex.pf-m-align-items-baseline-on-xl {\n    align-items: baseline; }\n  .pf-l-flex.pf-m-align-content-flex-start-on-xl {\n    align-content: flex-start; }\n  .pf-l-flex.pf-m-align-content-flex-end-on-xl {\n    align-content: flex-end; }\n  .pf-l-flex.pf-m-align-content-center-on-xl {\n    align-content: center; }\n  .pf-l-flex.pf-m-align-content-stretch-on-xl {\n    align-content: stretch; }\n  .pf-l-flex.pf-m-align-content-space-between-on-xl {\n    align-content: space-between; }\n  .pf-l-flex.pf-m-align-content-space-around-on-xl {\n    align-content: space-around; }\n  .pf-l-flex > .pf-m-align-right-on-xl {\n    margin-left: auto; }\n  .pf-l-flex > .pf-m-align-left-on-xl {\n    margin-left: 0; }\n  .pf-l-flex > .pf-m-grow-on-xl {\n    flex-grow: 1; }\n  .pf-l-flex > .pf-m-shrink-on-xl {\n    flex-shrink: 1; }\n  .pf-l-flex > .pf-m-full-width-on-xl {\n    width: 100%;\n    margin-right: 0; }\n  .pf-l-flex > .pf-m-flex-1-on-xl {\n    flex: 1 0 0; }\n  .pf-l-flex > .pf-m-flex-2-on-xl {\n    flex: 2 0 0; }\n  .pf-l-flex > .pf-m-flex-3-on-xl {\n    flex: 3 0 0; }\n  .pf-l-flex > .pf-m-flex-4-on-xl {\n    flex: 4 0 0; }\n  .pf-l-flex > .pf-m-flex-default-on-xl {\n    flex: 0 1 auto; }\n  .pf-l-flex > .pf-m-flex-none-on-xl {\n    flex: none; }\n  .pf-l-flex > .pf-m-align-self-flex-start-on-xl {\n    align-self: flex-start; }\n  .pf-l-flex > .pf-m-align-self-flex-end-on-xl {\n    align-self: flex-end; }\n  .pf-l-flex > .pf-m-align-self-center-on-xl {\n    align-self: center; }\n  .pf-l-flex > .pf-m-align-self-baseline-on-xl {\n    align-self: baseline; }\n  .pf-l-flex > .pf-m-align-self-stretch-on-xl {\n    align-self: stretch; } }\n\n@media (min-width: 1450px) {\n  .pf-l-flex.pf-m-flex-on-2xl {\n    display: var(--pf-l-flex--Display); }\n  .pf-l-flex.pf-m-inline-flex-on-2xl {\n    --pf-l-flex--Display: inline-flex; }\n  .pf-l-flex.pf-m-column-on-2xl {\n    flex-direction: column;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-on-2xl > * {\n      margin: 0 0 var(--pf-l-flex--spacer) 0; }\n  .pf-l-flex.pf-m-column-reverse-on-2xl {\n    flex-direction: column-reverse;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-reverse-on-2xl > * {\n      margin: var(--pf-l-flex--spacer) 0 0 0; }\n  .pf-l-flex.pf-m-row-on-2xl {\n    flex-direction: row;\n    align-items: var(--pf-l-flex--m-row--AlignItems); }\n    .pf-l-flex.pf-m-row-on-2xl > * {\n      margin: 0 var(--pf-l-flex--spacer) 0 0; }\n  .pf-l-flex.pf-m-row-reverse-on-2xl {\n    flex-direction: row-reverse;\n    align-items: var(--pf-l-flex--m-row-reverse--AlignItems); }\n    .pf-l-flex.pf-m-row-reverse-on-2xl > * {\n      margin: 0 0 0 var(--pf-l-flex--spacer); }\n  .pf-l-flex.pf-m-wrap-on-2xl {\n    flex-wrap: wrap; }\n  .pf-l-flex.pf-m-wrap-reverse-on-2xl {\n    flex-wrap: wrap-reverse; }\n  .pf-l-flex.pf-m-nowrap-on-2xl {\n    flex-wrap: nowrap; }\n  .pf-l-flex.pf-m-justify-content-flex-start-on-2xl {\n    justify-content: flex-start; }\n  .pf-l-flex.pf-m-justify-content-flex-end-on-2xl {\n    justify-content: flex-end; }\n  .pf-l-flex.pf-m-justify-content-center-on-2xl {\n    justify-content: center; }\n  .pf-l-flex.pf-m-justify-content-space-between-on-2xl {\n    justify-content: space-between; }\n  .pf-l-flex.pf-m-justify-content-space-around-on-2xl {\n    justify-content: space-around; }\n  .pf-l-flex.pf-m-justify-content-space-evenly-on-2xl {\n    justify-content: space-evenly; }\n  .pf-l-flex.pf-m-align-items-flex-start-on-2xl {\n    align-items: flex-start; }\n  .pf-l-flex.pf-m-align-items-flex-end-on-2xl {\n    align-items: flex-end; }\n  .pf-l-flex.pf-m-align-items-center-on-2xl {\n    align-items: center; }\n  .pf-l-flex.pf-m-align-items-stretch-on-2xl {\n    align-items: stretch; }\n  .pf-l-flex.pf-m-align-items-baseline-on-2xl {\n    align-items: baseline; }\n  .pf-l-flex.pf-m-align-content-flex-start-on-2xl {\n    align-content: flex-start; }\n  .pf-l-flex.pf-m-align-content-flex-end-on-2xl {\n    align-content: flex-end; }\n  .pf-l-flex.pf-m-align-content-center-on-2xl {\n    align-content: center; }\n  .pf-l-flex.pf-m-align-content-stretch-on-2xl {\n    align-content: stretch; }\n  .pf-l-flex.pf-m-align-content-space-between-on-2xl {\n    align-content: space-between; }\n  .pf-l-flex.pf-m-align-content-space-around-on-2xl {\n    align-content: space-around; }\n  .pf-l-flex > .pf-m-align-right-on-2xl {\n    margin-left: auto; }\n  .pf-l-flex > .pf-m-align-left-on-2xl {\n    margin-left: 0; }\n  .pf-l-flex > .pf-m-grow-on-2xl {\n    flex-grow: 1; }\n  .pf-l-flex > .pf-m-shrink-on-2xl {\n    flex-shrink: 1; }\n  .pf-l-flex > .pf-m-full-width-on-2xl {\n    width: 100%;\n    margin-right: 0; }\n  .pf-l-flex > .pf-m-flex-1-on-2xl {\n    flex: 1 0 0; }\n  .pf-l-flex > .pf-m-flex-2-on-2xl {\n    flex: 2 0 0; }\n  .pf-l-flex > .pf-m-flex-3-on-2xl {\n    flex: 3 0 0; }\n  .pf-l-flex > .pf-m-flex-4-on-2xl {\n    flex: 4 0 0; }\n  .pf-l-flex > .pf-m-flex-default-on-2xl {\n    flex: 0 1 auto; }\n  .pf-l-flex > .pf-m-flex-none-on-2xl {\n    flex: none; }\n  .pf-l-flex > .pf-m-align-self-flex-start-on-2xl {\n    align-self: flex-start; }\n  .pf-l-flex > .pf-m-align-self-flex-end-on-2xl {\n    align-self: flex-end; }\n  .pf-l-flex > .pf-m-align-self-center-on-2xl {\n    align-self: center; }\n  .pf-l-flex > .pf-m-align-self-baseline-on-2xl {\n    align-self: baseline; }\n  .pf-l-flex > .pf-m-align-self-stretch-on-2xl {\n    align-self: stretch; } }\n\n.pf-l-flex.pf-m-space-items-none > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n\n.pf-l-flex.pf-m-space-items-none > :last-child {\n  --pf-l-flex--spacer: 0; }\n\n.pf-l-flex.pf-m-space-items-xs > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n\n.pf-l-flex.pf-m-space-items-xs > :last-child {\n  --pf-l-flex--spacer: 0; }\n\n.pf-l-flex.pf-m-space-items-sm > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n\n.pf-l-flex.pf-m-space-items-sm > :last-child {\n  --pf-l-flex--spacer: 0; }\n\n.pf-l-flex.pf-m-space-items-md > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n\n.pf-l-flex.pf-m-space-items-md > :last-child {\n  --pf-l-flex--spacer: 0; }\n\n.pf-l-flex.pf-m-space-items-lg > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n\n.pf-l-flex.pf-m-space-items-lg > :last-child {\n  --pf-l-flex--spacer: 0; }\n\n.pf-l-flex.pf-m-space-items-xl > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n\n.pf-l-flex.pf-m-space-items-xl > :last-child {\n  --pf-l-flex--spacer: 0; }\n\n.pf-l-flex.pf-m-space-items-2xl > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n\n.pf-l-flex.pf-m-space-items-2xl > :last-child {\n  --pf-l-flex--spacer: 0; }\n\n.pf-l-flex.pf-m-space-items-3xl > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n\n.pf-l-flex.pf-m-space-items-3xl > :last-child {\n  --pf-l-flex--spacer: 0; }\n\n.pf-l-flex.pf-m-space-items-4xl > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n\n.pf-l-flex.pf-m-space-items-4xl > :last-child {\n  --pf-l-flex--spacer: 0; }\n\n@media (min-width: 576px) {\n  .pf-l-flex.pf-m-space-items-none-on-sm > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex.pf-m-space-items-none-on-sm > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xs-on-sm > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex.pf-m-space-items-xs-on-sm > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-sm-on-sm > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex.pf-m-space-items-sm-on-sm > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-md-on-sm > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex.pf-m-space-items-md-on-sm > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-lg-on-sm > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex.pf-m-space-items-lg-on-sm > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xl-on-sm > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex.pf-m-space-items-xl-on-sm > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-2xl-on-sm > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex.pf-m-space-items-2xl-on-sm > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-3xl-on-sm > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex.pf-m-space-items-3xl-on-sm > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-4xl-on-sm > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n  .pf-l-flex.pf-m-space-items-4xl-on-sm > :last-child {\n    --pf-l-flex--spacer: 0; } }\n\n@media (min-width: 768px) {\n  .pf-l-flex.pf-m-space-items-none-on-md > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex.pf-m-space-items-none-on-md > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xs-on-md > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex.pf-m-space-items-xs-on-md > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-sm-on-md > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex.pf-m-space-items-sm-on-md > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-md-on-md > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex.pf-m-space-items-md-on-md > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-lg-on-md > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex.pf-m-space-items-lg-on-md > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xl-on-md > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex.pf-m-space-items-xl-on-md > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-2xl-on-md > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex.pf-m-space-items-2xl-on-md > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-3xl-on-md > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex.pf-m-space-items-3xl-on-md > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-4xl-on-md > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n  .pf-l-flex.pf-m-space-items-4xl-on-md > :last-child {\n    --pf-l-flex--spacer: 0; } }\n\n@media (min-width: 992px) {\n  .pf-l-flex.pf-m-space-items-none-on-lg > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex.pf-m-space-items-none-on-lg > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xs-on-lg > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex.pf-m-space-items-xs-on-lg > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-sm-on-lg > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex.pf-m-space-items-sm-on-lg > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-md-on-lg > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex.pf-m-space-items-md-on-lg > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-lg-on-lg > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex.pf-m-space-items-lg-on-lg > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xl-on-lg > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex.pf-m-space-items-xl-on-lg > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-2xl-on-lg > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex.pf-m-space-items-2xl-on-lg > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-3xl-on-lg > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex.pf-m-space-items-3xl-on-lg > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-4xl-on-lg > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n  .pf-l-flex.pf-m-space-items-4xl-on-lg > :last-child {\n    --pf-l-flex--spacer: 0; } }\n\n@media (min-width: 1200px) {\n  .pf-l-flex.pf-m-space-items-none-on-xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex.pf-m-space-items-none-on-xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xs-on-xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex.pf-m-space-items-xs-on-xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-sm-on-xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex.pf-m-space-items-sm-on-xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-md-on-xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex.pf-m-space-items-md-on-xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-lg-on-xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex.pf-m-space-items-lg-on-xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xl-on-xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex.pf-m-space-items-xl-on-xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-2xl-on-xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex.pf-m-space-items-2xl-on-xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-3xl-on-xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex.pf-m-space-items-3xl-on-xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-4xl-on-xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n  .pf-l-flex.pf-m-space-items-4xl-on-xl > :last-child {\n    --pf-l-flex--spacer: 0; } }\n\n@media (min-width: 1450px) {\n  .pf-l-flex.pf-m-space-items-none-on-2xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex.pf-m-space-items-none-on-2xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xs-on-2xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex.pf-m-space-items-xs-on-2xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-sm-on-2xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex.pf-m-space-items-sm-on-2xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-md-on-2xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex.pf-m-space-items-md-on-2xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-lg-on-2xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex.pf-m-space-items-lg-on-2xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xl-on-2xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex.pf-m-space-items-xl-on-2xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-2xl-on-2xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex.pf-m-space-items-2xl-on-2xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-3xl-on-2xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex.pf-m-space-items-3xl-on-2xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-4xl-on-2xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n  .pf-l-flex.pf-m-space-items-4xl-on-2xl > :last-child {\n    --pf-l-flex--spacer: 0; } }\n\n.pf-l-flex .pf-m-spacer-none {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex .pf-m-spacer-none:last-child {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n\n.pf-l-flex .pf-m-spacer-xs {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex .pf-m-spacer-xs:last-child {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n\n.pf-l-flex .pf-m-spacer-sm {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex .pf-m-spacer-sm:last-child {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n\n.pf-l-flex .pf-m-spacer-md {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex .pf-m-spacer-md:last-child {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n\n.pf-l-flex .pf-m-spacer-lg {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex .pf-m-spacer-lg:last-child {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n\n.pf-l-flex .pf-m-spacer-xl {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex .pf-m-spacer-xl:last-child {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n\n.pf-l-flex .pf-m-spacer-2xl {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex .pf-m-spacer-2xl:last-child {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n\n.pf-l-flex .pf-m-spacer-3xl {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex .pf-m-spacer-3xl:last-child {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n\n.pf-l-flex .pf-m-spacer-4xl {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n  .pf-l-flex .pf-m-spacer-4xl:last-child {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n\n@media (min-width: 576px) {\n  .pf-l-flex .pf-m-spacer-none-on-sm {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n    .pf-l-flex .pf-m-spacer-none-on-sm:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex .pf-m-spacer-xs-on-sm {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n    .pf-l-flex .pf-m-spacer-xs-on-sm:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex .pf-m-spacer-sm-on-sm {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n    .pf-l-flex .pf-m-spacer-sm-on-sm:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex .pf-m-spacer-md-on-sm {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n    .pf-l-flex .pf-m-spacer-md-on-sm:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex .pf-m-spacer-lg-on-sm {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n    .pf-l-flex .pf-m-spacer-lg-on-sm:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex .pf-m-spacer-xl-on-sm {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n    .pf-l-flex .pf-m-spacer-xl-on-sm:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex .pf-m-spacer-2xl-on-sm {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n    .pf-l-flex .pf-m-spacer-2xl-on-sm:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex .pf-m-spacer-3xl-on-sm {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n    .pf-l-flex .pf-m-spacer-3xl-on-sm:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex .pf-m-spacer-4xl-on-sm {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n    .pf-l-flex .pf-m-spacer-4xl-on-sm:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); } }\n\n@media (min-width: 768px) {\n  .pf-l-flex .pf-m-spacer-none-on-md {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n    .pf-l-flex .pf-m-spacer-none-on-md:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex .pf-m-spacer-xs-on-md {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n    .pf-l-flex .pf-m-spacer-xs-on-md:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex .pf-m-spacer-sm-on-md {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n    .pf-l-flex .pf-m-spacer-sm-on-md:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex .pf-m-spacer-md-on-md {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n    .pf-l-flex .pf-m-spacer-md-on-md:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex .pf-m-spacer-lg-on-md {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n    .pf-l-flex .pf-m-spacer-lg-on-md:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex .pf-m-spacer-xl-on-md {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n    .pf-l-flex .pf-m-spacer-xl-on-md:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex .pf-m-spacer-2xl-on-md {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n    .pf-l-flex .pf-m-spacer-2xl-on-md:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex .pf-m-spacer-3xl-on-md {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n    .pf-l-flex .pf-m-spacer-3xl-on-md:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex .pf-m-spacer-4xl-on-md {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n    .pf-l-flex .pf-m-spacer-4xl-on-md:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); } }\n\n@media (min-width: 992px) {\n  .pf-l-flex .pf-m-spacer-none-on-lg {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n    .pf-l-flex .pf-m-spacer-none-on-lg:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex .pf-m-spacer-xs-on-lg {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n    .pf-l-flex .pf-m-spacer-xs-on-lg:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex .pf-m-spacer-sm-on-lg {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n    .pf-l-flex .pf-m-spacer-sm-on-lg:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex .pf-m-spacer-md-on-lg {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n    .pf-l-flex .pf-m-spacer-md-on-lg:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex .pf-m-spacer-lg-on-lg {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n    .pf-l-flex .pf-m-spacer-lg-on-lg:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex .pf-m-spacer-xl-on-lg {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n    .pf-l-flex .pf-m-spacer-xl-on-lg:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex .pf-m-spacer-2xl-on-lg {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n    .pf-l-flex .pf-m-spacer-2xl-on-lg:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex .pf-m-spacer-3xl-on-lg {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n    .pf-l-flex .pf-m-spacer-3xl-on-lg:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex .pf-m-spacer-4xl-on-lg {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n    .pf-l-flex .pf-m-spacer-4xl-on-lg:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); } }\n\n@media (min-width: 1200px) {\n  .pf-l-flex .pf-m-spacer-none-on-xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n    .pf-l-flex .pf-m-spacer-none-on-xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex .pf-m-spacer-xs-on-xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n    .pf-l-flex .pf-m-spacer-xs-on-xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex .pf-m-spacer-sm-on-xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n    .pf-l-flex .pf-m-spacer-sm-on-xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex .pf-m-spacer-md-on-xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n    .pf-l-flex .pf-m-spacer-md-on-xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex .pf-m-spacer-lg-on-xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n    .pf-l-flex .pf-m-spacer-lg-on-xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex .pf-m-spacer-xl-on-xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n    .pf-l-flex .pf-m-spacer-xl-on-xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex .pf-m-spacer-2xl-on-xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n    .pf-l-flex .pf-m-spacer-2xl-on-xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex .pf-m-spacer-3xl-on-xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n    .pf-l-flex .pf-m-spacer-3xl-on-xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex .pf-m-spacer-4xl-on-xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n    .pf-l-flex .pf-m-spacer-4xl-on-xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); } }\n\n@media (min-width: 1450px) {\n  .pf-l-flex .pf-m-spacer-none-on-2xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n    .pf-l-flex .pf-m-spacer-none-on-2xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex .pf-m-spacer-xs-on-2xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n    .pf-l-flex .pf-m-spacer-xs-on-2xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex .pf-m-spacer-sm-on-2xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n    .pf-l-flex .pf-m-spacer-sm-on-2xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex .pf-m-spacer-md-on-2xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n    .pf-l-flex .pf-m-spacer-md-on-2xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex .pf-m-spacer-lg-on-2xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n    .pf-l-flex .pf-m-spacer-lg-on-2xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex .pf-m-spacer-xl-on-2xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n    .pf-l-flex .pf-m-spacer-xl-on-2xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex .pf-m-spacer-2xl-on-2xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n    .pf-l-flex .pf-m-spacer-2xl-on-2xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex .pf-m-spacer-3xl-on-2xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n    .pf-l-flex .pf-m-spacer-3xl-on-2xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex .pf-m-spacer-4xl-on-2xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n    .pf-l-flex .pf-m-spacer-4xl-on-2xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); } }\n\n.pf-l-gallery {\n  --pf-l-gallery--m-gutter--GridGap: var(--pf-global--gutter);\n  --pf-l-gallery--GridTemplateColumns--min: 250px;\n  --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min);\n  --pf-l-gallery--GridTemplateColumns: repeat(auto-fill, minmax(var(--pf-l-gallery--GridTemplateColumns--minmax--min), 1fr));\n  --pf-l-gallery--GridTemplateRows: auto;\n  display: grid;\n  grid-template-columns: var(--pf-l-gallery--GridTemplateColumns);\n  grid-template-rows: var(--pf-l-gallery--GridTemplateRows);\n  --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min); }\n  .pf-l-gallery.pf-m-gutter {\n    grid-gap: var(--pf-l-gallery--m-gutter--GridGap); }\n  @media (min-width: 576px) {\n    .pf-l-gallery {\n      --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min)); } }\n  @media (min-width: 768px) {\n    .pf-l-gallery {\n      --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-md, var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min))); } }\n  @media (min-width: 992px) {\n    .pf-l-gallery {\n      --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-lg, var(--pf-l-gallery--GridTemplateColumns--min-on-md, var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min)))); } }\n  @media (min-width: 1200px) {\n    .pf-l-gallery {\n      --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-xl, var(--pf-l-gallery--GridTemplateColumns--min-on-lg, var(--pf-l-gallery--GridTemplateColumns--min-on-md, var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min))))); } }\n  @media (min-width: 1450px) {\n    .pf-l-gallery {\n      --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-2xl, var(--pf-l-gallery--GridTemplateColumns--min-on-xl, var(--pf-l-gallery--GridTemplateColumns--min-on-lg, var(--pf-l-gallery--GridTemplateColumns--min-on-md, var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min)))))); } }\n\n.pf-l-grid {\n  --pf-l-grid--m-gutter--GridGap: var(--pf-global--gutter);\n  --pf-l-grid__item--GridColumnStart: auto;\n  --pf-l-grid__item--GridColumnEnd: span 12;\n  --pf-l-grid--item--Order: 0;\n  display: grid;\n  grid-template-columns: repeat(12, [col-start] 1fr); }\n  .pf-l-grid > *,\n  .pf-l-grid .pf-l-grid__item {\n    min-width: 0;\n    min-height: 0;\n    grid-column-start: var(--pf-l-grid__item--GridColumnStart);\n    grid-column-end: var(--pf-l-grid__item--GridColumnEnd);\n    order: var(--pf-l-grid--item--Order); }\n    @media (min-width: 576px) {\n      .pf-l-grid > *,\n      .pf-l-grid .pf-l-grid__item {\n        order: var(--pf-l-grid--item--Order-on-sm, var(--pf-l-grid--item--Order)); } }\n    @media (min-width: 768px) {\n      .pf-l-grid > *,\n      .pf-l-grid .pf-l-grid__item {\n        order: var(--pf-l-grid--item--Order-on-md, var(--pf-l-grid--item--Order-on-sm, var(--pf-l-grid--item--Order))); } }\n    @media (min-width: 992px) {\n      .pf-l-grid > *,\n      .pf-l-grid .pf-l-grid__item {\n        order: var(--pf-l-grid--item--Order-on-lg, var(--pf-l-grid--item--Order-on-md, var(--pf-l-grid--item--Order-on-sm, var(--pf-l-grid--item--Order)))); } }\n    @media (min-width: 1200px) {\n      .pf-l-grid > *,\n      .pf-l-grid .pf-l-grid__item {\n        order: var(--pf-l-grid--item--Order-on-xl, var(--pf-l-grid--item--Order-on-lg, var(--pf-l-grid--item--Order-on-md, var(--pf-l-grid--item--Order-on-sm, var(--pf-l-grid--item--Order))))); } }\n    @media (min-width: 1450px) {\n      .pf-l-grid > *,\n      .pf-l-grid .pf-l-grid__item {\n        order: var(--pf-l-grid--item--Order-on-2xl, var(--pf-l-grid--item--Order-on-xl, var(--pf-l-grid--item--Order-on-lg, var(--pf-l-grid--item--Order-on-md, var(--pf-l-grid--item--Order-on-sm, var(--pf-l-grid--item--Order)))))); } }\n  .pf-l-grid.pf-m-all-1-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 1; }\n  .pf-l-grid.pf-m-all-2-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 2; }\n  .pf-l-grid.pf-m-all-3-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 3; }\n  .pf-l-grid.pf-m-all-4-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 4; }\n  .pf-l-grid.pf-m-all-5-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 5; }\n  .pf-l-grid.pf-m-all-6-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 6; }\n  .pf-l-grid.pf-m-all-7-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 7; }\n  .pf-l-grid.pf-m-all-8-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 8; }\n  .pf-l-grid.pf-m-all-9-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 9; }\n  .pf-l-grid.pf-m-all-10-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 10; }\n  .pf-l-grid.pf-m-all-11-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 11; }\n  .pf-l-grid.pf-m-all-12-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 12; }\n  @media screen and (min-width: 576px) {\n    .pf-l-grid.pf-m-all-1-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid.pf-m-all-2-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid.pf-m-all-3-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid.pf-m-all-4-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid.pf-m-all-5-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid.pf-m-all-6-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid.pf-m-all-7-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid.pf-m-all-8-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid.pf-m-all-9-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid.pf-m-all-10-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid.pf-m-all-11-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid.pf-m-all-12-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 12; } }\n  @media screen and (min-width: 768px) {\n    .pf-l-grid.pf-m-all-1-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid.pf-m-all-2-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid.pf-m-all-3-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid.pf-m-all-4-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid.pf-m-all-5-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid.pf-m-all-6-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid.pf-m-all-7-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid.pf-m-all-8-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid.pf-m-all-9-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid.pf-m-all-10-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid.pf-m-all-11-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid.pf-m-all-12-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 12; } }\n  @media screen and (min-width: 992px) {\n    .pf-l-grid.pf-m-all-1-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid.pf-m-all-2-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid.pf-m-all-3-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid.pf-m-all-4-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid.pf-m-all-5-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid.pf-m-all-6-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid.pf-m-all-7-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid.pf-m-all-8-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid.pf-m-all-9-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid.pf-m-all-10-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid.pf-m-all-11-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid.pf-m-all-12-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 12; } }\n  @media screen and (min-width: 1200px) {\n    .pf-l-grid.pf-m-all-1-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid.pf-m-all-2-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid.pf-m-all-3-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid.pf-m-all-4-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid.pf-m-all-5-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid.pf-m-all-6-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid.pf-m-all-7-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid.pf-m-all-8-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid.pf-m-all-9-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid.pf-m-all-10-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid.pf-m-all-11-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid.pf-m-all-12-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 12; } }\n  @media screen and (min-width: 1450px) {\n    .pf-l-grid.pf-m-all-1-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid.pf-m-all-2-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid.pf-m-all-3-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid.pf-m-all-4-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid.pf-m-all-5-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid.pf-m-all-6-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid.pf-m-all-7-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid.pf-m-all-8-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid.pf-m-all-9-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid.pf-m-all-10-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid.pf-m-all-11-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid.pf-m-all-12-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 12; } }\n  .pf-l-grid > .pf-m-1-col {\n    --pf-l-grid__item--GridColumnEnd: span 1; }\n  .pf-l-grid > .pf-m-2-col {\n    --pf-l-grid__item--GridColumnEnd: span 2; }\n  .pf-l-grid > .pf-m-3-col {\n    --pf-l-grid__item--GridColumnEnd: span 3; }\n  .pf-l-grid > .pf-m-4-col {\n    --pf-l-grid__item--GridColumnEnd: span 4; }\n  .pf-l-grid > .pf-m-5-col {\n    --pf-l-grid__item--GridColumnEnd: span 5; }\n  .pf-l-grid > .pf-m-6-col {\n    --pf-l-grid__item--GridColumnEnd: span 6; }\n  .pf-l-grid > .pf-m-7-col {\n    --pf-l-grid__item--GridColumnEnd: span 7; }\n  .pf-l-grid > .pf-m-8-col {\n    --pf-l-grid__item--GridColumnEnd: span 8; }\n  .pf-l-grid > .pf-m-9-col {\n    --pf-l-grid__item--GridColumnEnd: span 9; }\n  .pf-l-grid > .pf-m-10-col {\n    --pf-l-grid__item--GridColumnEnd: span 10; }\n  .pf-l-grid > .pf-m-11-col {\n    --pf-l-grid__item--GridColumnEnd: span 11; }\n  .pf-l-grid > .pf-m-12-col {\n    --pf-l-grid__item--GridColumnEnd: span 12; }\n  .pf-l-grid > .pf-m-offset-1-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(1 + 1); }\n  .pf-l-grid > .pf-m-offset-2-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(2 + 1); }\n  .pf-l-grid > .pf-m-offset-3-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(3 + 1); }\n  .pf-l-grid > .pf-m-offset-4-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(4 + 1); }\n  .pf-l-grid > .pf-m-offset-5-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(5 + 1); }\n  .pf-l-grid > .pf-m-offset-6-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(6 + 1); }\n  .pf-l-grid > .pf-m-offset-7-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(7 + 1); }\n  .pf-l-grid > .pf-m-offset-8-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(8 + 1); }\n  .pf-l-grid > .pf-m-offset-9-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(9 + 1); }\n  .pf-l-grid > .pf-m-offset-10-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(10 + 1); }\n  .pf-l-grid > .pf-m-offset-11-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(11 + 1); }\n  .pf-l-grid > .pf-m-offset-12-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(12 + 1); }\n  .pf-l-grid > .pf-m-1-row {\n    grid-row: span 1; }\n  .pf-l-grid > .pf-m-2-row {\n    grid-row: span 2; }\n  .pf-l-grid > .pf-m-3-row {\n    grid-row: span 3; }\n  .pf-l-grid > .pf-m-4-row {\n    grid-row: span 4; }\n  .pf-l-grid > .pf-m-5-row {\n    grid-row: span 5; }\n  .pf-l-grid > .pf-m-6-row {\n    grid-row: span 6; }\n  .pf-l-grid > .pf-m-7-row {\n    grid-row: span 7; }\n  .pf-l-grid > .pf-m-8-row {\n    grid-row: span 8; }\n  .pf-l-grid > .pf-m-9-row {\n    grid-row: span 9; }\n  .pf-l-grid > .pf-m-10-row {\n    grid-row: span 10; }\n  .pf-l-grid > .pf-m-11-row {\n    grid-row: span 11; }\n  .pf-l-grid > .pf-m-12-row {\n    grid-row: span 12; }\n  @media screen and (min-width: 576px) {\n    .pf-l-grid > .pf-m-1-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid > .pf-m-2-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid > .pf-m-3-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid > .pf-m-4-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid > .pf-m-5-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid > .pf-m-6-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid > .pf-m-7-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid > .pf-m-8-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid > .pf-m-9-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid > .pf-m-10-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid > .pf-m-11-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid > .pf-m-12-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 12; }\n    .pf-l-grid > .pf-m-offset-1-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(1 + 1); }\n    .pf-l-grid > .pf-m-offset-2-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(2 + 1); }\n    .pf-l-grid > .pf-m-offset-3-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(3 + 1); }\n    .pf-l-grid > .pf-m-offset-4-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(4 + 1); }\n    .pf-l-grid > .pf-m-offset-5-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(5 + 1); }\n    .pf-l-grid > .pf-m-offset-6-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(6 + 1); }\n    .pf-l-grid > .pf-m-offset-7-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(7 + 1); }\n    .pf-l-grid > .pf-m-offset-8-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(8 + 1); }\n    .pf-l-grid > .pf-m-offset-9-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(9 + 1); }\n    .pf-l-grid > .pf-m-offset-10-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(10 + 1); }\n    .pf-l-grid > .pf-m-offset-11-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(11 + 1); }\n    .pf-l-grid > .pf-m-offset-12-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(12 + 1); }\n    .pf-l-grid > .pf-m-1-row-on-sm {\n      grid-row: span 1; }\n    .pf-l-grid > .pf-m-2-row-on-sm {\n      grid-row: span 2; }\n    .pf-l-grid > .pf-m-3-row-on-sm {\n      grid-row: span 3; }\n    .pf-l-grid > .pf-m-4-row-on-sm {\n      grid-row: span 4; }\n    .pf-l-grid > .pf-m-5-row-on-sm {\n      grid-row: span 5; }\n    .pf-l-grid > .pf-m-6-row-on-sm {\n      grid-row: span 6; }\n    .pf-l-grid > .pf-m-7-row-on-sm {\n      grid-row: span 7; }\n    .pf-l-grid > .pf-m-8-row-on-sm {\n      grid-row: span 8; }\n    .pf-l-grid > .pf-m-9-row-on-sm {\n      grid-row: span 9; }\n    .pf-l-grid > .pf-m-10-row-on-sm {\n      grid-row: span 10; }\n    .pf-l-grid > .pf-m-11-row-on-sm {\n      grid-row: span 11; }\n    .pf-l-grid > .pf-m-12-row-on-sm {\n      grid-row: span 12; } }\n  @media screen and (min-width: 768px) {\n    .pf-l-grid > .pf-m-1-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid > .pf-m-2-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid > .pf-m-3-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid > .pf-m-4-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid > .pf-m-5-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid > .pf-m-6-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid > .pf-m-7-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid > .pf-m-8-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid > .pf-m-9-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid > .pf-m-10-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid > .pf-m-11-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid > .pf-m-12-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 12; }\n    .pf-l-grid > .pf-m-offset-1-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(1 + 1); }\n    .pf-l-grid > .pf-m-offset-2-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(2 + 1); }\n    .pf-l-grid > .pf-m-offset-3-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(3 + 1); }\n    .pf-l-grid > .pf-m-offset-4-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(4 + 1); }\n    .pf-l-grid > .pf-m-offset-5-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(5 + 1); }\n    .pf-l-grid > .pf-m-offset-6-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(6 + 1); }\n    .pf-l-grid > .pf-m-offset-7-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(7 + 1); }\n    .pf-l-grid > .pf-m-offset-8-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(8 + 1); }\n    .pf-l-grid > .pf-m-offset-9-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(9 + 1); }\n    .pf-l-grid > .pf-m-offset-10-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(10 + 1); }\n    .pf-l-grid > .pf-m-offset-11-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(11 + 1); }\n    .pf-l-grid > .pf-m-offset-12-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(12 + 1); }\n    .pf-l-grid > .pf-m-1-row-on-md {\n      grid-row: span 1; }\n    .pf-l-grid > .pf-m-2-row-on-md {\n      grid-row: span 2; }\n    .pf-l-grid > .pf-m-3-row-on-md {\n      grid-row: span 3; }\n    .pf-l-grid > .pf-m-4-row-on-md {\n      grid-row: span 4; }\n    .pf-l-grid > .pf-m-5-row-on-md {\n      grid-row: span 5; }\n    .pf-l-grid > .pf-m-6-row-on-md {\n      grid-row: span 6; }\n    .pf-l-grid > .pf-m-7-row-on-md {\n      grid-row: span 7; }\n    .pf-l-grid > .pf-m-8-row-on-md {\n      grid-row: span 8; }\n    .pf-l-grid > .pf-m-9-row-on-md {\n      grid-row: span 9; }\n    .pf-l-grid > .pf-m-10-row-on-md {\n      grid-row: span 10; }\n    .pf-l-grid > .pf-m-11-row-on-md {\n      grid-row: span 11; }\n    .pf-l-grid > .pf-m-12-row-on-md {\n      grid-row: span 12; } }\n  @media screen and (min-width: 992px) {\n    .pf-l-grid > .pf-m-1-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid > .pf-m-2-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid > .pf-m-3-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid > .pf-m-4-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid > .pf-m-5-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid > .pf-m-6-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid > .pf-m-7-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid > .pf-m-8-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid > .pf-m-9-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid > .pf-m-10-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid > .pf-m-11-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid > .pf-m-12-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 12; }\n    .pf-l-grid > .pf-m-offset-1-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(1 + 1); }\n    .pf-l-grid > .pf-m-offset-2-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(2 + 1); }\n    .pf-l-grid > .pf-m-offset-3-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(3 + 1); }\n    .pf-l-grid > .pf-m-offset-4-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(4 + 1); }\n    .pf-l-grid > .pf-m-offset-5-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(5 + 1); }\n    .pf-l-grid > .pf-m-offset-6-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(6 + 1); }\n    .pf-l-grid > .pf-m-offset-7-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(7 + 1); }\n    .pf-l-grid > .pf-m-offset-8-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(8 + 1); }\n    .pf-l-grid > .pf-m-offset-9-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(9 + 1); }\n    .pf-l-grid > .pf-m-offset-10-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(10 + 1); }\n    .pf-l-grid > .pf-m-offset-11-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(11 + 1); }\n    .pf-l-grid > .pf-m-offset-12-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(12 + 1); }\n    .pf-l-grid > .pf-m-1-row-on-lg {\n      grid-row: span 1; }\n    .pf-l-grid > .pf-m-2-row-on-lg {\n      grid-row: span 2; }\n    .pf-l-grid > .pf-m-3-row-on-lg {\n      grid-row: span 3; }\n    .pf-l-grid > .pf-m-4-row-on-lg {\n      grid-row: span 4; }\n    .pf-l-grid > .pf-m-5-row-on-lg {\n      grid-row: span 5; }\n    .pf-l-grid > .pf-m-6-row-on-lg {\n      grid-row: span 6; }\n    .pf-l-grid > .pf-m-7-row-on-lg {\n      grid-row: span 7; }\n    .pf-l-grid > .pf-m-8-row-on-lg {\n      grid-row: span 8; }\n    .pf-l-grid > .pf-m-9-row-on-lg {\n      grid-row: span 9; }\n    .pf-l-grid > .pf-m-10-row-on-lg {\n      grid-row: span 10; }\n    .pf-l-grid > .pf-m-11-row-on-lg {\n      grid-row: span 11; }\n    .pf-l-grid > .pf-m-12-row-on-lg {\n      grid-row: span 12; } }\n  @media screen and (min-width: 1200px) {\n    .pf-l-grid > .pf-m-1-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid > .pf-m-2-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid > .pf-m-3-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid > .pf-m-4-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid > .pf-m-5-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid > .pf-m-6-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid > .pf-m-7-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid > .pf-m-8-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid > .pf-m-9-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid > .pf-m-10-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid > .pf-m-11-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid > .pf-m-12-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 12; }\n    .pf-l-grid > .pf-m-offset-1-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(1 + 1); }\n    .pf-l-grid > .pf-m-offset-2-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(2 + 1); }\n    .pf-l-grid > .pf-m-offset-3-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(3 + 1); }\n    .pf-l-grid > .pf-m-offset-4-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(4 + 1); }\n    .pf-l-grid > .pf-m-offset-5-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(5 + 1); }\n    .pf-l-grid > .pf-m-offset-6-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(6 + 1); }\n    .pf-l-grid > .pf-m-offset-7-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(7 + 1); }\n    .pf-l-grid > .pf-m-offset-8-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(8 + 1); }\n    .pf-l-grid > .pf-m-offset-9-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(9 + 1); }\n    .pf-l-grid > .pf-m-offset-10-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(10 + 1); }\n    .pf-l-grid > .pf-m-offset-11-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(11 + 1); }\n    .pf-l-grid > .pf-m-offset-12-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(12 + 1); }\n    .pf-l-grid > .pf-m-1-row-on-xl {\n      grid-row: span 1; }\n    .pf-l-grid > .pf-m-2-row-on-xl {\n      grid-row: span 2; }\n    .pf-l-grid > .pf-m-3-row-on-xl {\n      grid-row: span 3; }\n    .pf-l-grid > .pf-m-4-row-on-xl {\n      grid-row: span 4; }\n    .pf-l-grid > .pf-m-5-row-on-xl {\n      grid-row: span 5; }\n    .pf-l-grid > .pf-m-6-row-on-xl {\n      grid-row: span 6; }\n    .pf-l-grid > .pf-m-7-row-on-xl {\n      grid-row: span 7; }\n    .pf-l-grid > .pf-m-8-row-on-xl {\n      grid-row: span 8; }\n    .pf-l-grid > .pf-m-9-row-on-xl {\n      grid-row: span 9; }\n    .pf-l-grid > .pf-m-10-row-on-xl {\n      grid-row: span 10; }\n    .pf-l-grid > .pf-m-11-row-on-xl {\n      grid-row: span 11; }\n    .pf-l-grid > .pf-m-12-row-on-xl {\n      grid-row: span 12; } }\n  @media screen and (min-width: 1450px) {\n    .pf-l-grid > .pf-m-1-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid > .pf-m-2-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid > .pf-m-3-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid > .pf-m-4-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid > .pf-m-5-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid > .pf-m-6-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid > .pf-m-7-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid > .pf-m-8-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid > .pf-m-9-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid > .pf-m-10-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid > .pf-m-11-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid > .pf-m-12-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 12; }\n    .pf-l-grid > .pf-m-offset-1-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(1 + 1); }\n    .pf-l-grid > .pf-m-offset-2-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(2 + 1); }\n    .pf-l-grid > .pf-m-offset-3-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(3 + 1); }\n    .pf-l-grid > .pf-m-offset-4-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(4 + 1); }\n    .pf-l-grid > .pf-m-offset-5-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(5 + 1); }\n    .pf-l-grid > .pf-m-offset-6-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(6 + 1); }\n    .pf-l-grid > .pf-m-offset-7-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(7 + 1); }\n    .pf-l-grid > .pf-m-offset-8-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(8 + 1); }\n    .pf-l-grid > .pf-m-offset-9-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(9 + 1); }\n    .pf-l-grid > .pf-m-offset-10-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(10 + 1); }\n    .pf-l-grid > .pf-m-offset-11-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(11 + 1); }\n    .pf-l-grid > .pf-m-offset-12-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(12 + 1); }\n    .pf-l-grid > .pf-m-1-row-on-2xl {\n      grid-row: span 1; }\n    .pf-l-grid > .pf-m-2-row-on-2xl {\n      grid-row: span 2; }\n    .pf-l-grid > .pf-m-3-row-on-2xl {\n      grid-row: span 3; }\n    .pf-l-grid > .pf-m-4-row-on-2xl {\n      grid-row: span 4; }\n    .pf-l-grid > .pf-m-5-row-on-2xl {\n      grid-row: span 5; }\n    .pf-l-grid > .pf-m-6-row-on-2xl {\n      grid-row: span 6; }\n    .pf-l-grid > .pf-m-7-row-on-2xl {\n      grid-row: span 7; }\n    .pf-l-grid > .pf-m-8-row-on-2xl {\n      grid-row: span 8; }\n    .pf-l-grid > .pf-m-9-row-on-2xl {\n      grid-row: span 9; }\n    .pf-l-grid > .pf-m-10-row-on-2xl {\n      grid-row: span 10; }\n    .pf-l-grid > .pf-m-11-row-on-2xl {\n      grid-row: span 11; }\n    .pf-l-grid > .pf-m-12-row-on-2xl {\n      grid-row: span 12; } }\n  .pf-l-grid.pf-m-gutter {\n    grid-gap: var(--pf-l-grid--m-gutter--GridGap); }\n\n.pf-l-level {\n  --pf-l-level--m-gutter--MarginRight: var(--pf-global--gutter);\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between; }\n  .pf-l-level.pf-m-gutter > *:not(:last-child) {\n    margin-right: var(--pf-l-level--m-gutter--MarginRight); }\n\n.pf-l-split {\n  --pf-l-split--m-gutter--MarginRight: var(--pf-global--gutter);\n  display: flex;\n  flex-wrap: nowrap;\n  padding: 0;\n  margin: 0; }\n\n.pf-l-split__item.pf-m-fill {\n  flex-grow: 1; }\n\n.pf-l-split.pf-m-gutter > *:not(:last-child) {\n  margin-right: var(--pf-l-split--m-gutter--MarginRight); }\n\n.pf-l-stack {\n  --pf-l-stack--m-gutter--MarginBottom: var(--pf-global--gutter);\n  display: flex;\n  flex-direction: column;\n  height: 100%; }\n\n.pf-l-stack__item.pf-m-fill {\n  flex-grow: 1; }\n\n.pf-l-stack.pf-m-gutter > *:not(:last-child) {\n  margin-bottom: var(--pf-l-stack--m-gutter--MarginBottom); }\n');const Dn=new CSSStyleSheet;Dn.replaceSync(".pf-u-screen-reader {\n  position: fixed;\n  top: 0;\n  left: 0;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border: 0; }\n\n.pf-u-visible {\n  position: static;\n  overflow: visible;\n  clip: auto;\n  white-space: normal;\n  border: inherit; }\n\n.pf-u-hidden {\n  display: none !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-screen-reader-on-sm {\n    position: fixed;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    clip: rect(0, 0, 0, 0);\n    white-space: nowrap;\n    border: 0; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-visible-on-sm {\n    position: static;\n    overflow: visible;\n    clip: auto;\n    white-space: normal;\n    border: inherit; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-hidden-on-sm {\n    display: none !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-screen-reader-on-md {\n    position: fixed;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    clip: rect(0, 0, 0, 0);\n    white-space: nowrap;\n    border: 0; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-visible-on-md {\n    position: static;\n    overflow: visible;\n    clip: auto;\n    white-space: normal;\n    border: inherit; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-hidden-on-md {\n    display: none !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-screen-reader-on-lg {\n    position: fixed;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    clip: rect(0, 0, 0, 0);\n    white-space: nowrap;\n    border: 0; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-visible-on-lg {\n    position: static;\n    overflow: visible;\n    clip: auto;\n    white-space: normal;\n    border: inherit; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-hidden-on-lg {\n    display: none !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-screen-reader-on-xl {\n    position: fixed;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    clip: rect(0, 0, 0, 0);\n    white-space: nowrap;\n    border: 0; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-visible-on-xl {\n    position: static;\n    overflow: visible;\n    clip: auto;\n    white-space: normal;\n    border: inherit; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-hidden-on-xl {\n    display: none !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-screen-reader-on-2xl {\n    position: fixed;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    clip: rect(0, 0, 0, 0);\n    white-space: nowrap;\n    border: 0; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-visible-on-2xl {\n    position: static;\n    overflow: visible;\n    clip: auto;\n    white-space: normal;\n    border: inherit; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-hidden-on-2xl {\n    display: none !important; } }\n\n.pf-u-text-align-left {\n  text-align: left !important; }\n\n.pf-u-text-align-center {\n  text-align: center !important; }\n\n.pf-u-text-align-right {\n  text-align: right !important; }\n\n.pf-u-text-align-justify {\n  text-align: justify !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-text-align-left-on-sm {\n    text-align: left !important; }\n  .pf-u-text-align-center-on-sm {\n    text-align: center !important; }\n  .pf-u-text-align-right-on-sm {\n    text-align: right !important; }\n  .pf-u-text-align-justify-on-sm {\n    text-align: justify !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-text-align-left-on-md {\n    text-align: left !important; }\n  .pf-u-text-align-center-on-md {\n    text-align: center !important; }\n  .pf-u-text-align-right-on-md {\n    text-align: right !important; }\n  .pf-u-text-align-justify-on-md {\n    text-align: justify !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-text-align-left-on-lg {\n    text-align: left !important; }\n  .pf-u-text-align-center-on-lg {\n    text-align: center !important; }\n  .pf-u-text-align-right-on-lg {\n    text-align: right !important; }\n  .pf-u-text-align-justify-on-lg {\n    text-align: justify !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-text-align-left-on-xl {\n    text-align: left !important; }\n  .pf-u-text-align-center-on-xl {\n    text-align: center !important; }\n  .pf-u-text-align-right-on-xl {\n    text-align: right !important; }\n  .pf-u-text-align-justify-on-xl {\n    text-align: justify !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-text-align-left-on-2xl {\n    text-align: left !important; }\n  .pf-u-text-align-center-on-2xl {\n    text-align: center !important; }\n  .pf-u-text-align-right-on-2xl {\n    text-align: right !important; }\n  .pf-u-text-align-justify-on-2xl {\n    text-align: justify !important; } }\n\n.pf-u-background-color-100 {\n  background-color: var(--pf-global--BackgroundColor--100) !important; }\n\n.pf-u-background-color-200 {\n  background-color: var(--pf-global--BackgroundColor--200) !important; }\n\n.pf-u-background-color-dark-100 {\n  background-color: var(--pf-global--BackgroundColor--dark-100) !important; }\n\n.pf-u-background-color-dark-200 {\n  background-color: var(--pf-global--BackgroundColor--dark-200) !important; }\n\n.pf-u-background-color-dark-300 {\n  background-color: var(--pf-global--BackgroundColor--dark-300) !important; }\n\n.pf-u-background-color-dark-400 {\n  background-color: var(--pf-global--BackgroundColor--dark-400) !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-background-color-100-on-sm {\n    background-color: var(--pf-global--BackgroundColor--100) !important; }\n  .pf-u-background-color-200-on-sm {\n    background-color: var(--pf-global--BackgroundColor--200) !important; }\n  .pf-u-background-color-dark-100-on-sm {\n    background-color: var(--pf-global--BackgroundColor--dark-100) !important; }\n  .pf-u-background-color-dark-200-on-sm {\n    background-color: var(--pf-global--BackgroundColor--dark-200) !important; }\n  .pf-u-background-color-dark-300-on-sm {\n    background-color: var(--pf-global--BackgroundColor--dark-300) !important; }\n  .pf-u-background-color-dark-400-on-sm {\n    background-color: var(--pf-global--BackgroundColor--dark-400) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-background-color-100-on-md {\n    background-color: var(--pf-global--BackgroundColor--100) !important; }\n  .pf-u-background-color-200-on-md {\n    background-color: var(--pf-global--BackgroundColor--200) !important; }\n  .pf-u-background-color-dark-100-on-md {\n    background-color: var(--pf-global--BackgroundColor--dark-100) !important; }\n  .pf-u-background-color-dark-200-on-md {\n    background-color: var(--pf-global--BackgroundColor--dark-200) !important; }\n  .pf-u-background-color-dark-300-on-md {\n    background-color: var(--pf-global--BackgroundColor--dark-300) !important; }\n  .pf-u-background-color-dark-400-on-md {\n    background-color: var(--pf-global--BackgroundColor--dark-400) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-background-color-100-on-lg {\n    background-color: var(--pf-global--BackgroundColor--100) !important; }\n  .pf-u-background-color-200-on-lg {\n    background-color: var(--pf-global--BackgroundColor--200) !important; }\n  .pf-u-background-color-dark-100-on-lg {\n    background-color: var(--pf-global--BackgroundColor--dark-100) !important; }\n  .pf-u-background-color-dark-200-on-lg {\n    background-color: var(--pf-global--BackgroundColor--dark-200) !important; }\n  .pf-u-background-color-dark-300-on-lg {\n    background-color: var(--pf-global--BackgroundColor--dark-300) !important; }\n  .pf-u-background-color-dark-400-on-lg {\n    background-color: var(--pf-global--BackgroundColor--dark-400) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-background-color-100-on-xl {\n    background-color: var(--pf-global--BackgroundColor--100) !important; }\n  .pf-u-background-color-200-on-xl {\n    background-color: var(--pf-global--BackgroundColor--200) !important; }\n  .pf-u-background-color-dark-100-on-xl {\n    background-color: var(--pf-global--BackgroundColor--dark-100) !important; }\n  .pf-u-background-color-dark-200-on-xl {\n    background-color: var(--pf-global--BackgroundColor--dark-200) !important; }\n  .pf-u-background-color-dark-300-on-xl {\n    background-color: var(--pf-global--BackgroundColor--dark-300) !important; }\n  .pf-u-background-color-dark-400-on-xl {\n    background-color: var(--pf-global--BackgroundColor--dark-400) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-background-color-100-on-2xl {\n    background-color: var(--pf-global--BackgroundColor--100) !important; }\n  .pf-u-background-color-200-on-2xl {\n    background-color: var(--pf-global--BackgroundColor--200) !important; }\n  .pf-u-background-color-dark-100-on-2xl {\n    background-color: var(--pf-global--BackgroundColor--dark-100) !important; }\n  .pf-u-background-color-dark-200-on-2xl {\n    background-color: var(--pf-global--BackgroundColor--dark-200) !important; }\n  .pf-u-background-color-dark-300-on-2xl {\n    background-color: var(--pf-global--BackgroundColor--dark-300) !important; }\n  .pf-u-background-color-dark-400-on-2xl {\n    background-color: var(--pf-global--BackgroundColor--dark-400) !important; } }\n\n.pf-u-box-shadow-sm {\n  box-shadow: var(--pf-global--BoxShadow--sm) !important; }\n\n.pf-u-box-shadow-sm-top {\n  box-shadow: var(--pf-global--BoxShadow--sm-top) !important; }\n\n.pf-u-box-shadow-sm-right {\n  box-shadow: var(--pf-global--BoxShadow--sm-right) !important; }\n\n.pf-u-box-shadow-sm-bottom {\n  box-shadow: var(--pf-global--BoxShadow--sm-bottom) !important; }\n\n.pf-u-box-shadow-sm-left {\n  box-shadow: var(--pf-global--BoxShadow--sm-left) !important; }\n\n.pf-u-box-shadow-md {\n  box-shadow: var(--pf-global--BoxShadow--md) !important; }\n\n.pf-u-box-shadow-md-top {\n  box-shadow: var(--pf-global--BoxShadow--md-top) !important; }\n\n.pf-u-box-shadow-md-right {\n  box-shadow: var(--pf-global--BoxShadow--md-right) !important; }\n\n.pf-u-box-shadow-md-bottom {\n  box-shadow: var(--pf-global--BoxShadow--md-bottom) !important; }\n\n.pf-u-box-shadow-md-left {\n  box-shadow: var(--pf-global--BoxShadow--md-left) !important; }\n\n.pf-u-box-shadow-lg {\n  box-shadow: var(--pf-global--BoxShadow--lg) !important; }\n\n.pf-u-box-shadow-lg-top {\n  box-shadow: var(--pf-global--BoxShadow--lg-top) !important; }\n\n.pf-u-box-shadow-lg-right {\n  box-shadow: var(--pf-global--BoxShadow--lg-right) !important; }\n\n.pf-u-box-shadow-lg-bottom {\n  box-shadow: var(--pf-global--BoxShadow--lg-bottom) !important; }\n\n.pf-u-box-shadow-lg-left {\n  box-shadow: var(--pf-global--BoxShadow--lg-left) !important; }\n\n.pf-u-box-shadow-xl {\n  box-shadow: var(--pf-global--BoxShadow--xl) !important; }\n\n.pf-u-box-shadow-xl-top {\n  box-shadow: var(--pf-global--BoxShadow--xl-top) !important; }\n\n.pf-u-box-shadow-xl-right {\n  box-shadow: var(--pf-global--BoxShadow--xl-right) !important; }\n\n.pf-u-box-shadow-xl-bottom {\n  box-shadow: var(--pf-global--BoxShadow--xl-bottom) !important; }\n\n.pf-u-box-shadow-xl-left {\n  box-shadow: var(--pf-global--BoxShadow--xl-left) !important; }\n\n.pf-u-box-shadow-inset {\n  box-shadow: var(--pf-global--BoxShadow--inset) !important; }\n\n.pf-u-display-none {\n  display: none !important; }\n\n.pf-u-display-inline-block {\n  display: inline-block !important; }\n\n.pf-u-display-block {\n  display: block !important; }\n\n.pf-u-display-inline {\n  display: inline !important; }\n\n.pf-u-display-table {\n  display: table !important; }\n\n.pf-u-display-table-cell {\n  display: table-cell !important; }\n\n.pf-u-display-table-row {\n  display: table-row !important; }\n\n.pf-u-display-flex {\n  display: flex !important; }\n\n.pf-u-display-inline-flex {\n  display: inline-flex !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-display-none-on-sm {\n    display: none !important; }\n  .pf-u-display-inline-block-on-sm {\n    display: inline-block !important; }\n  .pf-u-display-block-on-sm {\n    display: block !important; }\n  .pf-u-display-inline-on-sm {\n    display: inline !important; }\n  .pf-u-display-table-on-sm {\n    display: table !important; }\n  .pf-u-display-table-cell-on-sm {\n    display: table-cell !important; }\n  .pf-u-display-table-row-on-sm {\n    display: table-row !important; }\n  .pf-u-display-flex-on-sm {\n    display: flex !important; }\n  .pf-u-display-inline-flex-on-sm {\n    display: inline-flex !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-display-none-on-md {\n    display: none !important; }\n  .pf-u-display-inline-block-on-md {\n    display: inline-block !important; }\n  .pf-u-display-block-on-md {\n    display: block !important; }\n  .pf-u-display-inline-on-md {\n    display: inline !important; }\n  .pf-u-display-table-on-md {\n    display: table !important; }\n  .pf-u-display-table-cell-on-md {\n    display: table-cell !important; }\n  .pf-u-display-table-row-on-md {\n    display: table-row !important; }\n  .pf-u-display-flex-on-md {\n    display: flex !important; }\n  .pf-u-display-inline-flex-on-md {\n    display: inline-flex !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-display-none-on-lg {\n    display: none !important; }\n  .pf-u-display-inline-block-on-lg {\n    display: inline-block !important; }\n  .pf-u-display-block-on-lg {\n    display: block !important; }\n  .pf-u-display-inline-on-lg {\n    display: inline !important; }\n  .pf-u-display-table-on-lg {\n    display: table !important; }\n  .pf-u-display-table-cell-on-lg {\n    display: table-cell !important; }\n  .pf-u-display-table-row-on-lg {\n    display: table-row !important; }\n  .pf-u-display-flex-on-lg {\n    display: flex !important; }\n  .pf-u-display-inline-flex-on-lg {\n    display: inline-flex !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-display-none-on-xl {\n    display: none !important; }\n  .pf-u-display-inline-block-on-xl {\n    display: inline-block !important; }\n  .pf-u-display-block-on-xl {\n    display: block !important; }\n  .pf-u-display-inline-on-xl {\n    display: inline !important; }\n  .pf-u-display-table-on-xl {\n    display: table !important; }\n  .pf-u-display-table-cell-on-xl {\n    display: table-cell !important; }\n  .pf-u-display-table-row-on-xl {\n    display: table-row !important; }\n  .pf-u-display-flex-on-xl {\n    display: flex !important; }\n  .pf-u-display-inline-flex-on-xl {\n    display: inline-flex !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-display-none-on-2xl {\n    display: none !important; }\n  .pf-u-display-inline-block-on-2xl {\n    display: inline-block !important; }\n  .pf-u-display-block-on-2xl {\n    display: block !important; }\n  .pf-u-display-inline-on-2xl {\n    display: inline !important; }\n  .pf-u-display-table-on-2xl {\n    display: table !important; }\n  .pf-u-display-table-cell-on-2xl {\n    display: table-cell !important; }\n  .pf-u-display-table-row-on-2xl {\n    display: table-row !important; }\n  .pf-u-display-flex-on-2xl {\n    display: flex !important; }\n  .pf-u-display-inline-flex-on-2xl {\n    display: inline-flex !important; } }\n\n.pf-u-flex-direction-column {\n  flex-direction: column !important; }\n\n.pf-u-flex-direction-column-reverse {\n  flex-direction: column-reverse !important; }\n\n.pf-u-flex-direction-row {\n  flex-direction: row !important; }\n\n.pf-u-flex-direction-row-reverse {\n  flex-direction: row-reverse !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-flex-direction-column-on-sm {\n    flex-direction: column !important; }\n  .pf-u-flex-direction-column-reverse-on-sm {\n    flex-direction: column-reverse !important; }\n  .pf-u-flex-direction-row-on-sm {\n    flex-direction: row !important; }\n  .pf-u-flex-direction-row-reverse-on-sm {\n    flex-direction: row-reverse !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-flex-direction-column-on-md {\n    flex-direction: column !important; }\n  .pf-u-flex-direction-column-reverse-on-md {\n    flex-direction: column-reverse !important; }\n  .pf-u-flex-direction-row-on-md {\n    flex-direction: row !important; }\n  .pf-u-flex-direction-row-reverse-on-md {\n    flex-direction: row-reverse !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-flex-direction-column-on-lg {\n    flex-direction: column !important; }\n  .pf-u-flex-direction-column-reverse-on-lg {\n    flex-direction: column-reverse !important; }\n  .pf-u-flex-direction-row-on-lg {\n    flex-direction: row !important; }\n  .pf-u-flex-direction-row-reverse-on-lg {\n    flex-direction: row-reverse !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-flex-direction-column-on-xl {\n    flex-direction: column !important; }\n  .pf-u-flex-direction-column-reverse-on-xl {\n    flex-direction: column-reverse !important; }\n  .pf-u-flex-direction-row-on-xl {\n    flex-direction: row !important; }\n  .pf-u-flex-direction-row-reverse-on-xl {\n    flex-direction: row-reverse !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-flex-direction-column-on-2xl {\n    flex-direction: column !important; }\n  .pf-u-flex-direction-column-reverse-on-2xl {\n    flex-direction: column-reverse !important; }\n  .pf-u-flex-direction-row-on-2xl {\n    flex-direction: row !important; }\n  .pf-u-flex-direction-row-reverse-on-2xl {\n    flex-direction: row-reverse !important; } }\n\n.pf-u-flex-wrap {\n  flex-wrap: wrap !important; }\n\n.pf-u-flex-nowrap {\n  flex-wrap: nowrap !important; }\n\n.pf-u-flex-wrap-reverse {\n  flex-wrap: wrap-reverse !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-flex-wrap-on-sm {\n    flex-wrap: wrap !important; }\n  .pf-u-flex-nowrap-on-sm {\n    flex-wrap: nowrap !important; }\n  .pf-u-flex-wrap-reverse-on-sm {\n    flex-wrap: wrap-reverse !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-flex-wrap-on-md {\n    flex-wrap: wrap !important; }\n  .pf-u-flex-nowrap-on-md {\n    flex-wrap: nowrap !important; }\n  .pf-u-flex-wrap-reverse-on-md {\n    flex-wrap: wrap-reverse !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-flex-wrap-on-lg {\n    flex-wrap: wrap !important; }\n  .pf-u-flex-nowrap-on-lg {\n    flex-wrap: nowrap !important; }\n  .pf-u-flex-wrap-reverse-on-lg {\n    flex-wrap: wrap-reverse !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-flex-wrap-on-xl {\n    flex-wrap: wrap !important; }\n  .pf-u-flex-nowrap-on-xl {\n    flex-wrap: nowrap !important; }\n  .pf-u-flex-wrap-reverse-on-xl {\n    flex-wrap: wrap-reverse !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-flex-wrap-on-2xl {\n    flex-wrap: wrap !important; }\n  .pf-u-flex-nowrap-on-2xl {\n    flex-wrap: nowrap !important; }\n  .pf-u-flex-wrap-reverse-on-2xl {\n    flex-wrap: wrap-reverse !important; } }\n\n.pf-u-align-items-flex-start {\n  align-items: flex-start !important; }\n\n.pf-u-align-items-flex-end {\n  align-items: flex-end !important; }\n\n.pf-u-align-items-center {\n  align-items: center !important; }\n\n.pf-u-align-items-baseline {\n  align-items: baseline !important; }\n\n.pf-u-align-items-stretch {\n  align-items: stretch !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-align-items-flex-start-on-sm {\n    align-items: flex-start !important; }\n  .pf-u-align-items-flex-end-on-sm {\n    align-items: flex-end !important; }\n  .pf-u-align-items-center-on-sm {\n    align-items: center !important; }\n  .pf-u-align-items-baseline-on-sm {\n    align-items: baseline !important; }\n  .pf-u-align-items-stretch-on-sm {\n    align-items: stretch !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-align-items-flex-start-on-md {\n    align-items: flex-start !important; }\n  .pf-u-align-items-flex-end-on-md {\n    align-items: flex-end !important; }\n  .pf-u-align-items-center-on-md {\n    align-items: center !important; }\n  .pf-u-align-items-baseline-on-md {\n    align-items: baseline !important; }\n  .pf-u-align-items-stretch-on-md {\n    align-items: stretch !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-align-items-flex-start-on-lg {\n    align-items: flex-start !important; }\n  .pf-u-align-items-flex-end-on-lg {\n    align-items: flex-end !important; }\n  .pf-u-align-items-center-on-lg {\n    align-items: center !important; }\n  .pf-u-align-items-baseline-on-lg {\n    align-items: baseline !important; }\n  .pf-u-align-items-stretch-on-lg {\n    align-items: stretch !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-align-items-flex-start-on-xl {\n    align-items: flex-start !important; }\n  .pf-u-align-items-flex-end-on-xl {\n    align-items: flex-end !important; }\n  .pf-u-align-items-center-on-xl {\n    align-items: center !important; }\n  .pf-u-align-items-baseline-on-xl {\n    align-items: baseline !important; }\n  .pf-u-align-items-stretch-on-xl {\n    align-items: stretch !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-align-items-flex-start-on-2xl {\n    align-items: flex-start !important; }\n  .pf-u-align-items-flex-end-on-2xl {\n    align-items: flex-end !important; }\n  .pf-u-align-items-center-on-2xl {\n    align-items: center !important; }\n  .pf-u-align-items-baseline-on-2xl {\n    align-items: baseline !important; }\n  .pf-u-align-items-stretch-on-2xl {\n    align-items: stretch !important; } }\n\n.pf-u-align-self-flex-start {\n  align-self: flex-start !important; }\n\n.pf-u-align-self-flex-end {\n  align-self: flex-end !important; }\n\n.pf-u-align-self-center {\n  align-self: center !important; }\n\n.pf-u-align-self-baseline {\n  align-self: baseline !important; }\n\n.pf-u-align-self-stretch {\n  align-self: stretch !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-align-self-flex-start-on-sm {\n    align-self: flex-start !important; }\n  .pf-u-align-self-flex-end-on-sm {\n    align-self: flex-end !important; }\n  .pf-u-align-self-center-on-sm {\n    align-self: center !important; }\n  .pf-u-align-self-baseline-on-sm {\n    align-self: baseline !important; }\n  .pf-u-align-self-stretch-on-sm {\n    align-self: stretch !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-align-self-flex-start-on-md {\n    align-self: flex-start !important; }\n  .pf-u-align-self-flex-end-on-md {\n    align-self: flex-end !important; }\n  .pf-u-align-self-center-on-md {\n    align-self: center !important; }\n  .pf-u-align-self-baseline-on-md {\n    align-self: baseline !important; }\n  .pf-u-align-self-stretch-on-md {\n    align-self: stretch !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-align-self-flex-start-on-lg {\n    align-self: flex-start !important; }\n  .pf-u-align-self-flex-end-on-lg {\n    align-self: flex-end !important; }\n  .pf-u-align-self-center-on-lg {\n    align-self: center !important; }\n  .pf-u-align-self-baseline-on-lg {\n    align-self: baseline !important; }\n  .pf-u-align-self-stretch-on-lg {\n    align-self: stretch !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-align-self-flex-start-on-xl {\n    align-self: flex-start !important; }\n  .pf-u-align-self-flex-end-on-xl {\n    align-self: flex-end !important; }\n  .pf-u-align-self-center-on-xl {\n    align-self: center !important; }\n  .pf-u-align-self-baseline-on-xl {\n    align-self: baseline !important; }\n  .pf-u-align-self-stretch-on-xl {\n    align-self: stretch !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-align-self-flex-start-on-2xl {\n    align-self: flex-start !important; }\n  .pf-u-align-self-flex-end-on-2xl {\n    align-self: flex-end !important; }\n  .pf-u-align-self-center-on-2xl {\n    align-self: center !important; }\n  .pf-u-align-self-baseline-on-2xl {\n    align-self: baseline !important; }\n  .pf-u-align-self-stretch-on-2xl {\n    align-self: stretch !important; } }\n\n.pf-u-align-content-flex-start {\n  align-content: flex-start !important; }\n\n.pf-u-align-content-flex-end {\n  align-content: flex-end !important; }\n\n.pf-u-align-content-center {\n  align-content: center !important; }\n\n.pf-u-align-content-space-between {\n  align-content: space-between !important; }\n\n.pf-u-align-content-space-around {\n  align-content: space-around !important; }\n\n.pf-u-align-content-stretch {\n  align-content: stretch !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-align-content-flex-start-on-sm {\n    align-content: flex-start !important; }\n  .pf-u-align-content-flex-end-on-sm {\n    align-content: flex-end !important; }\n  .pf-u-align-content-center-on-sm {\n    align-content: center !important; }\n  .pf-u-align-content-space-between-on-sm {\n    align-content: space-between !important; }\n  .pf-u-align-content-space-around-on-sm {\n    align-content: space-around !important; }\n  .pf-u-align-content-stretch-on-sm {\n    align-content: stretch !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-align-content-flex-start-on-md {\n    align-content: flex-start !important; }\n  .pf-u-align-content-flex-end-on-md {\n    align-content: flex-end !important; }\n  .pf-u-align-content-center-on-md {\n    align-content: center !important; }\n  .pf-u-align-content-space-between-on-md {\n    align-content: space-between !important; }\n  .pf-u-align-content-space-around-on-md {\n    align-content: space-around !important; }\n  .pf-u-align-content-stretch-on-md {\n    align-content: stretch !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-align-content-flex-start-on-lg {\n    align-content: flex-start !important; }\n  .pf-u-align-content-flex-end-on-lg {\n    align-content: flex-end !important; }\n  .pf-u-align-content-center-on-lg {\n    align-content: center !important; }\n  .pf-u-align-content-space-between-on-lg {\n    align-content: space-between !important; }\n  .pf-u-align-content-space-around-on-lg {\n    align-content: space-around !important; }\n  .pf-u-align-content-stretch-on-lg {\n    align-content: stretch !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-align-content-flex-start-on-xl {\n    align-content: flex-start !important; }\n  .pf-u-align-content-flex-end-on-xl {\n    align-content: flex-end !important; }\n  .pf-u-align-content-center-on-xl {\n    align-content: center !important; }\n  .pf-u-align-content-space-between-on-xl {\n    align-content: space-between !important; }\n  .pf-u-align-content-space-around-on-xl {\n    align-content: space-around !important; }\n  .pf-u-align-content-stretch-on-xl {\n    align-content: stretch !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-align-content-flex-start-on-2xl {\n    align-content: flex-start !important; }\n  .pf-u-align-content-flex-end-on-2xl {\n    align-content: flex-end !important; }\n  .pf-u-align-content-center-on-2xl {\n    align-content: center !important; }\n  .pf-u-align-content-space-between-on-2xl {\n    align-content: space-between !important; }\n  .pf-u-align-content-space-around-on-2xl {\n    align-content: space-around !important; }\n  .pf-u-align-content-stretch-on-2xl {\n    align-content: stretch !important; } }\n\n.pf-u-justify-content-flex-start {\n  justify-content: flex-start !important; }\n\n.pf-u-justify-content-flex-end {\n  justify-content: flex-end !important; }\n\n.pf-u-justify-content-center {\n  justify-content: center !important; }\n\n.pf-u-justify-content-space-between {\n  justify-content: space-between !important; }\n\n.pf-u-justify-content-space-around {\n  justify-content: space-around !important; }\n\n.pf-u-justify-content-stretch {\n  justify-content: stretch !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-justify-content-flex-start-on-sm {\n    justify-content: flex-start !important; }\n  .pf-u-justify-content-flex-end-on-sm {\n    justify-content: flex-end !important; }\n  .pf-u-justify-content-center-on-sm {\n    justify-content: center !important; }\n  .pf-u-justify-content-space-between-on-sm {\n    justify-content: space-between !important; }\n  .pf-u-justify-content-space-around-on-sm {\n    justify-content: space-around !important; }\n  .pf-u-justify-content-stretch-on-sm {\n    justify-content: stretch !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-justify-content-flex-start-on-md {\n    justify-content: flex-start !important; }\n  .pf-u-justify-content-flex-end-on-md {\n    justify-content: flex-end !important; }\n  .pf-u-justify-content-center-on-md {\n    justify-content: center !important; }\n  .pf-u-justify-content-space-between-on-md {\n    justify-content: space-between !important; }\n  .pf-u-justify-content-space-around-on-md {\n    justify-content: space-around !important; }\n  .pf-u-justify-content-stretch-on-md {\n    justify-content: stretch !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-justify-content-flex-start-on-lg {\n    justify-content: flex-start !important; }\n  .pf-u-justify-content-flex-end-on-lg {\n    justify-content: flex-end !important; }\n  .pf-u-justify-content-center-on-lg {\n    justify-content: center !important; }\n  .pf-u-justify-content-space-between-on-lg {\n    justify-content: space-between !important; }\n  .pf-u-justify-content-space-around-on-lg {\n    justify-content: space-around !important; }\n  .pf-u-justify-content-stretch-on-lg {\n    justify-content: stretch !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-justify-content-flex-start-on-xl {\n    justify-content: flex-start !important; }\n  .pf-u-justify-content-flex-end-on-xl {\n    justify-content: flex-end !important; }\n  .pf-u-justify-content-center-on-xl {\n    justify-content: center !important; }\n  .pf-u-justify-content-space-between-on-xl {\n    justify-content: space-between !important; }\n  .pf-u-justify-content-space-around-on-xl {\n    justify-content: space-around !important; }\n  .pf-u-justify-content-stretch-on-xl {\n    justify-content: stretch !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-justify-content-flex-start-on-2xl {\n    justify-content: flex-start !important; }\n  .pf-u-justify-content-flex-end-on-2xl {\n    justify-content: flex-end !important; }\n  .pf-u-justify-content-center-on-2xl {\n    justify-content: center !important; }\n  .pf-u-justify-content-space-between-on-2xl {\n    justify-content: space-between !important; }\n  .pf-u-justify-content-space-around-on-2xl {\n    justify-content: space-around !important; }\n  .pf-u-justify-content-stretch-on-2xl {\n    justify-content: stretch !important; } }\n\n.pf-u-flex-shrink-1 {\n  flex-shrink: 1 !important; }\n\n.pf-u-flex-grow-1 {\n  flex-grow: 1 !important; }\n\n.pf-u-flex-shrink-0 {\n  flex-shrink: 0 !important; }\n\n.pf-u-flex-grow-0 {\n  flex-grow: 0 !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-flex-shrink-1-on-sm {\n    flex-shrink: 1 !important; }\n  .pf-u-flex-grow-1-on-sm {\n    flex-grow: 1 !important; }\n  .pf-u-flex-shrink-0-on-sm {\n    flex-shrink: 0 !important; }\n  .pf-u-flex-grow-0-on-sm {\n    flex-grow: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-flex-shrink-1-on-md {\n    flex-shrink: 1 !important; }\n  .pf-u-flex-grow-1-on-md {\n    flex-grow: 1 !important; }\n  .pf-u-flex-shrink-0-on-md {\n    flex-shrink: 0 !important; }\n  .pf-u-flex-grow-0-on-md {\n    flex-grow: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-flex-shrink-1-on-lg {\n    flex-shrink: 1 !important; }\n  .pf-u-flex-grow-1-on-lg {\n    flex-grow: 1 !important; }\n  .pf-u-flex-shrink-0-on-lg {\n    flex-shrink: 0 !important; }\n  .pf-u-flex-grow-0-on-lg {\n    flex-grow: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-flex-shrink-1-on-xl {\n    flex-shrink: 1 !important; }\n  .pf-u-flex-grow-1-on-xl {\n    flex-grow: 1 !important; }\n  .pf-u-flex-shrink-0-on-xl {\n    flex-shrink: 0 !important; }\n  .pf-u-flex-grow-0-on-xl {\n    flex-grow: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-flex-shrink-1-on-2xl {\n    flex-shrink: 1 !important; }\n  .pf-u-flex-grow-1-on-2xl {\n    flex-grow: 1 !important; }\n  .pf-u-flex-shrink-0-on-2xl {\n    flex-shrink: 0 !important; }\n  .pf-u-flex-grow-0-on-2xl {\n    flex-grow: 0 !important; } }\n\n.pf-u-flex-basis-0 {\n  flex-basis: 0 !important; }\n\n.pf-u-flex-basis-auto {\n  flex-basis: auto !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-flex-basis-0-on-sm {\n    flex-basis: 0 !important; }\n  .pf-u-flex-basis-auto-on-sm {\n    flex-basis: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-flex-basis-0-on-md {\n    flex-basis: 0 !important; }\n  .pf-u-flex-basis-auto-on-md {\n    flex-basis: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-flex-basis-0-on-lg {\n    flex-basis: 0 !important; }\n  .pf-u-flex-basis-auto-on-lg {\n    flex-basis: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-flex-basis-0-on-xl {\n    flex-basis: 0 !important; }\n  .pf-u-flex-basis-auto-on-xl {\n    flex-basis: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-flex-basis-0-on-2xl {\n    flex-basis: 0 !important; }\n  .pf-u-flex-basis-auto-on-2xl {\n    flex-basis: auto !important; } }\n\n.pf-u-flex-none {\n  flex: none !important; }\n\n.pf-u-flex-1 {\n  flex: 1 !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-flex-none-on-sm {\n    flex: none !important; }\n  .pf-u-flex-1-on-sm {\n    flex: 1 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-flex-none-on-md {\n    flex: none !important; }\n  .pf-u-flex-1-on-md {\n    flex: 1 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-flex-none-on-lg {\n    flex: none !important; }\n  .pf-u-flex-1-on-lg {\n    flex: 1 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-flex-none-on-xl {\n    flex: none !important; }\n  .pf-u-flex-1-on-xl {\n    flex: 1 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-flex-none-on-2xl {\n    flex: none !important; }\n  .pf-u-flex-1-on-2xl {\n    flex: 1 !important; } }\n\n.pf-u-flex-fill {\n  flex: 1 1 auto !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-flex-fill-on-sm {\n    flex: 1 1 auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-flex-fill-on-md {\n    flex: 1 1 auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-flex-fill-on-lg {\n    flex: 1 1 auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-flex-fill-on-xl {\n    flex: 1 1 auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-flex-fill-on-2xl {\n    flex: 1 1 auto !important; } }\n\n.pf-u-float-left {\n  float: left !important; }\n\n.pf-u-float-right {\n  float: right !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-float-left-on-sm {\n    float: left !important; }\n  .pf-u-float-right-on-sm {\n    float: right !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-float-left-on-md {\n    float: left !important; }\n  .pf-u-float-right-on-md {\n    float: right !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-float-left-on-lg {\n    float: left !important; }\n  .pf-u-float-right-on-lg {\n    float: right !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-float-left-on-xl {\n    float: left !important; }\n  .pf-u-float-right-on-xl {\n    float: right !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-float-left-on-2xl {\n    float: left !important; }\n  .pf-u-float-right-on-2xl {\n    float: right !important; } }\n\n.pf-u-w-auto {\n  width: auto !important; }\n\n.pf-u-w-initial {\n  width: initial !important; }\n\n.pf-u-w-inherit {\n  width: inherit !important; }\n\n.pf-u-w-0 {\n  width: 0% !important; }\n\n.pf-u-w-25 {\n  width: 25% !important; }\n\n.pf-u-w-33 {\n  width: calc(100% / 3) !important; }\n\n.pf-u-w-50 {\n  width: 50% !important; }\n\n.pf-u-w-66 {\n  width: calc(100% / 3 * 2) !important; }\n\n.pf-u-w-75 {\n  width: 75% !important; }\n\n.pf-u-w-100 {\n  width: 100% !important; }\n\n.pf-u-w-25vw {\n  width: 25vw !important; }\n\n.pf-u-w-33vw {\n  width: calc(100vw / 3) !important; }\n\n.pf-u-w-50vw {\n  width: 50vw !important; }\n\n.pf-u-w-66vw {\n  width: calc(100vw / 3 * 2) !important; }\n\n.pf-u-w-75vw {\n  width: 75vw !important; }\n\n.pf-u-w-100vw {\n  width: 100vw !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-w-auto-on-sm {\n    width: auto !important; }\n  .pf-u-w-initial-on-sm {\n    width: initial !important; }\n  .pf-u-w-inherit-on-sm {\n    width: inherit !important; }\n  .pf-u-w-0-on-sm {\n    width: 0% !important; }\n  .pf-u-w-25-on-sm {\n    width: 25% !important; }\n  .pf-u-w-33-on-sm {\n    width: calc(100% / 3) !important; }\n  .pf-u-w-50-on-sm {\n    width: 50% !important; }\n  .pf-u-w-66-on-sm {\n    width: calc(100% / 3 * 2) !important; }\n  .pf-u-w-75-on-sm {\n    width: 75% !important; }\n  .pf-u-w-100-on-sm {\n    width: 100% !important; }\n  .pf-u-w-25vw-on-sm {\n    width: 25vw !important; }\n  .pf-u-w-33vw-on-sm {\n    width: calc(100vw / 3) !important; }\n  .pf-u-w-50vw-on-sm {\n    width: 50vw !important; }\n  .pf-u-w-66vw-on-sm {\n    width: calc(100vw / 3 * 2) !important; }\n  .pf-u-w-75vw-on-sm {\n    width: 75vw !important; }\n  .pf-u-w-100vw-on-sm {\n    width: 100vw !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-w-auto-on-md {\n    width: auto !important; }\n  .pf-u-w-initial-on-md {\n    width: initial !important; }\n  .pf-u-w-inherit-on-md {\n    width: inherit !important; }\n  .pf-u-w-0-on-md {\n    width: 0% !important; }\n  .pf-u-w-25-on-md {\n    width: 25% !important; }\n  .pf-u-w-33-on-md {\n    width: calc(100% / 3) !important; }\n  .pf-u-w-50-on-md {\n    width: 50% !important; }\n  .pf-u-w-66-on-md {\n    width: calc(100% / 3 * 2) !important; }\n  .pf-u-w-75-on-md {\n    width: 75% !important; }\n  .pf-u-w-100-on-md {\n    width: 100% !important; }\n  .pf-u-w-25vw-on-md {\n    width: 25vw !important; }\n  .pf-u-w-33vw-on-md {\n    width: calc(100vw / 3) !important; }\n  .pf-u-w-50vw-on-md {\n    width: 50vw !important; }\n  .pf-u-w-66vw-on-md {\n    width: calc(100vw / 3 * 2) !important; }\n  .pf-u-w-75vw-on-md {\n    width: 75vw !important; }\n  .pf-u-w-100vw-on-md {\n    width: 100vw !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-w-auto-on-lg {\n    width: auto !important; }\n  .pf-u-w-initial-on-lg {\n    width: initial !important; }\n  .pf-u-w-inherit-on-lg {\n    width: inherit !important; }\n  .pf-u-w-0-on-lg {\n    width: 0% !important; }\n  .pf-u-w-25-on-lg {\n    width: 25% !important; }\n  .pf-u-w-33-on-lg {\n    width: calc(100% / 3) !important; }\n  .pf-u-w-50-on-lg {\n    width: 50% !important; }\n  .pf-u-w-66-on-lg {\n    width: calc(100% / 3 * 2) !important; }\n  .pf-u-w-75-on-lg {\n    width: 75% !important; }\n  .pf-u-w-100-on-lg {\n    width: 100% !important; }\n  .pf-u-w-25vw-on-lg {\n    width: 25vw !important; }\n  .pf-u-w-33vw-on-lg {\n    width: calc(100vw / 3) !important; }\n  .pf-u-w-50vw-on-lg {\n    width: 50vw !important; }\n  .pf-u-w-66vw-on-lg {\n    width: calc(100vw / 3 * 2) !important; }\n  .pf-u-w-75vw-on-lg {\n    width: 75vw !important; }\n  .pf-u-w-100vw-on-lg {\n    width: 100vw !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-w-auto-on-xl {\n    width: auto !important; }\n  .pf-u-w-initial-on-xl {\n    width: initial !important; }\n  .pf-u-w-inherit-on-xl {\n    width: inherit !important; }\n  .pf-u-w-0-on-xl {\n    width: 0% !important; }\n  .pf-u-w-25-on-xl {\n    width: 25% !important; }\n  .pf-u-w-33-on-xl {\n    width: calc(100% / 3) !important; }\n  .pf-u-w-50-on-xl {\n    width: 50% !important; }\n  .pf-u-w-66-on-xl {\n    width: calc(100% / 3 * 2) !important; }\n  .pf-u-w-75-on-xl {\n    width: 75% !important; }\n  .pf-u-w-100-on-xl {\n    width: 100% !important; }\n  .pf-u-w-25vw-on-xl {\n    width: 25vw !important; }\n  .pf-u-w-33vw-on-xl {\n    width: calc(100vw / 3) !important; }\n  .pf-u-w-50vw-on-xl {\n    width: 50vw !important; }\n  .pf-u-w-66vw-on-xl {\n    width: calc(100vw / 3 * 2) !important; }\n  .pf-u-w-75vw-on-xl {\n    width: 75vw !important; }\n  .pf-u-w-100vw-on-xl {\n    width: 100vw !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-w-auto-on-2xl {\n    width: auto !important; }\n  .pf-u-w-initial-on-2xl {\n    width: initial !important; }\n  .pf-u-w-inherit-on-2xl {\n    width: inherit !important; }\n  .pf-u-w-0-on-2xl {\n    width: 0% !important; }\n  .pf-u-w-25-on-2xl {\n    width: 25% !important; }\n  .pf-u-w-33-on-2xl {\n    width: calc(100% / 3) !important; }\n  .pf-u-w-50-on-2xl {\n    width: 50% !important; }\n  .pf-u-w-66-on-2xl {\n    width: calc(100% / 3 * 2) !important; }\n  .pf-u-w-75-on-2xl {\n    width: 75% !important; }\n  .pf-u-w-100-on-2xl {\n    width: 100% !important; }\n  .pf-u-w-25vw-on-2xl {\n    width: 25vw !important; }\n  .pf-u-w-33vw-on-2xl {\n    width: calc(100vw / 3) !important; }\n  .pf-u-w-50vw-on-2xl {\n    width: 50vw !important; }\n  .pf-u-w-66vw-on-2xl {\n    width: calc(100vw / 3 * 2) !important; }\n  .pf-u-w-75vw-on-2xl {\n    width: 75vw !important; }\n  .pf-u-w-100vw-on-2xl {\n    width: 100vw !important; } }\n\n.pf-u-h-auto {\n  height: auto !important; }\n\n.pf-u-h-initial {\n  height: initial !important; }\n\n.pf-u-h-inherit {\n  height: inherit !important; }\n\n.pf-u-h-0 {\n  height: 0% !important; }\n\n.pf-u-h-25 {\n  height: 25% !important; }\n\n.pf-u-h-33 {\n  height: calc(100% / 3) !important; }\n\n.pf-u-h-50 {\n  height: 50% !important; }\n\n.pf-u-h-66 {\n  height: calc(100% / 3 * 2) !important; }\n\n.pf-u-h-75 {\n  height: 75% !important; }\n\n.pf-u-h-100 {\n  height: 100% !important; }\n\n.pf-u-h-25vh {\n  height: 25vh !important; }\n\n.pf-u-h-33vh {\n  height: calc(100vh / 3) !important; }\n\n.pf-u-h-50vh {\n  height: 50vh !important; }\n\n.pf-u-h-66vh {\n  height: calc(100vh / 3 * 2) !important; }\n\n.pf-u-h-75vh {\n  height: 75vh !important; }\n\n.pf-u-h-100vh {\n  height: 100vh !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-h-auto-on-sm {\n    height: auto !important; }\n  .pf-u-h-initial-on-sm {\n    height: initial !important; }\n  .pf-u-h-inherit-on-sm {\n    height: inherit !important; }\n  .pf-u-h-0-on-sm {\n    height: 0% !important; }\n  .pf-u-h-25-on-sm {\n    height: 25% !important; }\n  .pf-u-h-33-on-sm {\n    height: calc(100% / 3) !important; }\n  .pf-u-h-50-on-sm {\n    height: 50% !important; }\n  .pf-u-h-66-on-sm {\n    height: calc(100% / 3 * 2) !important; }\n  .pf-u-h-75-on-sm {\n    height: 75% !important; }\n  .pf-u-h-100-on-sm {\n    height: 100% !important; }\n  .pf-u-h-25vh-on-sm {\n    height: 25vh !important; }\n  .pf-u-h-33vh-on-sm {\n    height: calc(100vh / 3) !important; }\n  .pf-u-h-50vh-on-sm {\n    height: 50vh !important; }\n  .pf-u-h-66vh-on-sm {\n    height: calc(100vh / 3 * 2) !important; }\n  .pf-u-h-75vh-on-sm {\n    height: 75vh !important; }\n  .pf-u-h-100vh-on-sm {\n    height: 100vh !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-h-auto-on-md {\n    height: auto !important; }\n  .pf-u-h-initial-on-md {\n    height: initial !important; }\n  .pf-u-h-inherit-on-md {\n    height: inherit !important; }\n  .pf-u-h-0-on-md {\n    height: 0% !important; }\n  .pf-u-h-25-on-md {\n    height: 25% !important; }\n  .pf-u-h-33-on-md {\n    height: calc(100% / 3) !important; }\n  .pf-u-h-50-on-md {\n    height: 50% !important; }\n  .pf-u-h-66-on-md {\n    height: calc(100% / 3 * 2) !important; }\n  .pf-u-h-75-on-md {\n    height: 75% !important; }\n  .pf-u-h-100-on-md {\n    height: 100% !important; }\n  .pf-u-h-25vh-on-md {\n    height: 25vh !important; }\n  .pf-u-h-33vh-on-md {\n    height: calc(100vh / 3) !important; }\n  .pf-u-h-50vh-on-md {\n    height: 50vh !important; }\n  .pf-u-h-66vh-on-md {\n    height: calc(100vh / 3 * 2) !important; }\n  .pf-u-h-75vh-on-md {\n    height: 75vh !important; }\n  .pf-u-h-100vh-on-md {\n    height: 100vh !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-h-auto-on-lg {\n    height: auto !important; }\n  .pf-u-h-initial-on-lg {\n    height: initial !important; }\n  .pf-u-h-inherit-on-lg {\n    height: inherit !important; }\n  .pf-u-h-0-on-lg {\n    height: 0% !important; }\n  .pf-u-h-25-on-lg {\n    height: 25% !important; }\n  .pf-u-h-33-on-lg {\n    height: calc(100% / 3) !important; }\n  .pf-u-h-50-on-lg {\n    height: 50% !important; }\n  .pf-u-h-66-on-lg {\n    height: calc(100% / 3 * 2) !important; }\n  .pf-u-h-75-on-lg {\n    height: 75% !important; }\n  .pf-u-h-100-on-lg {\n    height: 100% !important; }\n  .pf-u-h-25vh-on-lg {\n    height: 25vh !important; }\n  .pf-u-h-33vh-on-lg {\n    height: calc(100vh / 3) !important; }\n  .pf-u-h-50vh-on-lg {\n    height: 50vh !important; }\n  .pf-u-h-66vh-on-lg {\n    height: calc(100vh / 3 * 2) !important; }\n  .pf-u-h-75vh-on-lg {\n    height: 75vh !important; }\n  .pf-u-h-100vh-on-lg {\n    height: 100vh !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-h-auto-on-xl {\n    height: auto !important; }\n  .pf-u-h-initial-on-xl {\n    height: initial !important; }\n  .pf-u-h-inherit-on-xl {\n    height: inherit !important; }\n  .pf-u-h-0-on-xl {\n    height: 0% !important; }\n  .pf-u-h-25-on-xl {\n    height: 25% !important; }\n  .pf-u-h-33-on-xl {\n    height: calc(100% / 3) !important; }\n  .pf-u-h-50-on-xl {\n    height: 50% !important; }\n  .pf-u-h-66-on-xl {\n    height: calc(100% / 3 * 2) !important; }\n  .pf-u-h-75-on-xl {\n    height: 75% !important; }\n  .pf-u-h-100-on-xl {\n    height: 100% !important; }\n  .pf-u-h-25vh-on-xl {\n    height: 25vh !important; }\n  .pf-u-h-33vh-on-xl {\n    height: calc(100vh / 3) !important; }\n  .pf-u-h-50vh-on-xl {\n    height: 50vh !important; }\n  .pf-u-h-66vh-on-xl {\n    height: calc(100vh / 3 * 2) !important; }\n  .pf-u-h-75vh-on-xl {\n    height: 75vh !important; }\n  .pf-u-h-100vh-on-xl {\n    height: 100vh !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-h-auto-on-2xl {\n    height: auto !important; }\n  .pf-u-h-initial-on-2xl {\n    height: initial !important; }\n  .pf-u-h-inherit-on-2xl {\n    height: inherit !important; }\n  .pf-u-h-0-on-2xl {\n    height: 0% !important; }\n  .pf-u-h-25-on-2xl {\n    height: 25% !important; }\n  .pf-u-h-33-on-2xl {\n    height: calc(100% / 3) !important; }\n  .pf-u-h-50-on-2xl {\n    height: 50% !important; }\n  .pf-u-h-66-on-2xl {\n    height: calc(100% / 3 * 2) !important; }\n  .pf-u-h-75-on-2xl {\n    height: 75% !important; }\n  .pf-u-h-100-on-2xl {\n    height: 100% !important; }\n  .pf-u-h-25vh-on-2xl {\n    height: 25vh !important; }\n  .pf-u-h-33vh-on-2xl {\n    height: calc(100vh / 3) !important; }\n  .pf-u-h-50vh-on-2xl {\n    height: 50vh !important; }\n  .pf-u-h-66vh-on-2xl {\n    height: calc(100vh / 3 * 2) !important; }\n  .pf-u-h-75vh-on-2xl {\n    height: 75vh !important; }\n  .pf-u-h-100vh-on-2xl {\n    height: 100vh !important; } }\n\n.pf-u-m-auto {\n  margin: auto !important; }\n\n.pf-u-m-0 {\n  margin: 0 !important; }\n\n.pf-u-m-xs {\n  margin: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-m-sm {\n  margin: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-m-md {\n  margin: var(--pf-global--spacer--md) !important; }\n\n.pf-u-m-lg {\n  margin: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-m-xl {\n  margin: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-m-2xl {\n  margin: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-m-3xl {\n  margin: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-m-4xl {\n  margin: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-mt-auto {\n  margin-top: auto !important; }\n\n.pf-u-mt-0 {\n  margin-top: 0 !important; }\n\n.pf-u-mt-xs {\n  margin-top: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-mt-sm {\n  margin-top: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-mt-md {\n  margin-top: var(--pf-global--spacer--md) !important; }\n\n.pf-u-mt-lg {\n  margin-top: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-mt-xl {\n  margin-top: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-mt-2xl {\n  margin-top: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-mt-3xl {\n  margin-top: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-mt-4xl {\n  margin-top: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-mr-auto {\n  margin-right: auto !important; }\n\n.pf-u-mr-0 {\n  margin-right: 0 !important; }\n\n.pf-u-mr-xs {\n  margin-right: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-mr-sm {\n  margin-right: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-mr-md {\n  margin-right: var(--pf-global--spacer--md) !important; }\n\n.pf-u-mr-lg {\n  margin-right: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-mr-xl {\n  margin-right: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-mr-2xl {\n  margin-right: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-mr-3xl {\n  margin-right: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-mr-4xl {\n  margin-right: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-mb-auto {\n  margin-bottom: auto !important; }\n\n.pf-u-mb-0 {\n  margin-bottom: 0 !important; }\n\n.pf-u-mb-xs {\n  margin-bottom: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-mb-sm {\n  margin-bottom: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-mb-md {\n  margin-bottom: var(--pf-global--spacer--md) !important; }\n\n.pf-u-mb-lg {\n  margin-bottom: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-mb-xl {\n  margin-bottom: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-mb-2xl {\n  margin-bottom: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-mb-3xl {\n  margin-bottom: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-mb-4xl {\n  margin-bottom: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-ml-auto {\n  margin-left: auto !important; }\n\n.pf-u-ml-0 {\n  margin-left: 0 !important; }\n\n.pf-u-ml-xs {\n  margin-left: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-ml-sm {\n  margin-left: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-ml-md {\n  margin-left: var(--pf-global--spacer--md) !important; }\n\n.pf-u-ml-lg {\n  margin-left: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-ml-xl {\n  margin-left: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-ml-2xl {\n  margin-left: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-ml-3xl {\n  margin-left: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-ml-4xl {\n  margin-left: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important; }\n\n.pf-u-mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important; }\n\n.pf-u-mx-xs {\n  margin-right: var(--pf-global--spacer--xs) !important;\n  margin-left: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-mx-sm {\n  margin-right: var(--pf-global--spacer--sm) !important;\n  margin-left: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-mx-md {\n  margin-right: var(--pf-global--spacer--md) !important;\n  margin-left: var(--pf-global--spacer--md) !important; }\n\n.pf-u-mx-lg {\n  margin-right: var(--pf-global--spacer--lg) !important;\n  margin-left: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-mx-xl {\n  margin-right: var(--pf-global--spacer--xl) !important;\n  margin-left: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-mx-2xl {\n  margin-right: var(--pf-global--spacer--2xl) !important;\n  margin-left: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-mx-3xl {\n  margin-right: var(--pf-global--spacer--3xl) !important;\n  margin-left: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-mx-4xl {\n  margin-right: var(--pf-global--spacer--4xl) !important;\n  margin-left: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important; }\n\n.pf-u-my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important; }\n\n.pf-u-my-xs {\n  margin-top: var(--pf-global--spacer--xs) !important;\n  margin-bottom: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-my-sm {\n  margin-top: var(--pf-global--spacer--sm) !important;\n  margin-bottom: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-my-md {\n  margin-top: var(--pf-global--spacer--md) !important;\n  margin-bottom: var(--pf-global--spacer--md) !important; }\n\n.pf-u-my-lg {\n  margin-top: var(--pf-global--spacer--lg) !important;\n  margin-bottom: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-my-xl {\n  margin-top: var(--pf-global--spacer--xl) !important;\n  margin-bottom: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-my-2xl {\n  margin-top: var(--pf-global--spacer--2xl) !important;\n  margin-bottom: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-my-3xl {\n  margin-top: var(--pf-global--spacer--3xl) !important;\n  margin-bottom: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-my-4xl {\n  margin-top: var(--pf-global--spacer--4xl) !important;\n  margin-bottom: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-p-auto {\n  padding: auto !important; }\n\n.pf-u-p-0 {\n  padding: 0 !important; }\n\n.pf-u-p-xs {\n  padding: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-p-sm {\n  padding: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-p-md {\n  padding: var(--pf-global--spacer--md) !important; }\n\n.pf-u-p-lg {\n  padding: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-p-xl {\n  padding: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-p-2xl {\n  padding: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-p-3xl {\n  padding: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-p-4xl {\n  padding: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-pt-auto {\n  padding-top: auto !important; }\n\n.pf-u-pt-0 {\n  padding-top: 0 !important; }\n\n.pf-u-pt-xs {\n  padding-top: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-pt-sm {\n  padding-top: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-pt-md {\n  padding-top: var(--pf-global--spacer--md) !important; }\n\n.pf-u-pt-lg {\n  padding-top: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-pt-xl {\n  padding-top: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-pt-2xl {\n  padding-top: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-pt-3xl {\n  padding-top: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-pt-4xl {\n  padding-top: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-pr-auto {\n  padding-right: auto !important; }\n\n.pf-u-pr-0 {\n  padding-right: 0 !important; }\n\n.pf-u-pr-xs {\n  padding-right: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-pr-sm {\n  padding-right: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-pr-md {\n  padding-right: var(--pf-global--spacer--md) !important; }\n\n.pf-u-pr-lg {\n  padding-right: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-pr-xl {\n  padding-right: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-pr-2xl {\n  padding-right: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-pr-3xl {\n  padding-right: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-pr-4xl {\n  padding-right: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-pb-auto {\n  padding-bottom: auto !important; }\n\n.pf-u-pb-0 {\n  padding-bottom: 0 !important; }\n\n.pf-u-pb-xs {\n  padding-bottom: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-pb-sm {\n  padding-bottom: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-pb-md {\n  padding-bottom: var(--pf-global--spacer--md) !important; }\n\n.pf-u-pb-lg {\n  padding-bottom: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-pb-xl {\n  padding-bottom: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-pb-2xl {\n  padding-bottom: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-pb-3xl {\n  padding-bottom: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-pb-4xl {\n  padding-bottom: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-pl-auto {\n  padding-left: auto !important; }\n\n.pf-u-pl-0 {\n  padding-left: 0 !important; }\n\n.pf-u-pl-xs {\n  padding-left: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-pl-sm {\n  padding-left: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-pl-md {\n  padding-left: var(--pf-global--spacer--md) !important; }\n\n.pf-u-pl-lg {\n  padding-left: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-pl-xl {\n  padding-left: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-pl-2xl {\n  padding-left: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-pl-3xl {\n  padding-left: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-pl-4xl {\n  padding-left: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-px-auto {\n  padding-right: auto !important;\n  padding-left: auto !important; }\n\n.pf-u-px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important; }\n\n.pf-u-px-xs {\n  padding-right: var(--pf-global--spacer--xs) !important;\n  padding-left: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-px-sm {\n  padding-right: var(--pf-global--spacer--sm) !important;\n  padding-left: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-px-md {\n  padding-right: var(--pf-global--spacer--md) !important;\n  padding-left: var(--pf-global--spacer--md) !important; }\n\n.pf-u-px-lg {\n  padding-right: var(--pf-global--spacer--lg) !important;\n  padding-left: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-px-xl {\n  padding-right: var(--pf-global--spacer--xl) !important;\n  padding-left: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-px-2xl {\n  padding-right: var(--pf-global--spacer--2xl) !important;\n  padding-left: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-px-3xl {\n  padding-right: var(--pf-global--spacer--3xl) !important;\n  padding-left: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-px-4xl {\n  padding-right: var(--pf-global--spacer--4xl) !important;\n  padding-left: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-py-auto {\n  padding-top: auto !important;\n  padding-bottom: auto !important; }\n\n.pf-u-py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important; }\n\n.pf-u-py-xs {\n  padding-top: var(--pf-global--spacer--xs) !important;\n  padding-bottom: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-py-sm {\n  padding-top: var(--pf-global--spacer--sm) !important;\n  padding-bottom: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-py-md {\n  padding-top: var(--pf-global--spacer--md) !important;\n  padding-bottom: var(--pf-global--spacer--md) !important; }\n\n.pf-u-py-lg {\n  padding-top: var(--pf-global--spacer--lg) !important;\n  padding-bottom: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-py-xl {\n  padding-top: var(--pf-global--spacer--xl) !important;\n  padding-bottom: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-py-2xl {\n  padding-top: var(--pf-global--spacer--2xl) !important;\n  padding-bottom: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-py-3xl {\n  padding-top: var(--pf-global--spacer--3xl) !important;\n  padding-bottom: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-py-4xl {\n  padding-top: var(--pf-global--spacer--4xl) !important;\n  padding-bottom: var(--pf-global--spacer--4xl) !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-auto-on-sm {\n    margin: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-0-on-sm {\n    margin: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-xs-on-sm {\n    margin: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-sm-on-sm {\n    margin: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-md-on-sm {\n    margin: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-lg-on-sm {\n    margin: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-xl-on-sm {\n    margin: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-2xl-on-sm {\n    margin: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-3xl-on-sm {\n    margin: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-4xl-on-sm {\n    margin: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-auto-on-sm {\n    margin-top: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-0-on-sm {\n    margin-top: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-xs-on-sm {\n    margin-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-sm-on-sm {\n    margin-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-md-on-sm {\n    margin-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-lg-on-sm {\n    margin-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-xl-on-sm {\n    margin-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-2xl-on-sm {\n    margin-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-3xl-on-sm {\n    margin-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-4xl-on-sm {\n    margin-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-auto-on-sm {\n    margin-right: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-0-on-sm {\n    margin-right: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-xs-on-sm {\n    margin-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-sm-on-sm {\n    margin-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-md-on-sm {\n    margin-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-lg-on-sm {\n    margin-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-xl-on-sm {\n    margin-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-2xl-on-sm {\n    margin-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-3xl-on-sm {\n    margin-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-4xl-on-sm {\n    margin-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-auto-on-sm {\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-0-on-sm {\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-xs-on-sm {\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-sm-on-sm {\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-md-on-sm {\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-lg-on-sm {\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-xl-on-sm {\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-2xl-on-sm {\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-3xl-on-sm {\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-4xl-on-sm {\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-auto-on-sm {\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-0-on-sm {\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-xs-on-sm {\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-sm-on-sm {\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-md-on-sm {\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-lg-on-sm {\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-xl-on-sm {\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-2xl-on-sm {\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-3xl-on-sm {\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-4xl-on-sm {\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-auto-on-sm {\n    margin-right: auto !important;\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-0-on-sm {\n    margin-right: 0 !important;\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-xs-on-sm {\n    margin-right: var(--pf-global--spacer--xs) !important;\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-sm-on-sm {\n    margin-right: var(--pf-global--spacer--sm) !important;\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-md-on-sm {\n    margin-right: var(--pf-global--spacer--md) !important;\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-lg-on-sm {\n    margin-right: var(--pf-global--spacer--lg) !important;\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-xl-on-sm {\n    margin-right: var(--pf-global--spacer--xl) !important;\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-2xl-on-sm {\n    margin-right: var(--pf-global--spacer--2xl) !important;\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-3xl-on-sm {\n    margin-right: var(--pf-global--spacer--3xl) !important;\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-4xl-on-sm {\n    margin-right: var(--pf-global--spacer--4xl) !important;\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-auto-on-sm {\n    margin-top: auto !important;\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-0-on-sm {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-xs-on-sm {\n    margin-top: var(--pf-global--spacer--xs) !important;\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-sm-on-sm {\n    margin-top: var(--pf-global--spacer--sm) !important;\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-md-on-sm {\n    margin-top: var(--pf-global--spacer--md) !important;\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-lg-on-sm {\n    margin-top: var(--pf-global--spacer--lg) !important;\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-xl-on-sm {\n    margin-top: var(--pf-global--spacer--xl) !important;\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-2xl-on-sm {\n    margin-top: var(--pf-global--spacer--2xl) !important;\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-3xl-on-sm {\n    margin-top: var(--pf-global--spacer--3xl) !important;\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-4xl-on-sm {\n    margin-top: var(--pf-global--spacer--4xl) !important;\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-auto-on-sm {\n    padding: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-0-on-sm {\n    padding: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-xs-on-sm {\n    padding: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-sm-on-sm {\n    padding: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-md-on-sm {\n    padding: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-lg-on-sm {\n    padding: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-xl-on-sm {\n    padding: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-2xl-on-sm {\n    padding: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-3xl-on-sm {\n    padding: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-4xl-on-sm {\n    padding: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-auto-on-sm {\n    padding-top: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-0-on-sm {\n    padding-top: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-xs-on-sm {\n    padding-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-sm-on-sm {\n    padding-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-md-on-sm {\n    padding-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-lg-on-sm {\n    padding-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-xl-on-sm {\n    padding-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-2xl-on-sm {\n    padding-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-3xl-on-sm {\n    padding-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-4xl-on-sm {\n    padding-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-auto-on-sm {\n    padding-right: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-0-on-sm {\n    padding-right: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-xs-on-sm {\n    padding-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-sm-on-sm {\n    padding-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-md-on-sm {\n    padding-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-lg-on-sm {\n    padding-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-xl-on-sm {\n    padding-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-2xl-on-sm {\n    padding-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-3xl-on-sm {\n    padding-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-4xl-on-sm {\n    padding-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-auto-on-sm {\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-0-on-sm {\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-xs-on-sm {\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-sm-on-sm {\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-md-on-sm {\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-lg-on-sm {\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-xl-on-sm {\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-2xl-on-sm {\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-3xl-on-sm {\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-4xl-on-sm {\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-auto-on-sm {\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-0-on-sm {\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-xs-on-sm {\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-sm-on-sm {\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-md-on-sm {\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-lg-on-sm {\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-xl-on-sm {\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-2xl-on-sm {\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-3xl-on-sm {\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-4xl-on-sm {\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-auto-on-sm {\n    padding-right: auto !important;\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-0-on-sm {\n    padding-right: 0 !important;\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-xs-on-sm {\n    padding-right: var(--pf-global--spacer--xs) !important;\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-sm-on-sm {\n    padding-right: var(--pf-global--spacer--sm) !important;\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-md-on-sm {\n    padding-right: var(--pf-global--spacer--md) !important;\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-lg-on-sm {\n    padding-right: var(--pf-global--spacer--lg) !important;\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-xl-on-sm {\n    padding-right: var(--pf-global--spacer--xl) !important;\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-2xl-on-sm {\n    padding-right: var(--pf-global--spacer--2xl) !important;\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-3xl-on-sm {\n    padding-right: var(--pf-global--spacer--3xl) !important;\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-4xl-on-sm {\n    padding-right: var(--pf-global--spacer--4xl) !important;\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-auto-on-sm {\n    padding-top: auto !important;\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-0-on-sm {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-xs-on-sm {\n    padding-top: var(--pf-global--spacer--xs) !important;\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-sm-on-sm {\n    padding-top: var(--pf-global--spacer--sm) !important;\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-md-on-sm {\n    padding-top: var(--pf-global--spacer--md) !important;\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-lg-on-sm {\n    padding-top: var(--pf-global--spacer--lg) !important;\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-xl-on-sm {\n    padding-top: var(--pf-global--spacer--xl) !important;\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-2xl-on-sm {\n    padding-top: var(--pf-global--spacer--2xl) !important;\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-3xl-on-sm {\n    padding-top: var(--pf-global--spacer--3xl) !important;\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-4xl-on-sm {\n    padding-top: var(--pf-global--spacer--4xl) !important;\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-auto-on-md {\n    margin: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-0-on-md {\n    margin: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-xs-on-md {\n    margin: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-sm-on-md {\n    margin: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-md-on-md {\n    margin: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-lg-on-md {\n    margin: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-xl-on-md {\n    margin: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-2xl-on-md {\n    margin: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-3xl-on-md {\n    margin: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-4xl-on-md {\n    margin: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-auto-on-md {\n    margin-top: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-0-on-md {\n    margin-top: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-xs-on-md {\n    margin-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-sm-on-md {\n    margin-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-md-on-md {\n    margin-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-lg-on-md {\n    margin-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-xl-on-md {\n    margin-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-2xl-on-md {\n    margin-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-3xl-on-md {\n    margin-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-4xl-on-md {\n    margin-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-auto-on-md {\n    margin-right: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-0-on-md {\n    margin-right: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-xs-on-md {\n    margin-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-sm-on-md {\n    margin-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-md-on-md {\n    margin-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-lg-on-md {\n    margin-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-xl-on-md {\n    margin-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-2xl-on-md {\n    margin-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-3xl-on-md {\n    margin-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-4xl-on-md {\n    margin-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-auto-on-md {\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-0-on-md {\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-xs-on-md {\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-sm-on-md {\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-md-on-md {\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-lg-on-md {\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-xl-on-md {\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-2xl-on-md {\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-3xl-on-md {\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-4xl-on-md {\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-auto-on-md {\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-0-on-md {\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-xs-on-md {\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-sm-on-md {\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-md-on-md {\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-lg-on-md {\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-xl-on-md {\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-2xl-on-md {\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-3xl-on-md {\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-4xl-on-md {\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-auto-on-md {\n    margin-right: auto !important;\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-0-on-md {\n    margin-right: 0 !important;\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-xs-on-md {\n    margin-right: var(--pf-global--spacer--xs) !important;\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-sm-on-md {\n    margin-right: var(--pf-global--spacer--sm) !important;\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-md-on-md {\n    margin-right: var(--pf-global--spacer--md) !important;\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-lg-on-md {\n    margin-right: var(--pf-global--spacer--lg) !important;\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-xl-on-md {\n    margin-right: var(--pf-global--spacer--xl) !important;\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-2xl-on-md {\n    margin-right: var(--pf-global--spacer--2xl) !important;\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-3xl-on-md {\n    margin-right: var(--pf-global--spacer--3xl) !important;\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-4xl-on-md {\n    margin-right: var(--pf-global--spacer--4xl) !important;\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-auto-on-md {\n    margin-top: auto !important;\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-0-on-md {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-xs-on-md {\n    margin-top: var(--pf-global--spacer--xs) !important;\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-sm-on-md {\n    margin-top: var(--pf-global--spacer--sm) !important;\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-md-on-md {\n    margin-top: var(--pf-global--spacer--md) !important;\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-lg-on-md {\n    margin-top: var(--pf-global--spacer--lg) !important;\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-xl-on-md {\n    margin-top: var(--pf-global--spacer--xl) !important;\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-2xl-on-md {\n    margin-top: var(--pf-global--spacer--2xl) !important;\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-3xl-on-md {\n    margin-top: var(--pf-global--spacer--3xl) !important;\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-4xl-on-md {\n    margin-top: var(--pf-global--spacer--4xl) !important;\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-auto-on-md {\n    padding: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-0-on-md {\n    padding: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-xs-on-md {\n    padding: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-sm-on-md {\n    padding: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-md-on-md {\n    padding: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-lg-on-md {\n    padding: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-xl-on-md {\n    padding: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-2xl-on-md {\n    padding: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-3xl-on-md {\n    padding: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-4xl-on-md {\n    padding: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-auto-on-md {\n    padding-top: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-0-on-md {\n    padding-top: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-xs-on-md {\n    padding-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-sm-on-md {\n    padding-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-md-on-md {\n    padding-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-lg-on-md {\n    padding-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-xl-on-md {\n    padding-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-2xl-on-md {\n    padding-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-3xl-on-md {\n    padding-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-4xl-on-md {\n    padding-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-auto-on-md {\n    padding-right: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-0-on-md {\n    padding-right: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-xs-on-md {\n    padding-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-sm-on-md {\n    padding-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-md-on-md {\n    padding-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-lg-on-md {\n    padding-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-xl-on-md {\n    padding-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-2xl-on-md {\n    padding-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-3xl-on-md {\n    padding-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-4xl-on-md {\n    padding-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-auto-on-md {\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-0-on-md {\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-xs-on-md {\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-sm-on-md {\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-md-on-md {\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-lg-on-md {\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-xl-on-md {\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-2xl-on-md {\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-3xl-on-md {\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-4xl-on-md {\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-auto-on-md {\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-0-on-md {\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-xs-on-md {\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-sm-on-md {\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-md-on-md {\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-lg-on-md {\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-xl-on-md {\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-2xl-on-md {\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-3xl-on-md {\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-4xl-on-md {\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-auto-on-md {\n    padding-right: auto !important;\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-0-on-md {\n    padding-right: 0 !important;\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-xs-on-md {\n    padding-right: var(--pf-global--spacer--xs) !important;\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-sm-on-md {\n    padding-right: var(--pf-global--spacer--sm) !important;\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-md-on-md {\n    padding-right: var(--pf-global--spacer--md) !important;\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-lg-on-md {\n    padding-right: var(--pf-global--spacer--lg) !important;\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-xl-on-md {\n    padding-right: var(--pf-global--spacer--xl) !important;\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-2xl-on-md {\n    padding-right: var(--pf-global--spacer--2xl) !important;\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-3xl-on-md {\n    padding-right: var(--pf-global--spacer--3xl) !important;\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-4xl-on-md {\n    padding-right: var(--pf-global--spacer--4xl) !important;\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-auto-on-md {\n    padding-top: auto !important;\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-0-on-md {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-xs-on-md {\n    padding-top: var(--pf-global--spacer--xs) !important;\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-sm-on-md {\n    padding-top: var(--pf-global--spacer--sm) !important;\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-md-on-md {\n    padding-top: var(--pf-global--spacer--md) !important;\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-lg-on-md {\n    padding-top: var(--pf-global--spacer--lg) !important;\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-xl-on-md {\n    padding-top: var(--pf-global--spacer--xl) !important;\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-2xl-on-md {\n    padding-top: var(--pf-global--spacer--2xl) !important;\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-3xl-on-md {\n    padding-top: var(--pf-global--spacer--3xl) !important;\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-4xl-on-md {\n    padding-top: var(--pf-global--spacer--4xl) !important;\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-auto-on-lg {\n    margin: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-0-on-lg {\n    margin: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-xs-on-lg {\n    margin: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-sm-on-lg {\n    margin: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-md-on-lg {\n    margin: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-lg-on-lg {\n    margin: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-xl-on-lg {\n    margin: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-2xl-on-lg {\n    margin: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-3xl-on-lg {\n    margin: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-4xl-on-lg {\n    margin: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-auto-on-lg {\n    margin-top: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-0-on-lg {\n    margin-top: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-xs-on-lg {\n    margin-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-sm-on-lg {\n    margin-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-md-on-lg {\n    margin-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-lg-on-lg {\n    margin-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-xl-on-lg {\n    margin-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-2xl-on-lg {\n    margin-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-3xl-on-lg {\n    margin-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-4xl-on-lg {\n    margin-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-auto-on-lg {\n    margin-right: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-0-on-lg {\n    margin-right: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-xs-on-lg {\n    margin-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-sm-on-lg {\n    margin-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-md-on-lg {\n    margin-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-lg-on-lg {\n    margin-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-xl-on-lg {\n    margin-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-2xl-on-lg {\n    margin-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-3xl-on-lg {\n    margin-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-4xl-on-lg {\n    margin-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-auto-on-lg {\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-0-on-lg {\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-xs-on-lg {\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-sm-on-lg {\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-md-on-lg {\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-lg-on-lg {\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-xl-on-lg {\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-2xl-on-lg {\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-3xl-on-lg {\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-4xl-on-lg {\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-auto-on-lg {\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-0-on-lg {\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-xs-on-lg {\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-sm-on-lg {\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-md-on-lg {\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-lg-on-lg {\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-xl-on-lg {\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-2xl-on-lg {\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-3xl-on-lg {\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-4xl-on-lg {\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-auto-on-lg {\n    margin-right: auto !important;\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-0-on-lg {\n    margin-right: 0 !important;\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-xs-on-lg {\n    margin-right: var(--pf-global--spacer--xs) !important;\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-sm-on-lg {\n    margin-right: var(--pf-global--spacer--sm) !important;\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-md-on-lg {\n    margin-right: var(--pf-global--spacer--md) !important;\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-lg-on-lg {\n    margin-right: var(--pf-global--spacer--lg) !important;\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-xl-on-lg {\n    margin-right: var(--pf-global--spacer--xl) !important;\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-2xl-on-lg {\n    margin-right: var(--pf-global--spacer--2xl) !important;\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-3xl-on-lg {\n    margin-right: var(--pf-global--spacer--3xl) !important;\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-4xl-on-lg {\n    margin-right: var(--pf-global--spacer--4xl) !important;\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-auto-on-lg {\n    margin-top: auto !important;\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-0-on-lg {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-xs-on-lg {\n    margin-top: var(--pf-global--spacer--xs) !important;\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-sm-on-lg {\n    margin-top: var(--pf-global--spacer--sm) !important;\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-md-on-lg {\n    margin-top: var(--pf-global--spacer--md) !important;\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-lg-on-lg {\n    margin-top: var(--pf-global--spacer--lg) !important;\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-xl-on-lg {\n    margin-top: var(--pf-global--spacer--xl) !important;\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-2xl-on-lg {\n    margin-top: var(--pf-global--spacer--2xl) !important;\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-3xl-on-lg {\n    margin-top: var(--pf-global--spacer--3xl) !important;\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-4xl-on-lg {\n    margin-top: var(--pf-global--spacer--4xl) !important;\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-auto-on-lg {\n    padding: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-0-on-lg {\n    padding: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-xs-on-lg {\n    padding: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-sm-on-lg {\n    padding: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-md-on-lg {\n    padding: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-lg-on-lg {\n    padding: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-xl-on-lg {\n    padding: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-2xl-on-lg {\n    padding: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-3xl-on-lg {\n    padding: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-4xl-on-lg {\n    padding: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-auto-on-lg {\n    padding-top: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-0-on-lg {\n    padding-top: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-xs-on-lg {\n    padding-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-sm-on-lg {\n    padding-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-md-on-lg {\n    padding-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-lg-on-lg {\n    padding-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-xl-on-lg {\n    padding-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-2xl-on-lg {\n    padding-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-3xl-on-lg {\n    padding-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-4xl-on-lg {\n    padding-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-auto-on-lg {\n    padding-right: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-0-on-lg {\n    padding-right: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-xs-on-lg {\n    padding-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-sm-on-lg {\n    padding-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-md-on-lg {\n    padding-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-lg-on-lg {\n    padding-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-xl-on-lg {\n    padding-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-2xl-on-lg {\n    padding-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-3xl-on-lg {\n    padding-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-4xl-on-lg {\n    padding-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-auto-on-lg {\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-0-on-lg {\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-xs-on-lg {\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-sm-on-lg {\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-md-on-lg {\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-lg-on-lg {\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-xl-on-lg {\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-2xl-on-lg {\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-3xl-on-lg {\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-4xl-on-lg {\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-auto-on-lg {\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-0-on-lg {\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-xs-on-lg {\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-sm-on-lg {\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-md-on-lg {\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-lg-on-lg {\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-xl-on-lg {\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-2xl-on-lg {\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-3xl-on-lg {\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-4xl-on-lg {\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-auto-on-lg {\n    padding-right: auto !important;\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-0-on-lg {\n    padding-right: 0 !important;\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-xs-on-lg {\n    padding-right: var(--pf-global--spacer--xs) !important;\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-sm-on-lg {\n    padding-right: var(--pf-global--spacer--sm) !important;\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-md-on-lg {\n    padding-right: var(--pf-global--spacer--md) !important;\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-lg-on-lg {\n    padding-right: var(--pf-global--spacer--lg) !important;\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-xl-on-lg {\n    padding-right: var(--pf-global--spacer--xl) !important;\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-2xl-on-lg {\n    padding-right: var(--pf-global--spacer--2xl) !important;\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-3xl-on-lg {\n    padding-right: var(--pf-global--spacer--3xl) !important;\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-4xl-on-lg {\n    padding-right: var(--pf-global--spacer--4xl) !important;\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-auto-on-lg {\n    padding-top: auto !important;\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-0-on-lg {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-xs-on-lg {\n    padding-top: var(--pf-global--spacer--xs) !important;\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-sm-on-lg {\n    padding-top: var(--pf-global--spacer--sm) !important;\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-md-on-lg {\n    padding-top: var(--pf-global--spacer--md) !important;\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-lg-on-lg {\n    padding-top: var(--pf-global--spacer--lg) !important;\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-xl-on-lg {\n    padding-top: var(--pf-global--spacer--xl) !important;\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-2xl-on-lg {\n    padding-top: var(--pf-global--spacer--2xl) !important;\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-3xl-on-lg {\n    padding-top: var(--pf-global--spacer--3xl) !important;\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-4xl-on-lg {\n    padding-top: var(--pf-global--spacer--4xl) !important;\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-auto-on-xl {\n    margin: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-0-on-xl {\n    margin: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-xs-on-xl {\n    margin: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-sm-on-xl {\n    margin: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-md-on-xl {\n    margin: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-lg-on-xl {\n    margin: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-xl-on-xl {\n    margin: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-2xl-on-xl {\n    margin: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-3xl-on-xl {\n    margin: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-4xl-on-xl {\n    margin: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-auto-on-xl {\n    margin-top: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-0-on-xl {\n    margin-top: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-xs-on-xl {\n    margin-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-sm-on-xl {\n    margin-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-md-on-xl {\n    margin-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-lg-on-xl {\n    margin-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-xl-on-xl {\n    margin-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-2xl-on-xl {\n    margin-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-3xl-on-xl {\n    margin-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-4xl-on-xl {\n    margin-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-auto-on-xl {\n    margin-right: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-0-on-xl {\n    margin-right: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-xs-on-xl {\n    margin-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-sm-on-xl {\n    margin-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-md-on-xl {\n    margin-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-lg-on-xl {\n    margin-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-xl-on-xl {\n    margin-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-2xl-on-xl {\n    margin-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-3xl-on-xl {\n    margin-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-4xl-on-xl {\n    margin-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-auto-on-xl {\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-0-on-xl {\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-xs-on-xl {\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-sm-on-xl {\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-md-on-xl {\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-lg-on-xl {\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-xl-on-xl {\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-2xl-on-xl {\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-3xl-on-xl {\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-4xl-on-xl {\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-auto-on-xl {\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-0-on-xl {\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-xs-on-xl {\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-sm-on-xl {\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-md-on-xl {\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-lg-on-xl {\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-xl-on-xl {\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-2xl-on-xl {\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-3xl-on-xl {\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-4xl-on-xl {\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-auto-on-xl {\n    margin-right: auto !important;\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-0-on-xl {\n    margin-right: 0 !important;\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-xs-on-xl {\n    margin-right: var(--pf-global--spacer--xs) !important;\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-sm-on-xl {\n    margin-right: var(--pf-global--spacer--sm) !important;\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-md-on-xl {\n    margin-right: var(--pf-global--spacer--md) !important;\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-lg-on-xl {\n    margin-right: var(--pf-global--spacer--lg) !important;\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-xl-on-xl {\n    margin-right: var(--pf-global--spacer--xl) !important;\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-2xl-on-xl {\n    margin-right: var(--pf-global--spacer--2xl) !important;\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-3xl-on-xl {\n    margin-right: var(--pf-global--spacer--3xl) !important;\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-4xl-on-xl {\n    margin-right: var(--pf-global--spacer--4xl) !important;\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-auto-on-xl {\n    margin-top: auto !important;\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-0-on-xl {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-xs-on-xl {\n    margin-top: var(--pf-global--spacer--xs) !important;\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-sm-on-xl {\n    margin-top: var(--pf-global--spacer--sm) !important;\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-md-on-xl {\n    margin-top: var(--pf-global--spacer--md) !important;\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-lg-on-xl {\n    margin-top: var(--pf-global--spacer--lg) !important;\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-xl-on-xl {\n    margin-top: var(--pf-global--spacer--xl) !important;\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-2xl-on-xl {\n    margin-top: var(--pf-global--spacer--2xl) !important;\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-3xl-on-xl {\n    margin-top: var(--pf-global--spacer--3xl) !important;\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-4xl-on-xl {\n    margin-top: var(--pf-global--spacer--4xl) !important;\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-auto-on-xl {\n    padding: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-0-on-xl {\n    padding: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-xs-on-xl {\n    padding: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-sm-on-xl {\n    padding: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-md-on-xl {\n    padding: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-lg-on-xl {\n    padding: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-xl-on-xl {\n    padding: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-2xl-on-xl {\n    padding: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-3xl-on-xl {\n    padding: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-4xl-on-xl {\n    padding: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-auto-on-xl {\n    padding-top: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-0-on-xl {\n    padding-top: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-xs-on-xl {\n    padding-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-sm-on-xl {\n    padding-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-md-on-xl {\n    padding-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-lg-on-xl {\n    padding-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-xl-on-xl {\n    padding-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-2xl-on-xl {\n    padding-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-3xl-on-xl {\n    padding-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-4xl-on-xl {\n    padding-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-auto-on-xl {\n    padding-right: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-0-on-xl {\n    padding-right: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-xs-on-xl {\n    padding-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-sm-on-xl {\n    padding-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-md-on-xl {\n    padding-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-lg-on-xl {\n    padding-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-xl-on-xl {\n    padding-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-2xl-on-xl {\n    padding-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-3xl-on-xl {\n    padding-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-4xl-on-xl {\n    padding-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-auto-on-xl {\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-0-on-xl {\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-xs-on-xl {\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-sm-on-xl {\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-md-on-xl {\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-lg-on-xl {\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-xl-on-xl {\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-2xl-on-xl {\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-3xl-on-xl {\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-4xl-on-xl {\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-auto-on-xl {\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-0-on-xl {\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-xs-on-xl {\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-sm-on-xl {\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-md-on-xl {\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-lg-on-xl {\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-xl-on-xl {\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-2xl-on-xl {\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-3xl-on-xl {\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-4xl-on-xl {\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-auto-on-xl {\n    padding-right: auto !important;\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-0-on-xl {\n    padding-right: 0 !important;\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-xs-on-xl {\n    padding-right: var(--pf-global--spacer--xs) !important;\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-sm-on-xl {\n    padding-right: var(--pf-global--spacer--sm) !important;\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-md-on-xl {\n    padding-right: var(--pf-global--spacer--md) !important;\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-lg-on-xl {\n    padding-right: var(--pf-global--spacer--lg) !important;\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-xl-on-xl {\n    padding-right: var(--pf-global--spacer--xl) !important;\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-2xl-on-xl {\n    padding-right: var(--pf-global--spacer--2xl) !important;\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-3xl-on-xl {\n    padding-right: var(--pf-global--spacer--3xl) !important;\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-4xl-on-xl {\n    padding-right: var(--pf-global--spacer--4xl) !important;\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-auto-on-xl {\n    padding-top: auto !important;\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-0-on-xl {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-xs-on-xl {\n    padding-top: var(--pf-global--spacer--xs) !important;\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-sm-on-xl {\n    padding-top: var(--pf-global--spacer--sm) !important;\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-md-on-xl {\n    padding-top: var(--pf-global--spacer--md) !important;\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-lg-on-xl {\n    padding-top: var(--pf-global--spacer--lg) !important;\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-xl-on-xl {\n    padding-top: var(--pf-global--spacer--xl) !important;\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-2xl-on-xl {\n    padding-top: var(--pf-global--spacer--2xl) !important;\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-3xl-on-xl {\n    padding-top: var(--pf-global--spacer--3xl) !important;\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-4xl-on-xl {\n    padding-top: var(--pf-global--spacer--4xl) !important;\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-auto-on-2xl {\n    margin: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-0-on-2xl {\n    margin: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-xs-on-2xl {\n    margin: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-sm-on-2xl {\n    margin: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-md-on-2xl {\n    margin: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-lg-on-2xl {\n    margin: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-xl-on-2xl {\n    margin: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-2xl-on-2xl {\n    margin: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-3xl-on-2xl {\n    margin: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-4xl-on-2xl {\n    margin: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-auto-on-2xl {\n    margin-top: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-0-on-2xl {\n    margin-top: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-xs-on-2xl {\n    margin-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-sm-on-2xl {\n    margin-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-md-on-2xl {\n    margin-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-lg-on-2xl {\n    margin-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-xl-on-2xl {\n    margin-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-2xl-on-2xl {\n    margin-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-3xl-on-2xl {\n    margin-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-4xl-on-2xl {\n    margin-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-auto-on-2xl {\n    margin-right: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-0-on-2xl {\n    margin-right: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-xs-on-2xl {\n    margin-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-sm-on-2xl {\n    margin-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-md-on-2xl {\n    margin-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-lg-on-2xl {\n    margin-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-xl-on-2xl {\n    margin-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-2xl-on-2xl {\n    margin-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-3xl-on-2xl {\n    margin-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-4xl-on-2xl {\n    margin-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-auto-on-2xl {\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-0-on-2xl {\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-xs-on-2xl {\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-sm-on-2xl {\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-md-on-2xl {\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-lg-on-2xl {\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-xl-on-2xl {\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-2xl-on-2xl {\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-3xl-on-2xl {\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-4xl-on-2xl {\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-auto-on-2xl {\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-0-on-2xl {\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-xs-on-2xl {\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-sm-on-2xl {\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-md-on-2xl {\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-lg-on-2xl {\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-xl-on-2xl {\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-2xl-on-2xl {\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-3xl-on-2xl {\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-4xl-on-2xl {\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-auto-on-2xl {\n    margin-right: auto !important;\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-0-on-2xl {\n    margin-right: 0 !important;\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-xs-on-2xl {\n    margin-right: var(--pf-global--spacer--xs) !important;\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-sm-on-2xl {\n    margin-right: var(--pf-global--spacer--sm) !important;\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-md-on-2xl {\n    margin-right: var(--pf-global--spacer--md) !important;\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-lg-on-2xl {\n    margin-right: var(--pf-global--spacer--lg) !important;\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-xl-on-2xl {\n    margin-right: var(--pf-global--spacer--xl) !important;\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-2xl-on-2xl {\n    margin-right: var(--pf-global--spacer--2xl) !important;\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-3xl-on-2xl {\n    margin-right: var(--pf-global--spacer--3xl) !important;\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-4xl-on-2xl {\n    margin-right: var(--pf-global--spacer--4xl) !important;\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-auto-on-2xl {\n    margin-top: auto !important;\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-0-on-2xl {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-xs-on-2xl {\n    margin-top: var(--pf-global--spacer--xs) !important;\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-sm-on-2xl {\n    margin-top: var(--pf-global--spacer--sm) !important;\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-md-on-2xl {\n    margin-top: var(--pf-global--spacer--md) !important;\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-lg-on-2xl {\n    margin-top: var(--pf-global--spacer--lg) !important;\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-xl-on-2xl {\n    margin-top: var(--pf-global--spacer--xl) !important;\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-2xl-on-2xl {\n    margin-top: var(--pf-global--spacer--2xl) !important;\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-3xl-on-2xl {\n    margin-top: var(--pf-global--spacer--3xl) !important;\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-4xl-on-2xl {\n    margin-top: var(--pf-global--spacer--4xl) !important;\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-auto-on-2xl {\n    padding: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-0-on-2xl {\n    padding: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-xs-on-2xl {\n    padding: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-sm-on-2xl {\n    padding: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-md-on-2xl {\n    padding: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-lg-on-2xl {\n    padding: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-xl-on-2xl {\n    padding: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-2xl-on-2xl {\n    padding: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-3xl-on-2xl {\n    padding: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-4xl-on-2xl {\n    padding: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-auto-on-2xl {\n    padding-top: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-0-on-2xl {\n    padding-top: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-xs-on-2xl {\n    padding-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-sm-on-2xl {\n    padding-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-md-on-2xl {\n    padding-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-lg-on-2xl {\n    padding-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-xl-on-2xl {\n    padding-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-2xl-on-2xl {\n    padding-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-3xl-on-2xl {\n    padding-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-4xl-on-2xl {\n    padding-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-auto-on-2xl {\n    padding-right: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-0-on-2xl {\n    padding-right: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-xs-on-2xl {\n    padding-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-sm-on-2xl {\n    padding-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-md-on-2xl {\n    padding-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-lg-on-2xl {\n    padding-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-xl-on-2xl {\n    padding-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-2xl-on-2xl {\n    padding-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-3xl-on-2xl {\n    padding-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-4xl-on-2xl {\n    padding-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-auto-on-2xl {\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-0-on-2xl {\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-xs-on-2xl {\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-sm-on-2xl {\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-md-on-2xl {\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-lg-on-2xl {\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-xl-on-2xl {\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-2xl-on-2xl {\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-3xl-on-2xl {\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-4xl-on-2xl {\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-auto-on-2xl {\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-0-on-2xl {\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-xs-on-2xl {\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-sm-on-2xl {\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-md-on-2xl {\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-lg-on-2xl {\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-xl-on-2xl {\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-2xl-on-2xl {\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-3xl-on-2xl {\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-4xl-on-2xl {\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-auto-on-2xl {\n    padding-right: auto !important;\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-0-on-2xl {\n    padding-right: 0 !important;\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-xs-on-2xl {\n    padding-right: var(--pf-global--spacer--xs) !important;\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-sm-on-2xl {\n    padding-right: var(--pf-global--spacer--sm) !important;\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-md-on-2xl {\n    padding-right: var(--pf-global--spacer--md) !important;\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-lg-on-2xl {\n    padding-right: var(--pf-global--spacer--lg) !important;\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-xl-on-2xl {\n    padding-right: var(--pf-global--spacer--xl) !important;\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-2xl-on-2xl {\n    padding-right: var(--pf-global--spacer--2xl) !important;\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-3xl-on-2xl {\n    padding-right: var(--pf-global--spacer--3xl) !important;\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-4xl-on-2xl {\n    padding-right: var(--pf-global--spacer--4xl) !important;\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-auto-on-2xl {\n    padding-top: auto !important;\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-0-on-2xl {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-xs-on-2xl {\n    padding-top: var(--pf-global--spacer--xs) !important;\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-sm-on-2xl {\n    padding-top: var(--pf-global--spacer--sm) !important;\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-md-on-2xl {\n    padding-top: var(--pf-global--spacer--md) !important;\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-lg-on-2xl {\n    padding-top: var(--pf-global--spacer--lg) !important;\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-xl-on-2xl {\n    padding-top: var(--pf-global--spacer--xl) !important;\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-2xl-on-2xl {\n    padding-top: var(--pf-global--spacer--2xl) !important;\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-3xl-on-2xl {\n    padding-top: var(--pf-global--spacer--3xl) !important;\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-4xl-on-2xl {\n    padding-top: var(--pf-global--spacer--4xl) !important;\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n.pf-u-font-size-xs {\n  font-size: var(--pf-global--FontSize--xs) !important; }\n\n.pf-u-font-size-sm {\n  font-size: var(--pf-global--FontSize--sm) !important; }\n\n.pf-u-font-size-md {\n  font-size: var(--pf-global--FontSize--md) !important; }\n\n.pf-u-font-size-lg {\n  font-size: var(--pf-global--FontSize--lg) !important; }\n\n.pf-u-font-size-xl {\n  font-size: var(--pf-global--FontSize--xl) !important; }\n\n.pf-u-font-size-2xl {\n  font-size: var(--pf-global--FontSize--2xl) !important; }\n\n.pf-u-font-size-3xl {\n  font-size: var(--pf-global--FontSize--3xl) !important; }\n\n.pf-u-font-size-4xl {\n  font-size: var(--pf-global--FontSize--4xl) !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-font-size-xs-on-sm {\n    font-size: var(--pf-global--FontSize--xs) !important; }\n  .pf-u-font-size-sm-on-sm {\n    font-size: var(--pf-global--FontSize--sm) !important; }\n  .pf-u-font-size-md-on-sm {\n    font-size: var(--pf-global--FontSize--md) !important; }\n  .pf-u-font-size-lg-on-sm {\n    font-size: var(--pf-global--FontSize--lg) !important; }\n  .pf-u-font-size-xl-on-sm {\n    font-size: var(--pf-global--FontSize--xl) !important; }\n  .pf-u-font-size-2xl-on-sm {\n    font-size: var(--pf-global--FontSize--2xl) !important; }\n  .pf-u-font-size-3xl-on-sm {\n    font-size: var(--pf-global--FontSize--3xl) !important; }\n  .pf-u-font-size-4xl-on-sm {\n    font-size: var(--pf-global--FontSize--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-font-size-xs-on-md {\n    font-size: var(--pf-global--FontSize--xs) !important; }\n  .pf-u-font-size-sm-on-md {\n    font-size: var(--pf-global--FontSize--sm) !important; }\n  .pf-u-font-size-md-on-md {\n    font-size: var(--pf-global--FontSize--md) !important; }\n  .pf-u-font-size-lg-on-md {\n    font-size: var(--pf-global--FontSize--lg) !important; }\n  .pf-u-font-size-xl-on-md {\n    font-size: var(--pf-global--FontSize--xl) !important; }\n  .pf-u-font-size-2xl-on-md {\n    font-size: var(--pf-global--FontSize--2xl) !important; }\n  .pf-u-font-size-3xl-on-md {\n    font-size: var(--pf-global--FontSize--3xl) !important; }\n  .pf-u-font-size-4xl-on-md {\n    font-size: var(--pf-global--FontSize--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-font-size-xs-on-lg {\n    font-size: var(--pf-global--FontSize--xs) !important; }\n  .pf-u-font-size-sm-on-lg {\n    font-size: var(--pf-global--FontSize--sm) !important; }\n  .pf-u-font-size-md-on-lg {\n    font-size: var(--pf-global--FontSize--md) !important; }\n  .pf-u-font-size-lg-on-lg {\n    font-size: var(--pf-global--FontSize--lg) !important; }\n  .pf-u-font-size-xl-on-lg {\n    font-size: var(--pf-global--FontSize--xl) !important; }\n  .pf-u-font-size-2xl-on-lg {\n    font-size: var(--pf-global--FontSize--2xl) !important; }\n  .pf-u-font-size-3xl-on-lg {\n    font-size: var(--pf-global--FontSize--3xl) !important; }\n  .pf-u-font-size-4xl-on-lg {\n    font-size: var(--pf-global--FontSize--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-font-size-xs-on-xl {\n    font-size: var(--pf-global--FontSize--xs) !important; }\n  .pf-u-font-size-sm-on-xl {\n    font-size: var(--pf-global--FontSize--sm) !important; }\n  .pf-u-font-size-md-on-xl {\n    font-size: var(--pf-global--FontSize--md) !important; }\n  .pf-u-font-size-lg-on-xl {\n    font-size: var(--pf-global--FontSize--lg) !important; }\n  .pf-u-font-size-xl-on-xl {\n    font-size: var(--pf-global--FontSize--xl) !important; }\n  .pf-u-font-size-2xl-on-xl {\n    font-size: var(--pf-global--FontSize--2xl) !important; }\n  .pf-u-font-size-3xl-on-xl {\n    font-size: var(--pf-global--FontSize--3xl) !important; }\n  .pf-u-font-size-4xl-on-xl {\n    font-size: var(--pf-global--FontSize--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-font-size-xs-on-2xl {\n    font-size: var(--pf-global--FontSize--xs) !important; }\n  .pf-u-font-size-sm-on-2xl {\n    font-size: var(--pf-global--FontSize--sm) !important; }\n  .pf-u-font-size-md-on-2xl {\n    font-size: var(--pf-global--FontSize--md) !important; }\n  .pf-u-font-size-lg-on-2xl {\n    font-size: var(--pf-global--FontSize--lg) !important; }\n  .pf-u-font-size-xl-on-2xl {\n    font-size: var(--pf-global--FontSize--xl) !important; }\n  .pf-u-font-size-2xl-on-2xl {\n    font-size: var(--pf-global--FontSize--2xl) !important; }\n  .pf-u-font-size-3xl-on-2xl {\n    font-size: var(--pf-global--FontSize--3xl) !important; }\n  .pf-u-font-size-4xl-on-2xl {\n    font-size: var(--pf-global--FontSize--4xl) !important; } }\n\n.pf-u-font-weight-light {\n  font-weight: var(--pf-global--FontWeight--light) !important; }\n\n.pf-u-font-weight-normal {\n  font-weight: var(--pf-global--FontWeight--normal) !important; }\n\n.pf-u-font-weight-bold {\n  font-weight: var(--pf-global--FontWeight--bold) !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-font-weight-light-on-sm {\n    font-weight: var(--pf-global--FontWeight--light) !important; }\n  .pf-u-font-weight-normal-on-sm {\n    font-weight: var(--pf-global--FontWeight--normal) !important; }\n  .pf-u-font-weight-bold-on-sm {\n    font-weight: var(--pf-global--FontWeight--bold) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-font-weight-light-on-md {\n    font-weight: var(--pf-global--FontWeight--light) !important; }\n  .pf-u-font-weight-normal-on-md {\n    font-weight: var(--pf-global--FontWeight--normal) !important; }\n  .pf-u-font-weight-bold-on-md {\n    font-weight: var(--pf-global--FontWeight--bold) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-font-weight-light-on-lg {\n    font-weight: var(--pf-global--FontWeight--light) !important; }\n  .pf-u-font-weight-normal-on-lg {\n    font-weight: var(--pf-global--FontWeight--normal) !important; }\n  .pf-u-font-weight-bold-on-lg {\n    font-weight: var(--pf-global--FontWeight--bold) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-font-weight-light-on-xl {\n    font-weight: var(--pf-global--FontWeight--light) !important; }\n  .pf-u-font-weight-normal-on-xl {\n    font-weight: var(--pf-global--FontWeight--normal) !important; }\n  .pf-u-font-weight-bold-on-xl {\n    font-weight: var(--pf-global--FontWeight--bold) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-font-weight-light-on-2xl {\n    font-weight: var(--pf-global--FontWeight--light) !important; }\n  .pf-u-font-weight-normal-on-2xl {\n    font-weight: var(--pf-global--FontWeight--normal) !important; }\n  .pf-u-font-weight-bold-on-2xl {\n    font-weight: var(--pf-global--FontWeight--bold) !important; } }\n\n.pf-u-color-100 {\n  color: var(--pf-global--Color--100) !important; }\n\n.pf-u-color-200 {\n  color: var(--pf-global--Color--200) !important; }\n\n.pf-u-color-300 {\n  color: var(--pf-global--Color--300) !important; }\n\n.pf-u-color-400 {\n  color: var(--pf-global--Color--400) !important; }\n\n.pf-u-icon-color-light {\n  color: var(--pf-global--icon--Color--light) !important; }\n\n.pf-u-icon-color-dark {\n  color: var(--pf-global--icon--Color--dark) !important; }\n\n.pf-u-link-color {\n  color: var(--pf-global--link--Color) !important; }\n\n.pf-u-active-color-100 {\n  color: var(--pf-global--active-color--100) !important; }\n\n.pf-u-active-color-200 {\n  color: var(--pf-global--active-color--200) !important; }\n\n.pf-u-active-color-300 {\n  color: var(--pf-global--active-color--300) !important; }\n\n.pf-u-active-color-400 {\n  color: var(--pf-global--active-color--400) !important; }\n\n.pf-u-disabled-color-100 {\n  color: var(--pf-global--disabled-color--100) !important; }\n\n.pf-u-disabled-color-200 {\n  color: var(--pf-global--disabled-color--200) !important; }\n\n.pf-u-disabled-color-300 {\n  color: var(--pf-global--disabled-color--300) !important; }\n\n.pf-u-primary-color-100 {\n  color: var(--pf-global--primary-color--100) !important; }\n\n.pf-u-primary-color-200 {\n  color: var(--pf-global--primary-color--200) !important; }\n\n.pf-u-secondary-color-100 {\n  color: var(--pf-global--secondary-color--100) !important; }\n\n.pf-u-default-color-100 {\n  color: var(--pf-global--default-color--100) !important; }\n\n.pf-u-default-color-200 {\n  color: var(--pf-global--default-color--200) !important; }\n\n.pf-u-default-color-300 {\n  color: var(--pf-global--default-color--300) !important; }\n\n.pf-u-success-color-100 {\n  color: var(--pf-global--success-color--100) !important; }\n\n.pf-u-success-color-200 {\n  color: var(--pf-global--success-color--200) !important; }\n\n.pf-u-info-color-100 {\n  color: var(--pf-global--info-color--100) !important; }\n\n.pf-u-info-color-200 {\n  color: var(--pf-global--info-color--200) !important; }\n\n.pf-u-warning-color-100 {\n  color: var(--pf-global--warning-color--100) !important; }\n\n.pf-u-warning-color-200 {\n  color: var(--pf-global--warning-color--200) !important; }\n\n.pf-u-danger-color-100 {\n  color: var(--pf-global--danger-color--100) !important; }\n\n.pf-u-danger-color-200 {\n  color: var(--pf-global--danger-color--200) !important; }\n\n.pf-u-danger-color-300 {\n  color: var(--pf-global--danger-color--300) !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-color-100-on-sm {\n    color: var(--pf-global--Color--100) !important; }\n  .pf-u-color-200-on-sm {\n    color: var(--pf-global--Color--200) !important; }\n  .pf-u-color-300-on-sm {\n    color: var(--pf-global--Color--300) !important; }\n  .pf-u-color-400-on-sm {\n    color: var(--pf-global--Color--400) !important; }\n  .pf-u-icon-color-light-on-sm {\n    color: var(--pf-global--icon--Color--light) !important; }\n  .pf-u-icon-color-dark-on-sm {\n    color: var(--pf-global--icon--Color--dark) !important; }\n  .pf-u-link-color-on-sm {\n    color: var(--pf-global--link--Color) !important; }\n  .pf-u-active-color-100-on-sm {\n    color: var(--pf-global--active-color--100) !important; }\n  .pf-u-active-color-200-on-sm {\n    color: var(--pf-global--active-color--200) !important; }\n  .pf-u-active-color-300-on-sm {\n    color: var(--pf-global--active-color--300) !important; }\n  .pf-u-active-color-400-on-sm {\n    color: var(--pf-global--active-color--400) !important; }\n  .pf-u-disabled-color-100-on-sm {\n    color: var(--pf-global--disabled-color--100) !important; }\n  .pf-u-disabled-color-200-on-sm {\n    color: var(--pf-global--disabled-color--200) !important; }\n  .pf-u-disabled-color-300-on-sm {\n    color: var(--pf-global--disabled-color--300) !important; }\n  .pf-u-primary-color-100-on-sm {\n    color: var(--pf-global--primary-color--100) !important; }\n  .pf-u-primary-color-200-on-sm {\n    color: var(--pf-global--primary-color--200) !important; }\n  .pf-u-secondary-color-100-on-sm {\n    color: var(--pf-global--secondary-color--100) !important; }\n  .pf-u-default-color-100-on-sm {\n    color: var(--pf-global--default-color--100) !important; }\n  .pf-u-default-color-200-on-sm {\n    color: var(--pf-global--default-color--200) !important; }\n  .pf-u-default-color-300-on-sm {\n    color: var(--pf-global--default-color--300) !important; }\n  .pf-u-success-color-100-on-sm {\n    color: var(--pf-global--success-color--100) !important; }\n  .pf-u-success-color-200-on-sm {\n    color: var(--pf-global--success-color--200) !important; }\n  .pf-u-info-color-100-on-sm {\n    color: var(--pf-global--info-color--100) !important; }\n  .pf-u-info-color-200-on-sm {\n    color: var(--pf-global--info-color--200) !important; }\n  .pf-u-warning-color-100-on-sm {\n    color: var(--pf-global--warning-color--100) !important; }\n  .pf-u-warning-color-200-on-sm {\n    color: var(--pf-global--warning-color--200) !important; }\n  .pf-u-danger-color-100-on-sm {\n    color: var(--pf-global--danger-color--100) !important; }\n  .pf-u-danger-color-200-on-sm {\n    color: var(--pf-global--danger-color--200) !important; }\n  .pf-u-danger-color-300-on-sm {\n    color: var(--pf-global--danger-color--300) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-color-100-on-md {\n    color: var(--pf-global--Color--100) !important; }\n  .pf-u-color-200-on-md {\n    color: var(--pf-global--Color--200) !important; }\n  .pf-u-color-300-on-md {\n    color: var(--pf-global--Color--300) !important; }\n  .pf-u-color-400-on-md {\n    color: var(--pf-global--Color--400) !important; }\n  .pf-u-icon-color-light-on-md {\n    color: var(--pf-global--icon--Color--light) !important; }\n  .pf-u-icon-color-dark-on-md {\n    color: var(--pf-global--icon--Color--dark) !important; }\n  .pf-u-link-color-on-md {\n    color: var(--pf-global--link--Color) !important; }\n  .pf-u-active-color-100-on-md {\n    color: var(--pf-global--active-color--100) !important; }\n  .pf-u-active-color-200-on-md {\n    color: var(--pf-global--active-color--200) !important; }\n  .pf-u-active-color-300-on-md {\n    color: var(--pf-global--active-color--300) !important; }\n  .pf-u-active-color-400-on-md {\n    color: var(--pf-global--active-color--400) !important; }\n  .pf-u-disabled-color-100-on-md {\n    color: var(--pf-global--disabled-color--100) !important; }\n  .pf-u-disabled-color-200-on-md {\n    color: var(--pf-global--disabled-color--200) !important; }\n  .pf-u-disabled-color-300-on-md {\n    color: var(--pf-global--disabled-color--300) !important; }\n  .pf-u-primary-color-100-on-md {\n    color: var(--pf-global--primary-color--100) !important; }\n  .pf-u-primary-color-200-on-md {\n    color: var(--pf-global--primary-color--200) !important; }\n  .pf-u-secondary-color-100-on-md {\n    color: var(--pf-global--secondary-color--100) !important; }\n  .pf-u-default-color-100-on-md {\n    color: var(--pf-global--default-color--100) !important; }\n  .pf-u-default-color-200-on-md {\n    color: var(--pf-global--default-color--200) !important; }\n  .pf-u-default-color-300-on-md {\n    color: var(--pf-global--default-color--300) !important; }\n  .pf-u-success-color-100-on-md {\n    color: var(--pf-global--success-color--100) !important; }\n  .pf-u-success-color-200-on-md {\n    color: var(--pf-global--success-color--200) !important; }\n  .pf-u-info-color-100-on-md {\n    color: var(--pf-global--info-color--100) !important; }\n  .pf-u-info-color-200-on-md {\n    color: var(--pf-global--info-color--200) !important; }\n  .pf-u-warning-color-100-on-md {\n    color: var(--pf-global--warning-color--100) !important; }\n  .pf-u-warning-color-200-on-md {\n    color: var(--pf-global--warning-color--200) !important; }\n  .pf-u-danger-color-100-on-md {\n    color: var(--pf-global--danger-color--100) !important; }\n  .pf-u-danger-color-200-on-md {\n    color: var(--pf-global--danger-color--200) !important; }\n  .pf-u-danger-color-300-on-md {\n    color: var(--pf-global--danger-color--300) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-color-100-on-lg {\n    color: var(--pf-global--Color--100) !important; }\n  .pf-u-color-200-on-lg {\n    color: var(--pf-global--Color--200) !important; }\n  .pf-u-color-300-on-lg {\n    color: var(--pf-global--Color--300) !important; }\n  .pf-u-color-400-on-lg {\n    color: var(--pf-global--Color--400) !important; }\n  .pf-u-icon-color-light-on-lg {\n    color: var(--pf-global--icon--Color--light) !important; }\n  .pf-u-icon-color-dark-on-lg {\n    color: var(--pf-global--icon--Color--dark) !important; }\n  .pf-u-link-color-on-lg {\n    color: var(--pf-global--link--Color) !important; }\n  .pf-u-active-color-100-on-lg {\n    color: var(--pf-global--active-color--100) !important; }\n  .pf-u-active-color-200-on-lg {\n    color: var(--pf-global--active-color--200) !important; }\n  .pf-u-active-color-300-on-lg {\n    color: var(--pf-global--active-color--300) !important; }\n  .pf-u-active-color-400-on-lg {\n    color: var(--pf-global--active-color--400) !important; }\n  .pf-u-disabled-color-100-on-lg {\n    color: var(--pf-global--disabled-color--100) !important; }\n  .pf-u-disabled-color-200-on-lg {\n    color: var(--pf-global--disabled-color--200) !important; }\n  .pf-u-disabled-color-300-on-lg {\n    color: var(--pf-global--disabled-color--300) !important; }\n  .pf-u-primary-color-100-on-lg {\n    color: var(--pf-global--primary-color--100) !important; }\n  .pf-u-primary-color-200-on-lg {\n    color: var(--pf-global--primary-color--200) !important; }\n  .pf-u-secondary-color-100-on-lg {\n    color: var(--pf-global--secondary-color--100) !important; }\n  .pf-u-default-color-100-on-lg {\n    color: var(--pf-global--default-color--100) !important; }\n  .pf-u-default-color-200-on-lg {\n    color: var(--pf-global--default-color--200) !important; }\n  .pf-u-default-color-300-on-lg {\n    color: var(--pf-global--default-color--300) !important; }\n  .pf-u-success-color-100-on-lg {\n    color: var(--pf-global--success-color--100) !important; }\n  .pf-u-success-color-200-on-lg {\n    color: var(--pf-global--success-color--200) !important; }\n  .pf-u-info-color-100-on-lg {\n    color: var(--pf-global--info-color--100) !important; }\n  .pf-u-info-color-200-on-lg {\n    color: var(--pf-global--info-color--200) !important; }\n  .pf-u-warning-color-100-on-lg {\n    color: var(--pf-global--warning-color--100) !important; }\n  .pf-u-warning-color-200-on-lg {\n    color: var(--pf-global--warning-color--200) !important; }\n  .pf-u-danger-color-100-on-lg {\n    color: var(--pf-global--danger-color--100) !important; }\n  .pf-u-danger-color-200-on-lg {\n    color: var(--pf-global--danger-color--200) !important; }\n  .pf-u-danger-color-300-on-lg {\n    color: var(--pf-global--danger-color--300) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-color-100-on-xl {\n    color: var(--pf-global--Color--100) !important; }\n  .pf-u-color-200-on-xl {\n    color: var(--pf-global--Color--200) !important; }\n  .pf-u-color-300-on-xl {\n    color: var(--pf-global--Color--300) !important; }\n  .pf-u-color-400-on-xl {\n    color: var(--pf-global--Color--400) !important; }\n  .pf-u-icon-color-light-on-xl {\n    color: var(--pf-global--icon--Color--light) !important; }\n  .pf-u-icon-color-dark-on-xl {\n    color: var(--pf-global--icon--Color--dark) !important; }\n  .pf-u-link-color-on-xl {\n    color: var(--pf-global--link--Color) !important; }\n  .pf-u-active-color-100-on-xl {\n    color: var(--pf-global--active-color--100) !important; }\n  .pf-u-active-color-200-on-xl {\n    color: var(--pf-global--active-color--200) !important; }\n  .pf-u-active-color-300-on-xl {\n    color: var(--pf-global--active-color--300) !important; }\n  .pf-u-active-color-400-on-xl {\n    color: var(--pf-global--active-color--400) !important; }\n  .pf-u-disabled-color-100-on-xl {\n    color: var(--pf-global--disabled-color--100) !important; }\n  .pf-u-disabled-color-200-on-xl {\n    color: var(--pf-global--disabled-color--200) !important; }\n  .pf-u-disabled-color-300-on-xl {\n    color: var(--pf-global--disabled-color--300) !important; }\n  .pf-u-primary-color-100-on-xl {\n    color: var(--pf-global--primary-color--100) !important; }\n  .pf-u-primary-color-200-on-xl {\n    color: var(--pf-global--primary-color--200) !important; }\n  .pf-u-secondary-color-100-on-xl {\n    color: var(--pf-global--secondary-color--100) !important; }\n  .pf-u-default-color-100-on-xl {\n    color: var(--pf-global--default-color--100) !important; }\n  .pf-u-default-color-200-on-xl {\n    color: var(--pf-global--default-color--200) !important; }\n  .pf-u-default-color-300-on-xl {\n    color: var(--pf-global--default-color--300) !important; }\n  .pf-u-success-color-100-on-xl {\n    color: var(--pf-global--success-color--100) !important; }\n  .pf-u-success-color-200-on-xl {\n    color: var(--pf-global--success-color--200) !important; }\n  .pf-u-info-color-100-on-xl {\n    color: var(--pf-global--info-color--100) !important; }\n  .pf-u-info-color-200-on-xl {\n    color: var(--pf-global--info-color--200) !important; }\n  .pf-u-warning-color-100-on-xl {\n    color: var(--pf-global--warning-color--100) !important; }\n  .pf-u-warning-color-200-on-xl {\n    color: var(--pf-global--warning-color--200) !important; }\n  .pf-u-danger-color-100-on-xl {\n    color: var(--pf-global--danger-color--100) !important; }\n  .pf-u-danger-color-200-on-xl {\n    color: var(--pf-global--danger-color--200) !important; }\n  .pf-u-danger-color-300-on-xl {\n    color: var(--pf-global--danger-color--300) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-color-100-on-2xl {\n    color: var(--pf-global--Color--100) !important; }\n  .pf-u-color-200-on-2xl {\n    color: var(--pf-global--Color--200) !important; }\n  .pf-u-color-300-on-2xl {\n    color: var(--pf-global--Color--300) !important; }\n  .pf-u-color-400-on-2xl {\n    color: var(--pf-global--Color--400) !important; }\n  .pf-u-icon-color-light-on-2xl {\n    color: var(--pf-global--icon--Color--light) !important; }\n  .pf-u-icon-color-dark-on-2xl {\n    color: var(--pf-global--icon--Color--dark) !important; }\n  .pf-u-link-color-on-2xl {\n    color: var(--pf-global--link--Color) !important; }\n  .pf-u-active-color-100-on-2xl {\n    color: var(--pf-global--active-color--100) !important; }\n  .pf-u-active-color-200-on-2xl {\n    color: var(--pf-global--active-color--200) !important; }\n  .pf-u-active-color-300-on-2xl {\n    color: var(--pf-global--active-color--300) !important; }\n  .pf-u-active-color-400-on-2xl {\n    color: var(--pf-global--active-color--400) !important; }\n  .pf-u-disabled-color-100-on-2xl {\n    color: var(--pf-global--disabled-color--100) !important; }\n  .pf-u-disabled-color-200-on-2xl {\n    color: var(--pf-global--disabled-color--200) !important; }\n  .pf-u-disabled-color-300-on-2xl {\n    color: var(--pf-global--disabled-color--300) !important; }\n  .pf-u-primary-color-100-on-2xl {\n    color: var(--pf-global--primary-color--100) !important; }\n  .pf-u-primary-color-200-on-2xl {\n    color: var(--pf-global--primary-color--200) !important; }\n  .pf-u-secondary-color-100-on-2xl {\n    color: var(--pf-global--secondary-color--100) !important; }\n  .pf-u-default-color-100-on-2xl {\n    color: var(--pf-global--default-color--100) !important; }\n  .pf-u-default-color-200-on-2xl {\n    color: var(--pf-global--default-color--200) !important; }\n  .pf-u-default-color-300-on-2xl {\n    color: var(--pf-global--default-color--300) !important; }\n  .pf-u-success-color-100-on-2xl {\n    color: var(--pf-global--success-color--100) !important; }\n  .pf-u-success-color-200-on-2xl {\n    color: var(--pf-global--success-color--200) !important; }\n  .pf-u-info-color-100-on-2xl {\n    color: var(--pf-global--info-color--100) !important; }\n  .pf-u-info-color-200-on-2xl {\n    color: var(--pf-global--info-color--200) !important; }\n  .pf-u-warning-color-100-on-2xl {\n    color: var(--pf-global--warning-color--100) !important; }\n  .pf-u-warning-color-200-on-2xl {\n    color: var(--pf-global--warning-color--200) !important; }\n  .pf-u-danger-color-100-on-2xl {\n    color: var(--pf-global--danger-color--100) !important; }\n  .pf-u-danger-color-200-on-2xl {\n    color: var(--pf-global--danger-color--200) !important; }\n  .pf-u-danger-color-300-on-2xl {\n    color: var(--pf-global--danger-color--300) !important; } }\n\n.pf-u-text-break-word {\n  word-break: break-word !important; }\n\n.pf-u-text-nowrap {\n  white-space: nowrap !important; }\n\n.pf-u-text-wrap {\n  white-space: normal !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-text-break-word-on-sm {\n    word-break: break-word !important; }\n  .pf-u-text-nowrap-on-sm {\n    white-space: nowrap !important; }\n  .pf-u-text-wrap-on-sm {\n    white-space: normal !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-text-break-word-on-md {\n    word-break: break-word !important; }\n  .pf-u-text-nowrap-on-md {\n    white-space: nowrap !important; }\n  .pf-u-text-wrap-on-md {\n    white-space: normal !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-text-break-word-on-lg {\n    word-break: break-word !important; }\n  .pf-u-text-nowrap-on-lg {\n    white-space: nowrap !important; }\n  .pf-u-text-wrap-on-lg {\n    white-space: normal !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-text-break-word-on-xl {\n    word-break: break-word !important; }\n  .pf-u-text-nowrap-on-xl {\n    white-space: nowrap !important; }\n  .pf-u-text-wrap-on-xl {\n    white-space: normal !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-text-break-word-on-2xl {\n    word-break: break-word !important; }\n  .pf-u-text-nowrap-on-2xl {\n    white-space: nowrap !important; }\n  .pf-u-text-wrap-on-2xl {\n    white-space: normal !important; } }\n\n.pf-u-text-truncate {\n  min-width: 0 !important;\n  max-width: 100% !important;\n  overflow: hidden !important;\n  text-overflow: ellipsis !important;\n  white-space: nowrap !important; }\n");const On=[{url:new RegExp("^overview$"),element:A`<pb-site-shell url="/overview/"><div slot="body"></div></pb-site-shell>`}];let An=class extends tn{constructor(){super(),window.addEventListener("hashchange",(n=>this.navigate()))}static get styles(){return[Fn,Dn]}firstUpdated(){this.navigate()}navigate(){let n=window.location.hash.slice(1,1/0);""===n&&(n=this.defaultUrl),On.forEach((e=>{let t=null;e.url.exec(n)&&(t=e),t||(console.log(`passbook/router: route "${n}" not defined, defaulting to shell`),t={url:RegExp(""),element:A`<pb-site-shell url="${n}"><div slot="body"></div></pb-site-shell>`}),this.activeRoute=t}))}render(){var n;return null===(n=this.activeRoute)||void 0===n?void 0:n.element}};n([$()],An.prototype,"activeRoute",void 0),n([$()],An.prototype,"defaultUrl",void 0),An=n([X("pb-router-outlet")],An);var In=xn((function(n,e){n.exports=function(){var e,t;function o(){return e.apply(null,arguments)}function a(n){e=n}function r(n){return n instanceof Array||"[object Array]"===Object.prototype.toString.call(n)}function i(n){return null!=n&&"[object Object]"===Object.prototype.toString.call(n)}function l(n,e){return Object.prototype.hasOwnProperty.call(n,e)}function f(n){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(n).length;var e;for(e in n)if(l(n,e))return!1;return!0}function p(n){return void 0===n}function c(n){return"number"==typeof n||"[object Number]"===Object.prototype.toString.call(n)}function d(n){return n instanceof Date||"[object Date]"===Object.prototype.toString.call(n)}function s(n,e){var t,o=[];for(t=0;t<n.length;++t)o.push(e(n[t],t));return o}function m(n,e){for(var t in e)l(e,t)&&(n[t]=e[t]);return l(e,"toString")&&(n.toString=e.toString),l(e,"valueOf")&&(n.valueOf=e.valueOf),n}function g(n,e,t,o){return Xt(n,e,t,o,!0).utc()}function b(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function u(n){return null==n._pf&&(n._pf=b()),n._pf}function _(n){if(null==n._isValid){var e=u(n),o=t.call(e.parsedDateParts,(function(n){return null!=n})),a=!isNaN(n._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidEra&&!e.invalidMonth&&!e.invalidWeekday&&!e.weekdayMismatch&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&o);if(n._strict&&(a=a&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(n))return a;n._isValid=a}return n._isValid}function h(n){var e=g(NaN);return null!=n?m(u(e),n):u(e).userInvalidated=!0,e}t=Array.prototype.some?Array.prototype.some:function(n){var e,t=Object(this),o=t.length>>>0;for(e=0;e<o;e++)if(e in t&&n.call(this,t[e],e,t))return!0;return!1};var v=o.momentProperties=[],x=!1;function w(n,e){var t,o,a;if(p(e._isAMomentObject)||(n._isAMomentObject=e._isAMomentObject),p(e._i)||(n._i=e._i),p(e._f)||(n._f=e._f),p(e._l)||(n._l=e._l),p(e._strict)||(n._strict=e._strict),p(e._tzm)||(n._tzm=e._tzm),p(e._isUTC)||(n._isUTC=e._isUTC),p(e._offset)||(n._offset=e._offset),p(e._pf)||(n._pf=u(e)),p(e._locale)||(n._locale=e._locale),v.length>0)for(t=0;t<v.length;t++)p(a=e[o=v[t]])||(n[o]=a);return n}function y(n){w(this,n),this._d=new Date(null!=n._d?n._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===x&&(x=!0,o.updateOffset(this),x=!1)}function k(n){return n instanceof y||null!=n&&null!=n._isAMomentObject}function C(n){!1===o.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+n)}function B(n,e){var t=!0;return m((function(){if(null!=o.deprecationHandler&&o.deprecationHandler(null,n),t){var a,r,i,f=[];for(r=0;r<arguments.length;r++){if(a="","object"==typeof arguments[r]){for(i in a+="\n["+r+"] ",arguments[0])l(arguments[0],i)&&(a+=i+": "+arguments[0][i]+", ");a=a.slice(0,-2)}else a=arguments[r];f.push(a)}C(n+"\nArguments: "+Array.prototype.slice.call(f).join("")+"\n"+(new Error).stack),t=!1}return e.apply(this,arguments)}),e)}var P,S={};function T(n,e){null!=o.deprecationHandler&&o.deprecationHandler(n,e),S[n]||(C(e),S[n]=!0)}function M(n){return"undefined"!=typeof Function&&n instanceof Function||"[object Function]"===Object.prototype.toString.call(n)}function L(n){var e,t;for(t in n)l(n,t)&&(M(e=n[t])?this[t]=e:this["_"+t]=e);this._config=n,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function z(n,e){var t,o=m({},n);for(t in e)l(e,t)&&(i(n[t])&&i(e[t])?(o[t]={},m(o[t],n[t]),m(o[t],e[t])):null!=e[t]?o[t]=e[t]:delete o[t]);for(t in n)l(n,t)&&!l(e,t)&&i(n[t])&&(o[t]=m({},o[t]));return o}function W(n){null!=n&&this.set(n)}o.suppressDeprecationWarnings=!1,o.deprecationHandler=null,P=Object.keys?Object.keys:function(n){var e,t=[];for(e in n)l(n,e)&&t.push(e);return t};var R={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function F(n,e,t){var o=this._calendar[n]||this._calendar.sameElse;return M(o)?o.call(e,t):o}function D(n,e,t){var o=""+Math.abs(n),a=e-o.length;return(n>=0?t?"+":"":"-")+Math.pow(10,Math.max(0,a)).toString().substr(1)+o}var O=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,A=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,I={},H={};function N(n,e,t,o){var a=o;"string"==typeof o&&(a=function(){return this[o]()}),n&&(H[n]=a),e&&(H[e[0]]=function(){return D(a.apply(this,arguments),e[1],e[2])}),t&&(H[t]=function(){return this.localeData().ordinal(a.apply(this,arguments),n)})}function E(n){return n.match(/\[[\s\S]/)?n.replace(/^\[|\]$/g,""):n.replace(/\\/g,"")}function j(n){var e,t,o=n.match(O);for(e=0,t=o.length;e<t;e++)H[o[e]]?o[e]=H[o[e]]:o[e]=E(o[e]);return function(e){var a,r="";for(a=0;a<t;a++)r+=M(o[a])?o[a].call(e,n):o[a];return r}}function G(n,e){return n.isValid()?(e=Y(e,n.localeData()),I[e]=I[e]||j(e),I[e](n)):n.localeData().invalidDate()}function Y(n,e){var t=5;function o(n){return e.longDateFormat(n)||n}for(A.lastIndex=0;t>=0&&A.test(n);)n=n.replace(A,o),A.lastIndex=0,t-=1;return n}var V={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function q(n){var e=this._longDateFormat[n],t=this._longDateFormat[n.toUpperCase()];return e||!t?e:(this._longDateFormat[n]=t.match(O).map((function(n){return"MMMM"===n||"MM"===n||"DD"===n||"dddd"===n?n.slice(1):n})).join(""),this._longDateFormat[n])}var U="Invalid date";function X(){return this._invalidDate}var Z="%d",$=/\d{1,2}/;function K(n){return this._ordinal.replace("%d",n)}var J={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function Q(n,e,t,o){var a=this._relativeTime[t];return M(a)?a(n,e,t,o):a.replace(/%d/i,n)}function nn(n,e){var t=this._relativeTime[n>0?"future":"past"];return M(t)?t(e):t.replace(/%s/i,e)}var en={};function tn(n,e){var t=n.toLowerCase();en[t]=en[t+"s"]=en[e]=n}function on(n){return"string"==typeof n?en[n]||en[n.toLowerCase()]:void 0}function an(n){var e,t,o={};for(t in n)l(n,t)&&(e=on(t))&&(o[e]=n[t]);return o}var rn={};function ln(n,e){rn[n]=e}function fn(n){var e,t=[];for(e in n)l(n,e)&&t.push({unit:e,priority:rn[e]});return t.sort((function(n,e){return n.priority-e.priority})),t}function pn(n){return n%4==0&&n%100!=0||n%400==0}function cn(n){return n<0?Math.ceil(n)||0:Math.floor(n)}function dn(n){var e=+n,t=0;return 0!==e&&isFinite(e)&&(t=cn(e)),t}function sn(n,e){return function(t){return null!=t?(gn(this,n,t),o.updateOffset(this,e),this):mn(this,n)}}function mn(n,e){return n.isValid()?n._d["get"+(n._isUTC?"UTC":"")+e]():NaN}function gn(n,e,t){n.isValid()&&!isNaN(t)&&("FullYear"===e&&pn(n.year())&&1===n.month()&&29===n.date()?(t=dn(t),n._d["set"+(n._isUTC?"UTC":"")+e](t,n.month(),ee(t,n.month()))):n._d["set"+(n._isUTC?"UTC":"")+e](t))}function bn(n){return M(this[n=on(n)])?this[n]():this}function un(n,e){if("object"==typeof n){var t,o=fn(n=an(n));for(t=0;t<o.length;t++)this[o[t].unit](n[o[t].unit])}else if(M(this[n=on(n)]))return this[n](e);return this}var _n,hn=/\d/,xn=/\d\d/,wn=/\d{3}/,yn=/\d{4}/,kn=/[+-]?\d{6}/,Cn=/\d\d?/,Bn=/\d\d\d\d?/,Pn=/\d\d\d\d\d\d?/,Sn=/\d{1,3}/,Tn=/\d{1,4}/,Mn=/[+-]?\d{1,6}/,Ln=/\d+/,zn=/[+-]?\d+/,Wn=/Z|[+-]\d\d:?\d\d/gi,Rn=/Z|[+-]\d\d(?::?\d\d)?/gi,Fn=/[+-]?\d+(\.\d{1,3})?/,Dn=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function On(n,e,t){_n[n]=M(e)?e:function(n,o){return n&&t?t:e}}function An(n,e){return l(_n,n)?_n[n](e._strict,e._locale):new RegExp(In(n))}function In(n){return Hn(n.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(n,e,t,o,a){return e||t||o||a})))}function Hn(n){return n.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}_n={};var Nn={};function En(n,e){var t,o=e;for("string"==typeof n&&(n=[n]),c(e)&&(o=function(n,t){t[e]=dn(n)}),t=0;t<n.length;t++)Nn[n[t]]=o}function jn(n,e){En(n,(function(n,t,o,a){o._w=o._w||{},e(n,o._w,o,a)}))}function Gn(n,e,t){null!=e&&l(Nn,n)&&Nn[n](e,t._a,t,n)}var Yn,Vn=0,qn=1,Un=2,Xn=3,Zn=4,$n=5,Kn=6,Jn=7,Qn=8;function ne(n,e){return(n%e+e)%e}function ee(n,e){if(isNaN(n)||isNaN(e))return NaN;var t=ne(e,12);return n+=(e-t)/12,1===t?pn(n)?29:28:31-t%7%2}Yn=Array.prototype.indexOf?Array.prototype.indexOf:function(n){var e;for(e=0;e<this.length;++e)if(this[e]===n)return e;return-1},N("M",["MM",2],"Mo",(function(){return this.month()+1})),N("MMM",0,0,(function(n){return this.localeData().monthsShort(this,n)})),N("MMMM",0,0,(function(n){return this.localeData().months(this,n)})),tn("month","M"),ln("month",8),On("M",Cn),On("MM",Cn,xn),On("MMM",(function(n,e){return e.monthsShortRegex(n)})),On("MMMM",(function(n,e){return e.monthsRegex(n)})),En(["M","MM"],(function(n,e){e[qn]=dn(n)-1})),En(["MMM","MMMM"],(function(n,e,t,o){var a=t._locale.monthsParse(n,o,t._strict);null!=a?e[qn]=a:u(t).invalidMonth=n}));var te="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),oe="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),ae=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,re=Dn,ie=Dn;function le(n,e){return n?r(this._months)?this._months[n.month()]:this._months[(this._months.isFormat||ae).test(e)?"format":"standalone"][n.month()]:r(this._months)?this._months:this._months.standalone}function fe(n,e){return n?r(this._monthsShort)?this._monthsShort[n.month()]:this._monthsShort[ae.test(e)?"format":"standalone"][n.month()]:r(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function pe(n,e,t){var o,a,r,i=n.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],o=0;o<12;++o)r=g([2e3,o]),this._shortMonthsParse[o]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[o]=this.months(r,"").toLocaleLowerCase();return t?"MMM"===e?-1!==(a=Yn.call(this._shortMonthsParse,i))?a:null:-1!==(a=Yn.call(this._longMonthsParse,i))?a:null:"MMM"===e?-1!==(a=Yn.call(this._shortMonthsParse,i))||-1!==(a=Yn.call(this._longMonthsParse,i))?a:null:-1!==(a=Yn.call(this._longMonthsParse,i))||-1!==(a=Yn.call(this._shortMonthsParse,i))?a:null}function ce(n,e,t){var o,a,r;if(this._monthsParseExact)return pe.call(this,n,e,t);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),o=0;o<12;o++){if(a=g([2e3,o]),t&&!this._longMonthsParse[o]&&(this._longMonthsParse[o]=new RegExp("^"+this.months(a,"").replace(".","")+"$","i"),this._shortMonthsParse[o]=new RegExp("^"+this.monthsShort(a,"").replace(".","")+"$","i")),t||this._monthsParse[o]||(r="^"+this.months(a,"")+"|^"+this.monthsShort(a,""),this._monthsParse[o]=new RegExp(r.replace(".",""),"i")),t&&"MMMM"===e&&this._longMonthsParse[o].test(n))return o;if(t&&"MMM"===e&&this._shortMonthsParse[o].test(n))return o;if(!t&&this._monthsParse[o].test(n))return o}}function de(n,e){var t;if(!n.isValid())return n;if("string"==typeof e)if(/^\d+$/.test(e))e=dn(e);else if(!c(e=n.localeData().monthsParse(e)))return n;return t=Math.min(n.date(),ee(n.year(),e)),n._d["set"+(n._isUTC?"UTC":"")+"Month"](e,t),n}function se(n){return null!=n?(de(this,n),o.updateOffset(this,!0),this):mn(this,"Month")}function me(){return ee(this.year(),this.month())}function ge(n){return this._monthsParseExact?(l(this,"_monthsRegex")||ue.call(this),n?this._monthsShortStrictRegex:this._monthsShortRegex):(l(this,"_monthsShortRegex")||(this._monthsShortRegex=re),this._monthsShortStrictRegex&&n?this._monthsShortStrictRegex:this._monthsShortRegex)}function be(n){return this._monthsParseExact?(l(this,"_monthsRegex")||ue.call(this),n?this._monthsStrictRegex:this._monthsRegex):(l(this,"_monthsRegex")||(this._monthsRegex=ie),this._monthsStrictRegex&&n?this._monthsStrictRegex:this._monthsRegex)}function ue(){function n(n,e){return e.length-n.length}var e,t,o=[],a=[],r=[];for(e=0;e<12;e++)t=g([2e3,e]),o.push(this.monthsShort(t,"")),a.push(this.months(t,"")),r.push(this.months(t,"")),r.push(this.monthsShort(t,""));for(o.sort(n),a.sort(n),r.sort(n),e=0;e<12;e++)o[e]=Hn(o[e]),a[e]=Hn(a[e]);for(e=0;e<24;e++)r[e]=Hn(r[e]);this._monthsRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+o.join("|")+")","i")}function _e(n){return pn(n)?366:365}N("Y",0,0,(function(){var n=this.year();return n<=9999?D(n,4):"+"+n})),N(0,["YY",2],0,(function(){return this.year()%100})),N(0,["YYYY",4],0,"year"),N(0,["YYYYY",5],0,"year"),N(0,["YYYYYY",6,!0],0,"year"),tn("year","y"),ln("year",1),On("Y",zn),On("YY",Cn,xn),On("YYYY",Tn,yn),On("YYYYY",Mn,kn),On("YYYYYY",Mn,kn),En(["YYYYY","YYYYYY"],Vn),En("YYYY",(function(n,e){e[Vn]=2===n.length?o.parseTwoDigitYear(n):dn(n)})),En("YY",(function(n,e){e[Vn]=o.parseTwoDigitYear(n)})),En("Y",(function(n,e){e[Vn]=parseInt(n,10)})),o.parseTwoDigitYear=function(n){return dn(n)+(dn(n)>68?1900:2e3)};var he=sn("FullYear",!0);function ve(){return pn(this.year())}function xe(n,e,t,o,a,r,i){var l;return n<100&&n>=0?(l=new Date(n+400,e,t,o,a,r,i),isFinite(l.getFullYear())&&l.setFullYear(n)):l=new Date(n,e,t,o,a,r,i),l}function we(n){var e,t;return n<100&&n>=0?((t=Array.prototype.slice.call(arguments))[0]=n+400,e=new Date(Date.UTC.apply(null,t)),isFinite(e.getUTCFullYear())&&e.setUTCFullYear(n)):e=new Date(Date.UTC.apply(null,arguments)),e}function ye(n,e,t){var o=7+e-t;return-(7+we(n,0,o).getUTCDay()-e)%7+o-1}function ke(n,e,t,o,a){var r,i,l=1+7*(e-1)+(7+t-o)%7+ye(n,o,a);return l<=0?i=_e(r=n-1)+l:l>_e(n)?(r=n+1,i=l-_e(n)):(r=n,i=l),{year:r,dayOfYear:i}}function Ce(n,e,t){var o,a,r=ye(n.year(),e,t),i=Math.floor((n.dayOfYear()-r-1)/7)+1;return i<1?o=i+Be(a=n.year()-1,e,t):i>Be(n.year(),e,t)?(o=i-Be(n.year(),e,t),a=n.year()+1):(a=n.year(),o=i),{week:o,year:a}}function Be(n,e,t){var o=ye(n,e,t),a=ye(n+1,e,t);return(_e(n)-o+a)/7}function Pe(n){return Ce(n,this._week.dow,this._week.doy).week}N("w",["ww",2],"wo","week"),N("W",["WW",2],"Wo","isoWeek"),tn("week","w"),tn("isoWeek","W"),ln("week",5),ln("isoWeek",5),On("w",Cn),On("ww",Cn,xn),On("W",Cn),On("WW",Cn,xn),jn(["w","ww","W","WW"],(function(n,e,t,o){e[o.substr(0,1)]=dn(n)}));var Se={dow:0,doy:6};function Te(){return this._week.dow}function Me(){return this._week.doy}function Le(n){var e=this.localeData().week(this);return null==n?e:this.add(7*(n-e),"d")}function ze(n){var e=Ce(this,1,4).week;return null==n?e:this.add(7*(n-e),"d")}function We(n,e){return"string"!=typeof n?n:isNaN(n)?"number"==typeof(n=e.weekdaysParse(n))?n:null:parseInt(n,10)}function Re(n,e){return"string"==typeof n?e.weekdaysParse(n)%7||7:isNaN(n)?null:n}function Fe(n,e){return n.slice(e,7).concat(n.slice(0,e))}N("d",0,"do","day"),N("dd",0,0,(function(n){return this.localeData().weekdaysMin(this,n)})),N("ddd",0,0,(function(n){return this.localeData().weekdaysShort(this,n)})),N("dddd",0,0,(function(n){return this.localeData().weekdays(this,n)})),N("e",0,0,"weekday"),N("E",0,0,"isoWeekday"),tn("day","d"),tn("weekday","e"),tn("isoWeekday","E"),ln("day",11),ln("weekday",11),ln("isoWeekday",11),On("d",Cn),On("e",Cn),On("E",Cn),On("dd",(function(n,e){return e.weekdaysMinRegex(n)})),On("ddd",(function(n,e){return e.weekdaysShortRegex(n)})),On("dddd",(function(n,e){return e.weekdaysRegex(n)})),jn(["dd","ddd","dddd"],(function(n,e,t,o){var a=t._locale.weekdaysParse(n,o,t._strict);null!=a?e.d=a:u(t).invalidWeekday=n})),jn(["d","e","E"],(function(n,e,t,o){e[o]=dn(n)}));var De="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Oe="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Ae="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ie=Dn,He=Dn,Ne=Dn;function Ee(n,e){var t=r(this._weekdays)?this._weekdays:this._weekdays[n&&!0!==n&&this._weekdays.isFormat.test(e)?"format":"standalone"];return!0===n?Fe(t,this._week.dow):n?t[n.day()]:t}function je(n){return!0===n?Fe(this._weekdaysShort,this._week.dow):n?this._weekdaysShort[n.day()]:this._weekdaysShort}function Ge(n){return!0===n?Fe(this._weekdaysMin,this._week.dow):n?this._weekdaysMin[n.day()]:this._weekdaysMin}function Ye(n,e,t){var o,a,r,i=n.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],o=0;o<7;++o)r=g([2e3,1]).day(o),this._minWeekdaysParse[o]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[o]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[o]=this.weekdays(r,"").toLocaleLowerCase();return t?"dddd"===e?-1!==(a=Yn.call(this._weekdaysParse,i))?a:null:"ddd"===e?-1!==(a=Yn.call(this._shortWeekdaysParse,i))?a:null:-1!==(a=Yn.call(this._minWeekdaysParse,i))?a:null:"dddd"===e?-1!==(a=Yn.call(this._weekdaysParse,i))||-1!==(a=Yn.call(this._shortWeekdaysParse,i))||-1!==(a=Yn.call(this._minWeekdaysParse,i))?a:null:"ddd"===e?-1!==(a=Yn.call(this._shortWeekdaysParse,i))||-1!==(a=Yn.call(this._weekdaysParse,i))||-1!==(a=Yn.call(this._minWeekdaysParse,i))?a:null:-1!==(a=Yn.call(this._minWeekdaysParse,i))||-1!==(a=Yn.call(this._weekdaysParse,i))||-1!==(a=Yn.call(this._shortWeekdaysParse,i))?a:null}function Ve(n,e,t){var o,a,r;if(this._weekdaysParseExact)return Ye.call(this,n,e,t);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;o<7;o++){if(a=g([2e3,1]).day(o),t&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp("^"+this.weekdays(a,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[o]=new RegExp("^"+this.weekdaysShort(a,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[o]=new RegExp("^"+this.weekdaysMin(a,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[o]||(r="^"+this.weekdays(a,"")+"|^"+this.weekdaysShort(a,"")+"|^"+this.weekdaysMin(a,""),this._weekdaysParse[o]=new RegExp(r.replace(".",""),"i")),t&&"dddd"===e&&this._fullWeekdaysParse[o].test(n))return o;if(t&&"ddd"===e&&this._shortWeekdaysParse[o].test(n))return o;if(t&&"dd"===e&&this._minWeekdaysParse[o].test(n))return o;if(!t&&this._weekdaysParse[o].test(n))return o}}function qe(n){if(!this.isValid())return null!=n?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=n?(n=We(n,this.localeData()),this.add(n-e,"d")):e}function Ue(n){if(!this.isValid())return null!=n?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==n?e:this.add(n-e,"d")}function Xe(n){if(!this.isValid())return null!=n?this:NaN;if(null!=n){var e=Re(n,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7}function Ze(n){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Je.call(this),n?this._weekdaysStrictRegex:this._weekdaysRegex):(l(this,"_weekdaysRegex")||(this._weekdaysRegex=Ie),this._weekdaysStrictRegex&&n?this._weekdaysStrictRegex:this._weekdaysRegex)}function $e(n){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Je.call(this),n?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(l(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=He),this._weekdaysShortStrictRegex&&n?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Ke(n){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Je.call(this),n?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(l(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ne),this._weekdaysMinStrictRegex&&n?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Je(){function n(n,e){return e.length-n.length}var e,t,o,a,r,i=[],l=[],f=[],p=[];for(e=0;e<7;e++)t=g([2e3,1]).day(e),o=Hn(this.weekdaysMin(t,"")),a=Hn(this.weekdaysShort(t,"")),r=Hn(this.weekdays(t,"")),i.push(o),l.push(a),f.push(r),p.push(o),p.push(a),p.push(r);i.sort(n),l.sort(n),f.sort(n),p.sort(n),this._weekdaysRegex=new RegExp("^("+p.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+f.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+i.join("|")+")","i")}function Qe(){return this.hours()%12||12}function nt(){return this.hours()||24}function et(n,e){N(n,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)}))}function tt(n,e){return e._meridiemParse}function ot(n){return"p"===(n+"").toLowerCase().charAt(0)}N("H",["HH",2],0,"hour"),N("h",["hh",2],0,Qe),N("k",["kk",2],0,nt),N("hmm",0,0,(function(){return""+Qe.apply(this)+D(this.minutes(),2)})),N("hmmss",0,0,(function(){return""+Qe.apply(this)+D(this.minutes(),2)+D(this.seconds(),2)})),N("Hmm",0,0,(function(){return""+this.hours()+D(this.minutes(),2)})),N("Hmmss",0,0,(function(){return""+this.hours()+D(this.minutes(),2)+D(this.seconds(),2)})),et("a",!0),et("A",!1),tn("hour","h"),ln("hour",13),On("a",tt),On("A",tt),On("H",Cn),On("h",Cn),On("k",Cn),On("HH",Cn,xn),On("hh",Cn,xn),On("kk",Cn,xn),On("hmm",Bn),On("hmmss",Pn),On("Hmm",Bn),On("Hmmss",Pn),En(["H","HH"],Xn),En(["k","kk"],(function(n,e,t){var o=dn(n);e[Xn]=24===o?0:o})),En(["a","A"],(function(n,e,t){t._isPm=t._locale.isPM(n),t._meridiem=n})),En(["h","hh"],(function(n,e,t){e[Xn]=dn(n),u(t).bigHour=!0})),En("hmm",(function(n,e,t){var o=n.length-2;e[Xn]=dn(n.substr(0,o)),e[Zn]=dn(n.substr(o)),u(t).bigHour=!0})),En("hmmss",(function(n,e,t){var o=n.length-4,a=n.length-2;e[Xn]=dn(n.substr(0,o)),e[Zn]=dn(n.substr(o,2)),e[$n]=dn(n.substr(a)),u(t).bigHour=!0})),En("Hmm",(function(n,e,t){var o=n.length-2;e[Xn]=dn(n.substr(0,o)),e[Zn]=dn(n.substr(o))})),En("Hmmss",(function(n,e,t){var o=n.length-4,a=n.length-2;e[Xn]=dn(n.substr(0,o)),e[Zn]=dn(n.substr(o,2)),e[$n]=dn(n.substr(a))}));var at=/[ap]\.?m?\.?/i,rt=sn("Hours",!0);function it(n,e,t){return n>11?t?"pm":"PM":t?"am":"AM"}var lt,ft={calendar:R,longDateFormat:V,invalidDate:U,ordinal:Z,dayOfMonthOrdinalParse:$,relativeTime:J,months:te,monthsShort:oe,week:Se,weekdays:De,weekdaysMin:Ae,weekdaysShort:Oe,meridiemParse:at},pt={},ct={};function dt(n,e){var t,o=Math.min(n.length,e.length);for(t=0;t<o;t+=1)if(n[t]!==e[t])return t;return o}function st(n){return n?n.toLowerCase().replace("_","-"):n}function mt(n){for(var e,t,o,a,r=0;r<n.length;){for(e=(a=st(n[r]).split("-")).length,t=(t=st(n[r+1]))?t.split("-"):null;e>0;){if(o=gt(a.slice(0,e).join("-")))return o;if(t&&t.length>=e&&dt(a,t)>=e-1)break;e--}r++}return lt}function gt(e){var t=null;if(void 0===pt[e]&&n&&n.exports)try{t=lt._abbr,vn(),bt(t)}catch(n){pt[e]=null}return pt[e]}function bt(n,e){var t;return n&&((t=p(e)?ht(n):ut(n,e))?lt=t:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+n+" not found. Did you forget to load it?")),lt._abbr}function ut(n,e){if(null!==e){var t,o=ft;if(e.abbr=n,null!=pt[n])T("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),o=pt[n]._config;else if(null!=e.parentLocale)if(null!=pt[e.parentLocale])o=pt[e.parentLocale]._config;else{if(null==(t=gt(e.parentLocale)))return ct[e.parentLocale]||(ct[e.parentLocale]=[]),ct[e.parentLocale].push({name:n,config:e}),null;o=t._config}return pt[n]=new W(z(o,e)),ct[n]&&ct[n].forEach((function(n){ut(n.name,n.config)})),bt(n),pt[n]}return delete pt[n],null}function _t(n,e){if(null!=e){var t,o,a=ft;null!=pt[n]&&null!=pt[n].parentLocale?pt[n].set(z(pt[n]._config,e)):(null!=(o=gt(n))&&(a=o._config),e=z(a,e),null==o&&(e.abbr=n),(t=new W(e)).parentLocale=pt[n],pt[n]=t),bt(n)}else null!=pt[n]&&(null!=pt[n].parentLocale?(pt[n]=pt[n].parentLocale,n===bt()&&bt(n)):null!=pt[n]&&delete pt[n]);return pt[n]}function ht(n){var e;if(n&&n._locale&&n._locale._abbr&&(n=n._locale._abbr),!n)return lt;if(!r(n)){if(e=gt(n))return e;n=[n]}return mt(n)}function vt(){return P(pt)}function xt(n){var e,t=n._a;return t&&-2===u(n).overflow&&(e=t[qn]<0||t[qn]>11?qn:t[Un]<1||t[Un]>ee(t[Vn],t[qn])?Un:t[Xn]<0||t[Xn]>24||24===t[Xn]&&(0!==t[Zn]||0!==t[$n]||0!==t[Kn])?Xn:t[Zn]<0||t[Zn]>59?Zn:t[$n]<0||t[$n]>59?$n:t[Kn]<0||t[Kn]>999?Kn:-1,u(n)._overflowDayOfYear&&(e<Vn||e>Un)&&(e=Un),u(n)._overflowWeeks&&-1===e&&(e=Jn),u(n)._overflowWeekday&&-1===e&&(e=Qn),u(n).overflow=e),n}var wt=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,yt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,kt=/Z|[+-]\d\d(?::?\d\d)?/,Ct=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Bt=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Pt=/^\/?Date\((-?\d+)/i,St=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Tt={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Mt(n){var e,t,o,a,r,i,l=n._i,f=wt.exec(l)||yt.exec(l);if(f){for(u(n).iso=!0,e=0,t=Ct.length;e<t;e++)if(Ct[e][1].exec(f[1])){a=Ct[e][0],o=!1!==Ct[e][2];break}if(null==a)return void(n._isValid=!1);if(f[3]){for(e=0,t=Bt.length;e<t;e++)if(Bt[e][1].exec(f[3])){r=(f[2]||" ")+Bt[e][0];break}if(null==r)return void(n._isValid=!1)}if(!o&&null!=r)return void(n._isValid=!1);if(f[4]){if(!kt.exec(f[4]))return void(n._isValid=!1);i="Z"}n._f=a+(r||"")+(i||""),Et(n)}else n._isValid=!1}function Lt(n,e,t,o,a,r){var i=[zt(n),oe.indexOf(e),parseInt(t,10),parseInt(o,10),parseInt(a,10)];return r&&i.push(parseInt(r,10)),i}function zt(n){var e=parseInt(n,10);return e<=49?2e3+e:e<=999?1900+e:e}function Wt(n){return n.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function Rt(n,e,t){return!n||Oe.indexOf(n)===new Date(e[0],e[1],e[2]).getDay()||(u(t).weekdayMismatch=!0,t._isValid=!1,!1)}function Ft(n,e,t){if(n)return Tt[n];if(e)return 0;var o=parseInt(t,10),a=o%100;return(o-a)/100*60+a}function Dt(n){var e,t=St.exec(Wt(n._i));if(t){if(e=Lt(t[4],t[3],t[2],t[5],t[6],t[7]),!Rt(t[1],e,n))return;n._a=e,n._tzm=Ft(t[8],t[9],t[10]),n._d=we.apply(null,n._a),n._d.setUTCMinutes(n._d.getUTCMinutes()-n._tzm),u(n).rfc2822=!0}else n._isValid=!1}function Ot(n){var e=Pt.exec(n._i);null===e?(Mt(n),!1===n._isValid&&(delete n._isValid,Dt(n),!1===n._isValid&&(delete n._isValid,n._strict?n._isValid=!1:o.createFromInputFallback(n)))):n._d=new Date(+e[1])}function At(n,e,t){return null!=n?n:null!=e?e:t}function It(n){var e=new Date(o.now());return n._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function Ht(n){var e,t,o,a,r,i=[];if(!n._d){for(o=It(n),n._w&&null==n._a[Un]&&null==n._a[qn]&&Nt(n),null!=n._dayOfYear&&(r=At(n._a[Vn],o[Vn]),(n._dayOfYear>_e(r)||0===n._dayOfYear)&&(u(n)._overflowDayOfYear=!0),t=we(r,0,n._dayOfYear),n._a[qn]=t.getUTCMonth(),n._a[Un]=t.getUTCDate()),e=0;e<3&&null==n._a[e];++e)n._a[e]=i[e]=o[e];for(;e<7;e++)n._a[e]=i[e]=null==n._a[e]?2===e?1:0:n._a[e];24===n._a[Xn]&&0===n._a[Zn]&&0===n._a[$n]&&0===n._a[Kn]&&(n._nextDay=!0,n._a[Xn]=0),n._d=(n._useUTC?we:xe).apply(null,i),a=n._useUTC?n._d.getUTCDay():n._d.getDay(),null!=n._tzm&&n._d.setUTCMinutes(n._d.getUTCMinutes()-n._tzm),n._nextDay&&(n._a[Xn]=24),n._w&&void 0!==n._w.d&&n._w.d!==a&&(u(n).weekdayMismatch=!0)}}function Nt(n){var e,t,o,a,r,i,l,f,p;null!=(e=n._w).GG||null!=e.W||null!=e.E?(r=1,i=4,t=At(e.GG,n._a[Vn],Ce(Zt(),1,4).year),o=At(e.W,1),((a=At(e.E,1))<1||a>7)&&(f=!0)):(r=n._locale._week.dow,i=n._locale._week.doy,p=Ce(Zt(),r,i),t=At(e.gg,n._a[Vn],p.year),o=At(e.w,p.week),null!=e.d?((a=e.d)<0||a>6)&&(f=!0):null!=e.e?(a=e.e+r,(e.e<0||e.e>6)&&(f=!0)):a=r),o<1||o>Be(t,r,i)?u(n)._overflowWeeks=!0:null!=f?u(n)._overflowWeekday=!0:(l=ke(t,o,a,r,i),n._a[Vn]=l.year,n._dayOfYear=l.dayOfYear)}function Et(n){if(n._f!==o.ISO_8601)if(n._f!==o.RFC_2822){n._a=[],u(n).empty=!0;var e,t,a,r,i,l,f=""+n._i,p=f.length,c=0;for(a=Y(n._f,n._locale).match(O)||[],e=0;e<a.length;e++)r=a[e],(t=(f.match(An(r,n))||[])[0])&&((i=f.substr(0,f.indexOf(t))).length>0&&u(n).unusedInput.push(i),f=f.slice(f.indexOf(t)+t.length),c+=t.length),H[r]?(t?u(n).empty=!1:u(n).unusedTokens.push(r),Gn(r,t,n)):n._strict&&!t&&u(n).unusedTokens.push(r);u(n).charsLeftOver=p-c,f.length>0&&u(n).unusedInput.push(f),n._a[Xn]<=12&&!0===u(n).bigHour&&n._a[Xn]>0&&(u(n).bigHour=void 0),u(n).parsedDateParts=n._a.slice(0),u(n).meridiem=n._meridiem,n._a[Xn]=jt(n._locale,n._a[Xn],n._meridiem),null!==(l=u(n).era)&&(n._a[Vn]=n._locale.erasConvertYear(l,n._a[Vn])),Ht(n),xt(n)}else Dt(n);else Mt(n)}function jt(n,e,t){var o;return null==t?e:null!=n.meridiemHour?n.meridiemHour(e,t):null!=n.isPM?((o=n.isPM(t))&&e<12&&(e+=12),o||12!==e||(e=0),e):e}function Gt(n){var e,t,o,a,r,i,l=!1;if(0===n._f.length)return u(n).invalidFormat=!0,void(n._d=new Date(NaN));for(a=0;a<n._f.length;a++)r=0,i=!1,e=w({},n),null!=n._useUTC&&(e._useUTC=n._useUTC),e._f=n._f[a],Et(e),_(e)&&(i=!0),r+=u(e).charsLeftOver,r+=10*u(e).unusedTokens.length,u(e).score=r,l?r<o&&(o=r,t=e):(null==o||r<o||i)&&(o=r,t=e,i&&(l=!0));m(n,t||e)}function Yt(n){if(!n._d){var e=an(n._i),t=void 0===e.day?e.date:e.day;n._a=s([e.year,e.month,t,e.hour,e.minute,e.second,e.millisecond],(function(n){return n&&parseInt(n,10)})),Ht(n)}}function Vt(n){var e=new y(xt(qt(n)));return e._nextDay&&(e.add(1,"d"),e._nextDay=void 0),e}function qt(n){var e=n._i,t=n._f;return n._locale=n._locale||ht(n._l),null===e||void 0===t&&""===e?h({nullInput:!0}):("string"==typeof e&&(n._i=e=n._locale.preparse(e)),k(e)?new y(xt(e)):(d(e)?n._d=e:r(t)?Gt(n):t?Et(n):Ut(n),_(n)||(n._d=null),n))}function Ut(n){var e=n._i;p(e)?n._d=new Date(o.now()):d(e)?n._d=new Date(e.valueOf()):"string"==typeof e?Ot(n):r(e)?(n._a=s(e.slice(0),(function(n){return parseInt(n,10)})),Ht(n)):i(e)?Yt(n):c(e)?n._d=new Date(e):o.createFromInputFallback(n)}function Xt(n,e,t,o,a){var l={};return!0!==e&&!1!==e||(o=e,e=void 0),!0!==t&&!1!==t||(o=t,t=void 0),(i(n)&&f(n)||r(n)&&0===n.length)&&(n=void 0),l._isAMomentObject=!0,l._useUTC=l._isUTC=a,l._l=t,l._i=n,l._f=e,l._strict=o,Vt(l)}function Zt(n,e,t,o){return Xt(n,e,t,o,!1)}o.createFromInputFallback=B("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(n){n._d=new Date(n._i+(n._useUTC?" UTC":""))})),o.ISO_8601=function(){},o.RFC_2822=function(){};var $t=B("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var n=Zt.apply(null,arguments);return this.isValid()&&n.isValid()?n<this?this:n:h()})),Kt=B("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var n=Zt.apply(null,arguments);return this.isValid()&&n.isValid()?n>this?this:n:h()}));function Jt(n,e){var t,o;if(1===e.length&&r(e[0])&&(e=e[0]),!e.length)return Zt();for(t=e[0],o=1;o<e.length;++o)e[o].isValid()&&!e[o][n](t)||(t=e[o]);return t}function Qt(){return Jt("isBefore",[].slice.call(arguments,0))}function no(){return Jt("isAfter",[].slice.call(arguments,0))}var eo=function(){return Date.now?Date.now():+new Date},to=["year","quarter","month","week","day","hour","minute","second","millisecond"];function oo(n){var e,t,o=!1;for(e in n)if(l(n,e)&&(-1===Yn.call(to,e)||null!=n[e]&&isNaN(n[e])))return!1;for(t=0;t<to.length;++t)if(n[to[t]]){if(o)return!1;parseFloat(n[to[t]])!==dn(n[to[t]])&&(o=!0)}return!0}function ao(){return this._isValid}function ro(){return Mo(NaN)}function io(n){var e=an(n),t=e.year||0,o=e.quarter||0,a=e.month||0,r=e.week||e.isoWeek||0,i=e.day||0,l=e.hour||0,f=e.minute||0,p=e.second||0,c=e.millisecond||0;this._isValid=oo(e),this._milliseconds=+c+1e3*p+6e4*f+1e3*l*60*60,this._days=+i+7*r,this._months=+a+3*o+12*t,this._data={},this._locale=ht(),this._bubble()}function lo(n){return n instanceof io}function fo(n){return n<0?-1*Math.round(-1*n):Math.round(n)}function po(n,e,t){var o,a=Math.min(n.length,e.length),r=Math.abs(n.length-e.length),i=0;for(o=0;o<a;o++)(t&&n[o]!==e[o]||!t&&dn(n[o])!==dn(e[o]))&&i++;return i+r}function co(n,e){N(n,0,0,(function(){var n=this.utcOffset(),t="+";return n<0&&(n=-n,t="-"),t+D(~~(n/60),2)+e+D(~~n%60,2)}))}co("Z",":"),co("ZZ",""),On("Z",Rn),On("ZZ",Rn),En(["Z","ZZ"],(function(n,e,t){t._useUTC=!0,t._tzm=mo(Rn,n)}));var so=/([\+\-]|\d\d)/gi;function mo(n,e){var t,o,a=(e||"").match(n);return null===a?null:0===(o=60*(t=((a[a.length-1]||[])+"").match(so)||["-",0,0])[1]+dn(t[2]))?0:"+"===t[0]?o:-o}function go(n,e){var t,a;return e._isUTC?(t=e.clone(),a=(k(n)||d(n)?n.valueOf():Zt(n).valueOf())-t.valueOf(),t._d.setTime(t._d.valueOf()+a),o.updateOffset(t,!1),t):Zt(n).local()}function bo(n){return-Math.round(n._d.getTimezoneOffset())}function uo(n,e,t){var a,r=this._offset||0;if(!this.isValid())return null!=n?this:NaN;if(null!=n){if("string"==typeof n){if(null===(n=mo(Rn,n)))return this}else Math.abs(n)<16&&!t&&(n*=60);return!this._isUTC&&e&&(a=bo(this)),this._offset=n,this._isUTC=!0,null!=a&&this.add(a,"m"),r!==n&&(!e||this._changeInProgress?Fo(this,Mo(n-r,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,o.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?r:bo(this)}function _o(n,e){return null!=n?("string"!=typeof n&&(n=-n),this.utcOffset(n,e),this):-this.utcOffset()}function ho(n){return this.utcOffset(0,n)}function vo(n){return this._isUTC&&(this.utcOffset(0,n),this._isUTC=!1,n&&this.subtract(bo(this),"m")),this}function xo(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var n=mo(Wn,this._i);null!=n?this.utcOffset(n):this.utcOffset(0,!0)}return this}function wo(n){return!!this.isValid()&&(n=n?Zt(n).utcOffset():0,(this.utcOffset()-n)%60==0)}function yo(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function ko(){if(!p(this._isDSTShifted))return this._isDSTShifted;var n,e={};return w(e,this),(e=qt(e))._a?(n=e._isUTC?g(e._a):Zt(e._a),this._isDSTShifted=this.isValid()&&po(e._a,n.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function Co(){return!!this.isValid()&&!this._isUTC}function Bo(){return!!this.isValid()&&this._isUTC}function Po(){return!!this.isValid()&&this._isUTC&&0===this._offset}o.updateOffset=function(){};var So=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,To=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Mo(n,e){var t,o,a,r=n,i=null;return lo(n)?r={ms:n._milliseconds,d:n._days,M:n._months}:c(n)||!isNaN(+n)?(r={},e?r[e]=+n:r.milliseconds=+n):(i=So.exec(n))?(t="-"===i[1]?-1:1,r={y:0,d:dn(i[Un])*t,h:dn(i[Xn])*t,m:dn(i[Zn])*t,s:dn(i[$n])*t,ms:dn(fo(1e3*i[Kn]))*t}):(i=To.exec(n))?(t="-"===i[1]?-1:1,r={y:Lo(i[2],t),M:Lo(i[3],t),w:Lo(i[4],t),d:Lo(i[5],t),h:Lo(i[6],t),m:Lo(i[7],t),s:Lo(i[8],t)}):null==r?r={}:"object"==typeof r&&("from"in r||"to"in r)&&(a=Wo(Zt(r.from),Zt(r.to)),(r={}).ms=a.milliseconds,r.M=a.months),o=new io(r),lo(n)&&l(n,"_locale")&&(o._locale=n._locale),lo(n)&&l(n,"_isValid")&&(o._isValid=n._isValid),o}function Lo(n,e){var t=n&&parseFloat(n.replace(",","."));return(isNaN(t)?0:t)*e}function zo(n,e){var t={};return t.months=e.month()-n.month()+12*(e.year()-n.year()),n.clone().add(t.months,"M").isAfter(e)&&--t.months,t.milliseconds=+e-+n.clone().add(t.months,"M"),t}function Wo(n,e){var t;return n.isValid()&&e.isValid()?(e=go(e,n),n.isBefore(e)?t=zo(n,e):((t=zo(e,n)).milliseconds=-t.milliseconds,t.months=-t.months),t):{milliseconds:0,months:0}}function Ro(n,e){return function(t,o){var a;return null===o||isNaN(+o)||(T(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),a=t,t=o,o=a),Fo(this,Mo(t,o),n),this}}function Fo(n,e,t,a){var r=e._milliseconds,i=fo(e._days),l=fo(e._months);n.isValid()&&(a=null==a||a,l&&de(n,mn(n,"Month")+l*t),i&&gn(n,"Date",mn(n,"Date")+i*t),r&&n._d.setTime(n._d.valueOf()+r*t),a&&o.updateOffset(n,i||l))}Mo.fn=io.prototype,Mo.invalid=ro;var Do=Ro(1,"add"),Oo=Ro(-1,"subtract");function Ao(n){return"string"==typeof n||n instanceof String}function Io(n){return k(n)||d(n)||Ao(n)||c(n)||No(n)||Ho(n)||null==n}function Ho(n){var e,t,o=i(n)&&!f(n),a=!1,r=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"];for(e=0;e<r.length;e+=1)t=r[e],a=a||l(n,t);return o&&a}function No(n){var e=r(n),t=!1;return e&&(t=0===n.filter((function(e){return!c(e)&&Ao(n)})).length),e&&t}function Eo(n){var e,t,o=i(n)&&!f(n),a=!1,r=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(e=0;e<r.length;e+=1)t=r[e],a=a||l(n,t);return o&&a}function jo(n,e){var t=n.diff(e,"days",!0);return t<-6?"sameElse":t<-1?"lastWeek":t<0?"lastDay":t<1?"sameDay":t<2?"nextDay":t<7?"nextWeek":"sameElse"}function Go(n,e){1===arguments.length&&(arguments[0]?Io(arguments[0])?(n=arguments[0],e=void 0):Eo(arguments[0])&&(e=arguments[0],n=void 0):(n=void 0,e=void 0));var t=n||Zt(),a=go(t,this).startOf("day"),r=o.calendarFormat(this,a)||"sameElse",i=e&&(M(e[r])?e[r].call(this,t):e[r]);return this.format(i||this.localeData().calendar(r,this,Zt(t)))}function Yo(){return new y(this)}function Vo(n,e){var t=k(n)?n:Zt(n);return!(!this.isValid()||!t.isValid())&&("millisecond"===(e=on(e)||"millisecond")?this.valueOf()>t.valueOf():t.valueOf()<this.clone().startOf(e).valueOf())}function qo(n,e){var t=k(n)?n:Zt(n);return!(!this.isValid()||!t.isValid())&&("millisecond"===(e=on(e)||"millisecond")?this.valueOf()<t.valueOf():this.clone().endOf(e).valueOf()<t.valueOf())}function Uo(n,e,t,o){var a=k(n)?n:Zt(n),r=k(e)?e:Zt(e);return!!(this.isValid()&&a.isValid()&&r.isValid())&&("("===(o=o||"()")[0]?this.isAfter(a,t):!this.isBefore(a,t))&&(")"===o[1]?this.isBefore(r,t):!this.isAfter(r,t))}function Xo(n,e){var t,o=k(n)?n:Zt(n);return!(!this.isValid()||!o.isValid())&&("millisecond"===(e=on(e)||"millisecond")?this.valueOf()===o.valueOf():(t=o.valueOf(),this.clone().startOf(e).valueOf()<=t&&t<=this.clone().endOf(e).valueOf()))}function Zo(n,e){return this.isSame(n,e)||this.isAfter(n,e)}function $o(n,e){return this.isSame(n,e)||this.isBefore(n,e)}function Ko(n,e,t){var o,a,r;if(!this.isValid())return NaN;if(!(o=go(n,this)).isValid())return NaN;switch(a=6e4*(o.utcOffset()-this.utcOffset()),e=on(e)){case"year":r=Jo(this,o)/12;break;case"month":r=Jo(this,o);break;case"quarter":r=Jo(this,o)/3;break;case"second":r=(this-o)/1e3;break;case"minute":r=(this-o)/6e4;break;case"hour":r=(this-o)/36e5;break;case"day":r=(this-o-a)/864e5;break;case"week":r=(this-o-a)/6048e5;break;default:r=this-o}return t?r:cn(r)}function Jo(n,e){if(n.date()<e.date())return-Jo(e,n);var t=12*(e.year()-n.year())+(e.month()-n.month()),o=n.clone().add(t,"months");return-(t+(e-o<0?(e-o)/(o-n.clone().add(t-1,"months")):(e-o)/(n.clone().add(t+1,"months")-o)))||0}function Qo(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function na(n){if(!this.isValid())return null;var e=!0!==n,t=e?this.clone().utc():this;return t.year()<0||t.year()>9999?G(t,e?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):M(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",G(t,"Z")):G(t,e?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function ea(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var n,e,t,o,a="moment",r="";return this.isLocal()||(a=0===this.utcOffset()?"moment.utc":"moment.parseZone",r="Z"),n="["+a+'("]',e=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",t="-MM-DD[T]HH:mm:ss.SSS",o=r+'[")]',this.format(n+e+t+o)}function ta(n){n||(n=this.isUtc()?o.defaultFormatUtc:o.defaultFormat);var e=G(this,n);return this.localeData().postformat(e)}function oa(n,e){return this.isValid()&&(k(n)&&n.isValid()||Zt(n).isValid())?Mo({to:this,from:n}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function aa(n){return this.from(Zt(),n)}function ra(n,e){return this.isValid()&&(k(n)&&n.isValid()||Zt(n).isValid())?Mo({from:this,to:n}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function ia(n){return this.to(Zt(),n)}function la(n){var e;return void 0===n?this._locale._abbr:(null!=(e=ht(n))&&(this._locale=e),this)}o.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",o.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var fa=B("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(n){return void 0===n?this.localeData():this.locale(n)}));function pa(){return this._locale}var ca=1e3,da=60*ca,sa=60*da,ma=3506328*sa;function ga(n,e){return(n%e+e)%e}function ba(n,e,t){return n<100&&n>=0?new Date(n+400,e,t)-ma:new Date(n,e,t).valueOf()}function ua(n,e,t){return n<100&&n>=0?Date.UTC(n+400,e,t)-ma:Date.UTC(n,e,t)}function _a(n){var e,t;if(void 0===(n=on(n))||"millisecond"===n||!this.isValid())return this;switch(t=this._isUTC?ua:ba,n){case"year":e=t(this.year(),0,1);break;case"quarter":e=t(this.year(),this.month()-this.month()%3,1);break;case"month":e=t(this.year(),this.month(),1);break;case"week":e=t(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":e=t(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":e=t(this.year(),this.month(),this.date());break;case"hour":e=this._d.valueOf(),e-=ga(e+(this._isUTC?0:this.utcOffset()*da),sa);break;case"minute":e=this._d.valueOf(),e-=ga(e,da);break;case"second":e=this._d.valueOf(),e-=ga(e,ca)}return this._d.setTime(e),o.updateOffset(this,!0),this}function ha(n){var e,t;if(void 0===(n=on(n))||"millisecond"===n||!this.isValid())return this;switch(t=this._isUTC?ua:ba,n){case"year":e=t(this.year()+1,0,1)-1;break;case"quarter":e=t(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":e=t(this.year(),this.month()+1,1)-1;break;case"week":e=t(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":e=t(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":e=t(this.year(),this.month(),this.date()+1)-1;break;case"hour":e=this._d.valueOf(),e+=sa-ga(e+(this._isUTC?0:this.utcOffset()*da),sa)-1;break;case"minute":e=this._d.valueOf(),e+=da-ga(e,da)-1;break;case"second":e=this._d.valueOf(),e+=ca-ga(e,ca)-1}return this._d.setTime(e),o.updateOffset(this,!0),this}function va(){return this._d.valueOf()-6e4*(this._offset||0)}function xa(){return Math.floor(this.valueOf()/1e3)}function wa(){return new Date(this.valueOf())}function ya(){var n=this;return[n.year(),n.month(),n.date(),n.hour(),n.minute(),n.second(),n.millisecond()]}function ka(){var n=this;return{years:n.year(),months:n.month(),date:n.date(),hours:n.hours(),minutes:n.minutes(),seconds:n.seconds(),milliseconds:n.milliseconds()}}function Ca(){return this.isValid()?this.toISOString():null}function Ba(){return _(this)}function Pa(){return m({},u(this))}function Sa(){return u(this).overflow}function Ta(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Ma(n,e){var t,a,r,i=this._eras||ht("en")._eras;for(t=0,a=i.length;t<a;++t){switch(typeof i[t].since){case"string":r=o(i[t].since).startOf("day"),i[t].since=r.valueOf()}switch(typeof i[t].until){case"undefined":i[t].until=1/0;break;case"string":r=o(i[t].until).startOf("day").valueOf(),i[t].until=r.valueOf()}}return i}function La(n,e,t){var o,a,r,i,l,f=this.eras();for(n=n.toUpperCase(),o=0,a=f.length;o<a;++o)if(r=f[o].name.toUpperCase(),i=f[o].abbr.toUpperCase(),l=f[o].narrow.toUpperCase(),t)switch(e){case"N":case"NN":case"NNN":if(i===n)return f[o];break;case"NNNN":if(r===n)return f[o];break;case"NNNNN":if(l===n)return f[o]}else if([r,i,l].indexOf(n)>=0)return f[o]}function za(n,e){var t=n.since<=n.until?1:-1;return void 0===e?o(n.since).year():o(n.since).year()+(e-n.offset)*t}function Wa(){var n,e,t,o=this.localeData().eras();for(n=0,e=o.length;n<e;++n){if(t=this.clone().startOf("day").valueOf(),o[n].since<=t&&t<=o[n].until)return o[n].name;if(o[n].until<=t&&t<=o[n].since)return o[n].name}return""}function Ra(){var n,e,t,o=this.localeData().eras();for(n=0,e=o.length;n<e;++n){if(t=this.clone().startOf("day").valueOf(),o[n].since<=t&&t<=o[n].until)return o[n].narrow;if(o[n].until<=t&&t<=o[n].since)return o[n].narrow}return""}function Fa(){var n,e,t,o=this.localeData().eras();for(n=0,e=o.length;n<e;++n){if(t=this.clone().startOf("day").valueOf(),o[n].since<=t&&t<=o[n].until)return o[n].abbr;if(o[n].until<=t&&t<=o[n].since)return o[n].abbr}return""}function Da(){var n,e,t,a,r=this.localeData().eras();for(n=0,e=r.length;n<e;++n)if(t=r[n].since<=r[n].until?1:-1,a=this.clone().startOf("day").valueOf(),r[n].since<=a&&a<=r[n].until||r[n].until<=a&&a<=r[n].since)return(this.year()-o(r[n].since).year())*t+r[n].offset;return this.year()}function Oa(n){return l(this,"_erasNameRegex")||Ga.call(this),n?this._erasNameRegex:this._erasRegex}function Aa(n){return l(this,"_erasAbbrRegex")||Ga.call(this),n?this._erasAbbrRegex:this._erasRegex}function Ia(n){return l(this,"_erasNarrowRegex")||Ga.call(this),n?this._erasNarrowRegex:this._erasRegex}function Ha(n,e){return e.erasAbbrRegex(n)}function Na(n,e){return e.erasNameRegex(n)}function Ea(n,e){return e.erasNarrowRegex(n)}function ja(n,e){return e._eraYearOrdinalRegex||Ln}function Ga(){var n,e,t=[],o=[],a=[],r=[],i=this.eras();for(n=0,e=i.length;n<e;++n)o.push(Hn(i[n].name)),t.push(Hn(i[n].abbr)),a.push(Hn(i[n].narrow)),r.push(Hn(i[n].name)),r.push(Hn(i[n].abbr)),r.push(Hn(i[n].narrow));this._erasRegex=new RegExp("^("+r.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+o.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+t.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+a.join("|")+")","i")}function Ya(n,e){N(0,[n,n.length],0,e)}function Va(n){return Ka.call(this,n,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function qa(n){return Ka.call(this,n,this.isoWeek(),this.isoWeekday(),1,4)}function Ua(){return Be(this.year(),1,4)}function Xa(){return Be(this.isoWeekYear(),1,4)}function Za(){var n=this.localeData()._week;return Be(this.year(),n.dow,n.doy)}function $a(){var n=this.localeData()._week;return Be(this.weekYear(),n.dow,n.doy)}function Ka(n,e,t,o,a){var r;return null==n?Ce(this,o,a).year:(e>(r=Be(n,o,a))&&(e=r),Ja.call(this,n,e,t,o,a))}function Ja(n,e,t,o,a){var r=ke(n,e,t,o,a),i=we(r.year,0,r.dayOfYear);return this.year(i.getUTCFullYear()),this.month(i.getUTCMonth()),this.date(i.getUTCDate()),this}function Qa(n){return null==n?Math.ceil((this.month()+1)/3):this.month(3*(n-1)+this.month()%3)}N("N",0,0,"eraAbbr"),N("NN",0,0,"eraAbbr"),N("NNN",0,0,"eraAbbr"),N("NNNN",0,0,"eraName"),N("NNNNN",0,0,"eraNarrow"),N("y",["y",1],"yo","eraYear"),N("y",["yy",2],0,"eraYear"),N("y",["yyy",3],0,"eraYear"),N("y",["yyyy",4],0,"eraYear"),On("N",Ha),On("NN",Ha),On("NNN",Ha),On("NNNN",Na),On("NNNNN",Ea),En(["N","NN","NNN","NNNN","NNNNN"],(function(n,e,t,o){var a=t._locale.erasParse(n,o,t._strict);a?u(t).era=a:u(t).invalidEra=n})),On("y",Ln),On("yy",Ln),On("yyy",Ln),On("yyyy",Ln),On("yo",ja),En(["y","yy","yyy","yyyy"],Vn),En(["yo"],(function(n,e,t,o){var a;t._locale._eraYearOrdinalRegex&&(a=n.match(t._locale._eraYearOrdinalRegex)),t._locale.eraYearOrdinalParse?e[Vn]=t._locale.eraYearOrdinalParse(n,a):e[Vn]=parseInt(n,10)})),N(0,["gg",2],0,(function(){return this.weekYear()%100})),N(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),Ya("gggg","weekYear"),Ya("ggggg","weekYear"),Ya("GGGG","isoWeekYear"),Ya("GGGGG","isoWeekYear"),tn("weekYear","gg"),tn("isoWeekYear","GG"),ln("weekYear",1),ln("isoWeekYear",1),On("G",zn),On("g",zn),On("GG",Cn,xn),On("gg",Cn,xn),On("GGGG",Tn,yn),On("gggg",Tn,yn),On("GGGGG",Mn,kn),On("ggggg",Mn,kn),jn(["gggg","ggggg","GGGG","GGGGG"],(function(n,e,t,o){e[o.substr(0,2)]=dn(n)})),jn(["gg","GG"],(function(n,e,t,a){e[a]=o.parseTwoDigitYear(n)})),N("Q",0,"Qo","quarter"),tn("quarter","Q"),ln("quarter",7),On("Q",hn),En("Q",(function(n,e){e[qn]=3*(dn(n)-1)})),N("D",["DD",2],"Do","date"),tn("date","D"),ln("date",9),On("D",Cn),On("DD",Cn,xn),On("Do",(function(n,e){return n?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient})),En(["D","DD"],Un),En("Do",(function(n,e){e[Un]=dn(n.match(Cn)[0])}));var nr=sn("Date",!0);function er(n){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==n?e:this.add(n-e,"d")}N("DDD",["DDDD",3],"DDDo","dayOfYear"),tn("dayOfYear","DDD"),ln("dayOfYear",4),On("DDD",Sn),On("DDDD",wn),En(["DDD","DDDD"],(function(n,e,t){t._dayOfYear=dn(n)})),N("m",["mm",2],0,"minute"),tn("minute","m"),ln("minute",14),On("m",Cn),On("mm",Cn,xn),En(["m","mm"],Zn);var tr=sn("Minutes",!1);N("s",["ss",2],0,"second"),tn("second","s"),ln("second",15),On("s",Cn),On("ss",Cn,xn),En(["s","ss"],$n);var or,ar,rr=sn("Seconds",!1);for(N("S",0,0,(function(){return~~(this.millisecond()/100)})),N(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),N(0,["SSS",3],0,"millisecond"),N(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),N(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),N(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),N(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),N(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),N(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),tn("millisecond","ms"),ln("millisecond",16),On("S",Sn,hn),On("SS",Sn,xn),On("SSS",Sn,wn),or="SSSS";or.length<=9;or+="S")On(or,Ln);function ir(n,e){e[Kn]=dn(1e3*("0."+n))}for(or="S";or.length<=9;or+="S")En(or,ir);function lr(){return this._isUTC?"UTC":""}function fr(){return this._isUTC?"Coordinated Universal Time":""}ar=sn("Milliseconds",!1),N("z",0,0,"zoneAbbr"),N("zz",0,0,"zoneName");var pr=y.prototype;function cr(n){return Zt(1e3*n)}function dr(){return Zt.apply(null,arguments).parseZone()}function sr(n){return n}pr.add=Do,pr.calendar=Go,pr.clone=Yo,pr.diff=Ko,pr.endOf=ha,pr.format=ta,pr.from=oa,pr.fromNow=aa,pr.to=ra,pr.toNow=ia,pr.get=bn,pr.invalidAt=Sa,pr.isAfter=Vo,pr.isBefore=qo,pr.isBetween=Uo,pr.isSame=Xo,pr.isSameOrAfter=Zo,pr.isSameOrBefore=$o,pr.isValid=Ba,pr.lang=fa,pr.locale=la,pr.localeData=pa,pr.max=Kt,pr.min=$t,pr.parsingFlags=Pa,pr.set=un,pr.startOf=_a,pr.subtract=Oo,pr.toArray=ya,pr.toObject=ka,pr.toDate=wa,pr.toISOString=na,pr.inspect=ea,"undefined"!=typeof Symbol&&null!=Symbol.for&&(pr[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),pr.toJSON=Ca,pr.toString=Qo,pr.unix=xa,pr.valueOf=va,pr.creationData=Ta,pr.eraName=Wa,pr.eraNarrow=Ra,pr.eraAbbr=Fa,pr.eraYear=Da,pr.year=he,pr.isLeapYear=ve,pr.weekYear=Va,pr.isoWeekYear=qa,pr.quarter=pr.quarters=Qa,pr.month=se,pr.daysInMonth=me,pr.week=pr.weeks=Le,pr.isoWeek=pr.isoWeeks=ze,pr.weeksInYear=Za,pr.weeksInWeekYear=$a,pr.isoWeeksInYear=Ua,pr.isoWeeksInISOWeekYear=Xa,pr.date=nr,pr.day=pr.days=qe,pr.weekday=Ue,pr.isoWeekday=Xe,pr.dayOfYear=er,pr.hour=pr.hours=rt,pr.minute=pr.minutes=tr,pr.second=pr.seconds=rr,pr.millisecond=pr.milliseconds=ar,pr.utcOffset=uo,pr.utc=ho,pr.local=vo,pr.parseZone=xo,pr.hasAlignedHourOffset=wo,pr.isDST=yo,pr.isLocal=Co,pr.isUtcOffset=Bo,pr.isUtc=Po,pr.isUTC=Po,pr.zoneAbbr=lr,pr.zoneName=fr,pr.dates=B("dates accessor is deprecated. Use date instead.",nr),pr.months=B("months accessor is deprecated. Use month instead",se),pr.years=B("years accessor is deprecated. Use year instead",he),pr.zone=B("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",_o),pr.isDSTShifted=B("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",ko);var mr=W.prototype;function gr(n,e,t,o){var a=ht(),r=g().set(o,e);return a[t](r,n)}function br(n,e,t){if(c(n)&&(e=n,n=void 0),n=n||"",null!=e)return gr(n,e,t,"month");var o,a=[];for(o=0;o<12;o++)a[o]=gr(n,o,t,"month");return a}function ur(n,e,t,o){"boolean"==typeof n?(c(e)&&(t=e,e=void 0),e=e||""):(t=e=n,n=!1,c(e)&&(t=e,e=void 0),e=e||"");var a,r=ht(),i=n?r._week.dow:0,l=[];if(null!=t)return gr(e,(t+i)%7,o,"day");for(a=0;a<7;a++)l[a]=gr(e,(a+i)%7,o,"day");return l}function _r(n,e){return br(n,e,"months")}function hr(n,e){return br(n,e,"monthsShort")}function vr(n,e,t){return ur(n,e,t,"weekdays")}function xr(n,e,t){return ur(n,e,t,"weekdaysShort")}function wr(n,e,t){return ur(n,e,t,"weekdaysMin")}mr.calendar=F,mr.longDateFormat=q,mr.invalidDate=X,mr.ordinal=K,mr.preparse=sr,mr.postformat=sr,mr.relativeTime=Q,mr.pastFuture=nn,mr.set=L,mr.eras=Ma,mr.erasParse=La,mr.erasConvertYear=za,mr.erasAbbrRegex=Aa,mr.erasNameRegex=Oa,mr.erasNarrowRegex=Ia,mr.months=le,mr.monthsShort=fe,mr.monthsParse=ce,mr.monthsRegex=be,mr.monthsShortRegex=ge,mr.week=Pe,mr.firstDayOfYear=Me,mr.firstDayOfWeek=Te,mr.weekdays=Ee,mr.weekdaysMin=Ge,mr.weekdaysShort=je,mr.weekdaysParse=Ve,mr.weekdaysRegex=Ze,mr.weekdaysShortRegex=$e,mr.weekdaysMinRegex=Ke,mr.isPM=ot,mr.meridiem=it,bt("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(n){var e=n%10;return n+(1===dn(n%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),o.lang=B("moment.lang is deprecated. Use moment.locale instead.",bt),o.langData=B("moment.langData is deprecated. Use moment.localeData instead.",ht);var yr=Math.abs;function kr(){var n=this._data;return this._milliseconds=yr(this._milliseconds),this._days=yr(this._days),this._months=yr(this._months),n.milliseconds=yr(n.milliseconds),n.seconds=yr(n.seconds),n.minutes=yr(n.minutes),n.hours=yr(n.hours),n.months=yr(n.months),n.years=yr(n.years),this}function Cr(n,e,t,o){var a=Mo(e,t);return n._milliseconds+=o*a._milliseconds,n._days+=o*a._days,n._months+=o*a._months,n._bubble()}function Br(n,e){return Cr(this,n,e,1)}function Pr(n,e){return Cr(this,n,e,-1)}function Sr(n){return n<0?Math.floor(n):Math.ceil(n)}function Tr(){var n,e,t,o,a,r=this._milliseconds,i=this._days,l=this._months,f=this._data;return r>=0&&i>=0&&l>=0||r<=0&&i<=0&&l<=0||(r+=864e5*Sr(Lr(l)+i),i=0,l=0),f.milliseconds=r%1e3,n=cn(r/1e3),f.seconds=n%60,e=cn(n/60),f.minutes=e%60,t=cn(e/60),f.hours=t%24,i+=cn(t/24),l+=a=cn(Mr(i)),i-=Sr(Lr(a)),o=cn(l/12),l%=12,f.days=i,f.months=l,f.years=o,this}function Mr(n){return 4800*n/146097}function Lr(n){return 146097*n/4800}function zr(n){if(!this.isValid())return NaN;var e,t,o=this._milliseconds;if("month"===(n=on(n))||"quarter"===n||"year"===n)switch(e=this._days+o/864e5,t=this._months+Mr(e),n){case"month":return t;case"quarter":return t/3;case"year":return t/12}else switch(e=this._days+Math.round(Lr(this._months)),n){case"week":return e/7+o/6048e5;case"day":return e+o/864e5;case"hour":return 24*e+o/36e5;case"minute":return 1440*e+o/6e4;case"second":return 86400*e+o/1e3;case"millisecond":return Math.floor(864e5*e)+o;default:throw new Error("Unknown unit "+n)}}function Wr(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*dn(this._months/12):NaN}function Rr(n){return function(){return this.as(n)}}var Fr=Rr("ms"),Dr=Rr("s"),Or=Rr("m"),Ar=Rr("h"),Ir=Rr("d"),Hr=Rr("w"),Nr=Rr("M"),Er=Rr("Q"),jr=Rr("y");function Gr(){return Mo(this)}function Yr(n){return n=on(n),this.isValid()?this[n+"s"]():NaN}function Vr(n){return function(){return this.isValid()?this._data[n]:NaN}}var qr=Vr("milliseconds"),Ur=Vr("seconds"),Xr=Vr("minutes"),Zr=Vr("hours"),$r=Vr("days"),Kr=Vr("months"),Jr=Vr("years");function Qr(){return cn(this.days()/7)}var ni=Math.round,ei={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function ti(n,e,t,o,a){return a.relativeTime(e||1,!!t,n,o)}function oi(n,e,t,o){var a=Mo(n).abs(),r=ni(a.as("s")),i=ni(a.as("m")),l=ni(a.as("h")),f=ni(a.as("d")),p=ni(a.as("M")),c=ni(a.as("w")),d=ni(a.as("y")),s=r<=t.ss&&["s",r]||r<t.s&&["ss",r]||i<=1&&["m"]||i<t.m&&["mm",i]||l<=1&&["h"]||l<t.h&&["hh",l]||f<=1&&["d"]||f<t.d&&["dd",f];return null!=t.w&&(s=s||c<=1&&["w"]||c<t.w&&["ww",c]),(s=s||p<=1&&["M"]||p<t.M&&["MM",p]||d<=1&&["y"]||["yy",d])[2]=e,s[3]=+n>0,s[4]=o,ti.apply(null,s)}function ai(n){return void 0===n?ni:"function"==typeof n&&(ni=n,!0)}function ri(n,e){return void 0!==ei[n]&&(void 0===e?ei[n]:(ei[n]=e,"s"===n&&(ei.ss=e-1),!0))}function ii(n,e){if(!this.isValid())return this.localeData().invalidDate();var t,o,a=!1,r=ei;return"object"==typeof n&&(e=n,n=!1),"boolean"==typeof n&&(a=n),"object"==typeof e&&(r=Object.assign({},ei,e),null!=e.s&&null==e.ss&&(r.ss=e.s-1)),o=oi(this,!a,r,t=this.localeData()),a&&(o=t.pastFuture(+this,o)),t.postformat(o)}var li=Math.abs;function fi(n){return(n>0)-(n<0)||+n}function pi(){if(!this.isValid())return this.localeData().invalidDate();var n,e,t,o,a,r,i,l,f=li(this._milliseconds)/1e3,p=li(this._days),c=li(this._months),d=this.asSeconds();return d?(n=cn(f/60),e=cn(n/60),f%=60,n%=60,t=cn(c/12),c%=12,o=f?f.toFixed(3).replace(/\.?0+$/,""):"",a=d<0?"-":"",r=fi(this._months)!==fi(d)?"-":"",i=fi(this._days)!==fi(d)?"-":"",l=fi(this._milliseconds)!==fi(d)?"-":"",a+"P"+(t?r+t+"Y":"")+(c?r+c+"M":"")+(p?i+p+"D":"")+(e||n||f?"T":"")+(e?l+e+"H":"")+(n?l+n+"M":"")+(f?l+o+"S":"")):"P0D"}var ci=io.prototype;return ci.isValid=ao,ci.abs=kr,ci.add=Br,ci.subtract=Pr,ci.as=zr,ci.asMilliseconds=Fr,ci.asSeconds=Dr,ci.asMinutes=Or,ci.asHours=Ar,ci.asDays=Ir,ci.asWeeks=Hr,ci.asMonths=Nr,ci.asQuarters=Er,ci.asYears=jr,ci.valueOf=Wr,ci._bubble=Tr,ci.clone=Gr,ci.get=Yr,ci.milliseconds=qr,ci.seconds=Ur,ci.minutes=Xr,ci.hours=Zr,ci.days=$r,ci.weeks=Qr,ci.months=Kr,ci.years=Jr,ci.humanize=ii,ci.toISOString=pi,ci.toString=pi,ci.toJSON=pi,ci.locale=la,ci.localeData=pa,ci.toIsoString=B("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",pi),ci.lang=fa,N("X",0,0,"unix"),N("x",0,0,"valueOf"),On("x",zn),On("X",Fn),En("X",(function(n,e,t){t._d=new Date(1e3*parseFloat(n))})),En("x",(function(n,e,t){t._d=new Date(dn(n))})),
+                    )!important}`,Sn,Pn,pn]}loadContent(){this._url&&(this.loading=!0,fetch(this._url).then((n=>n.text())).then((n=>{this.querySelector("[slot=body]").innerHTML=n})).then((()=>{this.querySelectorAll("a:not(.pb-root-link)").forEach((n=>{if(""!==n.href)try{const e=new URL(n.href),t=e.search||"";n.href=`#${e.pathname}${t}`}catch(e){n.href="#"+n.href}})),this.querySelectorAll("[role=pb-refresh]").forEach((n=>{n.addEventListener("click",(n=>{this.loadContent()}))})),this.querySelectorAll("form").forEach((n=>{n.addEventListener("submit",(e=>{e.preventDefault();const t=new FormData(n),o=new URLSearchParams(t).toString();window.location.hash=`#${this._url}?${o}`}))})),setTimeout((()=>{this.loading=!1}),100)})))}render(){return A`${this.loading?A`<div class="pf-c-backdrop"><div class="pf-l-bullseye"><div class="pf-l-bullseye__item"><span class="pf-c-spinner pf-m-xl" role="progressbar" aria-valuetext="Loading..."><span class="pf-c-spinner__clipper"></span> <span class="pf-c-spinner__lead-ball"></span> <span class="pf-c-spinner__tail-ball"></span></span></div></div></div>`:""}<slot name="body"></slot>`}};var Wn;n([$()],zn.prototype,"url",null),n([$()],zn.prototype,"loading",void 0),zn=n([X("pb-site-shell")],zn),function(n){n.redirect="redirect",n.template="template"}(Wn||(Wn={}));let Rn=class extends tn{constructor(){super(...arguments),this.flowBodyUrl=""}createRenderRoot(){return this}firstUpdated(){fetch(this.flowBodyUrl).then((n=>{if(!n.ok)throw Error(n.statusText);return n})).then((n=>n.json())).then((n=>{this.updateCard(n)})).catch((n=>{this.errorMessage(n)}))}async updateCard(n){switch(n.type){case Wn.redirect:window.location.assign(n.to);break;case Wn.template:this.flowBody=n.body,await this.requestUpdate(),this.checkAutofocus(),an(),this.loadFormCode(),this.setFormSubmitHandlers();default:console.log("passbook/flows: unexpected data type "+n.type)}}loadFormCode(){this.querySelectorAll("script").forEach((n=>{let e=document.createElement("script");e.src=n.src,document.head.appendChild(e)}))}checkAutofocus(){const n=this.querySelector("[autofocus]");null!==n&&n.focus()}updateFormAction(n){for(let e=0;e<n.elements.length;e++){if(n.elements[e].value===n.action)return console.log("passbook/flows: Found Form action URL in form elements, not changing form action."),!1}return n.action=this.flowBodyUrl,console.log("passbook/flows: updated form.action "+this.flowBodyUrl),!0}checkAutosubmit(n){if("autosubmit"in n.attributes)return n.submit()}setFormSubmitHandlers(){this.querySelectorAll("form").forEach((n=>{console.log("passbook/flows: Checking for autosubmit attribute "+n),this.checkAutosubmit(n),console.log("passbook/flows: Setting action for form "+n),this.updateFormAction(n),console.log("passbook/flows: Adding handler for form "+n),n.addEventListener("submit",(e=>{e.preventDefault();let t=new FormData(n);this.flowBody=void 0,fetch(this.flowBodyUrl,{method:"post",body:t}).then((n=>n.json())).then((n=>{this.updateCard(n)})).catch((n=>{this.errorMessage(n)}))})),n.classList.add("pb-flow-wrapped")}))}errorMessage(n){this.flowBody=`\n            <style>\n                .pb-exception {\n                    font-family: monospace;\n                    overflow-x: scroll;\n                }\n            </style>\n            <header class="pf-c-login__main-header">\n                <h1 class="pf-c-title pf-m-3xl">\n                    Whoops!\n                </h1>\n            </header>\n            <div class="pf-c-login__main-body">\n                <h3>\n                    Something went wrong! Please try again later.\n                </h3>\n                <pre class="pb-exception">${n}</pre>\n            </div>`}loading(){return A`<div class="pf-c-login__main-body pb-loading"><span class="pf-c-spinner" role="progressbar" aria-valuetext="Loading..."><span class="pf-c-spinner__clipper"></span> <span class="pf-c-spinner__lead-ball"></span> <span class="pf-c-spinner__tail-ball"></span></span></div>`}render(){return this.flowBody?A([this.flowBody]):this.loading()}};n([$()],Rn.prototype,"flowBodyUrl",void 0),n([$()],Rn.prototype,"flowBody",void 0),Rn=n([X("pb-flow-shell-card")],Rn);const Fn=new CSSStyleSheet;Fn.replaceSync('@charset "UTF-8";\n.pf-t-light, .pf-c-accordion, .pf-c-alert, .pf-c-banner.pf-m-info, .pf-c-banner.pf-m-warning, .pf-c-calendar-month, .pf-c-chip, .pf-c-chip-group, .pf-c-context-selector__menu, .pf-c-data-list, .pf-c-form-control, .pf-c-input-group, .pf-c-menu, .pf-c-page__sidebar.pf-m-light, .pf-c-select, .pf-c-table {\n  --pf-global--Color--100: var(--pf-global--Color--dark-100);\n  --pf-global--Color--200: var(--pf-global--Color--dark-200);\n  --pf-global--BorderColor--100: var(--pf-global--BorderColor--dark-100);\n  --pf-global--primary-color--100: var(--pf-global--primary-color--dark-100);\n  --pf-global--link--Color: var(--pf-global--link--Color--dark);\n  --pf-global--link--Color--hover: var(--pf-global--link--Color--dark--hover);\n  --pf-global--BackgroundColor--100: var(--pf-global--BackgroundColor--light-100); }\n\n.pf-t-dark, .pf-c-about-modal-box, .pf-c-banner, .pf-c-login__header, .pf-c-login__footer, .pf-c-page__header, .pf-c-page__main-section[class*="pf-m-dark-"], .pf-c-wizard__header {\n  --pf-global--Color--100: var(--pf-global--Color--light-100);\n  --pf-global--Color--200: var(--pf-global--Color--light-200);\n  --pf-global--BorderColor--100: var(--pf-global--BorderColor--light-100);\n  --pf-global--primary-color--100: var(--pf-global--primary-color--light-100);\n  --pf-global--link--Color: var(--pf-global--link--Color--light);\n  --pf-global--link--Color--hover: var(--pf-global--link--Color--light);\n  --pf-global--BackgroundColor--100: var(--pf-global--BackgroundColor--dark-100); }\n  .pf-t-dark .pf-c-card, .pf-c-about-modal-box .pf-c-card, .pf-c-banner .pf-c-card, .pf-c-login__header .pf-c-card, .pf-c-login__footer .pf-c-card, .pf-c-page__header .pf-c-card, .pf-c-page__main-section[class*="pf-m-dark-"] .pf-c-card, .pf-c-wizard__header .pf-c-card {\n    --pf-c-card--BackgroundColor: var(--pf-global--BackgroundColor--dark-transparent-200); }\n  .pf-t-dark .pf-c-button, .pf-c-about-modal-box .pf-c-button, .pf-c-banner .pf-c-button, .pf-c-login__header .pf-c-button, .pf-c-login__footer .pf-c-button, .pf-c-page__header .pf-c-button, .pf-c-page__main-section[class*="pf-m-dark-"] .pf-c-button, .pf-c-wizard__header .pf-c-button {\n    --pf-c-button--m-primary--Color: var(--pf-global--primary-color--dark-100);\n    --pf-c-button--m-primary--hover--Color: var(--pf-global--primary-color--dark-100);\n    --pf-c-button--m-primary--focus--Color: var(--pf-global--primary-color--dark-100);\n    --pf-c-button--m-primary--active--Color: var(--pf-global--primary-color--dark-100);\n    --pf-c-button--m-primary--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n    --pf-c-button--m-primary--hover--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n    --pf-c-button--m-primary--focus--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n    --pf-c-button--m-primary--active--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n    --pf-c-button--m-secondary--Color: var(--pf-global--Color--light-100);\n    --pf-c-button--m-secondary--hover--Color: var(--pf-global--Color--light-100);\n    --pf-c-button--m-secondary--focus--Color: var(--pf-global--Color--light-100);\n    --pf-c-button--m-secondary--active--Color: var(--pf-global--Color--light-100);\n    --pf-c-button--m-secondary--BorderColor: var(--pf-global--Color--light-100);\n    --pf-c-button--m-secondary--hover--BorderColor: var(--pf-global--Color--light-100);\n    --pf-c-button--m-secondary--focus--BorderColor: var(--pf-global--Color--light-100);\n    --pf-c-button--m-secondary--active--BorderColor: var(--pf-global--Color--light-100); }\n\n.pf-c-data-list__item-action, .pf-c-page__header-tools-group, .pf-c-page__header-tools-item, .pf-c-table tr > * {\n  --pf-hidden-visible--visible--Visibility: visible;\n  --pf-hidden-visible--hidden--Display: none;\n  --pf-hidden-visible--hidden--Visibility: hidden;\n  --pf-hidden-visible--Display: var(--pf-hidden-visible--visible--Display);\n  --pf-hidden-visible--Visibility: var(--pf-hidden-visible--visible--Visibility);\n  display: var(--pf-hidden-visible--Display);\n  visibility: var(--pf-hidden-visible--Visibility); }\n  .pf-m-hidden.pf-c-data-list__item-action, .pf-m-hidden.pf-c-page__header-tools-group, .pf-m-hidden.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-hidden {\n    --pf-hidden-visible--Display: var(--pf-hidden-visible--hidden--Display);\n    --pf-hidden-visible--Visibility: var(--pf-hidden-visible--hidden--Visibility); }\n  @media screen and (min-width: 576px) {\n    .pf-m-hidden-on-sm.pf-c-data-list__item-action, .pf-m-hidden-on-sm.pf-c-page__header-tools-group, .pf-m-hidden-on-sm.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-hidden-on-sm {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--hidden--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--hidden--Visibility); }\n    .pf-m-visible-on-sm.pf-c-data-list__item-action, .pf-m-visible-on-sm.pf-c-page__header-tools-group, .pf-m-visible-on-sm.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-visible-on-sm {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--visible--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--visible--Visibility); } }\n  @media screen and (min-width: 768px) {\n    .pf-m-hidden-on-md.pf-c-data-list__item-action, .pf-m-hidden-on-md.pf-c-page__header-tools-group, .pf-m-hidden-on-md.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-hidden-on-md {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--hidden--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--hidden--Visibility); }\n    .pf-m-visible-on-md.pf-c-data-list__item-action, .pf-m-visible-on-md.pf-c-page__header-tools-group, .pf-m-visible-on-md.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-visible-on-md {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--visible--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--visible--Visibility); } }\n  @media screen and (min-width: 992px) {\n    .pf-m-hidden-on-lg.pf-c-data-list__item-action, .pf-m-hidden-on-lg.pf-c-page__header-tools-group, .pf-m-hidden-on-lg.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-hidden-on-lg {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--hidden--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--hidden--Visibility); }\n    .pf-m-visible-on-lg.pf-c-data-list__item-action, .pf-m-visible-on-lg.pf-c-page__header-tools-group, .pf-m-visible-on-lg.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-visible-on-lg {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--visible--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--visible--Visibility); } }\n  @media screen and (min-width: 1200px) {\n    .pf-m-hidden-on-xl.pf-c-data-list__item-action, .pf-m-hidden-on-xl.pf-c-page__header-tools-group, .pf-m-hidden-on-xl.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-hidden-on-xl {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--hidden--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--hidden--Visibility); }\n    .pf-m-visible-on-xl.pf-c-data-list__item-action, .pf-m-visible-on-xl.pf-c-page__header-tools-group, .pf-m-visible-on-xl.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-visible-on-xl {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--visible--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--visible--Visibility); } }\n  @media screen and (min-width: 1450px) {\n    .pf-m-hidden-on-2xl.pf-c-data-list__item-action, .pf-m-hidden-on-2xl.pf-c-page__header-tools-group, .pf-m-hidden-on-2xl.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-hidden-on-2xl {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--hidden--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--hidden--Visibility); }\n    .pf-m-visible-on-2xl.pf-c-data-list__item-action, .pf-m-visible-on-2xl.pf-c-page__header-tools-group, .pf-m-visible-on-2xl.pf-c-page__header-tools-item, .pf-c-table tr > .pf-m-visible-on-2xl {\n      --pf-hidden-visible--Display: var(--pf-hidden-visible--visible--Display);\n      --pf-hidden-visible--Visibility: var(--pf-hidden-visible--visible--Visibility); } }\n\n:root {\n  --pf-global--palette--black-100: #fafafa;\n  --pf-global--palette--black-150: #f5f5f5;\n  --pf-global--palette--black-200: #f0f0f0;\n  --pf-global--palette--black-300: #d2d2d2;\n  --pf-global--palette--black-400: #b8bbbe;\n  --pf-global--palette--black-500: #8a8d90;\n  --pf-global--palette--black-600: #6a6e73;\n  --pf-global--palette--black-700: #4f5255;\n  --pf-global--palette--black-800: #3c3f42;\n  --pf-global--palette--black-850: #212427;\n  --pf-global--palette--black-900: #151515;\n  --pf-global--palette--black-1000: #030303;\n  --pf-global--palette--blue-50: #e7f1fa;\n  --pf-global--palette--blue-100: #bee1f4;\n  --pf-global--palette--blue-200: #73bcf7;\n  --pf-global--palette--blue-300: #2b9af3;\n  --pf-global--palette--blue-400: #06c;\n  --pf-global--palette--blue-500: #004080;\n  --pf-global--palette--blue-600: #002952;\n  --pf-global--palette--blue-700: #001223;\n  --pf-global--palette--cyan-50: #f2f9f9;\n  --pf-global--palette--cyan-100: #a2d9d9;\n  --pf-global--palette--cyan-200: #73c5c5;\n  --pf-global--palette--cyan-300: #009596;\n  --pf-global--palette--cyan-400: #005f60;\n  --pf-global--palette--cyan-500: #003737;\n  --pf-global--palette--cyan-600: #002323;\n  --pf-global--palette--cyan-700: #000f0f;\n  --pf-global--palette--gold-50: #fdf7e7;\n  --pf-global--palette--gold-100: #f9e0a2;\n  --pf-global--palette--gold-200: #f6d173;\n  --pf-global--palette--gold-300: #f4c145;\n  --pf-global--palette--gold-400: #f0ab00;\n  --pf-global--palette--gold-500: #c58c00;\n  --pf-global--palette--gold-600: #795600;\n  --pf-global--palette--gold-700: #3d2c00;\n  --pf-global--palette--green-50: #f3faf2;\n  --pf-global--palette--green-100: #bde5b8;\n  --pf-global--palette--green-200: #95d58e;\n  --pf-global--palette--green-300: #6ec664;\n  --pf-global--palette--green-400: #5ba352;\n  --pf-global--palette--green-500: #3e8635;\n  --pf-global--palette--green-600: #1e4f18;\n  --pf-global--palette--green-700: #0f280d;\n  --pf-global--palette--light-blue-100: #beedf9;\n  --pf-global--palette--light-blue-200: #7cdbf3;\n  --pf-global--palette--light-blue-300: #35caed;\n  --pf-global--palette--light-blue-400: #00b9e4;\n  --pf-global--palette--light-blue-500: #008bad;\n  --pf-global--palette--light-blue-600: #005c73;\n  --pf-global--palette--light-blue-700: #002d39;\n  --pf-global--palette--light-green-100: #e4f5bc;\n  --pf-global--palette--light-green-200: #c8eb79;\n  --pf-global--palette--light-green-300: #ace12e;\n  --pf-global--palette--light-green-400: #92d400;\n  --pf-global--palette--light-green-500: #6ca100;\n  --pf-global--palette--light-green-600: #486b00;\n  --pf-global--palette--light-green-700: #253600;\n  --pf-global--palette--orange-100: #f4b678;\n  --pf-global--palette--orange-200: #ef9234;\n  --pf-global--palette--orange-300: #ec7a08;\n  --pf-global--palette--orange-400: #c46100;\n  --pf-global--palette--orange-500: #8f4700;\n  --pf-global--palette--orange-600: #773d00;\n  --pf-global--palette--orange-700: #3b1f00;\n  --pf-global--palette--purple-50: #f2f0fc;\n  --pf-global--palette--purple-100: #cbc1ff;\n  --pf-global--palette--purple-200: #b2a3ff;\n  --pf-global--palette--purple-300: #a18fff;\n  --pf-global--palette--purple-400: #8476d1;\n  --pf-global--palette--purple-500: #6753ac;\n  --pf-global--palette--purple-600: #40199a;\n  --pf-global--palette--purple-700: #1f0066;\n  --pf-global--palette--red-50: #faeae8;\n  --pf-global--palette--red-100: #c9190b;\n  --pf-global--palette--red-200: #a30000;\n  --pf-global--palette--red-300: #7d1007;\n  --pf-global--palette--red-400: #470000;\n  --pf-global--palette--red-500: #2c0000;\n  --pf-global--palette--white: #fff;\n  --pf-global--BackgroundColor--100: #fff;\n  --pf-global--BackgroundColor--200: #f0f0f0;\n  --pf-global--BackgroundColor--light-100: #fff;\n  --pf-global--BackgroundColor--light-200: #fafafa;\n  --pf-global--BackgroundColor--light-300: #f0f0f0;\n  --pf-global--BackgroundColor--dark-100: #151515;\n  --pf-global--BackgroundColor--dark-200: #3c3f42;\n  --pf-global--BackgroundColor--dark-300: #212427;\n  --pf-global--BackgroundColor--dark-400: #4f5255;\n  --pf-global--BackgroundColor--dark-transparent-100: rgba(3, 3, 3, 0.62);\n  --pf-global--BackgroundColor--dark-transparent-200: rgba(3, 3, 3, 0.32);\n  --pf-global--Color--100: #151515;\n  --pf-global--Color--200: #6a6e73;\n  --pf-global--Color--300: #3c3f42;\n  --pf-global--Color--400: #8a8d90;\n  --pf-global--Color--light-100: #fff;\n  --pf-global--Color--light-200: #f0f0f0;\n  --pf-global--Color--light-300: #d2d2d2;\n  --pf-global--Color--dark-100: #151515;\n  --pf-global--Color--dark-200: #6a6e73;\n  --pf-global--active-color--100: #06c;\n  --pf-global--active-color--200: #bee1f4;\n  --pf-global--active-color--300: #2b9af3;\n  --pf-global--active-color--400: #73bcf7;\n  --pf-global--disabled-color--100: #6a6e73;\n  --pf-global--disabled-color--200: #d2d2d2;\n  --pf-global--disabled-color--300: #f0f0f0;\n  --pf-global--primary-color--100: #06c;\n  --pf-global--primary-color--200: #004080;\n  --pf-global--primary-color--light-100: #73bcf7;\n  --pf-global--primary-color--dark-100: #06c;\n  --pf-global--secondary-color--100: #6a6e73;\n  --pf-global--default-color--100: #73c5c5;\n  --pf-global--default-color--200: #009596;\n  --pf-global--default-color--300: #003737;\n  --pf-global--success-color--100: #3e8635;\n  --pf-global--success-color--200: #1e4f18;\n  --pf-global--info-color--100: #2b9af3;\n  --pf-global--info-color--200: #002952;\n  --pf-global--warning-color--100: #f0ab00;\n  --pf-global--warning-color--200: #795600;\n  --pf-global--danger-color--100: #c9190b;\n  --pf-global--danger-color--200: #a30000;\n  --pf-global--danger-color--300: #470000;\n  --pf-global--BoxShadow--sm: 0 0.0625rem 0.125rem 0 rgba(3, 3, 3, 0.12), 0 0 0.125rem 0 rgba(3, 3, 3, 0.06);\n  --pf-global--BoxShadow--sm-top: 0 -0.125rem 0.25rem -0.0625rem rgba(3, 3, 3, 0.16);\n  --pf-global--BoxShadow--sm-right: 0.125rem 0 0.25rem -0.0625rem rgba(3, 3, 3, 0.16);\n  --pf-global--BoxShadow--sm-bottom: 0 0.125rem 0.25rem -0.0625rem rgba(3, 3, 3, 0.16);\n  --pf-global--BoxShadow--sm-left: -0.125rem 0 0.25rem -0.0625rem rgba(3, 3, 3, 0.16);\n  --pf-global--BoxShadow--md: 0 0.25rem 0.5rem 0rem rgba(3, 3, 3, 0.12), 0 0 0.25rem 0 rgba(3, 3, 3, 0.06);\n  --pf-global--BoxShadow--md-top: 0 -0.5rem 0.5rem -0.375rem rgba(3, 3, 3, 0.18);\n  --pf-global--BoxShadow--md-right: 0.5rem 0 0.5rem -0.375rem rgba(3, 3, 3, 0.18);\n  --pf-global--BoxShadow--md-bottom: 0 0.5rem 0.5rem -0.375rem rgba(3, 3, 3, 0.18);\n  --pf-global--BoxShadow--md-left: -0.5rem 0 0.5rem -0.375rem rgba(3, 3, 3, 0.18);\n  --pf-global--BoxShadow--lg: 0 0.5rem 1rem 0 rgba(3, 3, 3, 0.16), 0 0 0.375rem 0 rgba(3, 3, 3, 0.08);\n  --pf-global--BoxShadow--lg-top: 0 -0.75rem 0.75rem -0.5rem rgba(3, 3, 3, 0.18);\n  --pf-global--BoxShadow--lg-right: 0.75rem 0 0.75rem -0.5rem rgba(3, 3, 3, 0.18);\n  --pf-global--BoxShadow--lg-bottom: 0 0.75rem 0.75rem -0.5rem rgba(3, 3, 3, 0.18);\n  --pf-global--BoxShadow--lg-left: -0.75rem 0 0.75rem -0.5rem rgba(3, 3, 3, 0.18);\n  --pf-global--BoxShadow--xl: 0 1rem 2rem 0 rgba(3, 3, 3, 0.16), 0 0 0.5rem 0 rgba(3, 3, 3, 0.1);\n  --pf-global--BoxShadow--xl-top: 0 -1rem 1rem -0.5rem rgba(3, 3, 3, 0.2);\n  --pf-global--BoxShadow--xl-right: 1rem 0 1rem -0.5rem rgba(3, 3, 3, 0.2);\n  --pf-global--BoxShadow--xl-bottom: 0 1rem 1rem -0.5rem rgba(3, 3, 3, 0.2);\n  --pf-global--BoxShadow--xl-left: -1rem 0 1rem -0.5rem rgba(3, 3, 3, 0.2);\n  --pf-global--BoxShadow--inset: inset 0 0 0.625rem 0 rgba(3, 3, 3, 0.25);\n  --pf-global--font-path: "./assets/fonts";\n  --pf-global--fonticon-path: "./assets/pficon";\n  --pf-global--spacer--xs: 0.25rem;\n  --pf-global--spacer--sm: 0.5rem;\n  --pf-global--spacer--md: 1rem;\n  --pf-global--spacer--lg: 1.5rem;\n  --pf-global--spacer--xl: 2rem;\n  --pf-global--spacer--2xl: 3rem;\n  --pf-global--spacer--3xl: 4rem;\n  --pf-global--spacer--4xl: 5rem;\n  --pf-global--spacer--form-element: 0.375rem;\n  --pf-global--gutter: 1rem;\n  --pf-global--gutter--md: 1.5rem;\n  --pf-global--ZIndex--xs: 100;\n  --pf-global--ZIndex--sm: 200;\n  --pf-global--ZIndex--md: 300;\n  --pf-global--ZIndex--lg: 400;\n  --pf-global--ZIndex--xl: 500;\n  --pf-global--ZIndex--2xl: 600;\n  --pf-global--breakpoint--xs: 0;\n  --pf-global--breakpoint--sm: 576px;\n  --pf-global--breakpoint--md: 768px;\n  --pf-global--breakpoint--lg: 992px;\n  --pf-global--breakpoint--xl: 1200px;\n  --pf-global--breakpoint--2xl: 1450px;\n  --pf-global--link--Color: #06c;\n  --pf-global--link--Color--hover: #004080;\n  --pf-global--link--Color--light: #2b9af3;\n  --pf-global--link--Color--light--hover: #73bcf7;\n  --pf-global--link--Color--dark: #06c;\n  --pf-global--link--Color--dark--hover: #004080;\n  --pf-global--link--TextDecoration: none;\n  --pf-global--link--TextDecoration--hover: underline;\n  --pf-global--BorderWidth--sm: 1px;\n  --pf-global--BorderWidth--md: 2px;\n  --pf-global--BorderWidth--lg: 3px;\n  --pf-global--BorderWidth--xl: 4px;\n  --pf-global--BorderColor--100: #d2d2d2;\n  --pf-global--BorderColor--200: #8a8d90;\n  --pf-global--BorderColor--300: #f0f0f0;\n  --pf-global--BorderColor--dark-100: #d2d2d2;\n  --pf-global--BorderColor--light-100: #b8bbbe;\n  --pf-global--BorderRadius--sm: 3px;\n  --pf-global--BorderRadius--lg: 30em;\n  --pf-global--icon--Color--light: #6a6e73;\n  --pf-global--icon--Color--dark: #151515;\n  --pf-global--icon--FontSize--sm: 0.625rem;\n  --pf-global--icon--FontSize--md: 1.125rem;\n  --pf-global--icon--FontSize--lg: 1.5rem;\n  --pf-global--icon--FontSize--xl: 3.375rem;\n  --pf-global--FontFamily--sans-serif: "RedHatText", "Overpass", overpass, helvetica, arial, sans-serif;\n  --pf-global--FontFamily--heading--sans-serif: "RedHatDisplay", "Overpass", overpass, helvetica, arial, sans-serif;\n  --pf-global--FontFamily--monospace: "Liberation Mono", consolas, "SFMono-Regular", menlo, monaco, "Courier New", monospace;\n  --pf-global--FontFamily--overpass--sans-serif: "overpass", overpass, "open sans", -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";\n  --pf-global--FontFamily--overpass--monospace: "overpass-mono", overpass-mono, "SFMono-Regular", menlo, monaco, consolas, "Liberation Mono", "Courier New", monospace;\n  --pf-global--FontSize--4xl: 2.25rem;\n  --pf-global--FontSize--3xl: 1.75rem;\n  --pf-global--FontSize--2xl: 1.5rem;\n  --pf-global--FontSize--xl: 1.25rem;\n  --pf-global--FontSize--lg: 1.125rem;\n  --pf-global--FontSize--md: 1rem;\n  --pf-global--FontSize--sm: 0.875rem;\n  --pf-global--FontSize--xs: 0.75rem;\n  --pf-global--FontWeight--light: 300;\n  --pf-global--FontWeight--normal: 400;\n  --pf-global--FontWeight--semi-bold: 700;\n  --pf-global--FontWeight--overpass--semi-bold: 500;\n  --pf-global--FontWeight--bold: 700;\n  --pf-global--FontWeight--overpass--bold: 600;\n  --pf-global--LineHeight--sm: 1.3;\n  --pf-global--LineHeight--md: 1.5;\n  --pf-global--ListStyle: disc outside;\n  --pf-global--Transition: all 250ms cubic-bezier(0.42, 0, 0.58, 1);\n  --pf-global--TimingFunction: cubic-bezier(0.645, 0.045, 0.355, 1);\n  --pf-global--TransitionDuration: 250ms;\n  --pf-global--arrow--width: 0.9375rem;\n  --pf-global--arrow--width-lg: 1.5625rem;\n  --pf-global--target-size--MinWidth: 44px;\n  --pf-global--target-size--MinHeight: 44px; }\n\n.pf-m-overpass-font {\n  --pf-global--FontFamily--sans-serif: var(--pf-global--FontFamily--overpass--sans-serif);\n  --pf-global--FontFamily--heading--sans-serif: var(--pf-global--FontFamily--sans-serif);\n  --pf-global--FontFamily--monospace: var(--pf-global--FontFamily--overpass--monospace);\n  --pf-global--FontWeight--semi-bold: var(--pf-global--FontWeight--overpass--semi-bold);\n  --pf-global--FontWeight--bold: var(--pf-global--FontWeight--overpass--bold); }\n\n@font-face {\n  font-family: "RedHatDisplay";\n  src: url("./assets/fonts/RedHatDisplay/RedHatDisplay-Regular.eot");\n  src: url("./assets/fonts/RedHatDisplay/RedHatDisplay-Regular.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/RedHatDisplay/RedHatDisplay-Regular.woff") format("woff");\n  font-style: normal;\n  font-weight: 300;\n  text-rendering: optimizeLegibility; }\n\n@font-face {\n  font-family: "RedHatDisplay";\n  src: url("./assets/fonts/RedHatDisplay/RedHatDisplay-Medium.eot");\n  src: url("./assets/fonts/RedHatDisplay/RedHatDisplay-Medium.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/RedHatDisplay/RedHatDisplay-Medium.woff") format("woff");\n  font-style: normal;\n  font-weight: 400;\n  text-rendering: optimizeLegibility; }\n\n@font-face {\n  font-family: "RedHatDisplay";\n  src: url("./assets/fonts/RedHatDisplay/RedHatDisplay-Bold.eot");\n  src: url("./assets/fonts/RedHatDisplay/RedHatDisplay-Bold.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/RedHatDisplay/RedHatDisplay-Bold.woff") format("woff");\n  font-style: normal;\n  font-weight: 700;\n  text-rendering: optimizeLegibility; }\n\n@font-face {\n  font-family: "RedHatText";\n  src: url("./assets/fonts/RedHatText/RedHatText-Regular.eot");\n  src: url("./assets/fonts/RedHatText/RedHatText-Regular.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/RedHatText/RedHatText-Regular.woff") format("woff");\n  font-style: normal;\n  font-weight: 400;\n  text-rendering: optimizeLegibility; }\n\n@font-face {\n  font-family: "RedHatText";\n  src: url("./assets/fonts/RedHatText/RedHatText-Medium.eot");\n  src: url("./assets/fonts/RedHatText/RedHatText-Medium.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/RedHatText/RedHatText-Medium.woff") format("woff");\n  font-style: normal;\n  font-weight: 700;\n  text-rendering: optimizeLegibility; }\n\n@font-face {\n  font-family: "overpass";\n  font-style: normal;\n  font-weight: 200;\n  src: url("./assets/fonts/overpass-webfont/overpass-thin.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-thin.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-thin.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-thin.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-thin.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: italic;\n  font-weight: 200;\n  src: url("./assets/fonts/overpass-webfont/overpass-thin-italic.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-thin-italic.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-thin-italic.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-thin-italic.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-thin-italic.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: normal;\n  font-weight: 300;\n  src: url("./assets/fonts/overpass-webfont/overpass-extralight.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-extralight.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-extralight.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-extralight.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-extralight.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: italic;\n  font-weight: 300;\n  src: url("./assets/fonts/overpass-webfont/overpass-extralight-italic.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-extralight-italic.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-extralight-italic.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-extralight-italic.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-extralight-italic.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: normal;\n  font-weight: 400;\n  src: url("./assets/fonts/overpass-webfont/overpass-light.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-light.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-light.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-light.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-light.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: italic;\n  font-weight: 400;\n  src: url("./assets/fonts/overpass-webfont/overpass-light-italic.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-light-italic.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-light-italic.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-light-italic.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-light-italic.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: normal;\n  font-weight: 500;\n  src: url("./assets/fonts/overpass-webfont/overpass-regular.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-regular.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-regular.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-regular.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-regular.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: italic;\n  font-weight: 500;\n  src: url("./assets/fonts/overpass-webfont/overpass-italic.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-italic.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-italic.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-italic.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-italic.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: normal;\n  font-weight: 600;\n  src: url("./assets/fonts/overpass-webfont/overpass-semibold.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-semibold.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-semibold.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-semibold.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-semibold.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: italic;\n  font-weight: 600;\n  src: url("./assets/fonts/overpass-webfont/overpass-semibold-italic.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-semibold-italic.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-semibold-italic.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-semibold-italic.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-semibold-italic.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: normal;\n  font-weight: 700;\n  src: url("./assets/fonts/overpass-webfont/overpass-bold.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-bold.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-bold.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-bold.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-bold.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: italic;\n  font-weight: 700;\n  src: url("./assets/fonts/overpass-webfont/overpass-bold-italic.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-bold-italic.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-bold-italic.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-bold-italic.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-bold-italic.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: normal;\n  font-weight: 800;\n  src: url("./assets/fonts/overpass-webfont/overpass-extrabold.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-extrabold.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-extrabold.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-extrabold.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-extrabold.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: italic;\n  font-weight: 800;\n  src: url("./assets/fonts/overpass-webfont/overpass-extrabold-italic.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-extrabold-italic.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-extrabold-italic.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-extrabold-italic.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-extrabold-italic.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: normal;\n  font-weight: 900;\n  src: url("./assets/fonts/overpass-webfont/overpass-heavy.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-heavy.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-heavy.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-heavy.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-heavy.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass";\n  font-style: italic;\n  font-weight: 900;\n  src: url("./assets/fonts/overpass-webfont/overpass-heavy-italic.eot");\n  src: url("./assets/fonts/overpass-webfont/overpass-heavy-italic.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-webfont/overpass-heavy-italic.woff2") format("woff2"), url("./assets/fonts/overpass-webfont/overpass-heavy-italic.woff") format("woff"), url("./assets/fonts/overpass-webfont/overpass-heavy-italic.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass-mono";\n  font-style: normal;\n  font-weight: 300;\n  src: url("./assets/fonts/overpass-mono-webfont/overpass-mono-light.eot");\n  src: url("./assets/fonts/overpass-mono-webfont/overpass-mono-light.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-light.woff2") format("woff2"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-light.woff") format("woff"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-light.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass-mono";\n  font-style: normal;\n  font-weight: 400;\n  src: url("./assets/fonts/overpass-mono-webfont/overpass-mono-regular.eot");\n  src: url("./assets/fonts/overpass-mono-webfont/overpass-mono-regular.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-regular.woff2") format("woff2"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-regular.woff") format("woff"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-regular.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass-mono";\n  font-style: normal;\n  font-weight: 500;\n  src: url("./assets/fonts/overpass-mono-webfont/overpass-mono-semibold.eot");\n  src: url("./assets/fonts/overpass-mono-webfont/overpass-mono-semibold.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-semibold.woff2") format("woff2"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-semibold.woff") format("woff"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-semibold.ttf") format("truetype"); }\n\n@font-face {\n  font-family: "overpass-mono";\n  font-style: normal;\n  font-weight: 600;\n  src: url("./assets/fonts/overpass-mono-webfont/overpass-mono-bold.eot");\n  src: url("./assets/fonts/overpass-mono-webfont/overpass-mono-bold.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-bold.woff2") format("woff2"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-bold.woff") format("woff"), url("./assets/fonts/overpass-mono-webfont/overpass-mono-bold.ttf") format("truetype"); }\n\n[class*="pf-c-"], [class*="pf-c-"]::before, [class*="pf-c-"]::after {\n  padding: 0;\n  margin: 0;\n  background-color: transparent; }\n\nhtml {\n  font-size: unset !important; }\n\n.pf-screen-reader {\n  position: fixed;\n  top: 0;\n  left: 0;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border: 0; }\n\nhtml,\nbody,\np,\nol,\nul,\nli,\ndl,\ndt,\ndd,\nblockquote,\nfigure,\nfieldset,\nlegend,\ntextarea,\npre,\niframe,\nhr,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  padding: 0;\n  margin: 0; }\n\nhtml,\nbody {\n  height: 100%; }\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-size: 100%;\n  font-weight: var(--pf-global--FontWeight--normal); }\n\nul {\n  list-style: none; }\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: 100%;\n  line-height: var(--pf-global--LineHeight--md);\n  color: var(--pf-global--Color--100); }\n\nimg,\nembed,\niframe,\nobject,\naudio,\nvideo {\n  max-width: 100%;\n  height: auto; }\n\niframe {\n  border: 0; }\n\ntable {\n  border-spacing: 0;\n  border-collapse: collapse; }\n\ntd,\nth {\n  padding: 0;\n  text-align: left; }\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box; }\n\nhtml {\n  font-family: sans-serif;\n  line-height: 1.15; }\n\nbody {\n  font-family: var(--pf-global--FontFamily--sans-serif);\n  font-size: var(--pf-global--FontSize--md);\n  font-weight: var(--pf-global--FontWeight--normal);\n  line-height: var(--pf-global--LineHeight--md);\n  text-align: left;\n  background-color: var(--pf-global--BackgroundColor--100); }\n\na {\n  font-weight: var(--pf-global--link--FontWeight);\n  color: var(--pf-global--link--Color);\n  text-decoration: var(--pf-global--link--TextDecoration); }\n  a:hover {\n    --pf-global--link--Color: var(--pf-global--link--Color--hover);\n    --pf-global--link--TextDecoration: var(--pf-global--link--TextDecoration--hover); }\n\nbutton,\na {\n  cursor: pointer; }\n\nbutton::-moz-focus-inner,\n[type="button"]::-moz-focus-inner,\n[type="reset"]::-moz-focus-inner,\n[type="submit"]::-moz-focus-inner {\n  padding: 0;\n  border-style: none; }\n\nbutton:-moz-focusring,\n[type="button"]:-moz-focusring,\n[type="reset"]:-moz-focusring,\n[type="submit"]:-moz-focusring {\n  outline: 1px dotted ButtonText; }\n\n.pf-m-overpass-font a {\n  font-weight: var(--pf-global--FontWeight--semi-bold); }\n\n.pf-t-dark.pf-m-transparent {\n  background-color: transparent; }\n\n.pf-t-dark.pf-m-transparent-100 {\n  background-color: rgba(3, 3, 3, 0.42); }\n\n.pf-t-dark.pf-m-transparent-200 {\n  background-color: rgba(3, 3, 3, 0.6); }\n\n.pf-t-dark.pf-m-opaque-100 {\n  background-color: #3c3f42; }\n\n.pf-t-dark.pf-m-opaque-200 {\n  background-color: #151515; }\n\n.pf-t-light.pf-m-transparent {\n  background-color: transparent; }\n\n.pf-t-light.pf-m-opaque-100 {\n  background-color: #fff; }\n\n.pf-t-light.pf-m-opaque-200 {\n  background-color: #fafafa; }\n\n.pf-t-light.pf-m-opaque-300 {\n  background-color: #f0f0f0; }\n\n* .fa,\n* .fas,\n* .far,\n* .fal,\n* .fab {\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  display: inline-block;\n  font-style: normal;\n  font-variant: normal;\n  text-rendering: auto;\n  line-height: 1; }\n\n* .fa-lg {\n  font-size: 1.33333em;\n  line-height: 0.75em;\n  vertical-align: -.0667em; }\n\n* .fa-xs {\n  font-size: .75em; }\n\n* .fa-sm {\n  font-size: .875em; }\n\n* .fa-1x {\n  font-size: 1em; }\n\n* .fa-2x {\n  font-size: 2em; }\n\n* .fa-3x {\n  font-size: 3em; }\n\n* .fa-4x {\n  font-size: 4em; }\n\n* .fa-5x {\n  font-size: 5em; }\n\n* .fa-6x {\n  font-size: 6em; }\n\n* .fa-7x {\n  font-size: 7em; }\n\n* .fa-8x {\n  font-size: 8em; }\n\n* .fa-9x {\n  font-size: 9em; }\n\n* .fa-10x {\n  font-size: 10em; }\n\n* .fa-fw {\n  text-align: center;\n  width: 1.25em; }\n\n* .fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0; }\n  * .fa-ul > li {\n    position: relative; }\n\n* .fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inherit; }\n\n* .fa-border {\n  border: solid 0.08em #eee;\n  border-radius: .1em;\n  padding: .2em .25em .15em; }\n\n* .fa-pull-left {\n  float: left; }\n\n* .fa-pull-right {\n  float: right; }\n\n* .fa.fa-pull-left,\n* .fas.fa-pull-left,\n* .far.fa-pull-left,\n* .fal.fa-pull-left,\n* .fab.fa-pull-left {\n  margin-right: .3em; }\n\n* .fa.fa-pull-right,\n* .fas.fa-pull-right,\n* .far.fa-pull-right,\n* .fal.fa-pull-right,\n* .fab.fa-pull-right {\n  margin-left: .3em; }\n\n* .fa-spin {\n  animation: fa-spin 2s infinite linear; }\n\n* .fa-pulse {\n  animation: fa-spin 1s infinite steps(8); }\n\n@keyframes fa-spin {\n  0% {\n    transform: rotate(0deg); }\n  100% {\n    transform: rotate(360deg); } }\n\n* .fa-rotate-90 {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";\n  transform: rotate(90deg); }\n\n* .fa-rotate-180 {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";\n  transform: rotate(180deg); }\n\n* .fa-rotate-270 {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";\n  transform: rotate(270deg); }\n\n* .fa-flip-horizontal {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";\n  transform: scale(-1, 1); }\n\n* .fa-flip-vertical {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";\n  transform: scale(1, -1); }\n\n* .fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";\n  transform: scale(-1, -1); }\n\n* :root .fa-rotate-90,\n* :root .fa-rotate-180,\n* :root .fa-rotate-270,\n* :root .fa-flip-horizontal,\n* :root .fa-flip-vertical {\n  filter: none; }\n\n* .fa-stack {\n  display: inline-block;\n  height: 2em;\n  line-height: 2em;\n  position: relative;\n  vertical-align: middle;\n  width: 2.5em; }\n\n* .fa-stack-1x,\n* .fa-stack-2x {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  width: 100%; }\n\n* .fa-stack-1x {\n  line-height: inherit; }\n\n\n* .fa-stack-2x {\n  font-size: 2em; }\n\n* .fa-inverse {\n  color: #fff; }\n\n* .fa-500px:before {\n  content: "\\f26e"; }\n\n* .fa-accessible-icon:before {\n  content: "\\f368"; }\n\n* .fa-accusoft:before {\n  content: "\\f369"; }\n\n* .fa-acquisitions-incorporated:before {\n  content: "\\f6af"; }\n\n* .fa-ad:before {\n  content: "\\f641"; }\n\n* .fa-address-book:before {\n  content: "\\f2b9"; }\n\n* .fa-address-card:before {\n  content: "\\f2bb"; }\n\n* .fa-adjust:before {\n  content: "\\f042"; }\n\n* .fa-adn:before {\n  content: "\\f170"; }\n\n* .fa-adobe:before {\n  content: "\\f778"; }\n\n* .fa-adversal:before {\n  content: "\\f36a"; }\n\n* .fa-affiliatetheme:before {\n  content: "\\f36b"; }\n\n* .fa-air-freshener:before {\n  content: "\\f5d0"; }\n\n* .fa-algolia:before {\n  content: "\\f36c"; }\n\n* .fa-align-center:before {\n  content: "\\f037"; }\n\n* .fa-align-justify:before {\n  content: "\\f039"; }\n\n* .fa-align-left:before {\n  content: "\\f036"; }\n\n* .fa-align-right:before {\n  content: "\\f038"; }\n\n* .fa-alipay:before {\n  content: "\\f642"; }\n\n* .fa-allergies:before {\n  content: "\\f461"; }\n\n* .fa-amazon:before {\n  content: "\\f270"; }\n\n* .fa-amazon-pay:before {\n  content: "\\f42c"; }\n\n* .fa-ambulance:before {\n  content: "\\f0f9"; }\n\n* .fa-american-sign-language-interpreting:before {\n  content: "\\f2a3"; }\n\n* .fa-amilia:before {\n  content: "\\f36d"; }\n\n* .fa-anchor:before {\n  content: "\\f13d"; }\n\n* .fa-android:before {\n  content: "\\f17b"; }\n\n* .fa-angellist:before {\n  content: "\\f209"; }\n\n* .fa-angle-double-down:before {\n  content: "\\f103"; }\n\n* .fa-angle-double-left:before {\n  content: "\\f100"; }\n\n* .fa-angle-double-right:before {\n  content: "\\f101"; }\n\n* .fa-angle-double-up:before {\n  content: "\\f102"; }\n\n* .fa-angle-down:before {\n  content: "\\f107"; }\n\n* .fa-angle-left:before {\n  content: "\\f104"; }\n\n* .fa-angle-right:before {\n  content: "\\f105"; }\n\n* .fa-angle-up:before {\n  content: "\\f106"; }\n\n* .fa-angry:before {\n  content: "\\f556"; }\n\n* .fa-angrycreative:before {\n  content: "\\f36e"; }\n\n* .fa-angular:before {\n  content: "\\f420"; }\n\n* .fa-ankh:before {\n  content: "\\f644"; }\n\n* .fa-app-store:before {\n  content: "\\f36f"; }\n\n* .fa-app-store-ios:before {\n  content: "\\f370"; }\n\n* .fa-apper:before {\n  content: "\\f371"; }\n\n* .fa-apple:before {\n  content: "\\f179"; }\n\n* .fa-apple-alt:before {\n  content: "\\f5d1"; }\n\n* .fa-apple-pay:before {\n  content: "\\f415"; }\n\n* .fa-archive:before {\n  content: "\\f187"; }\n\n* .fa-archway:before {\n  content: "\\f557"; }\n\n* .fa-arrow-alt-circle-down:before {\n  content: "\\f358"; }\n\n* .fa-arrow-alt-circle-left:before {\n  content: "\\f359"; }\n\n* .fa-arrow-alt-circle-right:before {\n  content: "\\f35a"; }\n\n* .fa-arrow-alt-circle-up:before {\n  content: "\\f35b"; }\n\n* .fa-arrow-circle-down:before {\n  content: "\\f0ab"; }\n\n* .fa-arrow-circle-left:before {\n  content: "\\f0a8"; }\n\n* .fa-arrow-circle-right:before {\n  content: "\\f0a9"; }\n\n* .fa-arrow-circle-up:before {\n  content: "\\f0aa"; }\n\n* .fa-arrow-down:before {\n  content: "\\f063"; }\n\n* .fa-arrow-left:before {\n  content: "\\f060"; }\n\n* .fa-arrow-right:before {\n  content: "\\f061"; }\n\n* .fa-arrow-up:before {\n  content: "\\f062"; }\n\n* .fa-arrows-alt:before {\n  content: "\\f0b2"; }\n\n* .fa-arrows-alt-h:before {\n  content: "\\f337"; }\n\n* .fa-arrows-alt-v:before {\n  content: "\\f338"; }\n\n* .fa-artstation:before {\n  content: "\\f77a"; }\n\n* .fa-assistive-listening-systems:before {\n  content: "\\f2a2"; }\n\n* .fa-asterisk:before {\n  content: "\\f069"; }\n\n* .fa-asymmetrik:before {\n  content: "\\f372"; }\n\n* .fa-at:before {\n  content: "\\f1fa"; }\n\n* .fa-atlas:before {\n  content: "\\f558"; }\n\n* .fa-atlassian:before {\n  content: "\\f77b"; }\n\n* .fa-atom:before {\n  content: "\\f5d2"; }\n\n* .fa-audible:before {\n  content: "\\f373"; }\n\n* .fa-audio-description:before {\n  content: "\\f29e"; }\n\n* .fa-autoprefixer:before {\n  content: "\\f41c"; }\n\n* .fa-avianex:before {\n  content: "\\f374"; }\n\n* .fa-aviato:before {\n  content: "\\f421"; }\n\n* .fa-award:before {\n  content: "\\f559"; }\n\n* .fa-aws:before {\n  content: "\\f375"; }\n\n* .fa-baby:before {\n  content: "\\f77c"; }\n\n* .fa-baby-carriage:before {\n  content: "\\f77d"; }\n\n* .fa-backspace:before {\n  content: "\\f55a"; }\n\n* .fa-backward:before {\n  content: "\\f04a"; }\n\n* .fa-balance-scale:before {\n  content: "\\f24e"; }\n\n* .fa-ban:before {\n  content: "\\f05e"; }\n\n* .fa-band-aid:before {\n  content: "\\f462"; }\n\n* .fa-bandcamp:before {\n  content: "\\f2d5"; }\n\n* .fa-barcode:before {\n  content: "\\f02a"; }\n\n* .fa-bars:before {\n  content: "\\f0c9"; }\n\n* .fa-baseball-ball:before {\n  content: "\\f433"; }\n\n* .fa-basketball-ball:before {\n  content: "\\f434"; }\n\n* .fa-bath:before {\n  content: "\\f2cd"; }\n\n* .fa-battery-empty:before {\n  content: "\\f244"; }\n\n* .fa-battery-full:before {\n  content: "\\f240"; }\n\n* .fa-battery-half:before {\n  content: "\\f242"; }\n\n* .fa-battery-quarter:before {\n  content: "\\f243"; }\n\n* .fa-battery-three-quarters:before {\n  content: "\\f241"; }\n\n* .fa-bed:before {\n  content: "\\f236"; }\n\n* .fa-beer:before {\n  content: "\\f0fc"; }\n\n* .fa-behance:before {\n  content: "\\f1b4"; }\n\n* .fa-behance-square:before {\n  content: "\\f1b5"; }\n\n* .fa-bell:before {\n  content: "\\f0f3"; }\n\n* .fa-bell-slash:before {\n  content: "\\f1f6"; }\n\n* .fa-bezier-curve:before {\n  content: "\\f55b"; }\n\n* .fa-bible:before {\n  content: "\\f647"; }\n\n* .fa-bicycle:before {\n  content: "\\f206"; }\n\n* .fa-bimobject:before {\n  content: "\\f378"; }\n\n* .fa-binoculars:before {\n  content: "\\f1e5"; }\n\n* .fa-biohazard:before {\n  content: "\\f780"; }\n\n* .fa-birthday-cake:before {\n  content: "\\f1fd"; }\n\n* .fa-bitbucket:before {\n  content: "\\f171"; }\n\n* .fa-bitcoin:before {\n  content: "\\f379"; }\n\n* .fa-bity:before {\n  content: "\\f37a"; }\n\n* .fa-black-tie:before {\n  content: "\\f27e"; }\n\n* .fa-blackberry:before {\n  content: "\\f37b"; }\n\n* .fa-blender:before {\n  content: "\\f517"; }\n\n* .fa-blender-phone:before {\n  content: "\\f6b6"; }\n\n* .fa-blind:before {\n  content: "\\f29d"; }\n\n* .fa-blog:before {\n  content: "\\f781"; }\n\n* .fa-blogger:before {\n  content: "\\f37c"; }\n\n* .fa-blogger-b:before {\n  content: "\\f37d"; }\n\n* .fa-bluetooth:before {\n  content: "\\f293"; }\n\n* .fa-bluetooth-b:before {\n  content: "\\f294"; }\n\n* .fa-bold:before {\n  content: "\\f032"; }\n\n* .fa-bolt:before {\n  content: "\\f0e7"; }\n\n* .fa-bomb:before {\n  content: "\\f1e2"; }\n\n* .fa-bone:before {\n  content: "\\f5d7"; }\n\n* .fa-bong:before {\n  content: "\\f55c"; }\n\n* .fa-book:before {\n  content: "\\f02d"; }\n\n* .fa-book-dead:before {\n  content: "\\f6b7"; }\n\n* .fa-book-open:before {\n  content: "\\f518"; }\n\n* .fa-book-reader:before {\n  content: "\\f5da"; }\n\n* .fa-bookmark:before {\n  content: "\\f02e"; }\n\n* .fa-bowling-ball:before {\n  content: "\\f436"; }\n\n* .fa-box:before {\n  content: "\\f466"; }\n\n* .fa-box-open:before {\n  content: "\\f49e"; }\n\n* .fa-boxes:before {\n  content: "\\f468"; }\n\n* .fa-braille:before {\n  content: "\\f2a1"; }\n\n* .fa-brain:before {\n  content: "\\f5dc"; }\n\n* .fa-briefcase:before {\n  content: "\\f0b1"; }\n\n* .fa-briefcase-medical:before {\n  content: "\\f469"; }\n\n* .fa-broadcast-tower:before {\n  content: "\\f519"; }\n\n* .fa-broom:before {\n  content: "\\f51a"; }\n\n* .fa-brush:before {\n  content: "\\f55d"; }\n\n* .fa-btc:before {\n  content: "\\f15a"; }\n\n* .fa-bug:before {\n  content: "\\f188"; }\n\n* .fa-building:before {\n  content: "\\f1ad"; }\n\n* .fa-bullhorn:before {\n  content: "\\f0a1"; }\n\n* .fa-bullseye:before {\n  content: "\\f140"; }\n\n* .fa-burn:before {\n  content: "\\f46a"; }\n\n* .fa-buromobelexperte:before {\n  content: "\\f37f"; }\n\n* .fa-bus:before {\n  content: "\\f207"; }\n\n* .fa-bus-alt:before {\n  content: "\\f55e"; }\n\n* .fa-business-time:before {\n  content: "\\f64a"; }\n\n* .fa-buysellads:before {\n  content: "\\f20d"; }\n\n* .fa-calculator:before {\n  content: "\\f1ec"; }\n\n* .fa-calendar:before {\n  content: "\\f133"; }\n\n* .fa-calendar-alt:before {\n  content: "\\f073"; }\n\n* .fa-calendar-check:before {\n  content: "\\f274"; }\n\n* .fa-calendar-day:before {\n  content: "\\f783"; }\n\n* .fa-calendar-minus:before {\n  content: "\\f272"; }\n\n* .fa-calendar-plus:before {\n  content: "\\f271"; }\n\n* .fa-calendar-times:before {\n  content: "\\f273"; }\n\n* .fa-calendar-week:before {\n  content: "\\f784"; }\n\n* .fa-camera:before {\n  content: "\\f030"; }\n\n* .fa-camera-retro:before {\n  content: "\\f083"; }\n\n* .fa-campground:before {\n  content: "\\f6bb"; }\n\n* .fa-canadian-maple-leaf:before {\n  content: "\\f785"; }\n\n* .fa-candy-cane:before {\n  content: "\\f786"; }\n\n* .fa-cannabis:before {\n  content: "\\f55f"; }\n\n* .fa-capsules:before {\n  content: "\\f46b"; }\n\n* .fa-car:before {\n  content: "\\f1b9"; }\n\n* .fa-car-alt:before {\n  content: "\\f5de"; }\n\n* .fa-car-battery:before {\n  content: "\\f5df"; }\n\n* .fa-car-crash:before {\n  content: "\\f5e1"; }\n\n* .fa-car-side:before {\n  content: "\\f5e4"; }\n\n* .fa-caret-down:before {\n  content: "\\f0d7"; }\n\n* .fa-caret-left:before {\n  content: "\\f0d9"; }\n\n* .fa-caret-right:before {\n  content: "\\f0da"; }\n\n* .fa-caret-square-down:before {\n  content: "\\f150"; }\n\n* .fa-caret-square-left:before {\n  content: "\\f191"; }\n\n* .fa-caret-square-right:before {\n  content: "\\f152"; }\n\n* .fa-caret-square-up:before {\n  content: "\\f151"; }\n\n* .fa-caret-up:before {\n  content: "\\f0d8"; }\n\n* .fa-carrot:before {\n  content: "\\f787"; }\n\n* .fa-cart-arrow-down:before {\n  content: "\\f218"; }\n\n* .fa-cart-plus:before {\n  content: "\\f217"; }\n\n* .fa-cash-register:before {\n  content: "\\f788"; }\n\n* .fa-cat:before {\n  content: "\\f6be"; }\n\n* .fa-cc-amazon-pay:before {\n  content: "\\f42d"; }\n\n* .fa-cc-amex:before {\n  content: "\\f1f3"; }\n\n* .fa-cc-apple-pay:before {\n  content: "\\f416"; }\n\n* .fa-cc-diners-club:before {\n  content: "\\f24c"; }\n\n* .fa-cc-discover:before {\n  content: "\\f1f2"; }\n\n* .fa-cc-jcb:before {\n  content: "\\f24b"; }\n\n* .fa-cc-mastercard:before {\n  content: "\\f1f1"; }\n\n* .fa-cc-paypal:before {\n  content: "\\f1f4"; }\n\n* .fa-cc-stripe:before {\n  content: "\\f1f5"; }\n\n* .fa-cc-visa:before {\n  content: "\\f1f0"; }\n\n* .fa-centercode:before {\n  content: "\\f380"; }\n\n* .fa-centos:before {\n  content: "\\f789"; }\n\n* .fa-certificate:before {\n  content: "\\f0a3"; }\n\n* .fa-chair:before {\n  content: "\\f6c0"; }\n\n* .fa-chalkboard:before {\n  content: "\\f51b"; }\n\n* .fa-chalkboard-teacher:before {\n  content: "\\f51c"; }\n\n* .fa-charging-station:before {\n  content: "\\f5e7"; }\n\n* .fa-chart-area:before {\n  content: "\\f1fe"; }\n\n* .fa-chart-bar:before {\n  content: "\\f080"; }\n\n* .fa-chart-line:before {\n  content: "\\f201"; }\n\n* .fa-chart-pie:before {\n  content: "\\f200"; }\n\n* .fa-check:before {\n  content: "\\f00c"; }\n\n* .fa-check-circle:before {\n  content: "\\f058"; }\n\n* .fa-check-double:before {\n  content: "\\f560"; }\n\n* .fa-check-square:before {\n  content: "\\f14a"; }\n\n* .fa-chess:before {\n  content: "\\f439"; }\n\n* .fa-chess-bishop:before {\n  content: "\\f43a"; }\n\n* .fa-chess-board:before {\n  content: "\\f43c"; }\n\n* .fa-chess-king:before {\n  content: "\\f43f"; }\n\n* .fa-chess-knight:before {\n  content: "\\f441"; }\n\n* .fa-chess-pawn:before {\n  content: "\\f443"; }\n\n* .fa-chess-queen:before {\n  content: "\\f445"; }\n\n* .fa-chess-rook:before {\n  content: "\\f447"; }\n\n* .fa-chevron-circle-down:before {\n  content: "\\f13a"; }\n\n* .fa-chevron-circle-left:before {\n  content: "\\f137"; }\n\n* .fa-chevron-circle-right:before {\n  content: "\\f138"; }\n\n* .fa-chevron-circle-up:before {\n  content: "\\f139"; }\n\n* .fa-chevron-down:before {\n  content: "\\f078"; }\n\n* .fa-chevron-left:before {\n  content: "\\f053"; }\n\n* .fa-chevron-right:before {\n  content: "\\f054"; }\n\n* .fa-chevron-up:before {\n  content: "\\f077"; }\n\n* .fa-child:before {\n  content: "\\f1ae"; }\n\n* .fa-chrome:before {\n  content: "\\f268"; }\n\n* .fa-church:before {\n  content: "\\f51d"; }\n\n* .fa-circle:before {\n  content: "\\f111"; }\n\n* .fa-circle-notch:before {\n  content: "\\f1ce"; }\n\n* .fa-city:before {\n  content: "\\f64f"; }\n\n* .fa-clipboard:before {\n  content: "\\f328"; }\n\n* .fa-clipboard-check:before {\n  content: "\\f46c"; }\n\n* .fa-clipboard-list:before {\n  content: "\\f46d"; }\n\n* .fa-clock:before {\n  content: "\\f017"; }\n\n* .fa-clone:before {\n  content: "\\f24d"; }\n\n* .fa-closed-captioning:before {\n  content: "\\f20a"; }\n\n* .fa-cloud:before {\n  content: "\\f0c2"; }\n\n* .fa-cloud-download-alt:before {\n  content: "\\f381"; }\n\n* .fa-cloud-meatball:before {\n  content: "\\f73b"; }\n\n* .fa-cloud-moon:before {\n  content: "\\f6c3"; }\n\n* .fa-cloud-moon-rain:before {\n  content: "\\f73c"; }\n\n* .fa-cloud-rain:before {\n  content: "\\f73d"; }\n\n* .fa-cloud-showers-heavy:before {\n  content: "\\f740"; }\n\n* .fa-cloud-sun:before {\n  content: "\\f6c4"; }\n\n* .fa-cloud-sun-rain:before {\n  content: "\\f743"; }\n\n* .fa-cloud-upload-alt:before {\n  content: "\\f382"; }\n\n* .fa-cloudscale:before {\n  content: "\\f383"; }\n\n* .fa-cloudsmith:before {\n  content: "\\f384"; }\n\n* .fa-cloudversify:before {\n  content: "\\f385"; }\n\n* .fa-cocktail:before {\n  content: "\\f561"; }\n\n* .fa-code:before {\n  content: "\\f121"; }\n\n* .fa-code-branch:before {\n  content: "\\f126"; }\n\n* .fa-codepen:before {\n  content: "\\f1cb"; }\n\n* .fa-codiepie:before {\n  content: "\\f284"; }\n\n* .fa-coffee:before {\n  content: "\\f0f4"; }\n\n* .fa-cog:before {\n  content: "\\f013"; }\n\n* .fa-cogs:before {\n  content: "\\f085"; }\n\n* .fa-coins:before {\n  content: "\\f51e"; }\n\n* .fa-columns:before {\n  content: "\\f0db"; }\n\n* .fa-comment:before {\n  content: "\\f075"; }\n\n* .fa-comment-alt:before {\n  content: "\\f27a"; }\n\n* .fa-comment-dollar:before {\n  content: "\\f651"; }\n\n* .fa-comment-dots:before {\n  content: "\\f4ad"; }\n\n* .fa-comment-slash:before {\n  content: "\\f4b3"; }\n\n* .fa-comments:before {\n  content: "\\f086"; }\n\n* .fa-comments-dollar:before {\n  content: "\\f653"; }\n\n* .fa-compact-disc:before {\n  content: "\\f51f"; }\n\n* .fa-compass:before {\n  content: "\\f14e"; }\n\n* .fa-compress:before {\n  content: "\\f066"; }\n\n* .fa-compress-arrows-alt:before {\n  content: "\\f78c"; }\n\n* .fa-concierge-bell:before {\n  content: "\\f562"; }\n\n* .fa-confluence:before {\n  content: "\\f78d"; }\n\n* .fa-connectdevelop:before {\n  content: "\\f20e"; }\n\n* .fa-contao:before {\n  content: "\\f26d"; }\n\n* .fa-cookie:before {\n  content: "\\f563"; }\n\n* .fa-cookie-bite:before {\n  content: "\\f564"; }\n\n* .fa-copy:before {\n  content: "\\f0c5"; }\n\n* .fa-copyright:before {\n  content: "\\f1f9"; }\n\n* .fa-couch:before {\n  content: "\\f4b8"; }\n\n* .fa-cpanel:before {\n  content: "\\f388"; }\n\n* .fa-creative-commons:before {\n  content: "\\f25e"; }\n\n* .fa-creative-commons-by:before {\n  content: "\\f4e7"; }\n\n* .fa-creative-commons-nc:before {\n  content: "\\f4e8"; }\n\n* .fa-creative-commons-nc-eu:before {\n  content: "\\f4e9"; }\n\n* .fa-creative-commons-nc-jp:before {\n  content: "\\f4ea"; }\n\n* .fa-creative-commons-nd:before {\n  content: "\\f4eb"; }\n\n* .fa-creative-commons-pd:before {\n  content: "\\f4ec"; }\n\n* .fa-creative-commons-pd-alt:before {\n  content: "\\f4ed"; }\n\n* .fa-creative-commons-remix:before {\n  content: "\\f4ee"; }\n\n* .fa-creative-commons-sa:before {\n  content: "\\f4ef"; }\n\n* .fa-creative-commons-sampling:before {\n  content: "\\f4f0"; }\n\n* .fa-creative-commons-sampling-plus:before {\n  content: "\\f4f1"; }\n\n* .fa-creative-commons-share:before {\n  content: "\\f4f2"; }\n\n* .fa-creative-commons-zero:before {\n  content: "\\f4f3"; }\n\n* .fa-credit-card:before {\n  content: "\\f09d"; }\n\n* .fa-critical-role:before {\n  content: "\\f6c9"; }\n\n* .fa-crop:before {\n  content: "\\f125"; }\n\n* .fa-crop-alt:before {\n  content: "\\f565"; }\n\n* .fa-cross:before {\n  content: "\\f654"; }\n\n* .fa-crosshairs:before {\n  content: "\\f05b"; }\n\n* .fa-crow:before {\n  content: "\\f520"; }\n\n* .fa-crown:before {\n  content: "\\f521"; }\n\n* .fa-css3:before {\n  content: "\\f13c"; }\n\n* .fa-css3-alt:before {\n  content: "\\f38b"; }\n\n* .fa-cube:before {\n  content: "\\f1b2"; }\n\n* .fa-cubes:before {\n  content: "\\f1b3"; }\n\n* .fa-cut:before {\n  content: "\\f0c4"; }\n\n* .fa-cuttlefish:before {\n  content: "\\f38c"; }\n\n* .fa-d-and-d:before {\n  content: "\\f38d"; }\n\n* .fa-d-and-d-beyond:before {\n  content: "\\f6ca"; }\n\n* .fa-dashcube:before {\n  content: "\\f210"; }\n\n* .fa-database:before {\n  content: "\\f1c0"; }\n\n* .fa-deaf:before {\n  content: "\\f2a4"; }\n\n* .fa-delicious:before {\n  content: "\\f1a5"; }\n\n* .fa-democrat:before {\n  content: "\\f747"; }\n\n* .fa-deploydog:before {\n  content: "\\f38e"; }\n\n* .fa-deskpro:before {\n  content: "\\f38f"; }\n\n* .fa-desktop:before {\n  content: "\\f108"; }\n\n* .fa-dev:before {\n  content: "\\f6cc"; }\n\n* .fa-deviantart:before {\n  content: "\\f1bd"; }\n\n* .fa-dharmachakra:before {\n  content: "\\f655"; }\n\n* .fa-dhl:before {\n  content: "\\f790"; }\n\n* .fa-diagnoses:before {\n  content: "\\f470"; }\n\n* .fa-diaspora:before {\n  content: "\\f791"; }\n\n* .fa-dice:before {\n  content: "\\f522"; }\n\n* .fa-dice-d20:before {\n  content: "\\f6cf"; }\n\n* .fa-dice-d6:before {\n  content: "\\f6d1"; }\n\n* .fa-dice-five:before {\n  content: "\\f523"; }\n\n* .fa-dice-four:before {\n  content: "\\f524"; }\n\n* .fa-dice-one:before {\n  content: "\\f525"; }\n\n* .fa-dice-six:before {\n  content: "\\f526"; }\n\n* .fa-dice-three:before {\n  content: "\\f527"; }\n\n* .fa-dice-two:before {\n  content: "\\f528"; }\n\n* .fa-digg:before {\n  content: "\\f1a6"; }\n\n* .fa-digital-ocean:before {\n  content: "\\f391"; }\n\n* .fa-digital-tachograph:before {\n  content: "\\f566"; }\n\n* .fa-directions:before {\n  content: "\\f5eb"; }\n\n* .fa-discord:before {\n  content: "\\f392"; }\n\n* .fa-discourse:before {\n  content: "\\f393"; }\n\n* .fa-divide:before {\n  content: "\\f529"; }\n\n* .fa-dizzy:before {\n  content: "\\f567"; }\n\n* .fa-dna:before {\n  content: "\\f471"; }\n\n* .fa-dochub:before {\n  content: "\\f394"; }\n\n* .fa-docker:before {\n  content: "\\f395"; }\n\n* .fa-dog:before {\n  content: "\\f6d3"; }\n\n* .fa-dollar-sign:before {\n  content: "\\f155"; }\n\n* .fa-dolly:before {\n  content: "\\f472"; }\n\n* .fa-dolly-flatbed:before {\n  content: "\\f474"; }\n\n* .fa-donate:before {\n  content: "\\f4b9"; }\n\n* .fa-door-closed:before {\n  content: "\\f52a"; }\n\n* .fa-door-open:before {\n  content: "\\f52b"; }\n\n* .fa-dot-circle:before {\n  content: "\\f192"; }\n\n* .fa-dove:before {\n  content: "\\f4ba"; }\n\n* .fa-download:before {\n  content: "\\f019"; }\n\n* .fa-draft2digital:before {\n  content: "\\f396"; }\n\n* .fa-drafting-compass:before {\n  content: "\\f568"; }\n\n* .fa-dragon:before {\n  content: "\\f6d5"; }\n\n* .fa-draw-polygon:before {\n  content: "\\f5ee"; }\n\n* .fa-dribbble:before {\n  content: "\\f17d"; }\n\n* .fa-dribbble-square:before {\n  content: "\\f397"; }\n\n* .fa-dropbox:before {\n  content: "\\f16b"; }\n\n* .fa-drum:before {\n  content: "\\f569"; }\n\n* .fa-drum-steelpan:before {\n  content: "\\f56a"; }\n\n* .fa-drumstick-bite:before {\n  content: "\\f6d7"; }\n\n* .fa-drupal:before {\n  content: "\\f1a9"; }\n\n* .fa-dumbbell:before {\n  content: "\\f44b"; }\n\n* .fa-dumpster:before {\n  content: "\\f793"; }\n\n* .fa-dumpster-fire:before {\n  content: "\\f794"; }\n\n* .fa-dungeon:before {\n  content: "\\f6d9"; }\n\n* .fa-dyalog:before {\n  content: "\\f399"; }\n\n* .fa-earlybirds:before {\n  content: "\\f39a"; }\n\n* .fa-ebay:before {\n  content: "\\f4f4"; }\n\n* .fa-edge:before {\n  content: "\\f282"; }\n\n* .fa-edit:before {\n  content: "\\f044"; }\n\n* .fa-eject:before {\n  content: "\\f052"; }\n\n* .fa-elementor:before {\n  content: "\\f430"; }\n\n* .fa-ellipsis-h:before {\n  content: "\\f141"; }\n\n* .fa-ellipsis-v:before {\n  content: "\\f142"; }\n\n* .fa-ello:before {\n  content: "\\f5f1"; }\n\n* .fa-ember:before {\n  content: "\\f423"; }\n\n* .fa-empire:before {\n  content: "\\f1d1"; }\n\n* .fa-envelope:before {\n  content: "\\f0e0"; }\n\n* .fa-envelope-open:before {\n  content: "\\f2b6"; }\n\n* .fa-envelope-open-text:before {\n  content: "\\f658"; }\n\n* .fa-envelope-square:before {\n  content: "\\f199"; }\n\n* .fa-envira:before {\n  content: "\\f299"; }\n\n* .fa-equals:before {\n  content: "\\f52c"; }\n\n* .fa-eraser:before {\n  content: "\\f12d"; }\n\n* .fa-erlang:before {\n  content: "\\f39d"; }\n\n* .fa-ethereum:before {\n  content: "\\f42e"; }\n\n* .fa-ethernet:before {\n  content: "\\f796"; }\n\n* .fa-etsy:before {\n  content: "\\f2d7"; }\n\n* .fa-euro-sign:before {\n  content: "\\f153"; }\n\n* .fa-exchange-alt:before {\n  content: "\\f362"; }\n\n* .fa-exclamation:before {\n  content: "\\f12a"; }\n\n* .fa-exclamation-circle:before {\n  content: "\\f06a"; }\n\n* .fa-exclamation-triangle:before {\n  content: "\\f071"; }\n\n* .fa-expand:before {\n  content: "\\f065"; }\n\n* .fa-expand-arrows-alt:before {\n  content: "\\f31e"; }\n\n* .fa-expeditedssl:before {\n  content: "\\f23e"; }\n\n* .fa-external-link-alt:before {\n  content: "\\f35d"; }\n\n* .fa-external-link-square-alt:before {\n  content: "\\f360"; }\n\n* .fa-eye:before {\n  content: "\\f06e"; }\n\n* .fa-eye-dropper:before {\n  content: "\\f1fb"; }\n\n* .fa-eye-slash:before {\n  content: "\\f070"; }\n\n* .fa-facebook:before {\n  content: "\\f09a"; }\n\n* .fa-facebook-f:before {\n  content: "\\f39e"; }\n\n* .fa-facebook-messenger:before {\n  content: "\\f39f"; }\n\n* .fa-facebook-square:before {\n  content: "\\f082"; }\n\n* .fa-fantasy-flight-games:before {\n  content: "\\f6dc"; }\n\n* .fa-fast-backward:before {\n  content: "\\f049"; }\n\n* .fa-fast-forward:before {\n  content: "\\f050"; }\n\n* .fa-fax:before {\n  content: "\\f1ac"; }\n\n* .fa-feather:before {\n  content: "\\f52d"; }\n\n* .fa-feather-alt:before {\n  content: "\\f56b"; }\n\n* .fa-fedex:before {\n  content: "\\f797"; }\n\n* .fa-fedora:before {\n  content: "\\f798"; }\n\n* .fa-female:before {\n  content: "\\f182"; }\n\n* .fa-fighter-jet:before {\n  content: "\\f0fb"; }\n\n* .fa-figma:before {\n  content: "\\f799"; }\n\n* .fa-file:before {\n  content: "\\f15b"; }\n\n* .fa-file-alt:before {\n  content: "\\f15c"; }\n\n* .fa-file-archive:before {\n  content: "\\f1c6"; }\n\n* .fa-file-audio:before {\n  content: "\\f1c7"; }\n\n* .fa-file-code:before {\n  content: "\\f1c9"; }\n\n* .fa-file-contract:before {\n  content: "\\f56c"; }\n\n* .fa-file-csv:before {\n  content: "\\f6dd"; }\n\n* .fa-file-download:before {\n  content: "\\f56d"; }\n\n* .fa-file-excel:before {\n  content: "\\f1c3"; }\n\n* .fa-file-export:before {\n  content: "\\f56e"; }\n\n* .fa-file-image:before {\n  content: "\\f1c5"; }\n\n* .fa-file-import:before {\n  content: "\\f56f"; }\n\n* .fa-file-invoice:before {\n  content: "\\f570"; }\n\n* .fa-file-invoice-dollar:before {\n  content: "\\f571"; }\n\n* .fa-file-medical:before {\n  content: "\\f477"; }\n\n* .fa-file-medical-alt:before {\n  content: "\\f478"; }\n\n* .fa-file-pdf:before {\n  content: "\\f1c1"; }\n\n* .fa-file-powerpoint:before {\n  content: "\\f1c4"; }\n\n* .fa-file-prescription:before {\n  content: "\\f572"; }\n\n* .fa-file-signature:before {\n  content: "\\f573"; }\n\n* .fa-file-upload:before {\n  content: "\\f574"; }\n\n* .fa-file-video:before {\n  content: "\\f1c8"; }\n\n* .fa-file-word:before {\n  content: "\\f1c2"; }\n\n* .fa-fill:before {\n  content: "\\f575"; }\n\n* .fa-fill-drip:before {\n  content: "\\f576"; }\n\n* .fa-film:before {\n  content: "\\f008"; }\n\n* .fa-filter:before {\n  content: "\\f0b0"; }\n\n* .fa-fingerprint:before {\n  content: "\\f577"; }\n\n* .fa-fire:before {\n  content: "\\f06d"; }\n\n* .fa-fire-alt:before {\n  content: "\\f7e4"; }\n\n* .fa-fire-extinguisher:before {\n  content: "\\f134"; }\n\n* .fa-firefox:before {\n  content: "\\f269"; }\n\n* .fa-first-aid:before {\n  content: "\\f479"; }\n\n* .fa-first-order:before {\n  content: "\\f2b0"; }\n\n* .fa-first-order-alt:before {\n  content: "\\f50a"; }\n\n* .fa-firstdraft:before {\n  content: "\\f3a1"; }\n\n* .fa-fish:before {\n  content: "\\f578"; }\n\n* .fa-fist-raised:before {\n  content: "\\f6de"; }\n\n* .fa-flag:before {\n  content: "\\f024"; }\n\n* .fa-flag-checkered:before {\n  content: "\\f11e"; }\n\n* .fa-flag-usa:before {\n  content: "\\f74d"; }\n\n* .fa-flask:before {\n  content: "\\f0c3"; }\n\n* .fa-flickr:before {\n  content: "\\f16e"; }\n\n* .fa-flipboard:before {\n  content: "\\f44d"; }\n\n* .fa-flushed:before {\n  content: "\\f579"; }\n\n* .fa-fly:before {\n  content: "\\f417"; }\n\n* .fa-folder:before {\n  content: "\\f07b"; }\n\n* .fa-folder-minus:before {\n  content: "\\f65d"; }\n\n* .fa-folder-open:before {\n  content: "\\f07c"; }\n\n* .fa-folder-plus:before {\n  content: "\\f65e"; }\n\n* .fa-font:before {\n  content: "\\f031"; }\n\n* .fa-font-awesome:before {\n  content: "\\f2b4"; }\n\n* .fa-font-awesome-alt:before {\n  content: "\\f35c"; }\n\n* .fa-font-awesome-flag:before {\n  content: "\\f425"; }\n\n* .fa-font-awesome-logo-full:before {\n  content: "\\f4e6"; }\n\n* .fa-fonticons:before {\n  content: "\\f280"; }\n\n* .fa-fonticons-fi:before {\n  content: "\\f3a2"; }\n\n* .fa-football-ball:before {\n  content: "\\f44e"; }\n\n* .fa-fort-awesome:before {\n  content: "\\f286"; }\n\n* .fa-fort-awesome-alt:before {\n  content: "\\f3a3"; }\n\n* .fa-forumbee:before {\n  content: "\\f211"; }\n\n* .fa-forward:before {\n  content: "\\f04e"; }\n\n* .fa-foursquare:before {\n  content: "\\f180"; }\n\n* .fa-free-code-camp:before {\n  content: "\\f2c5"; }\n\n* .fa-freebsd:before {\n  content: "\\f3a4"; }\n\n* .fa-frog:before {\n  content: "\\f52e"; }\n\n* .fa-frown:before {\n  content: "\\f119"; }\n\n* .fa-frown-open:before {\n  content: "\\f57a"; }\n\n* .fa-fulcrum:before {\n  content: "\\f50b"; }\n\n* .fa-funnel-dollar:before {\n  content: "\\f662"; }\n\n* .fa-futbol:before {\n  content: "\\f1e3"; }\n\n* .fa-galactic-republic:before {\n  content: "\\f50c"; }\n\n* .fa-galactic-senate:before {\n  content: "\\f50d"; }\n\n* .fa-gamepad:before {\n  content: "\\f11b"; }\n\n* .fa-gas-pump:before {\n  content: "\\f52f"; }\n\n* .fa-gavel:before {\n  content: "\\f0e3"; }\n\n* .fa-gem:before {\n  content: "\\f3a5"; }\n\n* .fa-genderless:before {\n  content: "\\f22d"; }\n\n* .fa-get-pocket:before {\n  content: "\\f265"; }\n\n* .fa-gg:before {\n  content: "\\f260"; }\n\n* .fa-gg-circle:before {\n  content: "\\f261"; }\n\n* .fa-ghost:before {\n  content: "\\f6e2"; }\n\n* .fa-gift:before {\n  content: "\\f06b"; }\n\n* .fa-gifts:before {\n  content: "\\f79c"; }\n\n* .fa-git:before {\n  content: "\\f1d3"; }\n\n* .fa-git-square:before {\n  content: "\\f1d2"; }\n\n* .fa-github:before {\n  content: "\\f09b"; }\n\n* .fa-github-alt:before {\n  content: "\\f113"; }\n\n* .fa-github-square:before {\n  content: "\\f092"; }\n\n* .fa-gitkraken:before {\n  content: "\\f3a6"; }\n\n* .fa-gitlab:before {\n  content: "\\f296"; }\n\n* .fa-gitter:before {\n  content: "\\f426"; }\n\n* .fa-glass-cheers:before {\n  content: "\\f79f"; }\n\n* .fa-glass-martini:before {\n  content: "\\f000"; }\n\n* .fa-glass-martini-alt:before {\n  content: "\\f57b"; }\n\n* .fa-glass-whiskey:before {\n  content: "\\f7a0"; }\n\n* .fa-glasses:before {\n  content: "\\f530"; }\n\n* .fa-glide:before {\n  content: "\\f2a5"; }\n\n* .fa-glide-g:before {\n  content: "\\f2a6"; }\n\n* .fa-globe:before {\n  content: "\\f0ac"; }\n\n* .fa-globe-africa:before {\n  content: "\\f57c"; }\n\n* .fa-globe-americas:before {\n  content: "\\f57d"; }\n\n* .fa-globe-asia:before {\n  content: "\\f57e"; }\n\n* .fa-globe-europe:before {\n  content: "\\f7a2"; }\n\n* .fa-gofore:before {\n  content: "\\f3a7"; }\n\n* .fa-golf-ball:before {\n  content: "\\f450"; }\n\n* .fa-goodreads:before {\n  content: "\\f3a8"; }\n\n* .fa-goodreads-g:before {\n  content: "\\f3a9"; }\n\n* .fa-google:before {\n  content: "\\f1a0"; }\n\n* .fa-google-drive:before {\n  content: "\\f3aa"; }\n\n* .fa-google-play:before {\n  content: "\\f3ab"; }\n\n* .fa-google-plus:before {\n  content: "\\f2b3"; }\n\n* .fa-google-plus-g:before {\n  content: "\\f0d5"; }\n\n* .fa-google-plus-square:before {\n  content: "\\f0d4"; }\n\n* .fa-google-wallet:before {\n  content: "\\f1ee"; }\n\n* .fa-gopuram:before {\n  content: "\\f664"; }\n\n* .fa-graduation-cap:before {\n  content: "\\f19d"; }\n\n* .fa-gratipay:before {\n  content: "\\f184"; }\n\n* .fa-grav:before {\n  content: "\\f2d6"; }\n\n* .fa-greater-than:before {\n  content: "\\f531"; }\n\n* .fa-greater-than-equal:before {\n  content: "\\f532"; }\n\n* .fa-grimace:before {\n  content: "\\f57f"; }\n\n* .fa-grin:before {\n  content: "\\f580"; }\n\n* .fa-grin-alt:before {\n  content: "\\f581"; }\n\n* .fa-grin-beam:before {\n  content: "\\f582"; }\n\n* .fa-grin-beam-sweat:before {\n  content: "\\f583"; }\n\n* .fa-grin-hearts:before {\n  content: "\\f584"; }\n\n* .fa-grin-squint:before {\n  content: "\\f585"; }\n\n* .fa-grin-squint-tears:before {\n  content: "\\f586"; }\n\n* .fa-grin-stars:before {\n  content: "\\f587"; }\n\n* .fa-grin-tears:before {\n  content: "\\f588"; }\n\n* .fa-grin-tongue:before {\n  content: "\\f589"; }\n\n* .fa-grin-tongue-squint:before {\n  content: "\\f58a"; }\n\n* .fa-grin-tongue-wink:before {\n  content: "\\f58b"; }\n\n* .fa-grin-wink:before {\n  content: "\\f58c"; }\n\n* .fa-grip-horizontal:before {\n  content: "\\f58d"; }\n\n* .fa-grip-lines:before {\n  content: "\\f7a4"; }\n\n* .fa-grip-lines-vertical:before {\n  content: "\\f7a5"; }\n\n* .fa-grip-vertical:before {\n  content: "\\f58e"; }\n\n* .fa-gripfire:before {\n  content: "\\f3ac"; }\n\n* .fa-grunt:before {\n  content: "\\f3ad"; }\n\n* .fa-guitar:before {\n  content: "\\f7a6"; }\n\n* .fa-gulp:before {\n  content: "\\f3ae"; }\n\n* .fa-h-square:before {\n  content: "\\f0fd"; }\n\n* .fa-hacker-news:before {\n  content: "\\f1d4"; }\n\n* .fa-hacker-news-square:before {\n  content: "\\f3af"; }\n\n* .fa-hackerrank:before {\n  content: "\\f5f7"; }\n\n* .fa-hammer:before {\n  content: "\\f6e3"; }\n\n* .fa-hamsa:before {\n  content: "\\f665"; }\n\n* .fa-hand-holding:before {\n  content: "\\f4bd"; }\n\n* .fa-hand-holding-heart:before {\n  content: "\\f4be"; }\n\n* .fa-hand-holding-usd:before {\n  content: "\\f4c0"; }\n\n* .fa-hand-lizard:before {\n  content: "\\f258"; }\n\n* .fa-hand-paper:before {\n  content: "\\f256"; }\n\n* .fa-hand-peace:before {\n  content: "\\f25b"; }\n\n* .fa-hand-point-down:before {\n  content: "\\f0a7"; }\n\n* .fa-hand-point-left:before {\n  content: "\\f0a5"; }\n\n* .fa-hand-point-right:before {\n  content: "\\f0a4"; }\n\n* .fa-hand-point-up:before {\n  content: "\\f0a6"; }\n\n* .fa-hand-pointer:before {\n  content: "\\f25a"; }\n\n* .fa-hand-rock:before {\n  content: "\\f255"; }\n\n* .fa-hand-scissors:before {\n  content: "\\f257"; }\n\n* .fa-hand-spock:before {\n  content: "\\f259"; }\n\n* .fa-hands:before {\n  content: "\\f4c2"; }\n\n* .fa-hands-helping:before {\n  content: "\\f4c4"; }\n\n* .fa-handshake:before {\n  content: "\\f2b5"; }\n\n* .fa-hanukiah:before {\n  content: "\\f6e6"; }\n\n* .fa-hashtag:before {\n  content: "\\f292"; }\n\n* .fa-hat-wizard:before {\n  content: "\\f6e8"; }\n\n* .fa-haykal:before {\n  content: "\\f666"; }\n\n* .fa-hdd:before {\n  content: "\\f0a0"; }\n\n* .fa-heading:before {\n  content: "\\f1dc"; }\n\n* .fa-headphones:before {\n  content: "\\f025"; }\n\n* .fa-headphones-alt:before {\n  content: "\\f58f"; }\n\n* .fa-headset:before {\n  content: "\\f590"; }\n\n* .fa-heart:before {\n  content: "\\f004"; }\n\n* .fa-heart-broken:before {\n  content: "\\f7a9"; }\n\n* .fa-heartbeat:before {\n  content: "\\f21e"; }\n\n* .fa-helicopter:before {\n  content: "\\f533"; }\n\n* .fa-highlighter:before {\n  content: "\\f591"; }\n\n* .fa-hiking:before {\n  content: "\\f6ec"; }\n\n* .fa-hippo:before {\n  content: "\\f6ed"; }\n\n* .fa-hips:before {\n  content: "\\f452"; }\n\n* .fa-hire-a-helper:before {\n  content: "\\f3b0"; }\n\n* .fa-history:before {\n  content: "\\f1da"; }\n\n* .fa-hockey-puck:before {\n  content: "\\f453"; }\n\n* .fa-holly-berry:before {\n  content: "\\f7aa"; }\n\n* .fa-home:before {\n  content: "\\f015"; }\n\n* .fa-hooli:before {\n  content: "\\f427"; }\n\n* .fa-hornbill:before {\n  content: "\\f592"; }\n\n* .fa-horse:before {\n  content: "\\f6f0"; }\n\n* .fa-horse-head:before {\n  content: "\\f7ab"; }\n\n* .fa-hospital:before {\n  content: "\\f0f8"; }\n\n* .fa-hospital-alt:before {\n  content: "\\f47d"; }\n\n* .fa-hospital-symbol:before {\n  content: "\\f47e"; }\n\n* .fa-hot-tub:before {\n  content: "\\f593"; }\n\n* .fa-hotel:before {\n  content: "\\f594"; }\n\n* .fa-hotjar:before {\n  content: "\\f3b1"; }\n\n* .fa-hourglass:before {\n  content: "\\f254"; }\n\n* .fa-hourglass-end:before {\n  content: "\\f253"; }\n\n* .fa-hourglass-half:before {\n  content: "\\f252"; }\n\n* .fa-hourglass-start:before {\n  content: "\\f251"; }\n\n* .fa-house-damage:before {\n  content: "\\f6f1"; }\n\n* .fa-houzz:before {\n  content: "\\f27c"; }\n\n* .fa-hryvnia:before {\n  content: "\\f6f2"; }\n\n* .fa-html5:before {\n  content: "\\f13b"; }\n\n* .fa-hubspot:before {\n  content: "\\f3b2"; }\n\n* .fa-i-cursor:before {\n  content: "\\f246"; }\n\n* .fa-icicles:before {\n  content: "\\f7ad"; }\n\n* .fa-id-badge:before {\n  content: "\\f2c1"; }\n\n* .fa-id-card:before {\n  content: "\\f2c2"; }\n\n* .fa-id-card-alt:before {\n  content: "\\f47f"; }\n\n* .fa-igloo:before {\n  content: "\\f7ae"; }\n\n* .fa-image:before {\n  content: "\\f03e"; }\n\n* .fa-images:before {\n  content: "\\f302"; }\n\n* .fa-imdb:before {\n  content: "\\f2d8"; }\n\n* .fa-inbox:before {\n  content: "\\f01c"; }\n\n* .fa-indent:before {\n  content: "\\f03c"; }\n\n* .fa-industry:before {\n  content: "\\f275"; }\n\n* .fa-infinity:before {\n  content: "\\f534"; }\n\n* .fa-info:before {\n  content: "\\f129"; }\n\n* .fa-info-circle:before {\n  content: "\\f05a"; }\n\n* .fa-instagram:before {\n  content: "\\f16d"; }\n\n* .fa-intercom:before {\n  content: "\\f7af"; }\n\n* .fa-internet-explorer:before {\n  content: "\\f26b"; }\n\n* .fa-invision:before {\n  content: "\\f7b0"; }\n\n* .fa-ioxhost:before {\n  content: "\\f208"; }\n\n* .fa-italic:before {\n  content: "\\f033"; }\n\n* .fa-itunes:before {\n  content: "\\f3b4"; }\n\n* .fa-itunes-note:before {\n  content: "\\f3b5"; }\n\n* .fa-java:before {\n  content: "\\f4e4"; }\n\n* .fa-jedi:before {\n  content: "\\f669"; }\n\n* .fa-jedi-order:before {\n  content: "\\f50e"; }\n\n* .fa-jenkins:before {\n  content: "\\f3b6"; }\n\n* .fa-jira:before {\n  content: "\\f7b1"; }\n\n* .fa-joget:before {\n  content: "\\f3b7"; }\n\n* .fa-joint:before {\n  content: "\\f595"; }\n\n* .fa-joomla:before {\n  content: "\\f1aa"; }\n\n* .fa-journal-whills:before {\n  content: "\\f66a"; }\n\n* .fa-js:before {\n  content: "\\f3b8"; }\n\n* .fa-js-square:before {\n  content: "\\f3b9"; }\n\n* .fa-jsfiddle:before {\n  content: "\\f1cc"; }\n\n* .fa-kaaba:before {\n  content: "\\f66b"; }\n\n* .fa-kaggle:before {\n  content: "\\f5fa"; }\n\n* .fa-key:before {\n  content: "\\f084"; }\n\n* .fa-keybase:before {\n  content: "\\f4f5"; }\n\n* .fa-keyboard:before {\n  content: "\\f11c"; }\n\n* .fa-keycdn:before {\n  content: "\\f3ba"; }\n\n* .fa-khanda:before {\n  content: "\\f66d"; }\n\n* .fa-kickstarter:before {\n  content: "\\f3bb"; }\n\n* .fa-kickstarter-k:before {\n  content: "\\f3bc"; }\n\n* .fa-kiss:before {\n  content: "\\f596"; }\n\n* .fa-kiss-beam:before {\n  content: "\\f597"; }\n\n* .fa-kiss-wink-heart:before {\n  content: "\\f598"; }\n\n* .fa-kiwi-bird:before {\n  content: "\\f535"; }\n\n* .fa-korvue:before {\n  content: "\\f42f"; }\n\n* .fa-landmark:before {\n  content: "\\f66f"; }\n\n* .fa-language:before {\n  content: "\\f1ab"; }\n\n* .fa-laptop:before {\n  content: "\\f109"; }\n\n* .fa-laptop-code:before {\n  content: "\\f5fc"; }\n\n* .fa-laravel:before {\n  content: "\\f3bd"; }\n\n* .fa-lastfm:before {\n  content: "\\f202"; }\n\n* .fa-lastfm-square:before {\n  content: "\\f203"; }\n\n* .fa-laugh:before {\n  content: "\\f599"; }\n\n* .fa-laugh-beam:before {\n  content: "\\f59a"; }\n\n* .fa-laugh-squint:before {\n  content: "\\f59b"; }\n\n* .fa-laugh-wink:before {\n  content: "\\f59c"; }\n\n* .fa-layer-group:before {\n  content: "\\f5fd"; }\n\n* .fa-leaf:before {\n  content: "\\f06c"; }\n\n* .fa-leanpub:before {\n  content: "\\f212"; }\n\n* .fa-lemon:before {\n  content: "\\f094"; }\n\n* .fa-less:before {\n  content: "\\f41d"; }\n\n* .fa-less-than:before {\n  content: "\\f536"; }\n\n* .fa-less-than-equal:before {\n  content: "\\f537"; }\n\n* .fa-level-down-alt:before {\n  content: "\\f3be"; }\n\n* .fa-level-up-alt:before {\n  content: "\\f3bf"; }\n\n* .fa-life-ring:before {\n  content: "\\f1cd"; }\n\n* .fa-lightbulb:before {\n  content: "\\f0eb"; }\n\n* .fa-line:before {\n  content: "\\f3c0"; }\n\n* .fa-link:before {\n  content: "\\f0c1"; }\n\n* .fa-linkedin:before {\n  content: "\\f08c"; }\n\n* .fa-linkedin-in:before {\n  content: "\\f0e1"; }\n\n* .fa-linode:before {\n  content: "\\f2b8"; }\n\n* .fa-linux:before {\n  content: "\\f17c"; }\n\n* .fa-lira-sign:before {\n  content: "\\f195"; }\n\n* .fa-list:before {\n  content: "\\f03a"; }\n\n* .fa-list-alt:before {\n  content: "\\f022"; }\n\n* .fa-list-ol:before {\n  content: "\\f0cb"; }\n\n* .fa-list-ul:before {\n  content: "\\f0ca"; }\n\n* .fa-location-arrow:before {\n  content: "\\f124"; }\n\n* .fa-lock:before {\n  content: "\\f023"; }\n\n* .fa-lock-open:before {\n  content: "\\f3c1"; }\n\n* .fa-long-arrow-alt-down:before {\n  content: "\\f309"; }\n\n* .fa-long-arrow-alt-left:before {\n  content: "\\f30a"; }\n\n* .fa-long-arrow-alt-right:before {\n  content: "\\f30b"; }\n\n* .fa-long-arrow-alt-up:before {\n  content: "\\f30c"; }\n\n* .fa-low-vision:before {\n  content: "\\f2a8"; }\n\n* .fa-luggage-cart:before {\n  content: "\\f59d"; }\n\n* .fa-lyft:before {\n  content: "\\f3c3"; }\n\n* .fa-magento:before {\n  content: "\\f3c4"; }\n\n* .fa-magic:before {\n  content: "\\f0d0"; }\n\n* .fa-magnet:before {\n  content: "\\f076"; }\n\n* .fa-mail-bulk:before {\n  content: "\\f674"; }\n\n* .fa-mailchimp:before {\n  content: "\\f59e"; }\n\n* .fa-male:before {\n  content: "\\f183"; }\n\n* .fa-mandalorian:before {\n  content: "\\f50f"; }\n\n* .fa-map:before {\n  content: "\\f279"; }\n\n* .fa-map-marked:before {\n  content: "\\f59f"; }\n\n* .fa-map-marked-alt:before {\n  content: "\\f5a0"; }\n\n* .fa-map-marker:before {\n  content: "\\f041"; }\n\n* .fa-map-marker-alt:before {\n  content: "\\f3c5"; }\n\n* .fa-map-pin:before {\n  content: "\\f276"; }\n\n* .fa-map-signs:before {\n  content: "\\f277"; }\n\n* .fa-markdown:before {\n  content: "\\f60f"; }\n\n* .fa-marker:before {\n  content: "\\f5a1"; }\n\n* .fa-mars:before {\n  content: "\\f222"; }\n\n* .fa-mars-double:before {\n  content: "\\f227"; }\n\n* .fa-mars-stroke:before {\n  content: "\\f229"; }\n\n* .fa-mars-stroke-h:before {\n  content: "\\f22b"; }\n\n* .fa-mars-stroke-v:before {\n  content: "\\f22a"; }\n\n* .fa-mask:before {\n  content: "\\f6fa"; }\n\n* .fa-mastodon:before {\n  content: "\\f4f6"; }\n\n* .fa-maxcdn:before {\n  content: "\\f136"; }\n\n* .fa-medal:before {\n  content: "\\f5a2"; }\n\n* .fa-medapps:before {\n  content: "\\f3c6"; }\n\n* .fa-medium:before {\n  content: "\\f23a"; }\n\n* .fa-medium-m:before {\n  content: "\\f3c7"; }\n\n* .fa-medkit:before {\n  content: "\\f0fa"; }\n\n* .fa-medrt:before {\n  content: "\\f3c8"; }\n\n* .fa-meetup:before {\n  content: "\\f2e0"; }\n\n* .fa-megaport:before {\n  content: "\\f5a3"; }\n\n* .fa-meh:before {\n  content: "\\f11a"; }\n\n* .fa-meh-blank:before {\n  content: "\\f5a4"; }\n\n* .fa-meh-rolling-eyes:before {\n  content: "\\f5a5"; }\n\n* .fa-memory:before {\n  content: "\\f538"; }\n\n* .fa-mendeley:before {\n  content: "\\f7b3"; }\n\n* .fa-menorah:before {\n  content: "\\f676"; }\n\n* .fa-mercury:before {\n  content: "\\f223"; }\n\n* .fa-meteor:before {\n  content: "\\f753"; }\n\n* .fa-microchip:before {\n  content: "\\f2db"; }\n\n* .fa-microphone:before {\n  content: "\\f130"; }\n\n* .fa-microphone-alt:before {\n  content: "\\f3c9"; }\n\n* .fa-microphone-alt-slash:before {\n  content: "\\f539"; }\n\n* .fa-microphone-slash:before {\n  content: "\\f131"; }\n\n* .fa-microscope:before {\n  content: "\\f610"; }\n\n* .fa-microsoft:before {\n  content: "\\f3ca"; }\n\n* .fa-minus:before {\n  content: "\\f068"; }\n\n* .fa-minus-circle:before {\n  content: "\\f056"; }\n\n* .fa-minus-square:before {\n  content: "\\f146"; }\n\n* .fa-mitten:before {\n  content: "\\f7b5"; }\n\n* .fa-mix:before {\n  content: "\\f3cb"; }\n\n* .fa-mixcloud:before {\n  content: "\\f289"; }\n\n* .fa-mizuni:before {\n  content: "\\f3cc"; }\n\n* .fa-mobile:before {\n  content: "\\f10b"; }\n\n* .fa-mobile-alt:before {\n  content: "\\f3cd"; }\n\n* .fa-modx:before {\n  content: "\\f285"; }\n\n* .fa-monero:before {\n  content: "\\f3d0"; }\n\n* .fa-money-bill:before {\n  content: "\\f0d6"; }\n\n* .fa-money-bill-alt:before {\n  content: "\\f3d1"; }\n\n* .fa-money-bill-wave:before {\n  content: "\\f53a"; }\n\n* .fa-money-bill-wave-alt:before {\n  content: "\\f53b"; }\n\n* .fa-money-check:before {\n  content: "\\f53c"; }\n\n* .fa-money-check-alt:before {\n  content: "\\f53d"; }\n\n* .fa-monument:before {\n  content: "\\f5a6"; }\n\n* .fa-moon:before {\n  content: "\\f186"; }\n\n* .fa-mortar-pestle:before {\n  content: "\\f5a7"; }\n\n* .fa-mosque:before {\n  content: "\\f678"; }\n\n* .fa-motorcycle:before {\n  content: "\\f21c"; }\n\n* .fa-mountain:before {\n  content: "\\f6fc"; }\n\n* .fa-mouse-pointer:before {\n  content: "\\f245"; }\n\n* .fa-mug-hot:before {\n  content: "\\f7b6"; }\n\n* .fa-music:before {\n  content: "\\f001"; }\n\n* .fa-napster:before {\n  content: "\\f3d2"; }\n\n* .fa-neos:before {\n  content: "\\f612"; }\n\n* .fa-network-wired:before {\n  content: "\\f6ff"; }\n\n* .fa-neuter:before {\n  content: "\\f22c"; }\n\n* .fa-newspaper:before {\n  content: "\\f1ea"; }\n\n* .fa-nimblr:before {\n  content: "\\f5a8"; }\n\n* .fa-nintendo-switch:before {\n  content: "\\f418"; }\n\n* .fa-node:before {\n  content: "\\f419"; }\n\n* .fa-node-js:before {\n  content: "\\f3d3"; }\n\n* .fa-not-equal:before {\n  content: "\\f53e"; }\n\n* .fa-notes-medical:before {\n  content: "\\f481"; }\n\n* .fa-npm:before {\n  content: "\\f3d4"; }\n\n* .fa-ns8:before {\n  content: "\\f3d5"; }\n\n* .fa-nutritionix:before {\n  content: "\\f3d6"; }\n\n* .fa-object-group:before {\n  content: "\\f247"; }\n\n* .fa-object-ungroup:before {\n  content: "\\f248"; }\n\n* .fa-odnoklassniki:before {\n  content: "\\f263"; }\n\n* .fa-odnoklassniki-square:before {\n  content: "\\f264"; }\n\n* .fa-oil-can:before {\n  content: "\\f613"; }\n\n* .fa-old-republic:before {\n  content: "\\f510"; }\n\n* .fa-om:before {\n  content: "\\f679"; }\n\n* .fa-opencart:before {\n  content: "\\f23d"; }\n\n* .fa-openid:before {\n  content: "\\f19b"; }\n\n* .fa-opera:before {\n  content: "\\f26a"; }\n\n* .fa-optin-monster:before {\n  content: "\\f23c"; }\n\n* .fa-osi:before {\n  content: "\\f41a"; }\n\n* .fa-otter:before {\n  content: "\\f700"; }\n\n* .fa-outdent:before {\n  content: "\\f03b"; }\n\n* .fa-page4:before {\n  content: "\\f3d7"; }\n\n* .fa-pagelines:before {\n  content: "\\f18c"; }\n\n* .fa-paint-brush:before {\n  content: "\\f1fc"; }\n\n* .fa-paint-roller:before {\n  content: "\\f5aa"; }\n\n* .fa-palette:before {\n  content: "\\f53f"; }\n\n* .fa-palfed:before {\n  content: "\\f3d8"; }\n\n* .fa-pallet:before {\n  content: "\\f482"; }\n\n* .fa-paper-plane:before {\n  content: "\\f1d8"; }\n\n* .fa-paperclip:before {\n  content: "\\f0c6"; }\n\n* .fa-parachute-box:before {\n  content: "\\f4cd"; }\n\n* .fa-paragraph:before {\n  content: "\\f1dd"; }\n\n* .fa-parking:before {\n  content: "\\f540"; }\n\n* .fa-passport:before {\n  content: "\\f5ab"; }\n\n* .fa-pastafarianism:before {\n  content: "\\f67b"; }\n\n* .fa-paste:before {\n  content: "\\f0ea"; }\n\n* .fa-patreon:before {\n  content: "\\f3d9"; }\n\n* .fa-pause:before {\n  content: "\\f04c"; }\n\n* .fa-pause-circle:before {\n  content: "\\f28b"; }\n\n* .fa-paw:before {\n  content: "\\f1b0"; }\n\n* .fa-paypal:before {\n  content: "\\f1ed"; }\n\n* .fa-peace:before {\n  content: "\\f67c"; }\n\n* .fa-pen:before {\n  content: "\\f304"; }\n\n* .fa-pen-alt:before {\n  content: "\\f305"; }\n\n* .fa-pen-fancy:before {\n  content: "\\f5ac"; }\n\n* .fa-pen-nib:before {\n  content: "\\f5ad"; }\n\n* .fa-pen-square:before {\n  content: "\\f14b"; }\n\n* .fa-pencil-alt:before {\n  content: "\\f303"; }\n\n* .fa-pencil-ruler:before {\n  content: "\\f5ae"; }\n\n* .fa-penny-arcade:before {\n  content: "\\f704"; }\n\n* .fa-people-carry:before {\n  content: "\\f4ce"; }\n\n* .fa-percent:before {\n  content: "\\f295"; }\n\n* .fa-percentage:before {\n  content: "\\f541"; }\n\n* .fa-periscope:before {\n  content: "\\f3da"; }\n\n* .fa-person-booth:before {\n  content: "\\f756"; }\n\n* .fa-phabricator:before {\n  content: "\\f3db"; }\n\n* .fa-phoenix-framework:before {\n  content: "\\f3dc"; }\n\n* .fa-phoenix-squadron:before {\n  content: "\\f511"; }\n\n* .fa-phone:before {\n  content: "\\f095"; }\n\n* .fa-phone-slash:before {\n  content: "\\f3dd"; }\n\n* .fa-phone-square:before {\n  content: "\\f098"; }\n\n* .fa-phone-volume:before {\n  content: "\\f2a0"; }\n\n* .fa-php:before {\n  content: "\\f457"; }\n\n* .fa-pied-piper:before {\n  content: "\\f2ae"; }\n\n* .fa-pied-piper-alt:before {\n  content: "\\f1a8"; }\n\n* .fa-pied-piper-hat:before {\n  content: "\\f4e5"; }\n\n* .fa-pied-piper-pp:before {\n  content: "\\f1a7"; }\n\n* .fa-piggy-bank:before {\n  content: "\\f4d3"; }\n\n* .fa-pills:before {\n  content: "\\f484"; }\n\n* .fa-pinterest:before {\n  content: "\\f0d2"; }\n\n* .fa-pinterest-p:before {\n  content: "\\f231"; }\n\n* .fa-pinterest-square:before {\n  content: "\\f0d3"; }\n\n* .fa-place-of-worship:before {\n  content: "\\f67f"; }\n\n* .fa-plane:before {\n  content: "\\f072"; }\n\n* .fa-plane-arrival:before {\n  content: "\\f5af"; }\n\n* .fa-plane-departure:before {\n  content: "\\f5b0"; }\n\n* .fa-play:before {\n  content: "\\f04b"; }\n\n* .fa-play-circle:before {\n  content: "\\f144"; }\n\n* .fa-playstation:before {\n  content: "\\f3df"; }\n\n* .fa-plug:before {\n  content: "\\f1e6"; }\n\n* .fa-plus:before {\n  content: "\\f067"; }\n\n* .fa-plus-circle:before {\n  content: "\\f055"; }\n\n* .fa-plus-square:before {\n  content: "\\f0fe"; }\n\n* .fa-podcast:before {\n  content: "\\f2ce"; }\n\n* .fa-poll:before {\n  content: "\\f681"; }\n\n* .fa-poll-h:before {\n  content: "\\f682"; }\n\n* .fa-poo:before {\n  content: "\\f2fe"; }\n\n* .fa-poo-storm:before {\n  content: "\\f75a"; }\n\n* .fa-poop:before {\n  content: "\\f619"; }\n\n* .fa-portrait:before {\n  content: "\\f3e0"; }\n\n* .fa-pound-sign:before {\n  content: "\\f154"; }\n\n* .fa-power-off:before {\n  content: "\\f011"; }\n\n* .fa-pray:before {\n  content: "\\f683"; }\n\n* .fa-praying-hands:before {\n  content: "\\f684"; }\n\n* .fa-prescription:before {\n  content: "\\f5b1"; }\n\n* .fa-prescription-bottle:before {\n  content: "\\f485"; }\n\n* .fa-prescription-bottle-alt:before {\n  content: "\\f486"; }\n\n* .fa-print:before {\n  content: "\\f02f"; }\n\n* .fa-procedures:before {\n  content: "\\f487"; }\n\n* .fa-product-hunt:before {\n  content: "\\f288"; }\n\n* .fa-project-diagram:before {\n  content: "\\f542"; }\n\n* .fa-pushed:before {\n  content: "\\f3e1"; }\n\n* .fa-puzzle-piece:before {\n  content: "\\f12e"; }\n\n* .fa-python:before {\n  content: "\\f3e2"; }\n\n* .fa-qq:before {\n  content: "\\f1d6"; }\n\n* .fa-qrcode:before {\n  content: "\\f029"; }\n\n* .fa-question:before {\n  content: "\\f128"; }\n\n* .fa-question-circle:before {\n  content: "\\f059"; }\n\n* .fa-quidditch:before {\n  content: "\\f458"; }\n\n* .fa-quinscape:before {\n  content: "\\f459"; }\n\n* .fa-quora:before {\n  content: "\\f2c4"; }\n\n* .fa-quote-left:before {\n  content: "\\f10d"; }\n\n* .fa-quote-right:before {\n  content: "\\f10e"; }\n\n* .fa-quran:before {\n  content: "\\f687"; }\n\n* .fa-r-project:before {\n  content: "\\f4f7"; }\n\n* .fa-radiation:before {\n  content: "\\f7b9"; }\n\n* .fa-radiation-alt:before {\n  content: "\\f7ba"; }\n\n* .fa-rainbow:before {\n  content: "\\f75b"; }\n\n* .fa-random:before {\n  content: "\\f074"; }\n\n* .fa-raspberry-pi:before {\n  content: "\\f7bb"; }\n\n* .fa-ravelry:before {\n  content: "\\f2d9"; }\n\n* .fa-react:before {\n  content: "\\f41b"; }\n\n* .fa-reacteurope:before {\n  content: "\\f75d"; }\n\n* .fa-readme:before {\n  content: "\\f4d5"; }\n\n* .fa-rebel:before {\n  content: "\\f1d0"; }\n\n* .fa-receipt:before {\n  content: "\\f543"; }\n\n* .fa-recycle:before {\n  content: "\\f1b8"; }\n\n* .fa-red-river:before {\n  content: "\\f3e3"; }\n\n* .fa-reddit:before {\n  content: "\\f1a1"; }\n\n* .fa-reddit-alien:before {\n  content: "\\f281"; }\n\n* .fa-reddit-square:before {\n  content: "\\f1a2"; }\n\n* .fa-redhat:before {\n  content: "\\f7bc"; }\n\n* .fa-redo:before {\n  content: "\\f01e"; }\n\n* .fa-redo-alt:before {\n  content: "\\f2f9"; }\n\n* .fa-registered:before {\n  content: "\\f25d"; }\n\n* .fa-renren:before {\n  content: "\\f18b"; }\n\n* .fa-reply:before {\n  content: "\\f3e5"; }\n\n* .fa-reply-all:before {\n  content: "\\f122"; }\n\n* .fa-replyd:before {\n  content: "\\f3e6"; }\n\n* .fa-republican:before {\n  content: "\\f75e"; }\n\n* .fa-researchgate:before {\n  content: "\\f4f8"; }\n\n* .fa-resolving:before {\n  content: "\\f3e7"; }\n\n* .fa-restroom:before {\n  content: "\\f7bd"; }\n\n* .fa-retweet:before {\n  content: "\\f079"; }\n\n* .fa-rev:before {\n  content: "\\f5b2"; }\n\n* .fa-ribbon:before {\n  content: "\\f4d6"; }\n\n* .fa-ring:before {\n  content: "\\f70b"; }\n\n* .fa-road:before {\n  content: "\\f018"; }\n\n* .fa-robot:before {\n  content: "\\f544"; }\n\n* .fa-rocket:before {\n  content: "\\f135"; }\n\n* .fa-rocketchat:before {\n  content: "\\f3e8"; }\n\n* .fa-rockrms:before {\n  content: "\\f3e9"; }\n\n* .fa-route:before {\n  content: "\\f4d7"; }\n\n* .fa-rss:before {\n  content: "\\f09e"; }\n\n* .fa-rss-square:before {\n  content: "\\f143"; }\n\n* .fa-ruble-sign:before {\n  content: "\\f158"; }\n\n* .fa-ruler:before {\n  content: "\\f545"; }\n\n* .fa-ruler-combined:before {\n  content: "\\f546"; }\n\n* .fa-ruler-horizontal:before {\n  content: "\\f547"; }\n\n* .fa-ruler-vertical:before {\n  content: "\\f548"; }\n\n* .fa-running:before {\n  content: "\\f70c"; }\n\n* .fa-rupee-sign:before {\n  content: "\\f156"; }\n\n* .fa-sad-cry:before {\n  content: "\\f5b3"; }\n\n* .fa-sad-tear:before {\n  content: "\\f5b4"; }\n\n* .fa-safari:before {\n  content: "\\f267"; }\n\n* .fa-sass:before {\n  content: "\\f41e"; }\n\n* .fa-satellite:before {\n  content: "\\f7bf"; }\n\n* .fa-satellite-dish:before {\n  content: "\\f7c0"; }\n\n* .fa-save:before {\n  content: "\\f0c7"; }\n\n* .fa-schlix:before {\n  content: "\\f3ea"; }\n\n* .fa-school:before {\n  content: "\\f549"; }\n\n* .fa-screwdriver:before {\n  content: "\\f54a"; }\n\n* .fa-scribd:before {\n  content: "\\f28a"; }\n\n* .fa-scroll:before {\n  content: "\\f70e"; }\n\n* .fa-sd-card:before {\n  content: "\\f7c2"; }\n\n* .fa-search:before {\n  content: "\\f002"; }\n\n* .fa-search-dollar:before {\n  content: "\\f688"; }\n\n* .fa-search-location:before {\n  content: "\\f689"; }\n\n* .fa-search-minus:before {\n  content: "\\f010"; }\n\n* .fa-search-plus:before {\n  content: "\\f00e"; }\n\n* .fa-searchengin:before {\n  content: "\\f3eb"; }\n\n* .fa-seedling:before {\n  content: "\\f4d8"; }\n\n* .fa-sellcast:before {\n  content: "\\f2da"; }\n\n* .fa-sellsy:before {\n  content: "\\f213"; }\n\n* .fa-server:before {\n  content: "\\f233"; }\n\n* .fa-servicestack:before {\n  content: "\\f3ec"; }\n\n* .fa-shapes:before {\n  content: "\\f61f"; }\n\n* .fa-share:before {\n  content: "\\f064"; }\n\n* .fa-share-alt:before {\n  content: "\\f1e0"; }\n\n* .fa-share-alt-square:before {\n  content: "\\f1e1"; }\n\n* .fa-share-square:before {\n  content: "\\f14d"; }\n\n* .fa-shekel-sign:before {\n  content: "\\f20b"; }\n\n* .fa-shield-alt:before {\n  content: "\\f3ed"; }\n\n* .fa-ship:before {\n  content: "\\f21a"; }\n\n* .fa-shipping-fast:before {\n  content: "\\f48b"; }\n\n* .fa-shirtsinbulk:before {\n  content: "\\f214"; }\n\n* .fa-shoe-prints:before {\n  content: "\\f54b"; }\n\n* .fa-shopping-bag:before {\n  content: "\\f290"; }\n\n* .fa-shopping-basket:before {\n  content: "\\f291"; }\n\n* .fa-shopping-cart:before {\n  content: "\\f07a"; }\n\n* .fa-shopware:before {\n  content: "\\f5b5"; }\n\n* .fa-shower:before {\n  content: "\\f2cc"; }\n\n* .fa-shuttle-van:before {\n  content: "\\f5b6"; }\n\n* .fa-sign:before {\n  content: "\\f4d9"; }\n\n* .fa-sign-in-alt:before {\n  content: "\\f2f6"; }\n\n* .fa-sign-language:before {\n  content: "\\f2a7"; }\n\n* .fa-sign-out-alt:before {\n  content: "\\f2f5"; }\n\n* .fa-signal:before {\n  content: "\\f012"; }\n\n* .fa-signature:before {\n  content: "\\f5b7"; }\n\n* .fa-sim-card:before {\n  content: "\\f7c4"; }\n\n* .fa-simplybuilt:before {\n  content: "\\f215"; }\n\n* .fa-sistrix:before {\n  content: "\\f3ee"; }\n\n* .fa-sitemap:before {\n  content: "\\f0e8"; }\n\n* .fa-sith:before {\n  content: "\\f512"; }\n\n* .fa-skating:before {\n  content: "\\f7c5"; }\n\n* .fa-sketch:before {\n  content: "\\f7c6"; }\n\n* .fa-skiing:before {\n  content: "\\f7c9"; }\n\n* .fa-skiing-nordic:before {\n  content: "\\f7ca"; }\n\n* .fa-skull:before {\n  content: "\\f54c"; }\n\n* .fa-skull-crossbones:before {\n  content: "\\f714"; }\n\n* .fa-skyatlas:before {\n  content: "\\f216"; }\n\n* .fa-skype:before {\n  content: "\\f17e"; }\n\n* .fa-slack:before {\n  content: "\\f198"; }\n\n* .fa-slack-hash:before {\n  content: "\\f3ef"; }\n\n* .fa-slash:before {\n  content: "\\f715"; }\n\n* .fa-sleigh:before {\n  content: "\\f7cc"; }\n\n* .fa-sliders-h:before {\n  content: "\\f1de"; }\n\n* .fa-slideshare:before {\n  content: "\\f1e7"; }\n\n* .fa-smile:before {\n  content: "\\f118"; }\n\n* .fa-smile-beam:before {\n  content: "\\f5b8"; }\n\n* .fa-smile-wink:before {\n  content: "\\f4da"; }\n\n* .fa-smog:before {\n  content: "\\f75f"; }\n\n* .fa-smoking:before {\n  content: "\\f48d"; }\n\n* .fa-smoking-ban:before {\n  content: "\\f54d"; }\n\n* .fa-sms:before {\n  content: "\\f7cd"; }\n\n* .fa-snapchat:before {\n  content: "\\f2ab"; }\n\n* .fa-snapchat-ghost:before {\n  content: "\\f2ac"; }\n\n* .fa-snapchat-square:before {\n  content: "\\f2ad"; }\n\n* .fa-snowboarding:before {\n  content: "\\f7ce"; }\n\n* .fa-snowflake:before {\n  content: "\\f2dc"; }\n\n* .fa-snowman:before {\n  content: "\\f7d0"; }\n\n* .fa-snowplow:before {\n  content: "\\f7d2"; }\n\n* .fa-socks:before {\n  content: "\\f696"; }\n\n* .fa-solar-panel:before {\n  content: "\\f5ba"; }\n\n* .fa-sort:before {\n  content: "\\f0dc"; }\n\n* .fa-sort-alpha-down:before {\n  content: "\\f15d"; }\n\n* .fa-sort-alpha-up:before {\n  content: "\\f15e"; }\n\n* .fa-sort-amount-down:before {\n  content: "\\f160"; }\n\n* .fa-sort-amount-up:before {\n  content: "\\f161"; }\n\n* .fa-sort-down:before {\n  content: "\\f0dd"; }\n\n* .fa-sort-numeric-down:before {\n  content: "\\f162"; }\n\n* .fa-sort-numeric-up:before {\n  content: "\\f163"; }\n\n* .fa-sort-up:before {\n  content: "\\f0de"; }\n\n* .fa-soundcloud:before {\n  content: "\\f1be"; }\n\n* .fa-sourcetree:before {\n  content: "\\f7d3"; }\n\n* .fa-spa:before {\n  content: "\\f5bb"; }\n\n* .fa-space-shuttle:before {\n  content: "\\f197"; }\n\n* .fa-speakap:before {\n  content: "\\f3f3"; }\n\n* .fa-spider:before {\n  content: "\\f717"; }\n\n* .fa-spinner:before {\n  content: "\\f110"; }\n\n* .fa-splotch:before {\n  content: "\\f5bc"; }\n\n* .fa-spotify:before {\n  content: "\\f1bc"; }\n\n* .fa-spray-can:before {\n  content: "\\f5bd"; }\n\n* .fa-square:before {\n  content: "\\f0c8"; }\n\n* .fa-square-full:before {\n  content: "\\f45c"; }\n\n* .fa-square-root-alt:before {\n  content: "\\f698"; }\n\n* .fa-squarespace:before {\n  content: "\\f5be"; }\n\n* .fa-stack-exchange:before {\n  content: "\\f18d"; }\n\n* .fa-stack-overflow:before {\n  content: "\\f16c"; }\n\n* .fa-stamp:before {\n  content: "\\f5bf"; }\n\n* .fa-star:before {\n  content: "\\f005"; }\n\n* .fa-star-and-crescent:before {\n  content: "\\f699"; }\n\n* .fa-star-half:before {\n  content: "\\f089"; }\n\n* .fa-star-half-alt:before {\n  content: "\\f5c0"; }\n\n* .fa-star-of-david:before {\n  content: "\\f69a"; }\n\n* .fa-star-of-life:before {\n  content: "\\f621"; }\n\n* .fa-staylinked:before {\n  content: "\\f3f5"; }\n\n* .fa-steam:before {\n  content: "\\f1b6"; }\n\n* .fa-steam-square:before {\n  content: "\\f1b7"; }\n\n* .fa-steam-symbol:before {\n  content: "\\f3f6"; }\n\n* .fa-step-backward:before {\n  content: "\\f048"; }\n\n* .fa-step-forward:before {\n  content: "\\f051"; }\n\n* .fa-stethoscope:before {\n  content: "\\f0f1"; }\n\n* .fa-sticker-mule:before {\n  content: "\\f3f7"; }\n\n* .fa-sticky-note:before {\n  content: "\\f249"; }\n\n* .fa-stop:before {\n  content: "\\f04d"; }\n\n* .fa-stop-circle:before {\n  content: "\\f28d"; }\n\n* .fa-stopwatch:before {\n  content: "\\f2f2"; }\n\n* .fa-store:before {\n  content: "\\f54e"; }\n\n* .fa-store-alt:before {\n  content: "\\f54f"; }\n\n* .fa-strava:before {\n  content: "\\f428"; }\n\n* .fa-stream:before {\n  content: "\\f550"; }\n\n* .fa-street-view:before {\n  content: "\\f21d"; }\n\n* .fa-strikethrough:before {\n  content: "\\f0cc"; }\n\n* .fa-stripe:before {\n  content: "\\f429"; }\n\n* .fa-stripe-s:before {\n  content: "\\f42a"; }\n\n* .fa-stroopwafel:before {\n  content: "\\f551"; }\n\n* .fa-studiovinari:before {\n  content: "\\f3f8"; }\n\n* .fa-stumbleupon:before {\n  content: "\\f1a4"; }\n\n* .fa-stumbleupon-circle:before {\n  content: "\\f1a3"; }\n\n* .fa-subscript:before {\n  content: "\\f12c"; }\n\n* .fa-subway:before {\n  content: "\\f239"; }\n\n* .fa-suitcase:before {\n  content: "\\f0f2"; }\n\n* .fa-suitcase-rolling:before {\n  content: "\\f5c1"; }\n\n* .fa-sun:before {\n  content: "\\f185"; }\n\n* .fa-superpowers:before {\n  content: "\\f2dd"; }\n\n* .fa-superscript:before {\n  content: "\\f12b"; }\n\n* .fa-supple:before {\n  content: "\\f3f9"; }\n\n* .fa-surprise:before {\n  content: "\\f5c2"; }\n\n* .fa-suse:before {\n  content: "\\f7d6"; }\n\n* .fa-swatchbook:before {\n  content: "\\f5c3"; }\n\n* .fa-swimmer:before {\n  content: "\\f5c4"; }\n\n* .fa-swimming-pool:before {\n  content: "\\f5c5"; }\n\n* .fa-synagogue:before {\n  content: "\\f69b"; }\n\n* .fa-sync:before {\n  content: "\\f021"; }\n\n* .fa-sync-alt:before {\n  content: "\\f2f1"; }\n\n* .fa-syringe:before {\n  content: "\\f48e"; }\n\n* .fa-table:before {\n  content: "\\f0ce"; }\n\n* .fa-table-tennis:before {\n  content: "\\f45d"; }\n\n* .fa-tablet:before {\n  content: "\\f10a"; }\n\n* .fa-tablet-alt:before {\n  content: "\\f3fa"; }\n\n* .fa-tablets:before {\n  content: "\\f490"; }\n\n* .fa-tachometer-alt:before {\n  content: "\\f3fd"; }\n\n* .fa-tag:before {\n  content: "\\f02b"; }\n\n* .fa-tags:before {\n  content: "\\f02c"; }\n\n* .fa-tape:before {\n  content: "\\f4db"; }\n\n* .fa-tasks:before {\n  content: "\\f0ae"; }\n\n* .fa-taxi:before {\n  content: "\\f1ba"; }\n\n* .fa-teamspeak:before {\n  content: "\\f4f9"; }\n\n* .fa-teeth:before {\n  content: "\\f62e"; }\n\n* .fa-teeth-open:before {\n  content: "\\f62f"; }\n\n* .fa-telegram:before {\n  content: "\\f2c6"; }\n\n* .fa-telegram-plane:before {\n  content: "\\f3fe"; }\n\n* .fa-temperature-high:before {\n  content: "\\f769"; }\n\n* .fa-temperature-low:before {\n  content: "\\f76b"; }\n\n* .fa-tencent-weibo:before {\n  content: "\\f1d5"; }\n\n* .fa-tenge:before {\n  content: "\\f7d7"; }\n\n* .fa-terminal:before {\n  content: "\\f120"; }\n\n* .fa-text-height:before {\n  content: "\\f034"; }\n\n* .fa-text-width:before {\n  content: "\\f035"; }\n\n* .fa-th:before {\n  content: "\\f00a"; }\n\n* .fa-th-large:before {\n  content: "\\f009"; }\n\n* .fa-th-list:before {\n  content: "\\f00b"; }\n\n* .fa-the-red-yeti:before {\n  content: "\\f69d"; }\n\n* .fa-theater-masks:before {\n  content: "\\f630"; }\n\n* .fa-themeco:before {\n  content: "\\f5c6"; }\n\n* .fa-themeisle:before {\n  content: "\\f2b2"; }\n\n* .fa-thermometer:before {\n  content: "\\f491"; }\n\n* .fa-thermometer-empty:before {\n  content: "\\f2cb"; }\n\n* .fa-thermometer-full:before {\n  content: "\\f2c7"; }\n\n* .fa-thermometer-half:before {\n  content: "\\f2c9"; }\n\n* .fa-thermometer-quarter:before {\n  content: "\\f2ca"; }\n\n* .fa-thermometer-three-quarters:before {\n  content: "\\f2c8"; }\n\n* .fa-think-peaks:before {\n  content: "\\f731"; }\n\n* .fa-thumbs-down:before {\n  content: "\\f165"; }\n\n* .fa-thumbs-up:before {\n  content: "\\f164"; }\n\n* .fa-thumbtack:before {\n  content: "\\f08d"; }\n\n* .fa-ticket-alt:before {\n  content: "\\f3ff"; }\n\n* .fa-times:before {\n  content: "\\f00d"; }\n\n* .fa-times-circle:before {\n  content: "\\f057"; }\n\n* .fa-tint:before {\n  content: "\\f043"; }\n\n* .fa-tint-slash:before {\n  content: "\\f5c7"; }\n\n* .fa-tired:before {\n  content: "\\f5c8"; }\n\n* .fa-toggle-off:before {\n  content: "\\f204"; }\n\n* .fa-toggle-on:before {\n  content: "\\f205"; }\n\n* .fa-toilet:before {\n  content: "\\f7d8"; }\n\n* .fa-toilet-paper:before {\n  content: "\\f71e"; }\n\n* .fa-toolbox:before {\n  content: "\\f552"; }\n\n* .fa-tools:before {\n  content: "\\f7d9"; }\n\n* .fa-tooth:before {\n  content: "\\f5c9"; }\n\n* .fa-torah:before {\n  content: "\\f6a0"; }\n\n* .fa-torii-gate:before {\n  content: "\\f6a1"; }\n\n* .fa-tractor:before {\n  content: "\\f722"; }\n\n* .fa-trade-federation:before {\n  content: "\\f513"; }\n\n* .fa-trademark:before {\n  content: "\\f25c"; }\n\n* .fa-traffic-light:before {\n  content: "\\f637"; }\n\n* .fa-train:before {\n  content: "\\f238"; }\n\n* .fa-tram:before {\n  content: "\\f7da"; }\n\n* .fa-transgender:before {\n  content: "\\f224"; }\n\n* .fa-transgender-alt:before {\n  content: "\\f225"; }\n\n* .fa-trash:before {\n  content: "\\f1f8"; }\n\n* .fa-trash-alt:before {\n  content: "\\f2ed"; }\n\n* .fa-tree:before {\n  content: "\\f1bb"; }\n\n* .fa-trello:before {\n  content: "\\f181"; }\n\n* .fa-tripadvisor:before {\n  content: "\\f262"; }\n\n* .fa-trophy:before {\n  content: "\\f091"; }\n\n* .fa-truck:before {\n  content: "\\f0d1"; }\n\n* .fa-truck-loading:before {\n  content: "\\f4de"; }\n\n* .fa-truck-monster:before {\n  content: "\\f63b"; }\n\n* .fa-truck-moving:before {\n  content: "\\f4df"; }\n\n* .fa-truck-pickup:before {\n  content: "\\f63c"; }\n\n* .fa-tshirt:before {\n  content: "\\f553"; }\n\n* .fa-tty:before {\n  content: "\\f1e4"; }\n\n* .fa-tumblr:before {\n  content: "\\f173"; }\n\n* .fa-tumblr-square:before {\n  content: "\\f174"; }\n\n* .fa-tv:before {\n  content: "\\f26c"; }\n\n* .fa-twitch:before {\n  content: "\\f1e8"; }\n\n* .fa-twitter:before {\n  content: "\\f099"; }\n\n* .fa-twitter-square:before {\n  content: "\\f081"; }\n\n* .fa-typo3:before {\n  content: "\\f42b"; }\n\n* .fa-uber:before {\n  content: "\\f402"; }\n\n* .fa-ubuntu:before {\n  content: "\\f7df"; }\n\n* .fa-uikit:before {\n  content: "\\f403"; }\n\n* .fa-umbrella:before {\n  content: "\\f0e9"; }\n\n* .fa-umbrella-beach:before {\n  content: "\\f5ca"; }\n\n* .fa-underline:before {\n  content: "\\f0cd"; }\n\n* .fa-undo:before {\n  content: "\\f0e2"; }\n\n* .fa-undo-alt:before {\n  content: "\\f2ea"; }\n\n* .fa-uniregistry:before {\n  content: "\\f404"; }\n\n* .fa-universal-access:before {\n  content: "\\f29a"; }\n\n* .fa-university:before {\n  content: "\\f19c"; }\n\n* .fa-unlink:before {\n  content: "\\f127"; }\n\n* .fa-unlock:before {\n  content: "\\f09c"; }\n\n* .fa-unlock-alt:before {\n  content: "\\f13e"; }\n\n* .fa-untappd:before {\n  content: "\\f405"; }\n\n* .fa-upload:before {\n  content: "\\f093"; }\n\n* .fa-ups:before {\n  content: "\\f7e0"; }\n\n* .fa-usb:before {\n  content: "\\f287"; }\n\n* .fa-user:before {\n  content: "\\f007"; }\n\n* .fa-user-alt:before {\n  content: "\\f406"; }\n\n* .fa-user-alt-slash:before {\n  content: "\\f4fa"; }\n\n* .fa-user-astronaut:before {\n  content: "\\f4fb"; }\n\n* .fa-user-check:before {\n  content: "\\f4fc"; }\n\n* .fa-user-circle:before {\n  content: "\\f2bd"; }\n\n* .fa-user-clock:before {\n  content: "\\f4fd"; }\n\n* .fa-user-cog:before {\n  content: "\\f4fe"; }\n\n* .fa-user-edit:before {\n  content: "\\f4ff"; }\n\n* .fa-user-friends:before {\n  content: "\\f500"; }\n\n* .fa-user-graduate:before {\n  content: "\\f501"; }\n\n* .fa-user-injured:before {\n  content: "\\f728"; }\n\n* .fa-user-lock:before {\n  content: "\\f502"; }\n\n* .fa-user-md:before {\n  content: "\\f0f0"; }\n\n* .fa-user-minus:before {\n  content: "\\f503"; }\n\n* .fa-user-ninja:before {\n  content: "\\f504"; }\n\n* .fa-user-plus:before {\n  content: "\\f234"; }\n\n* .fa-user-secret:before {\n  content: "\\f21b"; }\n\n* .fa-user-shield:before {\n  content: "\\f505"; }\n\n* .fa-user-slash:before {\n  content: "\\f506"; }\n\n* .fa-user-tag:before {\n  content: "\\f507"; }\n\n* .fa-user-tie:before {\n  content: "\\f508"; }\n\n* .fa-user-times:before {\n  content: "\\f235"; }\n\n* .fa-users:before {\n  content: "\\f0c0"; }\n\n* .fa-users-cog:before {\n  content: "\\f509"; }\n\n* .fa-usps:before {\n  content: "\\f7e1"; }\n\n* .fa-ussunnah:before {\n  content: "\\f407"; }\n\n* .fa-utensil-spoon:before {\n  content: "\\f2e5"; }\n\n* .fa-utensils:before {\n  content: "\\f2e7"; }\n\n* .fa-vaadin:before {\n  content: "\\f408"; }\n\n* .fa-vector-square:before {\n  content: "\\f5cb"; }\n\n* .fa-venus:before {\n  content: "\\f221"; }\n\n* .fa-venus-double:before {\n  content: "\\f226"; }\n\n* .fa-venus-mars:before {\n  content: "\\f228"; }\n\n* .fa-viacoin:before {\n  content: "\\f237"; }\n\n* .fa-viadeo:before {\n  content: "\\f2a9"; }\n\n* .fa-viadeo-square:before {\n  content: "\\f2aa"; }\n\n* .fa-vial:before {\n  content: "\\f492"; }\n\n* .fa-vials:before {\n  content: "\\f493"; }\n\n* .fa-viber:before {\n  content: "\\f409"; }\n\n* .fa-video:before {\n  content: "\\f03d"; }\n\n* .fa-video-slash:before {\n  content: "\\f4e2"; }\n\n* .fa-vihara:before {\n  content: "\\f6a7"; }\n\n* .fa-vimeo:before {\n  content: "\\f40a"; }\n\n* .fa-vimeo-square:before {\n  content: "\\f194"; }\n\n* .fa-vimeo-v:before {\n  content: "\\f27d"; }\n\n* .fa-vine:before {\n  content: "\\f1ca"; }\n\n* .fa-vk:before {\n  content: "\\f189"; }\n\n* .fa-vnv:before {\n  content: "\\f40b"; }\n\n* .fa-volleyball-ball:before {\n  content: "\\f45f"; }\n\n* .fa-volume-down:before {\n  content: "\\f027"; }\n\n* .fa-volume-mute:before {\n  content: "\\f6a9"; }\n\n* .fa-volume-off:before {\n  content: "\\f026"; }\n\n* .fa-volume-up:before {\n  content: "\\f028"; }\n\n* .fa-vote-yea:before {\n  content: "\\f772"; }\n\n* .fa-vr-cardboard:before {\n  content: "\\f729"; }\n\n* .fa-vuejs:before {\n  content: "\\f41f"; }\n\n* .fa-walking:before {\n  content: "\\f554"; }\n\n* .fa-wallet:before {\n  content: "\\f555"; }\n\n* .fa-warehouse:before {\n  content: "\\f494"; }\n\n* .fa-water:before {\n  content: "\\f773"; }\n\n* .fa-weebly:before {\n  content: "\\f5cc"; }\n\n* .fa-weibo:before {\n  content: "\\f18a"; }\n\n* .fa-weight:before {\n  content: "\\f496"; }\n\n* .fa-weight-hanging:before {\n  content: "\\f5cd"; }\n\n* .fa-weixin:before {\n  content: "\\f1d7"; }\n\n* .fa-whatsapp:before {\n  content: "\\f232"; }\n\n* .fa-whatsapp-square:before {\n  content: "\\f40c"; }\n\n* .fa-wheelchair:before {\n  content: "\\f193"; }\n\n* .fa-whmcs:before {\n  content: "\\f40d"; }\n\n* .fa-wifi:before {\n  content: "\\f1eb"; }\n\n* .fa-wikipedia-w:before {\n  content: "\\f266"; }\n\n* .fa-wind:before {\n  content: "\\f72e"; }\n\n* .fa-window-close:before {\n  content: "\\f410"; }\n\n* .fa-window-maximize:before {\n  content: "\\f2d0"; }\n\n* .fa-window-minimize:before {\n  content: "\\f2d1"; }\n\n* .fa-window-restore:before {\n  content: "\\f2d2"; }\n\n* .fa-windows:before {\n  content: "\\f17a"; }\n\n* .fa-wine-bottle:before {\n  content: "\\f72f"; }\n\n* .fa-wine-glass:before {\n  content: "\\f4e3"; }\n\n* .fa-wine-glass-alt:before {\n  content: "\\f5ce"; }\n\n* .fa-wix:before {\n  content: "\\f5cf"; }\n\n* .fa-wizards-of-the-coast:before {\n  content: "\\f730"; }\n\n* .fa-wolf-pack-battalion:before {\n  content: "\\f514"; }\n\n* .fa-won-sign:before {\n  content: "\\f159"; }\n\n* .fa-wordpress:before {\n  content: "\\f19a"; }\n\n* .fa-wordpress-simple:before {\n  content: "\\f411"; }\n\n* .fa-wpbeginner:before {\n  content: "\\f297"; }\n\n* .fa-wpexplorer:before {\n  content: "\\f2de"; }\n\n* .fa-wpforms:before {\n  content: "\\f298"; }\n\n* .fa-wpressr:before {\n  content: "\\f3e4"; }\n\n* .fa-wrench:before {\n  content: "\\f0ad"; }\n\n* .fa-x-ray:before {\n  content: "\\f497"; }\n\n* .fa-xbox:before {\n  content: "\\f412"; }\n\n* .fa-xing:before {\n  content: "\\f168"; }\n\n* .fa-xing-square:before {\n  content: "\\f169"; }\n\n* .fa-y-combinator:before {\n  content: "\\f23b"; }\n\n* .fa-yahoo:before {\n  content: "\\f19e"; }\n\n* .fa-yandex:before {\n  content: "\\f413"; }\n\n* .fa-yandex-international:before {\n  content: "\\f414"; }\n\n* .fa-yarn:before {\n  content: "\\f7e3"; }\n\n* .fa-yelp:before {\n  content: "\\f1e9"; }\n\n* .fa-yen-sign:before {\n  content: "\\f157"; }\n\n* .fa-yin-yang:before {\n  content: "\\f6ad"; }\n\n* .fa-yoast:before {\n  content: "\\f2b1"; }\n\n* .fa-youtube:before {\n  content: "\\f167"; }\n\n* .fa-youtube-square:before {\n  content: "\\f431"; }\n\n* .fa-zhihu:before {\n  content: "\\f63f"; }\n\n* .sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px; }\n\n* .sr-only-focusable:active, * .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto; }\n\n@font-face {\n  font-family: "Font Awesome 5 Free";\n  font-style: normal;\n  font-weight: 900;\n  src: url("./assets/fonts/webfonts/fa-solid-900.eot");\n  src: url("./assets/fonts/webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("./assets/fonts/webfonts/fa-solid-900.woff2") format("woff2"), url("./assets/fonts/webfonts/fa-solid-900.woff") format("woff"), url("./assets/fonts/webfonts/fa-solid-900.ttf") format("truetype"), url("./assets/fonts/webfonts/fa-solid-900.svg#fontawesome") format("svg"); }\n\n.fa,\n.fas {\n  font-family: "Font Awesome 5 Free";\n  font-weight: 900; }\n\n@font-face {\n  font-family: "pficon";\n  src: url("./assets/pficon/pficon.eot");\n  src: url("./assets/pficon/pficon.eot?#iefix") format("eot"), url("./assets/pficon/pficon.woff2") format("woff2"), url("./assets/pficon/pficon.woff") format("woff"), url("./assets/pficon/pficon.ttf") format("truetype"), url("./assets/pficon/pficon.svg#pficon") format("svg"); }\n\n.pf-icon-aa-circle-o:before, .pf-icon-add-circle-o:before, .pf-icon-ansible-tower:before, .pf-icon-applications:before, .pf-icon-arrow:before, .pf-icon-asleep:before, .pf-icon-attention-bell:before, .pf-icon-automation:before, .pf-icon-bell:before, .pf-icon-blueprint:before, .pf-icon-build:before, .pf-icon-builder-image:before, .pf-icon-bundle:before, .pf-icon-catalog:before, .pf-icon-chat:before, .pf-icon-close:before, .pf-icon-cloud-security:before, .pf-icon-cloud-tenant:before, .pf-icon-cluster:before, .pf-icon-connected:before, .pf-icon-container-node:before, .pf-icon-cpu:before, .pf-icon-degraded:before, .pf-icon-disconnected:before, .pf-icon-domain:before, .pf-icon-edit:before, .pf-icon-enhancement:before, .pf-icon-enterprise:before, .pf-icon-equalizer:before, .pf-icon-error-circle-o:before, .pf-icon-export:before, .pf-icon-filter:before, .pf-icon-flavor:before, .pf-icon-folder-close:before, .pf-icon-folder-open:before, .pf-icon-globe-route:before, .pf-icon-help:before, .pf-icon-history:before, .pf-icon-home:before, .pf-icon-import:before, .pf-icon-in-progress:before, .pf-icon-info:before, .pf-icon-infrastructure:before, .pf-icon-integration:before, .pf-icon-key:before, .pf-icon-locked:before, .pf-icon-maintenance:before, .pf-icon-memory:before, .pf-icon-messages:before, .pf-icon-middleware:before, .pf-icon-migration:before, .pf-icon-module:before, .pf-icon-monitoring:before, .pf-icon-namespaces:before, .pf-icon-network:before, .pf-icon-new-process:before, .pf-icon-not-started:before, .pf-icon-off:before, .pf-icon-ok:before, .pf-icon-on-running:before, .pf-icon-on:before, .pf-icon-openshift:before, .pf-icon-openstack:before, .pf-icon-optimize:before, .pf-icon-orders:before, .pf-icon-os-image:before, .pf-icon-package:before, .pf-icon-paused:before, .pf-icon-pending:before, .pf-icon-pficon-dragdrop:before, .pf-icon-pficon-history:before, .pf-icon-pficon-network-range:before, .pf-icon-pficon-satellite:before, .pf-icon-pficon-sort-common-asc:before, .pf-icon-pficon-sort-common-desc:before, .pf-icon-pficon-template:before, .pf-icon-pficon-vcenter:before, .pf-icon-plugged:before, .pf-icon-port:before, .pf-icon-print:before, .pf-icon-private:before, .pf-icon-process-automation:before, .pf-icon-project:before, .pf-icon-rebalance:before, .pf-icon-rebooting:before, .pf-icon-regions:before, .pf-icon-registry:before, .pf-icon-remove2:before, .pf-icon-replicator:before, .pf-icon-repository:before, .pf-icon-resource-pool:before, .pf-icon-resources-almost-empty:before, .pf-icon-resources-almost-full:before, .pf-icon-resources-empty:before, .pf-icon-resources-full:before, .pf-icon-running:before, .pf-icon-save:before, .pf-icon-screen:before, .pf-icon-security:before, .pf-icon-server-group:before, .pf-icon-server:before, .pf-icon-service-catalog:before, .pf-icon-service:before, .pf-icon-services:before, .pf-icon-spinner:before, .pf-icon-spinner2:before, .pf-icon-storage-domain:before, .pf-icon-tenant:before, .pf-icon-thumb-tack:before, .pf-icon-topology:before, .pf-icon-trend-down:before, .pf-icon-trend-up:before, .pf-icon-unknown:before, .pf-icon-unlocked:before, .pf-icon-unplugged:before, .pf-icon-user:before, .pf-icon-users:before, .pf-icon-virtual-machine:before, .pf-icon-volume:before, .pf-icon-warning-triangle:before, .pf-icon-zone:before {\n  font-family: "pficon";\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  font-style: normal;\n  font-variant: normal;\n  font-weight: normal;\n  text-decoration: none;\n  text-transform: none; }\n\n.pf-icon-aa-circle-o:before {\n  content: ""; }\n\n.pf-icon-add-circle-o:before {\n  content: ""; }\n\n.pf-icon-ansible-tower:before {\n  content: ""; }\n\n.pf-icon-applications:before {\n  content: ""; }\n\n.pf-icon-arrow:before {\n  content: ""; }\n\n.pf-icon-asleep:before {\n  content: ""; }\n\n.pf-icon-attention-bell:before {\n  content: ""; }\n\n.pf-icon-automation:before {\n  content: ""; }\n\n.pf-icon-bell:before {\n  content: ""; }\n\n.pf-icon-blueprint:before {\n  content: ""; }\n\n.pf-icon-build:before {\n  content: ""; }\n\n.pf-icon-builder-image:before {\n  content: ""; }\n\n.pf-icon-bundle:before {\n  content: ""; }\n\n.pf-icon-catalog:before {\n  content: ""; }\n\n.pf-icon-chat:before {\n  content: ""; }\n\n.pf-icon-close:before {\n  content: ""; }\n\n.pf-icon-cloud-security:before {\n  content: ""; }\n\n.pf-icon-cloud-tenant:before {\n  content: ""; }\n\n.pf-icon-cluster:before {\n  content: ""; }\n\n.pf-icon-connected:before {\n  content: ""; }\n\n.pf-icon-container-node:before {\n  content: ""; }\n\n.pf-icon-cpu:before {\n  content: ""; }\n\n.pf-icon-degraded:before {\n  content: ""; }\n\n.pf-icon-disconnected:before {\n  content: ""; }\n\n.pf-icon-domain:before {\n  content: ""; }\n\n.pf-icon-edit:before {\n  content: ""; }\n\n.pf-icon-enhancement:before {\n  content: ""; }\n\n.pf-icon-enterprise:before {\n  content: ""; }\n\n.pf-icon-equalizer:before {\n  content: ""; }\n\n.pf-icon-error-circle-o:before {\n  content: ""; }\n\n.pf-icon-export:before {\n  content: ""; }\n\n.pf-icon-filter:before {\n  content: ""; }\n\n.pf-icon-flavor:before {\n  content: ""; }\n\n.pf-icon-folder-close:before {\n  content: ""; }\n\n.pf-icon-folder-open:before {\n  content: ""; }\n\n.pf-icon-globe-route:before {\n  content: ""; }\n\n.pf-icon-help:before {\n  content: ""; }\n\n.pf-icon-history:before {\n  content: ""; }\n\n.pf-icon-home:before {\n  content: ""; }\n\n.pf-icon-import:before {\n  content: ""; }\n\n.pf-icon-in-progress:before {\n  content: ""; }\n\n.pf-icon-info:before {\n  content: ""; }\n\n.pf-icon-infrastructure:before {\n  content: ""; }\n\n.pf-icon-integration:before {\n  content: ""; }\n\n.pf-icon-key:before {\n  content: ""; }\n\n.pf-icon-locked:before {\n  content: ""; }\n\n.pf-icon-maintenance:before {\n  content: ""; }\n\n.pf-icon-memory:before {\n  content: ""; }\n\n.pf-icon-messages:before {\n  content: ""; }\n\n.pf-icon-middleware:before {\n  content: ""; }\n\n.pf-icon-migration:before {\n  content: ""; }\n\n.pf-icon-module:before {\n  content: ""; }\n\n.pf-icon-monitoring:before {\n  content: ""; }\n\n.pf-icon-namespaces:before {\n  content: ""; }\n\n.pf-icon-network:before {\n  content: ""; }\n\n.pf-icon-new-process:before {\n  content: ""; }\n\n.pf-icon-not-started:before {\n  content: ""; }\n\n.pf-icon-off:before {\n  content: ""; }\n\n.pf-icon-ok:before {\n  content: ""; }\n\n.pf-icon-on-running:before {\n  content: ""; }\n\n.pf-icon-on:before {\n  content: ""; }\n\n.pf-icon-openshift:before {\n  content: ""; }\n\n.pf-icon-openstack:before {\n  content: ""; }\n\n.pf-icon-optimize:before {\n  content: ""; }\n\n.pf-icon-orders:before {\n  content: ""; }\n\n.pf-icon-os-image:before {\n  content: ""; }\n\n.pf-icon-package:before {\n  content: ""; }\n\n.pf-icon-paused:before {\n  content: ""; }\n\n.pf-icon-pending:before {\n  content: ""; }\n\n.pf-icon-pficon-dragdrop:before {\n  content: ""; }\n\n.pf-icon-pficon-history:before {\n  content: ""; }\n\n.pf-icon-pficon-network-range:before {\n  content: ""; }\n\n.pf-icon-pficon-satellite:before {\n  content: ""; }\n\n.pf-icon-pficon-sort-common-asc:before {\n  content: ""; }\n\n.pf-icon-pficon-sort-common-desc:before {\n  content: ""; }\n\n.pf-icon-pficon-template:before {\n  content: ""; }\n\n.pf-icon-pficon-vcenter:before {\n  content: ""; }\n\n.pf-icon-plugged:before {\n  content: ""; }\n\n.pf-icon-port:before {\n  content: ""; }\n\n.pf-icon-print:before {\n  content: ""; }\n\n.pf-icon-private:before {\n  content: ""; }\n\n.pf-icon-process-automation:before {\n  content: ""; }\n\n.pf-icon-project:before {\n  content: ""; }\n\n.pf-icon-rebalance:before {\n  content: ""; }\n\n.pf-icon-rebooting:before {\n  content: ""; }\n\n.pf-icon-regions:before {\n  content: ""; }\n\n.pf-icon-registry:before {\n  content: ""; }\n\n.pf-icon-remove2:before {\n  content: ""; }\n\n.pf-icon-replicator:before {\n  content: ""; }\n\n.pf-icon-repository:before {\n  content: ""; }\n\n.pf-icon-resource-pool:before {\n  content: ""; }\n\n.pf-icon-resources-almost-empty:before {\n  content: ""; }\n\n.pf-icon-resources-almost-full:before {\n  content: ""; }\n\n.pf-icon-resources-empty:before {\n  content: ""; }\n\n.pf-icon-resources-full:before {\n  content: ""; }\n\n.pf-icon-running:before {\n  content: ""; }\n\n.pf-icon-save:before {\n  content: ""; }\n\n.pf-icon-screen:before {\n  content: ""; }\n\n.pf-icon-security:before {\n  content: ""; }\n\n.pf-icon-server-group:before {\n  content: ""; }\n\n.pf-icon-server:before {\n  content: ""; }\n\n.pf-icon-service-catalog:before {\n  content: ""; }\n\n.pf-icon-service:before {\n  content: ""; }\n\n.pf-icon-services:before {\n  content: ""; }\n\n.pf-icon-spinner:before {\n  content: ""; }\n\n.pf-icon-spinner2:before {\n  content: ""; }\n\n.pf-icon-storage-domain:before {\n  content: ""; }\n\n.pf-icon-tenant:before {\n  content: ""; }\n\n.pf-icon-thumb-tack:before {\n  content: ""; }\n\n.pf-icon-topology:before {\n  content: ""; }\n\n.pf-icon-trend-down:before {\n  content: ""; }\n\n.pf-icon-trend-up:before {\n  content: ""; }\n\n.pf-icon-unknown:before {\n  content: ""; }\n\n.pf-icon-unlocked:before {\n  content: ""; }\n\n.pf-icon-unplugged:before {\n  content: ""; }\n\n.pf-icon-user:before {\n  content: ""; }\n\n.pf-icon-users:before {\n  content: ""; }\n\n.pf-icon-virtual-machine:before {\n  content: ""; }\n\n.pf-icon-volume:before {\n  content: ""; }\n\n.pf-icon-warning-triangle:before {\n  content: ""; }\n\n.pf-icon-zone:before {\n  content: ""; }\n\n.pf-c-about-modal-box {\n  --pf-c-about-modal-box--BackgroundColor: var(--pf-global--palette--black-1000);\n  --pf-c-about-modal-box--BoxShadow: 0 0 100px 0 rgba(255, 255, 255, .05);\n  --pf-c-about-modal-box--ZIndex: var(--pf-global--ZIndex--xl);\n  --pf-c-about-modal-box--Height: 100%;\n  --pf-c-about-modal-box--lg--Height: 47.625rem;\n  --pf-c-about-modal-box--lg--MaxHeight: calc(100% - var(--pf-global--spacer--xl));\n  --pf-c-about-modal-box--Width: 100vw;\n  --pf-c-about-modal-box--lg--Width: calc(100% - (var(--pf-global--spacer--3xl) * 2));\n  --pf-c-about-modal-box--lg--MaxWidth: 77rem;\n  --pf-c-about-modal-box--PaddingTop: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box--PaddingBottom: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box--sm--PaddingTop: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box--sm--PaddingRight: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box--sm--PaddingBottom: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box--sm--PaddingLeft: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box--sm--grid-template-columns: 5fr 1fr;\n  --pf-c-about-modal-box--lg--grid-template-columns: 1fr .6fr;\n  --pf-c-about-modal-box__brand--PaddingTop: var(--pf-global--spacer--2xl);\n  --pf-c-about-modal-box__brand--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__brand--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__brand--PaddingBottom: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__brand--sm--PaddingRight: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box__brand--sm--PaddingLeft: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box__brand--sm--PaddingBottom: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box__close--ZIndex: var(--pf-global--ZIndex--2xl);\n  --pf-c-about-modal-box__close--PaddingTop: var(--pf-global--spacer--2xl);\n  --pf-c-about-modal-box__close--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__close--PaddingBottom: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__close--sm--PaddingBottom: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box__close--sm--PaddingRight: 0;\n  --pf-c-about-modal-box__close--lg--PaddingRight: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box__close--c-button--Color: var(--pf-global--Color--100);\n  --pf-c-about-modal-box__close--c-button--FontSize: var(--pf-global--FontSize--xl);\n  --pf-c-about-modal-box__close--c-button--BorderRadius: var(--pf-global--BorderRadius--lg);\n  --pf-c-about-modal-box__close--c-button--Width: calc(var(--pf-c-about-modal-box__close--c-button--FontSize) * 2);\n  --pf-c-about-modal-box__close--c-button--Height: calc(var(--pf-c-about-modal-box__close--c-button--FontSize) * 2);\n  --pf-c-about-modal-box__close--c-button--BackgroundColor: var(--pf-global--palette--black-1000);\n  --pf-c-about-modal-box__close--c-button--hover--BackgroundColor: rgba(3, 3, 3, 0.4);\n  --pf-c-about-modal-box__hero--sm--BackgroundImage: url("./assets/images/pfbg_992@2x.jpg");\n  --pf-c-about-modal-box__hero--sm--BackgroundPosition: top left;\n  --pf-c-about-modal-box__hero--sm--BackgroundSize: cover;\n  --pf-c-about-modal-box__brand-image--Height: 2.5rem;\n  --pf-c-about-modal-box__header--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__header--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-about-modal-box__header--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__header--sm--PaddingRight: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box__header--sm--PaddingLeft: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box__strapline--PaddingTop: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__strapline--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-about-modal-box__strapline--sm--PaddingTop: var(--pf-global--spacer--2xl);\n  --pf-c-about-modal-box__content--MarginTop: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__content--MarginRight: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__content--MarginBottom: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__content--MarginLeft: var(--pf-global--spacer--xl);\n  --pf-c-about-modal-box__content--sm--MarginTop: var(--pf-global--spacer--2xl);\n  --pf-c-about-modal-box__content--sm--MarginRight: var(--pf-global--spacer--3xl);\n  --pf-c-about-modal-box__content--sm--MarginBottom: var(--pf-global--spacer--2xl);\n  --pf-c-about-modal-box__content--sm--MarginLeft: var(--pf-global--spacer--3xl);\n  color: var(--pf-global--Color--100);\n  position: relative;\n  z-index: var(--pf-c-about-modal-box--ZIndex);\n  display: grid;\n  grid-template-rows: max-content max-content auto;\n  grid-template-areas: "brand close" "header header" "content content";\n  width: var(--pf-c-about-modal-box--Width);\n  height: var(--pf-c-about-modal-box--Height);\n  overflow-x: hidden;\n  overflow-y: auto;\n  background-color: var(--pf-c-about-modal-box--BackgroundColor);\n  box-shadow: var(--pf-c-about-modal-box--BoxShadow); }\n  @media screen and (min-width: 576px) {\n    .pf-c-about-modal-box {\n      --pf-c-about-modal-box--PaddingTop: var(--pf-c-about-modal-box--sm--PaddingTop);\n      --pf-c-about-modal-box--PaddingRight: var(--pf-c-about-modal-box--sm--PaddingRight);\n      --pf-c-about-modal-box--PaddingBottom: var(--pf-c-about-modal-box--sm--PaddingBottom);\n      --pf-c-about-modal-box--PaddingLeft: var(--pf-c-about-modal-box--sm--PaddingLeft); } }\n  @media screen and (min-width: 576px) {\n    .pf-c-about-modal-box {\n      --pf-c-about-modal-box__brand--PaddingRight: var(--pf-c-about-modal-box__brand--sm--PaddingRight);\n      --pf-c-about-modal-box__brand--PaddingLeft: var(--pf-c-about-modal-box__brand--sm--PaddingLeft);\n      --pf-c-about-modal-box__brand--PaddingBottom: var(--pf-c-about-modal-box__brand--sm--PaddingBottom); } }\n  @media only screen and (min-width: 576px) {\n    .pf-c-about-modal-box {\n      --pf-c-about-modal-box__close--PaddingRight: var(--pf-c-about-modal-box__close--sm--PaddingRight);\n      --pf-c-about-modal-box__close--PaddingBottom: var(--pf-c-about-modal-box__close--sm--PaddingBottom); } }\n  @media only screen and (min-width: 992px) {\n    .pf-c-about-modal-box {\n      --pf-c-about-modal-box__close--PaddingRight: var(--pf-c-about-modal-box__close--lg--PaddingRight); } }\n  @media only screen and (min-width: 576px) {\n    .pf-c-about-modal-box {\n      --pf-c-about-modal-box__header--PaddingRight: var(--pf-c-about-modal-box__header--sm--PaddingRight);\n      --pf-c-about-modal-box__header--PaddingLeft: var(--pf-c-about-modal-box__header--sm--PaddingLeft); } }\n  @media only screen and (min-width: 576px) {\n    .pf-c-about-modal-box {\n      --pf-c-about-modal-box__strapline--PaddingTop: var(--pf-c-about-modal-box__strapline--sm--PaddingTop); } }\n  @media only screen and (min-width: 576px) {\n    .pf-c-about-modal-box {\n      --pf-c-about-modal-box__content--MarginTop: var(--pf-c-about-modal-box__content--sm--MarginTop);\n      --pf-c-about-modal-box__content--MarginRight: var(--pf-c-about-modal-box__content--sm--MarginRight);\n      --pf-c-about-modal-box__content--MarginBottom: var(--pf-c-about-modal-box__content--sm--MarginBottom);\n      --pf-c-about-modal-box__content--MarginLeft: var(--pf-c-about-modal-box__content--sm--MarginLeft); } }\n  @media only screen and (min-width: 576px) {\n    .pf-c-about-modal-box {\n      grid-template-columns: var(--pf-c-about-modal-box--sm--grid-template-columns);\n      grid-template-areas: "brand          hero" "header         hero" "content        hero"; } }\n  @media only screen and (min-width: 992px) {\n    .pf-c-about-modal-box {\n      --pf-c-about-modal-box--Height: var(--pf-c-about-modal-box--lg--Height);\n      --pf-c-about-modal-box--Width: var(--pf-c-about-modal-box--lg--Width);\n      grid-template-columns: var(--pf-c-about-modal-box--lg--grid-template-columns);\n      grid-template-rows: max-content max-content auto;\n      max-width: var(--pf-c-about-modal-box--lg--MaxWidth);\n      max-height: var(--pf-c-about-modal-box--lg--MaxHeight); } }\n\n.pf-c-about-modal-box__brand {\n  grid-area: brand;\n  display: flex;\n  padding: var(--pf-c-about-modal-box__brand--PaddingTop) var(--pf-c-about-modal-box__brand--PaddingRight) var(--pf-c-about-modal-box__brand--PaddingBottom) var(--pf-c-about-modal-box__brand--PaddingLeft); }\n\n.pf-c-about-modal-box__brand-image {\n  height: var(--pf-c-about-modal-box__brand-image--Height); }\n\n.pf-c-about-modal-box__header {\n  grid-area: header;\n  display: flex;\n  flex-direction: column;\n  padding-right: var(--pf-c-about-modal-box__header--PaddingRight);\n  padding-bottom: var(--pf-c-about-modal-box__header--PaddingBottom);\n  padding-left: var(--pf-c-about-modal-box__header--PaddingLeft); }\n\n.pf-c-about-modal-box__strapline {\n  padding-top: var(--pf-c-about-modal-box__strapline--PaddingTop);\n  margin-top: auto;\n  font-size: var(--pf-c-about-modal-box__strapline--FontSize); }\n\n.pf-c-about-modal-box__content {\n  display: flex;\n  flex-direction: column;\n  grid-area: content;\n  margin: var(--pf-c-about-modal-box__content--MarginTop) var(--pf-c-about-modal-box__content--MarginRight) var(--pf-c-about-modal-box__content--MarginBottom) var(--pf-c-about-modal-box__content--MarginLeft);\n  overflow-x: hidden;\n  overflow-y: auto;\n  overscroll-behavior: contain;\n  -webkit-overflow-scrolling: touch;\n  word-break: break-word; }\n  @media screen and (min-width: 576px) {\n    .pf-c-about-modal-box__content {\n      overflow: visible;\n      overscroll-behavior: auto; } }\n\n.pf-c-about-modal-box__close {\n  grid-area: close;\n  position: sticky;\n  top: 0;\n  display: flex;\n  align-items: flex-start;\n  justify-content: flex-end;\n  padding-top: var(--pf-c-about-modal-box__close--PaddingTop);\n  padding-right: var(--pf-c-about-modal-box__close--PaddingRight);\n  padding-bottom: var(--pf-c-about-modal-box__close--PaddingBottom); }\n  @media only screen and (min-width: 576px) {\n    .pf-c-about-modal-box__close {\n      grid-area: 1 / 2;\n      justify-content: center; } }\n  @media only screen and (min-width: 992px) {\n    .pf-c-about-modal-box__close {\n      justify-content: flex-end; } }\n  .pf-c-about-modal-box__close .pf-c-button.pf-m-plain {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: var(--pf-c-about-modal-box__close--c-button--Width);\n    height: var(--pf-c-about-modal-box__close--c-button--Height);\n    font-size: var(--pf-c-about-modal-box__close--c-button--FontSize);\n    color: var(--pf-c-about-modal-box__close--c-button--Color);\n    background-color: var(--pf-c-about-modal-box__close--c-button--BackgroundColor);\n    border-radius: var(--pf-c-about-modal-box__close--c-button--BorderRadius); }\n    .pf-c-about-modal-box__close .pf-c-button.pf-m-plain:hover {\n      --pf-c-about-modal-box__close--c-button--BackgroundColor: var(--pf-c-about-modal-box__close--c-button--hover--BackgroundColor); }\n\n.pf-c-about-modal-box__hero {\n  display: none;\n  visibility: hidden; }\n  @media only screen and (min-width: 576px) {\n    .pf-c-about-modal-box__hero {\n      display: block;\n      visibility: visible;\n      background-image: var(--pf-c-about-modal-box__hero--sm--BackgroundImage);\n      background-repeat: no-repeat;\n      background-attachment: fixed;\n      background-position: var(--pf-c-about-modal-box__hero--sm--BackgroundPosition);\n      background-size: var(--pf-c-about-modal-box__hero--sm--BackgroundSize);\n      grid-area: hero; } }\n\n.pf-c-accordion {\n  --pf-c-accordion--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-accordion__toggle--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-accordion__toggle--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-accordion__toggle--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-accordion__toggle--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-accordion__toggle--before--BackgroundColor: transparent;\n  --pf-c-accordion__toggle--hover--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-accordion__toggle--focus--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-accordion__toggle--active--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-accordion__toggle--before--Width: var(--pf-global--BorderWidth--lg);\n  --pf-c-accordion__toggle--m-expanded--before--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-accordion__toggle-text--MaxWidth: calc(100% - var(--pf-global--spacer--lg));\n  --pf-c-accordion__toggle--hover__toggle-text--Color: var(--pf-global--link--Color);\n  --pf-c-accordion__toggle--active__toggle-text--Color: var(--pf-global--link--Color);\n  --pf-c-accordion__toggle--active__toggle-text--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-accordion__toggle--focus__toggle-text--Color: var(--pf-global--link--Color);\n  --pf-c-accordion__toggle--focus__toggle-text--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-accordion__toggle--m-expanded__toggle-text--Color: var(--pf-global--link--Color);\n  --pf-c-accordion__toggle--m-expanded__toggle-text--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-accordion__toggle-icon--Transition: .2s ease-in 0s;\n  --pf-c-accordion__toggle--m-expanded__toggle-icon--Rotate: 90deg;\n  --pf-c-accordion__expanded-content-body--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-accordion__expanded-content-body--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-accordion__expanded-content-body--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-accordion__expanded-content-body--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-accordion__expanded-content--Color: var(--pf-global--secondary-color--100);\n  --pf-c-accordion__expanded-content--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-accordion__expanded-content-body--before--BackgroundColor: transparent;\n  --pf-c-accordion__expanded-content-body--before--Width: var(--pf-global--BorderWidth--lg);\n  --pf-c-accordion__expanded-content--m-expanded__expanded-content-body--before--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-accordion__expanded-content--m-fixed--MaxHeight: 9.375rem;\n  color: var(--pf-global--Color--100);\n  background-color: var(--pf-c-accordion--BackgroundColor); }\n\n.pf-c-accordion__toggle {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  width: 100%;\n  padding: var(--pf-c-accordion__toggle--PaddingTop) var(--pf-c-accordion__toggle--PaddingRight) var(--pf-c-accordion__toggle--PaddingBottom) var(--pf-c-accordion__toggle--PaddingLeft);\n  border: 0; }\n  .pf-c-accordion__toggle::before {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    width: var(--pf-c-accordion__toggle--before--Width);\n    content: "";\n    background-color: var(--pf-c-accordion__toggle--before--BackgroundColor); }\n  .pf-c-accordion__toggle.pf-m-expanded {\n    --pf-c-accordion__toggle--before--BackgroundColor: var(--pf-c-accordion__toggle--m-expanded--before--BackgroundColor); }\n    .pf-c-accordion__toggle.pf-m-expanded .pf-c-accordion__toggle-text {\n      font-weight: var(--pf-c-accordion__toggle--m-expanded__toggle-text--FontWeight);\n      color: var(--pf-c-accordion__toggle--m-expanded__toggle-text--Color); }\n    .pf-c-accordion__toggle.pf-m-expanded .pf-c-accordion__toggle-icon {\n      transform: rotate(var(--pf-c-accordion__toggle--m-expanded__toggle-icon--Rotate)); }\n  .pf-c-accordion__toggle:hover {\n    background-color: var(--pf-c-accordion__toggle--hover--BackgroundColor); }\n    .pf-c-accordion__toggle:hover .pf-c-accordion__toggle-text {\n      color: var(--pf-c-accordion__toggle--hover__toggle-text--Color); }\n  .pf-c-accordion__toggle:focus {\n    background-color: var(--pf-c-accordion__toggle--focus--BackgroundColor); }\n    .pf-c-accordion__toggle:focus .pf-c-accordion__toggle-text {\n      font-weight: var(--pf-c-accordion__toggle--focus__toggle-text--FontWeight);\n      color: var(--pf-c-accordion__toggle--focus__toggle-text--Color); }\n  .pf-c-accordion__toggle:active {\n    background-color: var(--pf-c-accordion__toggle--active--BackgroundColor); }\n    .pf-c-accordion__toggle:active .pf-c-accordion__toggle-text {\n      font-weight: var(--pf-c-accordion__toggle--active__toggle-text--FontWeight);\n      color: var(--pf-c-accordion__toggle--active__toggle-text--Color); }\n\n.pf-c-accordion__toggle-text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  max-width: var(--pf-c-accordion__toggle-text--MaxWidth); }\n\n.pf-c-accordion__toggle-icon {\n  transition: var(--pf-c-accordion__toggle-icon--Transition); }\n\n.pf-c-accordion__expanded-content {\n  font-size: var(--pf-c-accordion__expanded-content--FontSize);\n  color: var(--pf-c-accordion__expanded-content--Color); }\n  .pf-c-accordion__expanded-content.pf-m-fixed {\n    max-height: var(--pf-c-accordion__expanded-content--m-fixed--MaxHeight);\n    overflow-y: auto; }\n  .pf-c-accordion__expanded-content.pf-m-expanded {\n    --pf-c-accordion__expanded-content-body--before--BackgroundColor: var(--pf-c-accordion__expanded-content--m-expanded__expanded-content-body--before--BackgroundColor); }\n\n.pf-c-accordion__expanded-content-body {\n  position: relative;\n  padding: var(--pf-c-accordion__expanded-content-body--PaddingTop) var(--pf-c-accordion__expanded-content-body--PaddingRight) var(--pf-c-accordion__expanded-content-body--PaddingBottom) var(--pf-c-accordion__expanded-content-body--PaddingLeft); }\n  .pf-c-accordion__expanded-content-body::before {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    width: var(--pf-c-accordion__expanded-content-body--before--Width);\n    content: "";\n    background-color: var(--pf-c-accordion__expanded-content-body--before--BackgroundColor); }\n\n.pf-c-action-list {\n  --pf-c-action-list--m-icon--spacer: 0;\n  --pf-c-action-list--child--spacer-base: var(--pf-global--spacer--md);\n  --pf-c-action-list--group--spacer-base: var(--pf-global--spacer--2xl); }\n\n.pf-c-action-list,\n.pf-c-action-list__group {\n  --pf-c-action-list--child--spacer: var(--pf-c-action-list--child--spacer-base);\n  --pf-c-action-list--group--spacer: var(--pf-c-action-list--group--spacer-base);\n  display: flex;\n  align-items: center; }\n  .pf-c-action-list > * + *,\n  .pf-c-action-list__group > * + * {\n    margin-left: var(--pf-c-action-list--child--spacer); }\n  .pf-c-action-list > * + .pf-c-action-list__group,\n  .pf-c-action-list .pf-c-action-list__group + *,\n  .pf-c-action-list__group > * + .pf-c-action-list__group,\n  .pf-c-action-list__group .pf-c-action-list__group + * {\n    margin-left: var(--pf-c-action-list--group--spacer); }\n  .pf-c-action-list.pf-m-icons,\n  .pf-c-action-list__group.pf-m-icons {\n    --pf-c-action-list--child--spacer: var(--pf-c-action-list--m-icon--spacer); }\n\n.pf-c-alert {\n  --pf-c-alert--BoxShadow: var(--pf-global--BoxShadow--lg);\n  --pf-c-alert--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-alert--GridTemplateColumns: max-content 1fr max-content;\n  --pf-c-alert--BorderTopWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-alert--BorderTopColor: var(--pf-global--default-color--200);\n  --pf-c-alert--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-alert--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-alert--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-alert--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-alert__FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-alert__icon--Color: var(--pf-global--default-color--200);\n  --pf-c-alert__icon--MarginTop: 0.0625rem;\n  --pf-c-alert__icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-alert__icon--FontSize: var(--pf-global--icon--FontSize--md);\n  --pf-c-alert__title--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-alert__title--Color: var(--pf-global--default-color--300);\n  --pf-c-alert__title--max-lines: 1;\n  --pf-c-alert__action--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-alert__action--MarginBottom: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-alert__action--TranslateY: 0.125rem;\n  --pf-c-alert__action--MarginRight: calc(var(--pf-global--spacer--sm) * -1);\n  --pf-c-alert__description--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-alert__action-group--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-alert__description--action-group--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-alert__action-group__c-button--not-last-child--MarginRight: var(--pf-global--spacer--lg);\n  --pf-c-alert--m-success--BorderTopColor: var(--pf-global--success-color--100);\n  --pf-c-alert--m-success__icon--Color: var(--pf-global--success-color--100);\n  --pf-c-alert--m-success__title--Color: var(--pf-global--success-color--200);\n  --pf-c-alert--m-danger--BorderTopColor: var(--pf-global--danger-color--100);\n  --pf-c-alert--m-danger__icon--Color: var(--pf-global--danger-color--100);\n  --pf-c-alert--m-danger__title--Color: var(--pf-global--danger-color--200);\n  --pf-c-alert--m-warning--BorderTopColor: var(--pf-global--warning-color--100);\n  --pf-c-alert--m-warning__icon--Color: var(--pf-global--warning-color--100);\n  --pf-c-alert--m-warning__title--Color: var(--pf-global--warning-color--200);\n  --pf-c-alert--m-info--BorderTopColor: var(--pf-global--info-color--100);\n  --pf-c-alert--m-info__icon--Color: var(--pf-global--info-color--100);\n  --pf-c-alert--m-info__title--Color: var(--pf-global--info-color--200);\n  --pf-c-alert--m-inline--BoxShadow: none;\n  --pf-c-alert--m-inline--BackgroundColor: var(--pf-global--palette--cyan-50);\n  --pf-c-alert--m-inline--m-success--BackgroundColor: var(--pf-global--palette--green-50);\n  --pf-c-alert--m-inline--m-danger--BackgroundColor: var(--pf-global--palette--red-50);\n  --pf-c-alert--m-inline--m-warning--BackgroundColor: var(--pf-global--palette--gold-50);\n  --pf-c-alert--m-inline--m-info--BackgroundColor: var(--pf-global--palette--blue-50);\n  color: var(--pf-global--Color--100);\n  position: relative;\n  display: grid;\n  padding: var(--pf-c-alert--PaddingTop) var(--pf-c-alert--PaddingRight) var(--pf-c-alert--PaddingBottom) var(--pf-c-alert--PaddingLeft);\n  font-size: var(--pf-c-alert__FontSize);\n  background-color: var(--pf-c-alert--BackgroundColor);\n  border-top: var(--pf-c-alert--BorderTopWidth) solid var(--pf-c-alert--BorderTopColor);\n  box-shadow: var(--pf-c-alert--BoxShadow);\n  grid-template-columns: var(--pf-c-alert--GridTemplateColumns);\n  grid-template-areas: "icon title action" ". description description" ". actiongroup actiongroup"; }\n  .pf-c-alert.pf-m-success {\n    --pf-c-alert--BorderTopColor: var(--pf-c-alert--m-success--BorderTopColor);\n    --pf-c-alert__icon--Color: var(--pf-c-alert--m-success__icon--Color);\n    --pf-c-alert__title--Color: var(--pf-c-alert--m-success__title--Color);\n    --pf-c-alert--m-inline--BackgroundColor: var(--pf-c-alert--m-inline--m-success--BackgroundColor); }\n  .pf-c-alert.pf-m-danger {\n    --pf-c-alert--BorderTopColor: var(--pf-c-alert--m-danger--BorderTopColor);\n    --pf-c-alert__icon--Color: var(--pf-c-alert--m-danger__icon--Color);\n    --pf-c-alert__title--Color: var(--pf-c-alert--m-danger__title--Color);\n    --pf-c-alert--m-inline--BackgroundColor: var(--pf-c-alert--m-inline--m-danger--BackgroundColor); }\n  .pf-c-alert.pf-m-warning {\n    --pf-c-alert--BorderTopColor: var(--pf-c-alert--m-warning--BorderTopColor);\n    --pf-c-alert__icon--Color: var(--pf-c-alert--m-warning__icon--Color);\n    --pf-c-alert__title--Color: var(--pf-c-alert--m-warning__title--Color);\n    --pf-c-alert--m-inline--BackgroundColor: var(--pf-c-alert--m-inline--m-warning--BackgroundColor); }\n  .pf-c-alert.pf-m-info {\n    --pf-c-alert--BorderTopColor: var(--pf-c-alert--m-info--BorderTopColor);\n    --pf-c-alert__icon--Color: var(--pf-c-alert--m-info__icon--Color);\n    --pf-c-alert__title--Color: var(--pf-c-alert--m-info__title--Color);\n    --pf-c-alert--m-inline--BackgroundColor: var(--pf-c-alert--m-inline--m-info--BackgroundColor); }\n  .pf-c-alert.pf-m-inline {\n    --pf-c-alert--BoxShadow: var(--pf-c-alert--m-inline--BoxShadow);\n    --pf-c-alert--BackgroundColor: var(--pf-c-alert--m-inline--BackgroundColor); }\n\n.pf-c-alert__icon {\n  grid-area: icon;\n  display: flex;\n  margin-top: var(--pf-c-alert__icon--MarginTop);\n  margin-right: var(--pf-c-alert__icon--MarginRight);\n  font-size: var(--pf-c-alert__icon--FontSize);\n  color: var(--pf-c-alert__icon--Color); }\n\n.pf-c-alert__title {\n  grid-area: title;\n  font-weight: var(--pf-c-alert__title--FontWeight);\n  color: var(--pf-c-alert__title--Color);\n  word-break: break-word; }\n  .pf-c-alert__title.pf-m-truncate {\n    display: -webkit-box;\n    -webkit-box-orient: vertical;\n    -webkit-line-clamp: var(--pf-c-alert__title--max-lines);\n    overflow: hidden; }\n\n.pf-c-alert__description {\n  grid-area: description;\n  padding-top: var(--pf-c-alert__description--PaddingTop);\n  word-break: break-word; }\n  .pf-c-alert__description + .pf-c-alert__action-group {\n    --pf-c-alert__action-group--PaddingTop: var(--pf-c-alert__description--action-group--PaddingTop); }\n\n.pf-c-alert__action {\n  grid-area: action;\n  margin-top: var(--pf-c-alert__action--MarginTop);\n  margin-right: var(--pf-c-alert__action--MarginRight);\n  margin-bottom: var(--pf-c-alert__action--MarginBottom);\n  transform: translateY(var(--pf-c-alert__action--TranslateY)); }\n  .pf-c-alert__action > .pf-c-button {\n    --pf-c-button--LineHeight: 1; }\n\n.pf-c-alert__action-group {\n  grid-area: actiongroup;\n  padding-top: var(--pf-c-alert__action-group--PaddingTop); }\n  .pf-c-alert__action-group > .pf-c-button {\n    --pf-c-button--m-link--m-inline--hover--TextDecoration: none; }\n    .pf-c-alert__action-group > .pf-c-button:not(:last-child) {\n      margin-right: var(--pf-c-alert__action-group__c-button--not-last-child--MarginRight); }\n\n.pf-m-overpass-font .pf-c-alert__title {\n  --pf-c-alert__title--FontWeight: var(--pf-global--FontWeight--normal); }\n\n.pf-c-alert-group {\n  --pf-c-alert-group__item--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-alert-group--m-toast--Top: var(--pf-global--spacer--2xl);\n  --pf-c-alert-group--m-toast--Right: var(--pf-global--spacer--xl);\n  --pf-c-alert-group--m-toast--MaxWidth: 37.5rem;\n  --pf-c-alert-group--m-toast--ZIndex: var(--pf-global--ZIndex--2xl); }\n  .pf-c-alert-group > * + * {\n    margin-top: var(--pf-c-alert-group__item--MarginTop); }\n  .pf-c-alert-group.pf-m-toast {\n    position: fixed;\n    top: var(--pf-c-alert-group--m-toast--Top);\n    right: var(--pf-c-alert-group--m-toast--Right);\n    z-index: var(--pf-c-alert-group--m-toast--ZIndex);\n    width: calc(100% - calc(var(--pf-c-alert-group--m-toast--Right) * 2));\n    max-width: var(--pf-c-alert-group--m-toast--MaxWidth); }\n\n.pf-c-app-launcher {\n  --pf-c-app-launcher__menu--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-app-launcher__menu--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-app-launcher__menu--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher__menu--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher__menu--Top: calc(100% + var(--pf-global--spacer--xs));\n  --pf-c-app-launcher__menu--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-app-launcher--m-top__menu--Top: 0;\n  --pf-c-app-launcher--m-top__menu--TranslateY: calc(-100% - var(--pf-global--spacer--xs));\n  --pf-c-app-launcher__toggle--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-app-launcher__toggle--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-app-launcher__toggle--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-app-launcher__toggle--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-app-launcher__toggle--Color: var(--pf-global--Color--200);\n  --pf-c-app-launcher__toggle--hover--Color: var(--pf-global--Color--100);\n  --pf-c-app-launcher__toggle--active--Color: var(--pf-global--Color--100);\n  --pf-c-app-launcher__toggle--focus--Color: var(--pf-global--Color--100);\n  --pf-c-app-launcher__toggle--disabled--Color: var(--pf-global--disabled-color--200);\n  --pf-c-app-launcher__toggle--m-expanded--Color: var(--pf-global--Color--100);\n  --pf-c-app-launcher__menu-search--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher__menu-search--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-app-launcher__menu-search--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-app-launcher__menu-search--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-app-launcher__menu-search--BottomBorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-app-launcher__menu-search--BottomBorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-app-launcher__menu-search--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher__menu-item--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher__menu-item--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-app-launcher__menu-item--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher__menu-item--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-app-launcher__menu-item--Color: var(--pf-global--Color--dark-100);\n  --pf-c-app-launcher__menu-item--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-app-launcher__menu-item--Width: 100%;\n  --pf-c-app-launcher__menu-item--disabled--Color: var(--pf-global--Color--dark-200);\n  --pf-c-app-launcher__menu-item--hover--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-app-launcher__menu-item--m-link--PaddingRight: 0;\n  --pf-c-app-launcher__menu-item--m-link--hover--BackgroundColor: transparent;\n  --pf-c-app-launcher__menu-item--m-action--Color: var(--pf-global--disabled-color--200);\n  --pf-c-app-launcher__menu-item--m-action--Width: auto;\n  --pf-c-app-launcher__menu-item--m-action--FontSize: var(--pf-global--icon--FontSize--sm);\n  --pf-c-app-launcher__menu-item--m-action--hover--BackgroundColor: transparent;\n  --pf-c-app-launcher__menu-item--hover__menu-item--m-action--Color: var(--pf-global--Color--200);\n  --pf-c-app-launcher__menu-item--m-action--hover--Color: var(--pf-global--Color--100);\n  --pf-c-app-launcher__menu-item--m-favorite__menu-item--m-action--Color: var(--pf-global--palette--gold-400);\n  --pf-c-app-launcher__menu-item-icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher__menu-item-icon--Width: var(--pf-global--icon--FontSize--lg);\n  --pf-c-app-launcher__menu-item-icon--Height: var(--pf-global--icon--FontSize--lg);\n  --pf-c-app-launcher__menu-item-external-icon--Color: var(--pf-global--link--Color);\n  --pf-c-app-launcher__menu-item-external-icon--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-app-launcher__menu-item-external-icon--TranslateY: -0.0625rem;\n  --pf-c-app-launcher__menu-item-external-icon--FontSize: var(--pf-global--icon--FontSize--sm);\n  --pf-c-app-launcher__group--group--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher__group-title--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher__group-title--PaddingRight: var(--pf-c-app-launcher__menu-item--PaddingRight);\n  --pf-c-app-launcher__group-title--PaddingBottom: var(--pf-c-app-launcher__menu-item--PaddingBottom);\n  --pf-c-app-launcher__group-title--PaddingLeft: var(--pf-c-app-launcher__menu-item--PaddingLeft);\n  --pf-c-app-launcher__group-title--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-app-launcher__group-title--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-app-launcher__group-title--Color: var(--pf-global--Color--dark-200);\n  --pf-c-app-launcher--c-divider--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-app-launcher--c-divider--MarginBottom: var(--pf-global--spacer--sm);\n  position: relative;\n  display: inline-block;\n  max-width: 100%; }\n  .pf-c-app-launcher.pf-m-expanded > .pf-c-app-launcher__toggle {\n    color: var(--pf-c-app-launcher__toggle--m-expanded--Color); }\n  .pf-c-app-launcher .pf-c-divider {\n    margin-top: var(--pf-c-app-launcher--c-divider--MarginTop);\n    margin-bottom: var(--pf-c-app-launcher--c-divider--MarginBottom); }\n    .pf-c-app-launcher .pf-c-divider:last-child {\n      --pf-c-app-launcher--c-divider--MarginBottom: 0; }\n\n.pf-c-app-launcher__toggle {\n  padding: var(--pf-c-app-launcher__toggle--PaddingTop) var(--pf-c-app-launcher__toggle--PaddingRight) var(--pf-c-app-launcher__toggle--PaddingBottom) var(--pf-c-app-launcher__toggle--PaddingLeft);\n  color: var(--pf-c-app-launcher__toggle--Color);\n  border: none; }\n  .pf-c-app-launcher__toggle:hover {\n    --pf-c-app-launcher__toggle--Color: var(--pf-c-app-launcher__toggle--hover--Color); }\n  .pf-c-app-launcher__toggle:active, .pf-c-app-launcher__toggle.pf-m-active {\n    --pf-c-app-launcher__toggle--Color: var(--pf-c-app-launcher__toggle--active--Color); }\n  .pf-c-app-launcher__toggle:focus {\n    --pf-c-app-launcher__toggle--Color: var(--pf-c-app-launcher__toggle--focus--Color); }\n  .pf-c-app-launcher__toggle:disabled {\n    --pf-c-app-launcher__toggle--Color: var(--pf-c-app-launcher__toggle--disabled--Color);\n    pointer-events: none; }\n\n.pf-c-app-launcher__menu {\n  position: absolute;\n  top: var(--pf-c-app-launcher__menu--Top);\n  z-index: var(--pf-c-app-launcher__menu--ZIndex);\n  min-width: 100%;\n  padding-top: var(--pf-c-app-launcher__menu--PaddingTop);\n  padding-bottom: var(--pf-c-app-launcher__menu--PaddingBottom);\n  background-color: var(--pf-c-app-launcher__menu--BackgroundColor);\n  background-clip: padding-box;\n  box-shadow: var(--pf-c-app-launcher__menu--BoxShadow); }\n  .pf-c-app-launcher__menu.pf-m-align-right {\n    right: 0; }\n  .pf-c-app-launcher.pf-m-top .pf-c-app-launcher__menu {\n    --pf-c-app-launcher__menu--Top: var(--pf-c-app-launcher--m-top__menu--Top);\n    transform: translateY(var(--pf-c-app-launcher--m-top__menu--TranslateY)); }\n\n.pf-c-app-launcher__menu-search {\n  padding: var(--pf-c-app-launcher__menu-search--PaddingTop) var(--pf-c-app-launcher__menu-search--PaddingRight) var(--pf-c-app-launcher__menu-search--PaddingBottom) var(--pf-c-app-launcher__menu-search--PaddingLeft);\n  margin-bottom: var(--pf-c-app-launcher__menu-search--MarginBottom);\n  border-bottom: var(--pf-c-app-launcher__menu-search--BottomBorderWidth) solid var(--pf-c-app-launcher__menu-search--BottomBorderColor); }\n\n.pf-c-app-launcher__menu-wrapper {\n  display: flex; }\n  .pf-c-app-launcher__menu-wrapper.pf-m-favorite {\n    --pf-c-app-launcher__menu-item--m-action--Color: var(--pf-c-app-launcher__menu-item--m-favorite__menu-item--m-action--Color); }\n\n.pf-c-app-launcher__menu-item {\n  display: flex;\n  align-items: center;\n  width: var(--pf-c-app-launcher__menu-item--Width);\n  padding: var(--pf-c-app-launcher__menu-item--PaddingTop) var(--pf-c-app-launcher__menu-item--PaddingRight) var(--pf-c-app-launcher__menu-item--PaddingBottom) var(--pf-c-app-launcher__menu-item--PaddingLeft);\n  font-weight: var(--pf-c-app-launcher__menu-item--FontWeight);\n  color: var(--pf-c-app-launcher__menu-item--Color);\n  white-space: nowrap;\n  border: 0; }\n  .pf-c-app-launcher__menu-item:hover, .pf-c-app-launcher__menu-item:focus {\n    --pf-c-app-launcher__menu-item--m-action--Color: var(--pf-c-app-launcher__menu-item--hover__menu-item--m-action--Color);\n    text-decoration: none; }\n  .pf-c-app-launcher__menu-wrapper:hover,\n  .pf-c-app-launcher__menu-wrapper:focus-within,\n  .pf-c-app-launcher__menu-wrapper.pf-m-focus, .pf-c-app-launcher__menu-item:hover, .pf-c-app-launcher__menu-item:focus {\n    background-color: var(--pf-c-app-launcher__menu-item--hover--BackgroundColor); }\n  .pf-c-app-launcher__menu-item:disabled, .pf-c-app-launcher__menu-item.pf-m-disabled {\n    --pf-c-app-launcher__menu-item--Color: var(--pf-c-app-launcher__menu-item--disabled--Color);\n    pointer-events: none; }\n  .pf-c-app-launcher__menu-wrapper:disabled, .pf-c-app-launcher__menu-wrapper.pf-m-disabled, .pf-c-app-launcher__menu-item:disabled, .pf-c-app-launcher__menu-item.pf-m-disabled {\n    background-color: transparent; }\n  .pf-c-app-launcher__menu-wrapper.pf-m-external:hover .pf-c-app-launcher__menu-item-external-icon, .pf-c-app-launcher__menu-wrapper.pf-m-external:focus .pf-c-app-launcher__menu-item-external-icon, .pf-c-app-launcher__menu-item.pf-m-external:hover .pf-c-app-launcher__menu-item-external-icon, .pf-c-app-launcher__menu-item.pf-m-external:focus .pf-c-app-launcher__menu-item-external-icon {\n    opacity: 1; }\n  .pf-c-app-launcher__menu-item.pf-m-link {\n    --pf-c-app-launcher__menu-item--PaddingRight: var(--pf-c-app-launcher__menu-item--m-link--PaddingRight);\n    --pf-c-app-launcher__menu-item--hover--BackgroundColor: var(--pf-c-app-launcher__menu-item--m-link--hover--BackgroundColor); }\n  .pf-c-app-launcher__menu-item.pf-m-action {\n    --pf-c-app-launcher__menu-item--Color: var(--pf-c-app-launcher__menu-item--m-action--Color);\n    --pf-c-app-launcher__menu-item--Width: var(--pf-c-app-launcher__menu-item--m-action--Width);\n    --pf-c-app-launcher__menu-item--hover--BackgroundColor: var(--pf-c-app-launcher__menu-item--m-action--hover--BackgroundColor);\n    font-size: var(--pf-c-app-launcher__menu-item--m-action--FontSize); }\n    .pf-c-app-launcher__menu-item.pf-m-action:hover, .pf-c-app-launcher__menu-item.pf-m-action:focus {\n      --pf-c-app-launcher__menu-item--m-action--Color: var(--pf-c-app-launcher__menu-item--m-action--hover--Color); }\n\n.pf-c-app-launcher__menu-item-icon {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--pf-c-app-launcher__menu-item-icon--Width);\n  height: var(--pf-c-app-launcher__menu-item-icon--Height);\n  margin-right: var(--pf-c-app-launcher__menu-item-icon--MarginRight); }\n  .pf-c-app-launcher__menu-item-icon > * {\n    max-width: 100%;\n    max-height: 100%; }\n\n.pf-c-app-launcher__menu-item-external-icon {\n  padding-left: var(--pf-c-app-launcher__menu-item-external-icon--PaddingLeft);\n  margin-left: auto;\n  font-size: var(--pf-c-app-launcher__menu-item-external-icon--FontSize);\n  color: var(--pf-c-app-launcher__menu-item-external-icon--Color);\n  opacity: 0;\n  transform: translateY(var(--pf-c-app-launcher__menu-item-external-icon--TranslateY)); }\n\n.pf-c-app-launcher__group + .pf-c-app-launcher__group {\n  padding-top: var(--pf-c-app-launcher__group--group--PaddingTop); }\n\n.pf-c-app-launcher__group-title {\n  padding-top: var(--pf-c-app-launcher__group-title--PaddingTop);\n  padding-right: var(--pf-c-app-launcher__group-title--PaddingRight);\n  padding-bottom: var(--pf-c-app-launcher__group-title--PaddingBottom);\n  padding-left: var(--pf-c-app-launcher__group-title--PaddingLeft);\n  font-size: var(--pf-c-app-launcher__group-title--FontSize);\n  font-weight: var(--pf-c-app-launcher__group-title--FontWeight);\n  color: var(--pf-c-app-launcher__group-title--Color); }\n\n.pf-c-avatar {\n  --pf-c-avatar--BorderRadius: var(--pf-global--BorderRadius--lg);\n  --pf-c-avatar--Width: 2.25rem;\n  --pf-c-avatar--Height: 2.25rem;\n  width: var(--pf-c-avatar--Width);\n  height: var(--pf-c-avatar--Height);\n  border-radius: var(--pf-c-avatar--BorderRadius); }\n\n.pf-c-backdrop {\n  --pf-c-backdrop--ZIndex: var(--pf-global--ZIndex--lg);\n  --pf-c-backdrop--BackgroundColor: var(--pf-global--BackgroundColor--dark-transparent-100);\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: var(--pf-c-backdrop--ZIndex);\n  width: 100%;\n  height: 100%;\n  background-color: var(--pf-c-backdrop--BackgroundColor); }\n\n.pf-c-backdrop__open {\n  overflow: hidden; }\n\n.pf-c-background-image {\n  --pf-c-background-image--BackgroundColor: var(--pf-global--BackgroundColor--dark-100);\n  --pf-c-background-image--BackgroundImage: url("./assets/images/pfbg_576.jpg");\n  --pf-c-background-image--BackgroundImage-2x: url("./assets/images/pfbg_576@2x.jpg");\n  --pf-c-background-image--BackgroundImage--sm: url("./assets/images/pfbg_768.jpg");\n  --pf-c-background-image--BackgroundImage--sm-2x: url("./assets/images/pfbg_768@2x.jpg");\n  --pf-c-background-image--BackgroundImage--lg: url("./assets/images/pfbg_2000.jpg");\n  --pf-c-background-image--Filter: url("#image_overlay"); }\n  .pf-c-background-image::before {\n    position: fixed;\n    top: 0;\n    left: 0;\n    z-index: -1;\n    width: 100%;\n    height: 100%;\n    content: "";\n    background-color: var(--pf-c-background-image--BackgroundColor);\n    background-image: var(--pf-c-background-image--BackgroundImage);\n    filter: var(--pf-c-background-image--Filter);\n    background-repeat: no-repeat;\n    background-size: cover; }\n    @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {\n      .pf-c-background-image::before {\n        --pf-c-background-image--BackgroundImage: var(--pf-c-background-image--BackgroundImage-2x); } }\n    @media (min-width: 576px) {\n      .pf-c-background-image::before {\n        --pf-c-background-image--BackgroundImage: var(--pf-c-background-image--BackgroundImage--sm); } }\n    @media (min-width: 576px) and (-webkit-min-device-pixel-ratio: 2), (min-width: 576px) and (min-resolution: 192dpi) {\n      .pf-c-background-image::before {\n        --pf-c-background-image--BackgroundImage: var(--pf-c-background-image--BackgroundImage--sm-2x); } }\n    @media (min-width: 992px) {\n      .pf-c-background-image::before {\n        --pf-c-background-image--BackgroundImage: var(--pf-c-background-image--BackgroundImage--lg); } }\n\n.pf-c-background-image__filter {\n  display: block; }\n\n.pf-c-badge {\n  --pf-c-badge--BorderRadius: var(--pf-global--BorderRadius--lg);\n  --pf-c-badge--FontSize: var(--pf-global--FontSize--xs);\n  --pf-c-badge--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-badge--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-badge--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-badge--Color: var(--pf-global--Color--dark-100);\n  --pf-c-badge--MinWidth: var(--pf-global--spacer--xl);\n  --pf-c-badge--m-read--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-badge--m-read--Color: var(--pf-global--Color--dark-100);\n  --pf-c-badge--m-unread--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-badge--m-unread--Color: var(--pf-global--Color--light-100);\n  display: inline-block;\n  min-width: var(--pf-c-badge--MinWidth);\n  padding-right: var(--pf-c-badge--PaddingRight);\n  padding-left: var(--pf-c-badge--PaddingLeft);\n  font-size: var(--pf-c-badge--FontSize);\n  font-weight: var(--pf-c-badge--FontWeight);\n  color: var(--pf-c-badge--Color);\n  text-align: center;\n  background-color: var(--pf-c-badge--BackgroundColor);\n  border-radius: var(--pf-c-badge--BorderRadius); }\n  .pf-c-badge.pf-m-read {\n    --pf-c-badge--Color: var(--pf-c-badge--m-read--Color);\n    --pf-c-badge--BackgroundColor: var(--pf-c-badge--m-read--BackgroundColor); }\n  .pf-c-badge.pf-m-unread {\n    --pf-c-badge--Color: var(--pf-c-badge--m-unread--Color);\n    --pf-c-badge--BackgroundColor: var(--pf-c-badge--m-unread--BackgroundColor); }\n\n.pf-c-banner {\n  --pf-c-banner--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-banner--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-banner--md--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-banner--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-banner--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-banner--md--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-banner--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-banner--Color: var(--pf-global--Color--100);\n  --pf-c-banner--BackgroundColor: var(--pf-global--BackgroundColor--dark-400);\n  --pf-c-banner--m-info--BackgroundColor: var(--pf-global--palette--blue-200);\n  --pf-c-banner--m-danger--BackgroundColor: var(--pf-global--danger-color--100);\n  --pf-c-banner--m-success--BackgroundColor: var(--pf-global--success-color--100);\n  --pf-c-banner--m-warning--BackgroundColor: var(--pf-global--warning-color--100);\n  --pf-c-banner--m-sticky--ZIndex: var(--pf-global--ZIndex--md);\n  --pf-c-banner--m-sticky--BoxShadow: var(--pf-global--BoxShadow--md-bottom);\n  color: var(--pf-global--Color--100);\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  padding: var(--pf-c-banner--PaddingTop) var(--pf-c-banner--PaddingRight) var(--pf-c-banner--PaddingBottom) var(--pf-c-banner--PaddingLeft);\n  flex-shrink: 0;\n  font-size: var(--pf-c-banner--FontSize);\n  color: var(--pf-c-banner--Color);\n  white-space: nowrap;\n  background-color: var(--pf-c-banner--BackgroundColor); }\n  @media (min-width: 768px) {\n    .pf-c-banner {\n      --pf-c-banner--PaddingRight: var(--pf-c-banner--md--PaddingRight);\n      --pf-c-banner--PaddingLeft: var(--pf-c-banner--md--PaddingLeft); } }\n  .pf-c-banner.pf-m-info {\n    color: var(--pf-global--Color--100);\n    --pf-c-banner--BackgroundColor: var(--pf-c-banner--m-info--BackgroundColor); }\n  .pf-c-banner.pf-m-danger {\n    --pf-c-banner--BackgroundColor: var(--pf-c-banner--m-danger--BackgroundColor); }\n  .pf-c-banner.pf-m-success {\n    --pf-c-banner--BackgroundColor: var(--pf-c-banner--m-success--BackgroundColor); }\n  .pf-c-banner.pf-m-warning {\n    color: var(--pf-global--Color--100);\n    --pf-c-banner--BackgroundColor: var(--pf-c-banner--m-warning--BackgroundColor); }\n  .pf-c-banner.pf-m-sticky {\n    position: sticky;\n    top: 0;\n    z-index: var(--pf-c-banner--m-sticky--ZIndex);\n    box-shadow: var(--pf-c-banner--m-sticky--BoxShadow); }\n\n.pf-c-breadcrumb {\n  --pf-c-breadcrumb__item--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-breadcrumb__item--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-breadcrumb__item--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-breadcrumb__item-divider--Color: var(--pf-global--BorderColor--200);\n  --pf-c-breadcrumb__item-divider--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-breadcrumb__item-divider--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-breadcrumb__link--m-current--Color: var(--pf-global--Color--100);\n  --pf-c-breadcrumb__heading--FontSize: var(--pf-global--FontSize--sm);\n  display: inline-flex; }\n\n.pf-c-breadcrumb__list {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center; }\n\n.pf-c-breadcrumb__item {\n  display: flex;\n  align-items: baseline;\n  font-size: var(--pf-c-breadcrumb__item--FontSize);\n  font-weight: var(--pf-c-breadcrumb__item--FontWeight);\n  line-height: var(--pf-c-breadcrumb__item--LineHeight);\n  white-space: nowrap;\n  list-style: none; }\n  .pf-c-breadcrumb__item:not(:last-child) {\n    margin-right: var(--pf-c-breadcrumb__item--MarginRight); }\n\n.pf-c-breadcrumb__item-divider {\n  margin-right: var(--pf-c-breadcrumb__item-divider--MarginRight);\n  font-size: var(--pf-c-breadcrumb__item-divider--FontSize);\n  line-height: 1;\n  color: var(--pf-c-breadcrumb__item-divider--Color); }\n\n.pf-c-breadcrumb__link {\n  font-size: inherit;\n  font-weight: var(--pf-c-breadcrumb__link--FontWeight);\n  line-height: inherit;\n  word-break: break-word; }\n  .pf-c-breadcrumb__link.pf-m-current {\n    cursor: default; }\n    .pf-c-breadcrumb__link.pf-m-current, .pf-c-breadcrumb__link.pf-m-current:hover {\n      color: var(--pf-c-breadcrumb__link--m-current--Color);\n      text-decoration: none; }\n\n.pf-c-breadcrumb__heading {\n  display: inline;\n  font-size: var(--pf-c-breadcrumb__heading--FontSize); }\n\n.pf-c-breadcrumb__link,\n.pf-c-breadcrumb__heading {\n  white-space: normal; }\n\n.pf-m-overpass-font .pf-c-breadcrumb__link,\n.pf-m-overpass-font .pf-c-breadcrumb__item {\n  font-weight: var(--pf-global--FontWeight--semi-bold); }\n\n.pf-c-breadcrumb__list > :first-child .pf-c-breadcrumb__item-divider {\n  display: none;\n  visibility: hidden; }\n\n.pf-c-button {\n  --pf-c-button--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-button--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-button--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-button--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-button--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-button--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-button--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-button--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-button--after--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-button--after--BorderColor: transparent;\n  --pf-c-button--after--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-button--hover--after--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-button--focus--after--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-button--active--after--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-button--disabled--Color: var(--pf-global--disabled-color--100);\n  --pf-c-button--disabled--BackgroundColor: var(--pf-global--disabled-color--200);\n  --pf-c-button--disabled--after--BorderColor: transparent;\n  --pf-c-button--m-primary--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-button--m-primary--Color: var(--pf-global--Color--light-100);\n  --pf-c-button--m-primary--hover--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-button--m-primary--hover--Color: var(--pf-global--Color--light-100);\n  --pf-c-button--m-primary--focus--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-button--m-primary--focus--Color: var(--pf-global--Color--light-100);\n  --pf-c-button--m-primary--active--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-button--m-primary--active--Color: var(--pf-global--Color--light-100);\n  --pf-c-button--m-secondary--BackgroundColor: transparent;\n  --pf-c-button--m-secondary--after--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-button--m-secondary--Color: var(--pf-global--primary-color--100);\n  --pf-c-button--m-secondary--hover--BackgroundColor: transparent;\n  --pf-c-button--m-secondary--hover--after--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-button--m-secondary--hover--Color: var(--pf-global--primary-color--100);\n  --pf-c-button--m-secondary--focus--BackgroundColor: transparent;\n  --pf-c-button--m-secondary--focus--after--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-button--m-secondary--focus--Color: var(--pf-global--primary-color--100);\n  --pf-c-button--m-secondary--active--BackgroundColor: transparent;\n  --pf-c-button--m-secondary--active--after--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-button--m-secondary--active--Color: var(--pf-global--primary-color--100);\n  --pf-c-button--m-tertiary--BackgroundColor: transparent;\n  --pf-c-button--m-tertiary--after--BorderColor: var(--pf-global--Color--100);\n  --pf-c-button--m-tertiary--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-tertiary--hover--BackgroundColor: transparent;\n  --pf-c-button--m-tertiary--hover--after--BorderColor: var(--pf-global--Color--100);\n  --pf-c-button--m-tertiary--hover--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-tertiary--focus--BackgroundColor: transparent;\n  --pf-c-button--m-tertiary--focus--after--BorderColor: var(--pf-global--Color--100);\n  --pf-c-button--m-tertiary--focus--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-tertiary--active--BackgroundColor: transparent;\n  --pf-c-button--m-tertiary--active--after--BorderColor: var(--pf-global--Color--100);\n  --pf-c-button--m-tertiary--active--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-warning--BackgroundColor: var(--pf-global--warning-color--100);\n  --pf-c-button--m-warning--Color: var(--pf-global--Color--dark-100);\n  --pf-c-button--m-warning--hover--BackgroundColor: var(--pf-global--palette--gold-500);\n  --pf-c-button--m-warning--hover--Color: var(--pf-global--Color--dark-100);\n  --pf-c-button--m-warning--focus--BackgroundColor: var(--pf-global--palette--gold-500);\n  --pf-c-button--m-warning--focus--Color: var(--pf-global--Color--dark-100);\n  --pf-c-button--m-warning--active--BackgroundColor: var(--pf-global--palette--gold-500);\n  --pf-c-button--m-warning--active--Color: var(--pf-global--Color--dark-100);\n  --pf-c-button--m-danger--BackgroundColor: var(--pf-global--danger-color--100);\n  --pf-c-button--m-danger--Color: var(--pf-global--Color--light-100);\n  --pf-c-button--m-danger--hover--BackgroundColor: var(--pf-global--danger-color--200);\n  --pf-c-button--m-danger--hover--Color: var(--pf-global--Color--light-100);\n  --pf-c-button--m-danger--focus--BackgroundColor: var(--pf-global--danger-color--200);\n  --pf-c-button--m-danger--focus--Color: var(--pf-global--Color--light-100);\n  --pf-c-button--m-danger--active--BackgroundColor: var(--pf-global--danger-color--200);\n  --pf-c-button--m-danger--active--Color: var(--pf-global--Color--light-100);\n  --pf-c-button--m-link--BackgroundColor: transparent;\n  --pf-c-button--m-link--Color: var(--pf-global--link--Color);\n  --pf-c-button--m-link--hover--BackgroundColor: transparent;\n  --pf-c-button--m-link--hover--Color: var(--pf-global--link--Color--hover);\n  --pf-c-button--m-link--focus--BackgroundColor: transparent;\n  --pf-c-button--m-link--focus--Color: var(--pf-global--link--Color--hover);\n  --pf-c-button--m-link--active--BackgroundColor: transparent;\n  --pf-c-button--m-link--active--Color: var(--pf-global--link--Color--hover);\n  --pf-c-button--m-link--disabled--BackgroundColor: transparent;\n  --pf-c-button--m-link--m-inline--FontSize: inherit;\n  --pf-c-button--m-link--m-inline--hover--TextDecoration: var(--pf-global--link--TextDecoration--hover);\n  --pf-c-button--m-link--m-inline--hover--Color: var(--pf-global--link--Color--hover);\n  --pf-c-button--m-plain--BackgroundColor: transparent;\n  --pf-c-button--m-plain--Color: var(--pf-global--Color--200);\n  --pf-c-button--m-plain--hover--BackgroundColor: transparent;\n  --pf-c-button--m-plain--hover--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-plain--focus--BackgroundColor: transparent;\n  --pf-c-button--m-plain--focus--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-plain--active--BackgroundColor: transparent;\n  --pf-c-button--m-plain--active--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-plain--disabled--Color: var(--pf-global--disabled-color--200);\n  --pf-c-button--m-plain--disabled--BackgroundColor: transparent;\n  --pf-c-button--m-control--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-button--m-control--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-control--BorderRadius: 0;\n  --pf-c-button--m-control--after--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-button--m-control--after--BorderTopColor: var(--pf-global--BorderColor--300);\n  --pf-c-button--m-control--after--BorderRightColor: var(--pf-global--BorderColor--300);\n  --pf-c-button--m-control--after--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-button--m-control--after--BorderLeftColor: var(--pf-global--BorderColor--300);\n  --pf-c-button--m-control--disabled--BackgroundColor: var(--pf-global--disabled-color--300);\n  --pf-c-button--m-control--hover--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-button--m-control--hover--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-control--hover--after--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-button--m-control--hover--after--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-button--m-control--active--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-button--m-control--active--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-control--active--after--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-button--m-control--active--after--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-button--m-control--focus--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-button--m-control--focus--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-control--focus--after--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-button--m-control--focus--after--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-button--m-control--m-expanded--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-button--m-control--m-expanded--Color: var(--pf-global--Color--100);\n  --pf-c-button--m-control--m-expanded--after--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-button--m-control--m-expanded--after--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-button--m-small--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-button--m-display-lg--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-button--m-display-lg--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-button--m-display-lg--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-button--m-display-lg--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-button--m-display-lg--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-button--m-link--m-display-lg--FontSize: var(--pf-global--FontSize--lg);\n  --pf-c-button__icon--m-start--MarginRight: var(--pf-global--spacer--xs);\n  --pf-c-button__icon--m-end--MarginLeft: var(--pf-global--spacer--xs);\n  --pf-c-button__progress--width: calc(var(--pf-global--icon--FontSize--md) + var(--pf-global--spacer--sm));\n  --pf-c-button__progress--Opacity: 0;\n  --pf-c-button__progress--TranslateY: -50%;\n  --pf-c-button__progress--Top: 50%;\n  --pf-c-button__progress--Left: var(--pf-global--spacer--md);\n  --pf-c-button--m-progress--TransitionProperty: padding;\n  --pf-c-button--m-progress--TransitionDuration: var(--pf-global--TransitionDuration);\n  --pf-c-button--m-progress--PaddingRight: calc(var(--pf-global--spacer--md) + var(--pf-c-button__progress--width) / 2);\n  --pf-c-button--m-progress--PaddingLeft: calc(var(--pf-global--spacer--md) + var(--pf-c-button__progress--width) / 2);\n  --pf-c-button--m-in-progress--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-button--m-in-progress--PaddingLeft: calc(var(--pf-global--spacer--md) + var(--pf-c-button__progress--width));\n  position: relative;\n  display: inline-block;\n  padding: var(--pf-c-button--PaddingTop) var(--pf-c-button--PaddingRight) var(--pf-c-button--PaddingBottom) var(--pf-c-button--PaddingLeft);\n  font-size: var(--pf-c-button--FontSize);\n  font-weight: var(--pf-c-button--FontWeight);\n  line-height: var(--pf-c-button--LineHeight);\n  text-align: center;\n  white-space: nowrap;\n  user-select: none;\n  border: 0;\n  border-radius: var(--pf-c-button--BorderRadius); }\n  .pf-c-button::after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    pointer-events: none;\n    content: "";\n    border: var(--pf-c-button--after--BorderWidth) solid;\n    border-color: var(--pf-c-button--after--BorderColor);\n    border-radius: var(--pf-c-button--after--BorderRadius); }\n  .pf-c-button:hover {\n    --pf-c-button--after--BorderWidth: var(--pf-c-button--hover--after--BorderWidth);\n    text-decoration: none; }\n  .pf-c-button:focus {\n    --pf-c-button--after--BorderWidth: var(--pf-c-button--focus--after--BorderWidth); }\n  .pf-c-button:active, .pf-c-button.pf-m-active {\n    --pf-c-button--after--BorderWidth: var(--pf-c-button--active--after--BorderWidth); }\n  .pf-c-button.pf-m-block {\n    display: block;\n    width: 100%; }\n  .pf-c-button.pf-m-small {\n    --pf-c-button--FontSize: var(--pf-c-button--m-small--FontSize); }\n  .pf-c-button.pf-m-primary.pf-m-display-lg, .pf-c-button.pf-m-secondary.pf-m-display-lg, .pf-c-button.pf-m-tertiary.pf-m-display-lg, .pf-c-button.pf-m-link.pf-m-display-lg {\n    --pf-c-button--PaddingTop: var(--pf-c-button--m-display-lg--PaddingTop);\n    --pf-c-button--PaddingRight: var(--pf-c-button--m-display-lg--PaddingRight);\n    --pf-c-button--PaddingBottom: var(--pf-c-button--m-display-lg--PaddingBottom);\n    --pf-c-button--PaddingLeft: var(--pf-c-button--m-display-lg--PaddingLeft);\n    --pf-c-button--FontWeight: var(--pf-c-button--m-display-lg--FontWeight); }\n  .pf-c-button.pf-m-primary {\n    color: var(--pf-c-button--m-primary--Color);\n    background-color: var(--pf-c-button--m-primary--BackgroundColor); }\n    .pf-c-button.pf-m-primary:hover {\n      --pf-c-button--m-primary--Color: var(--pf-c-button--m-primary--hover--Color);\n      --pf-c-button--m-primary--BackgroundColor: var(--pf-c-button--m-primary--hover--BackgroundColor); }\n    .pf-c-button.pf-m-primary:focus {\n      --pf-c-button--m-primary--Color: var(--pf-c-button--m-primary--focus--Color);\n      --pf-c-button--m-primary--BackgroundColor: var(--pf-c-button--m-primary--focus--BackgroundColor); }\n    .pf-c-button.pf-m-primary:active, .pf-c-button.pf-m-primary.pf-m-active {\n      --pf-c-button--m-primary--Color: var(--pf-c-button--m-primary--active--Color);\n      --pf-c-button--m-primary--BackgroundColor: var(--pf-c-button--m-primary--active--BackgroundColor); }\n  .pf-c-button.pf-m-secondary {\n    --pf-c-button--after--BorderColor: var(--pf-c-button--m-secondary--after--BorderColor);\n    color: var(--pf-c-button--m-secondary--Color);\n    background-color: var(--pf-c-button--m-secondary--BackgroundColor); }\n    .pf-c-button.pf-m-secondary:hover {\n      --pf-c-button--m-secondary--Color: var(--pf-c-button--m-secondary--hover--Color);\n      --pf-c-button--m-secondary--BackgroundColor: var(--pf-c-button--m-secondary--hover--BackgroundColor);\n      --pf-c-button--after--BorderColor: var(--pf-c-button--m-secondary--hover--after--BorderColor); }\n    .pf-c-button.pf-m-secondary:focus {\n      --pf-c-button--m-secondary--Color: var(--pf-c-button--m-secondary--focus--Color);\n      --pf-c-button--m-secondary--BackgroundColor: var(--pf-c-button--m-secondary--focus--BackgroundColor);\n      --pf-c-button--after--BorderColor: var(--pf-c-button--m-secondary--focus--after--BorderColor); }\n    .pf-c-button.pf-m-secondary.pf-m-active, .pf-c-button.pf-m-secondary:active {\n      --pf-c-button--m-secondary--Color: var(--pf-c-button--m-secondary--active--Color);\n      --pf-c-button--m-secondary--BackgroundColor: var(--pf-c-button--m-secondary--active--BackgroundColor);\n      --pf-c-button--after--BorderColor: var(--pf-c-button--m-secondary--active--after--BorderColor); }\n  .pf-c-button.pf-m-tertiary {\n    --pf-c-button--after--BorderColor: var(--pf-c-button--m-tertiary--after--BorderColor);\n    color: var(--pf-c-button--m-tertiary--Color);\n    background-color: var(--pf-c-button--m-tertiary--BackgroundColor); }\n    .pf-c-button.pf-m-tertiary:hover {\n      --pf-c-button--m-tertiary--Color: var(--pf-c-button--m-tertiary--hover--Color);\n      --pf-c-button--m-tertiary--BackgroundColor: var(--pf-c-button--m-tertiary--hover--BackgroundColor);\n      --pf-c-button--after--BorderColor: var(--pf-c-button--m-tertiary--hover--after--BorderColor); }\n    .pf-c-button.pf-m-tertiary:focus {\n      --pf-c-button--m-tertiary--Color: var(--pf-c-button--m-tertiary--focus--Color);\n      --pf-c-button--m-tertiary--BackgroundColor: var(--pf-c-button--m-tertiary--focus--BackgroundColor);\n      --pf-c-button--after--BorderColor: var(--pf-c-button--m-tertiary--focus--after--BorderColor); }\n    .pf-c-button.pf-m-tertiary:active, .pf-c-button.pf-m-tertiary.pf-m-active {\n      --pf-c-button--m-tertiary--Color: var(--pf-c-button--m-tertiary--active--Color);\n      --pf-c-button--m-tertiary--BackgroundColor: var(--pf-c-button--m-tertiary--active--BackgroundColor);\n      --pf-c-button--after--BorderColor: var(--pf-c-button--m-tertiary--active--after--BorderColor); }\n  .pf-c-button.pf-m-danger {\n    color: var(--pf-c-button--m-danger--Color);\n    background-color: var(--pf-c-button--m-danger--BackgroundColor); }\n    .pf-c-button.pf-m-danger:hover {\n      --pf-c-button--m-danger--Color: var(--pf-c-button--m-danger--hover--Color);\n      --pf-c-button--m-danger--BackgroundColor: var(--pf-c-button--m-danger--hover--BackgroundColor); }\n    .pf-c-button.pf-m-danger:focus {\n      --pf-c-button--m-danger--Color: var(--pf-c-button--m-danger--focus--Color);\n      --pf-c-button--m-danger--BackgroundColor: var(--pf-c-button--m-danger--focus--BackgroundColor); }\n    .pf-c-button.pf-m-danger:active, .pf-c-button.pf-m-danger.pf-m-active {\n      --pf-c-button--m-danger--Color: var(--pf-c-button--m-danger--active--Color);\n      --pf-c-button--m-danger--BackgroundColor: var(--pf-c-button--m-danger--active--BackgroundColor); }\n  .pf-c-button.pf-m-warning {\n    color: var(--pf-c-button--m-warning--Color);\n    background-color: var(--pf-c-button--m-warning--BackgroundColor); }\n    .pf-c-button.pf-m-warning:hover {\n      --pf-c-button--m-warning--Color: var(--pf-c-button--m-warning--hover--Color);\n      --pf-c-button--m-warning--BackgroundColor: var(--pf-c-button--m-warning--hover--BackgroundColor); }\n    .pf-c-button.pf-m-warning:focus {\n      --pf-c-button--m-warning--Color: var(--pf-c-button--m-warning--focus--Color);\n      --pf-c-button--m-warning--BackgroundColor: var(--pf-c-button--m-warning--focus--BackgroundColor); }\n    .pf-c-button.pf-m-warning:active, .pf-c-button.pf-m-warning.pf-m-active {\n      --pf-c-button--m-warning--Color: var(--pf-c-button--m-warning--active--Color);\n      --pf-c-button--m-warning--BackgroundColor: var(--pf-c-button--m-warning--active--BackgroundColor); }\n  .pf-c-button.pf-m-link {\n    --pf-c-button--disabled--BackgroundColor: var(--pf-c-button--m-link--disabled--BackgroundColor);\n    color: var(--pf-c-button--m-link--Color);\n    background-color: var(--pf-c-button--m-link--BackgroundColor); }\n    .pf-c-button.pf-m-link:not(.pf-m-inline):hover {\n      --pf-c-button--m-link--Color: var(--pf-c-button--m-link--hover--Color);\n      --pf-c-button--m-link--BackgroundColor: var(--pf-c-button--m-link--hover--BackgroundColor); }\n    .pf-c-button.pf-m-link:not(.pf-m-inline):focus {\n      --pf-c-button--m-link--Color: var(--pf-c-button--m-link--focus--Color);\n      --pf-c-button--m-link--BackgroundColor: var(--pf-c-button--m-link--focus--BackgroundColor); }\n    .pf-c-button.pf-m-link:not(.pf-m-inline):active, .pf-c-button.pf-m-link:not(.pf-m-inline).pf-m-active {\n      --pf-c-button--m-link--Color: var(--pf-c-button--m-link--active--Color);\n      --pf-c-button--m-link--BackgroundColor: var(--pf-c-button--m-link--active--BackgroundColor); }\n    .pf-c-button.pf-m-link.pf-m-inline {\n      --pf-c-button--FontSize: var(--pf-c-button--m-link--m-inline--FontSize);\n      display: inline;\n      padding: 0;\n      text-align: left;\n      white-space: normal;\n      cursor: pointer; }\n      .pf-c-button.pf-m-link.pf-m-inline:hover {\n        --pf-c-button--m-link--Color: var(--pf-c-button--m-link--m-inline--hover--Color);\n        text-decoration: var(--pf-c-button--m-link--m-inline--hover--TextDecoration); }\n    .pf-c-button.pf-m-link.pf-m-display-lg {\n      --pf-c-button--FontSize: var(--pf-c-button--m-link--m-display-lg--FontSize); }\n  .pf-c-button.pf-m-control {\n    --pf-c-button--BorderRadius: var(--pf-c-button--m-control--BorderRadius);\n    --pf-c-button--disabled--BackgroundColor: var(--pf-c-button--m-control--disabled--BackgroundColor);\n    --pf-c-button--after--BorderWidth: var(--pf-c-button--m-control--after--BorderWidth);\n    --pf-c-button--after--BorderColor: var(--pf-c-button--m-control--after--BorderTopColor) var(--pf-c-button--m-control--after--BorderRightColor) var(--pf-c-button--m-control--after--BorderBottomColor) var(--pf-c-button--m-control--after--BorderLeftColor);\n    color: var(--pf-c-button--m-control--Color);\n    background-color: var(--pf-c-button--m-control--BackgroundColor); }\n    .pf-c-button.pf-m-control::after {\n      border-radius: initial; }\n    .pf-c-button.pf-m-control:hover {\n      --pf-c-button--m-control--Color: var(--pf-c-button--m-control--hover--Color);\n      --pf-c-button--m-control--BackgroundColor: var(--pf-c-button--m-control--hover--BackgroundColor);\n      --pf-c-button--m-control--after--BorderBottomColor: var(--pf-c-button--m-control--hover--after--BorderBottomColor); }\n      .pf-c-button.pf-m-control:hover::after {\n        border-bottom-width: var(--pf-c-button--m-control--hover--after--BorderBottomWidth); }\n    .pf-c-button.pf-m-control:active, .pf-c-button.pf-m-control.pf-m-active {\n      --pf-c-button--m-control--Color: var(--pf-c-button--m-control--active--Color);\n      --pf-c-button--m-control--BackgroundColor: var(--pf-c-button--m-control--active--BackgroundColor);\n      --pf-c-button--m-control--after--BorderBottomColor: var(--pf-c-button--m-control--active--after--BorderBottomColor); }\n      .pf-c-button.pf-m-control:active::after, .pf-c-button.pf-m-control.pf-m-active::after {\n        border-bottom-width: var(--pf-c-button--m-control--active--after--BorderBottomWidth); }\n    .pf-c-button.pf-m-control:focus {\n      --pf-c-button--m-control--Color: var(--pf-c-button--m-control--focus--Color);\n      --pf-c-button--m-control--BackgroundColor: var(--pf-c-button--m-control--focus--BackgroundColor);\n      --pf-c-button--m-control--after--BorderBottomColor: var(--pf-c-button--m-control--focus--after--BorderBottomColor); }\n      .pf-c-button.pf-m-control:focus::after {\n        border-bottom-width: var(--pf-c-button--m-control--focus--after--BorderBottomWidth); }\n    .pf-c-button.pf-m-control.pf-m-expanded {\n      --pf-c-button--m-control--Color: var(--pf-c-button--m-control--m-expanded--Color);\n      --pf-c-button--m-control--BackgroundColor: var(--pf-c-button--m-control--m-expanded--BackgroundColor);\n      --pf-c-button--m-control--after--BorderBottomColor: var(--pf-c-button--m-control--m-expanded--after--BorderBottomColor); }\n      .pf-c-button.pf-m-control.pf-m-expanded::after {\n        border-bottom-width: var(--pf-c-button--m-control--m-expanded--after--BorderBottomWidth); }\n  .pf-c-button.pf-m-plain {\n    --pf-c-button--disabled--Color: var(--pf-c-button--m-plain--disabled--Color);\n    --pf-c-button--disabled--BackgroundColor: var(--pf-c-button--m-plain--disabled--BackgroundColor);\n    color: var(--pf-c-button--m-plain--Color);\n    background-color: var(--pf-c-button--m-plain--BackgroundColor); }\n    .pf-c-button.pf-m-plain:hover {\n      --pf-c-button--m-plain--Color: var(--pf-c-button--m-plain--hover--Color);\n      --pf-c-button--m-plain--BackgroundColor: var(--pf-c-button--m-plain--hover--BackgroundColor); }\n    .pf-c-button.pf-m-plain:active, .pf-c-button.pf-m-plain.pf-m-active {\n      --pf-c-button--m-plain--Color: var(--pf-c-button--m-plain--active--Color);\n      --pf-c-button--m-plain--BackgroundColor: var(--pf-c-button--m-plain--active--BackgroundColor); }\n    .pf-c-button.pf-m-plain:focus {\n      --pf-c-button--m-plain--Color: var(--pf-c-button--m-plain--focus--Color);\n      --pf-c-button--m-plain--BackgroundColor: var(--pf-c-button--m-plain--focus--BackgroundColor); }\n  .pf-c-button:disabled, .pf-c-button.pf-m-disabled {\n    pointer-events: none; }\n  .pf-c-button:disabled, .pf-c-button.pf-m-disabled, .pf-c-button.pf-m-aria-disabled {\n    --pf-c-button--after--BorderColor: var(--pf-c-button--disabled--after--BorderColor);\n    color: var(--pf-c-button--disabled--Color);\n    background-color: var(--pf-c-button--disabled--BackgroundColor); }\n  .pf-c-button.pf-m-aria-disabled {\n    --pf-c-button--after--BorderWidth: 0;\n    --pf-c-button--m-link--m-inline--hover--TextDecoration: none;\n    cursor: default; }\n  .pf-c-button.pf-m-progress {\n    --pf-c-button--PaddingRight: var(--pf-c-button--m-progress--PaddingRight);\n    --pf-c-button--PaddingLeft: var(--pf-c-button--m-progress--PaddingLeft);\n    transition: var(--pf-c-button--m-progress--TransitionProperty) var(--pf-c-button--m-progress--TransitionDuration); }\n  .pf-c-button.pf-m-in-progress {\n    --pf-c-button--PaddingRight: var(--pf-c-button--m-in-progress--PaddingRight);\n    --pf-c-button--PaddingLeft: var(--pf-c-button--m-in-progress--PaddingLeft); }\n\n.pf-c-button__icon.pf-m-start {\n  margin-right: var(--pf-c-button__icon--m-start--MarginRight); }\n\n.pf-c-button__icon.pf-m-end {\n  margin-left: var(--pf-c-button__icon--m-end--MarginLeft); }\n\n.pf-c-button__progress {\n  position: absolute;\n  top: var(--pf-c-button__progress--Top);\n  left: var(--pf-c-button__progress--Left);\n  line-height: 1;\n  transform: translateY(var(--pf-c-button__progress--TranslateY)); }\n  .pf-c-button__progress .pf-c-spinner {\n    --pf-c-spinner--Color: currentColor; }\n\n.pf-m-overpass-font .pf-c-button {\n  --pf-c-button--FontWeight: var(--pf-global--FontWeight--semi-bold); }\n\n.pf-c-calendar-month {\n  --pf-c-calendar-month--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-calendar-month--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-calendar-month--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-calendar-month--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-calendar-month--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-calendar-month--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-calendar-month__header--MarginBottom: var(--pf-global--spacer--md);\n  --pf-c-calendar-month__header-year--Width: 8ch;\n  --pf-c-calendar-month__header-nav-control--MarginRight: 0;\n  --pf-c-calendar-month__header-nav-control--MarginLeft: 0;\n  --pf-c-calendar-month__header-nav-control--m-prev-month--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-calendar-month__header-nav-control--m-prev-month--MarginLeft: calc(var(--pf-global--spacer--md) * -1);\n  --pf-c-calendar-month__header-nav-control--m-next-month--MarginRight: calc(var(--pf-global--spacer--md) * -1);\n  --pf-c-calendar-month__header-nav-control--m-next-month--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-calendar-month__days--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-calendar-month__days--BorderBottomColor: var(--pf-global--BorderColor--100);\n  --pf-c-calendar-month__day--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-calendar-month__day--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-calendar-month__dates-cell--PaddingTop: 0.125rem;\n  --pf-c-calendar-month__dates-cell--PaddingRight: 0.125rem;\n  --pf-c-calendar-month__dates-cell--PaddingBottom: 0.125rem;\n  --pf-c-calendar-month__dates-cell--PaddingLeft: 0.125rem;\n  --pf-c-calendar-month__dates-row--first-child__dates-cell--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-calendar-month__dates-cell--m-current__date--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-calendar-month__dates-cell--m-selected__date--BackgroundColor: var(--pf-global--active-color--100);\n  --pf-c-calendar-month__dates-cell--m-selected__date--hover--BackgroundColor: var(--pf-global--active-color--100);\n  --pf-c-calendar-month__dates-cell--m-selected__date--focus--BackgroundColor: var(--pf-global--active-color--100);\n  --pf-c-calendar-month__dates-cell--m-selected__date--Color: var(--pf-global--Color--light-100);\n  --pf-c-calendar-month__dates-cell--before--BackgroundColor: transparent;\n  --pf-c-calendar-month__dates-cell--before--Top: var(--pf-c-calendar-month__dates-cell--PaddingTop);\n  --pf-c-calendar-month__dates-cell--before--Right: 0;\n  --pf-c-calendar-month__dates-cell--before--Bottom: var(--pf-c-calendar-month__dates-cell--PaddingBottom);\n  --pf-c-calendar-month__dates-cell--before--Left: 0;\n  --pf-c-calendar-month__dates-cell--m-in-range--before--BackgroundColor: var(--pf-global--palette--blue-50);\n  --pf-c-calendar-month__dates-cell--m-in-range--m-start-range--before--Left: 50%;\n  --pf-c-calendar-month__dates-cell--m-in-range--m-end-range--before--Right: 50%;\n  --pf-c-calendar-month__dates-cell--m-in-range__date--hover--BackgroundColor: var(--pf-global--palette--blue-100);\n  --pf-c-calendar-month__dates-cell--m-in-range__date--focus--BackgroundColor: var(--pf-global--palette--blue-100);\n  --pf-c-calendar-month__dates-cell--m-adjacent-month__date--Color: var(--pf-global--disabled-color--100);\n  --pf-c-calendar-month__date--Width: 4ch;\n  --pf-c-calendar-month__date--Height: 4ch;\n  --pf-c-calendar-month__date--BorderRadius: var(--pf-global--BorderRadius--lg);\n  --pf-c-calendar-month__date--Color: var(--pf-global--Color--100);\n  --pf-c-calendar-month__date--BackgroundColor: transparent;\n  --pf-c-calendar-month__date--disabled--Color: var(--pf-global--disabled-color--200);\n  --pf-c-calendar-month__date--after--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-calendar-month__date--after--BorderColor: transparent;\n  --pf-c-calendar-month__date--hover--BackgroundColor: var(--pf-global--palette--blue-50);\n  --pf-c-calendar-month__date--focus--BackgroundColor: var(--pf-global--palette--blue-50);\n  --pf-c-calendar-month__date--focus--after--BorderColor: var(--pf-global--active-color--100);\n  color: var(--pf-global--Color--100);\n  display: inline-flex;\n  flex-direction: column;\n  padding: var(--pf-c-calendar-month--PaddingTop) var(--pf-c-calendar-month--PaddingRight) var(--pf-c-calendar-month--PaddingBottom) var(--pf-c-calendar-month--PaddingLeft);\n  font-size: var(--pf-c-calendar-month--FontSize);\n  background-color: var(--pf-c-calendar-month--BackgroundColor); }\n\n.pf-c-calendar-month__header {\n  display: flex;\n  margin-bottom: var(--pf-c-calendar-month__header--MarginBottom); }\n\n.pf-c-calendar-month__header-nav-control {\n  margin-right: var(--pf-c-calendar-month__header-nav-control--MarginRight);\n  margin-left: var(--pf-c-calendar-month__header-nav-control--MarginLeft); }\n  .pf-c-calendar-month__header-nav-control.pf-m-prev-month {\n    --pf-c-calendar-month__header-nav-control--MarginRight: var(--pf-c-calendar-month__header-nav-control--m-prev-month--MarginRight);\n    --pf-c-calendar-month__header-nav-control--MarginLeft: var(--pf-c-calendar-month__header-nav-control--m-prev-month--MarginLeft); }\n  .pf-c-calendar-month__header-nav-control.pf-m-next-month {\n    --pf-c-calendar-month__header-nav-control--MarginRight: var(--pf-c-calendar-month__header-nav-control--m-next-month--MarginRight);\n    --pf-c-calendar-month__header-nav-control--MarginLeft: var(--pf-c-calendar-month__header-nav-control--m-next-month--MarginLeft); }\n\n.pf-c-calendar-month__header-month {\n  flex-grow: 1; }\n\n.pf-c-calendar-month__header-year {\n  width: var(--pf-c-calendar-month__header-year--Width); }\n\n.pf-c-calendar-month__calendar {\n  table-layout: fixed; }\n\n.pf-c-calendar-month__days {\n  border-bottom: var(--pf-c-calendar-month__days--BorderBottomWidth) solid var(--pf-c-calendar-month__days--BorderBottomColor); }\n\n.pf-c-calendar-month__day {\n  padding-bottom: var(--pf-c-calendar-month__day--PaddingBottom);\n  font-weight: var(--pf-c-calendar-month__day--FontWeight);\n  text-align: center; }\n\n.pf-c-calendar-month__dates-row:first-child {\n  --pf-c-calendar-month__dates-cell--PaddingTop: var(--pf-c-calendar-month__dates-row--first-child__dates-cell--PaddingTop); }\n\n.pf-c-calendar-month__dates-cell {\n  position: relative;\n  padding: var(--pf-c-calendar-month__dates-cell--PaddingTop) var(--pf-c-calendar-month__dates-cell--PaddingRight) var(--pf-c-calendar-month__dates-cell--PaddingBottom) var(--pf-c-calendar-month__dates-cell--PaddingLeft);\n  text-align: center; }\n  .pf-c-calendar-month__dates-cell::before {\n    position: absolute;\n    top: var(--pf-c-calendar-month__dates-cell--before--Top);\n    right: var(--pf-c-calendar-month__dates-cell--before--Right);\n    bottom: var(--pf-c-calendar-month__dates-cell--before--Bottom);\n    left: var(--pf-c-calendar-month__dates-cell--before--Left);\n    content: "";\n    background-color: var(--pf-c-calendar-month__dates-cell--before--BackgroundColor); }\n  .pf-c-calendar-month__dates-cell.pf-m-current {\n    --pf-c-calendar-month__date--BackgroundColor: var(--pf-c-calendar-month__dates-cell--m-current__date--BackgroundColor); }\n  .pf-c-calendar-month__dates-cell.pf-m-in-range {\n    --pf-c-calendar-month__dates-cell--before--BackgroundColor: var(--pf-c-calendar-month__dates-cell--m-in-range--before--BackgroundColor);\n    --pf-c-calendar-month__date--hover--BackgroundColor: var(--pf-c-calendar-month__dates-cell--m-in-range__date--hover--BackgroundColor);\n    --pf-c-calendar-month__date--focus--BackgroundColor: var(--pf-c-calendar-month__dates-cell--m-in-range__date--focus--BackgroundColor); }\n  .pf-c-calendar-month__dates-cell.pf-m-start-range {\n    --pf-c-calendar-month__dates-cell--before--Left: var(--pf-c-calendar-month__dates-cell--m-in-range--m-start-range--before--Left); }\n  .pf-c-calendar-month__dates-cell.pf-m-end-range {\n    --pf-c-calendar-month__dates-cell--before--Right: var(--pf-c-calendar-month__dates-cell--m-in-range--m-end-range--before--Right); }\n  .pf-c-calendar-month__dates-cell.pf-m-adjacent-month {\n    --pf-c-calendar-month__date--Color: var(--pf-c-calendar-month__dates-cell--m-adjacent-month__date--Color); }\n  .pf-c-calendar-month__dates-cell.pf-m-selected {\n    --pf-c-calendar-month__date--BackgroundColor: var(--pf-c-calendar-month__dates-cell--m-selected__date--BackgroundColor);\n    --pf-c-calendar-month__date--hover--BackgroundColor: var(--pf-c-calendar-month__dates-cell--m-selected__date--hover--BackgroundColor);\n    --pf-c-calendar-month__date--focus--BackgroundColor: var(--pf-c-calendar-month__dates-cell--m-selected__date--focus--BackgroundColor);\n    --pf-c-calendar-month__date--Color: var(--pf-c-calendar-month__dates-cell--m-selected__date--Color); }\n  .pf-c-calendar-month__dates-cell.pf-m-disabled {\n    --pf-c-calendar-month__dates-cell--before--BackgroundColor: transparent;\n    --pf-c-calendar-month__date--BackgroundColor: transparent; }\n\n.pf-c-calendar-month__date {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--pf-c-calendar-month__date--Width);\n  height: var(--pf-c-calendar-month__date--Height);\n  line-height: 1;\n  color: var(--pf-c-calendar-month__date--Color);\n  background-color: var(--pf-c-calendar-month__date--BackgroundColor);\n  border: 0; }\n  .pf-c-calendar-month__date::after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    border: var(--pf-c-calendar-month__date--after--BorderWidth) solid var(--pf-c-calendar-month__date--after--BorderColor); }\n  .pf-c-calendar-month__date, .pf-c-calendar-month__date::after {\n    border-radius: var(--pf-c-calendar-month__date--BorderRadius); }\n  .pf-c-calendar-month__date:hover, .pf-c-calendar-month__date.pf-m-hover {\n    --pf-c-calendar-month__date--BackgroundColor: var(--pf-c-calendar-month__date--hover--BackgroundColor); }\n  .pf-c-calendar-month__date:focus, .pf-c-calendar-month__date.pf-m-focus {\n    --pf-c-calendar-month__date--BackgroundColor: var(--pf-c-calendar-month__date--focus--BackgroundColor);\n    --pf-c-calendar-month__date--after--BorderColor: var(--pf-c-calendar-month__date--focus--after--BorderColor);\n    outline: 0; }\n  .pf-c-calendar-month__date:disabled {\n    pointer-events: none;\n    --pf-c-calendar-month__date--Color: var(--pf-c-calendar-month__date--disabled--Color);\n    --pf-c-calendar-month__date--hover--focus--BorderColor: transparent; }\n\n.pf-c-card {\n  --pf-c-card--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-card--BoxShadow: var(--pf-global--BoxShadow--sm);\n  --pf-c-card--m-hoverable--hover--BoxShadow: var(--pf-global--BoxShadow--lg);\n  --pf-c-card--m-selectable--hover--BoxShadow: var(--pf-global--BoxShadow--lg);\n  --pf-c-card--m-selectable--focus--BoxShadow: var(--pf-global--BoxShadow--lg);\n  --pf-c-card--m-selectable--active--BoxShadow: var(--pf-global--BoxShadow--lg);\n  --pf-c-card--m-selectable--m-selected--BoxShadow: var(--pf-global--BoxShadow--lg);\n  --pf-c-card--m-selectable--m-selected--before--Height: var(--pf-global--BorderWidth--lg);\n  --pf-c-card--m-selectable--m-selected--before--BackgroundColor: var(--pf-global--active-color--100);\n  --pf-c-card--m-compact__body--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-card--m-compact__footer--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-card--m-compact--first-child--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-card--m-compact--child--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-card--m-compact--child--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-card--m-compact--child--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-card--m-compact__title--not--last-child--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-card--m-flat--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-card--m-flat--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-card--first-child--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-card--child--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-card--child--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-card--child--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-card__header-toggle--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-card__header-toggle--MarginRight: var(--pf-global--spacer--xs);\n  --pf-c-card__header-toggle--MarginBottom: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-card__header-toggle--MarginLeft: calc(var(--pf-global--spacer--md) * -1);\n  --pf-c-card__header-toggle-icon--Transition: var(--pf-global--Transition);\n  --pf-c-card--m-expanded__header-toggle-icon--Rotate: 90deg;\n  --pf-c-card__title--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-card__title--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-card__title--not--last-child--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-card__body--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-card__footer--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-card__actions--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-card__actions--child--MarginLeft: var(--pf-global--spacer--sm);\n  display: flex;\n  flex-direction: column;\n  background-color: var(--pf-c-card--BackgroundColor);\n  box-shadow: var(--pf-c-card--BoxShadow); }\n  .pf-c-card.pf-m-hoverable:hover {\n    box-shadow: var(--pf-c-card--m-hoverable--hover--BoxShadow); }\n  .pf-c-card.pf-m-selectable {\n    position: relative;\n    cursor: pointer; }\n    .pf-c-card.pf-m-selectable:hover {\n      box-shadow: var(--pf-c-card--m-selectable--hover--BoxShadow); }\n    .pf-c-card.pf-m-selectable:focus {\n      box-shadow: var(--pf-c-card--m-selectable--focus--BoxShadow); }\n    .pf-c-card.pf-m-selectable:active {\n      box-shadow: var(--pf-c-card--m-selectable--active--BoxShadow); }\n    .pf-c-card.pf-m-selectable.pf-m-selected {\n      box-shadow: var(--pf-c-card--m-selectable--m-selected--BoxShadow); }\n      .pf-c-card.pf-m-selectable.pf-m-selected::before {\n        position: absolute;\n        top: 0;\n        right: 0;\n        left: 0;\n        height: var(--pf-c-card--m-selectable--m-selected--before--Height);\n        content: "";\n        background-color: var(--pf-c-card--m-selectable--m-selected--before--BackgroundColor); }\n  .pf-c-card.pf-m-compact {\n    --pf-c-card__body--FontSize: var(--pf-c-card--m-compact__body--FontSize);\n    --pf-c-card__footer--FontSize: var(--pf-c-card--m-compact__footer--FontSize);\n    --pf-c-card--first-child--PaddingTop: var(--pf-c-card--m-compact--first-child--PaddingTop);\n    --pf-c-card--child--PaddingRight: var(--pf-c-card--m-compact--child--PaddingRight);\n    --pf-c-card--child--PaddingBottom: var(--pf-c-card--m-compact--child--PaddingBottom);\n    --pf-c-card--child--PaddingLeft: var(--pf-c-card--m-compact--child--PaddingLeft);\n    --pf-c-card__title--not--last-child--PaddingBottom: var(--pf-c-card--m-compact__title--not--last-child--PaddingBottom); }\n  .pf-c-card.pf-m-flat {\n    --pf-c-card--BoxShadow: none;\n    border: var(--pf-c-card--m-flat--BorderWidth) solid var(--pf-c-card--m-flat--BorderColor); }\n  .pf-c-card.pf-m-expanded .pf-c-card__header-toggle-icon {\n    transform: rotate(var(--pf-c-card--m-expanded__header-toggle-icon--Rotate)); }\n\n.pf-c-card__header {\n  display: flex;\n  flex-direction: row;\n  align-items: center; }\n  .pf-c-card__header .pf-c-card__title {\n    padding: 0; }\n\n.pf-c-card__header-toggle {\n  align-self: flex-start;\n  margin: var(--pf-c-card__header-toggle--MarginTop) var(--pf-c-card__header-toggle--MarginRight) var(--pf-c-card__header-toggle--MarginBottom) var(--pf-c-card__header-toggle--MarginLeft); }\n\n.pf-c-card__header-toggle-icon {\n  display: inline-block;\n  transition: var(--pf-c-card__header-toggle-icon--Transition); }\n\n.pf-c-card__title {\n  font-family: var(--pf-c-card__title--FontFamily);\n  font-weight: var(--pf-c-card__title--FontWeight); }\n\n.pf-c-card__actions {\n  display: flex;\n  align-items: center;\n  align-self: flex-start;\n  order: 1;\n  padding-left: var(--pf-c-card__actions--PaddingLeft);\n  margin: var(--pf-c-card__header-toggle--MarginTop) var(--pf-c-card__header-toggle--MarginRight) var(--pf-c-card__header-toggle--MarginBottom) auto; }\n  .pf-c-card__actions > * + * {\n    margin-left: var(--pf-c-card__actions--child--MarginLeft); }\n  .pf-c-card__actions + .pf-c-card__title,\n  .pf-c-card__actions + .pf-c-card__body,\n  .pf-c-card__actions + .pf-c-card__footer {\n    padding: 0; }\n\n.pf-c-card__header,\n.pf-c-card__title,\n.pf-c-card__body,\n.pf-c-card__footer {\n  padding-right: var(--pf-c-card--child--PaddingRight);\n  padding-bottom: var(--pf-c-card--child--PaddingBottom);\n  padding-left: var(--pf-c-card--child--PaddingLeft); }\n  .pf-c-card__header:first-child,\n  .pf-c-card__title:first-child,\n  .pf-c-card__body:first-child,\n  .pf-c-card__footer:first-child {\n    padding-top: var(--pf-c-card--first-child--PaddingTop); }\n\n.pf-c-card__header:not(:last-child),\n.pf-c-card__title:not(:last-child) {\n  padding-bottom: var(--pf-c-card__title--not--last-child--PaddingBottom); }\n\n.pf-c-card__expandable-content {\n  --pf-c-card--first-child--PaddingTop: 0; }\n\n.pf-c-card__body:not(.pf-m-no-fill) {\n  flex: 1 1 auto; }\n\n.pf-c-card__body {\n  font-size: var(--pf-c-card__body--FontSize); }\n\n.pf-c-card__footer {\n  font-size: var(--pf-c-card__footer--FontSize); }\n\n.pf-m-overpass-font .pf-c-card .pf-c-card__title {\n  font-weight: var(--pf-global--FontWeight--normal); }\n\n.pf-c-check {\n  --pf-c-check--GridGap: var(--pf-global--spacer--xs) var(--pf-global--spacer--sm);\n  --pf-c-check__label--disabled--Color: var(--pf-global--disabled-color--100);\n  --pf-c-check__label--Color: var(--pf-global--Color--100);\n  --pf-c-check__label--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-check__label--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-check__label--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-check__input--MarginTop: -0.1875rem;\n  --pf-c-check__description--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-check__description--Color: var(--pf-global--Color--200);\n  display: grid;\n  grid-template-columns: auto 1fr;\n  grid-gap: var(--pf-c-check--GridGap);\n  align-items: center;\n  justify-items: start; }\n\n.pf-c-check__label {\n  font-size: var(--pf-c-check__label--FontSize);\n  font-weight: var(--pf-c-check__label--FontWeight);\n  line-height: var(--pf-c-check__label--LineHeight);\n  color: var(--pf-c-check__label--Color); }\n\n.pf-c-check__input {\n  margin-top: var(--pf-c-check__input--MarginTop); }\n\n.pf-c-check__description {\n  grid-column: 2;\n  font-size: var(--pf-c-check__description--FontSize);\n  color: var(--pf-c-check__description--Color); }\n\nlabel.pf-c-check, .pf-c-check__label,\n.pf-c-check__input {\n  cursor: pointer; }\n\n.pf-c-check__label:disabled, .pf-c-check__label.pf-m-disabled,\n.pf-c-check__input:disabled,\n.pf-c-check__input.pf-m-disabled {\n  --pf-c-check__label--Color: var(--pf-c-check__label--disabled--Color);\n  cursor: not-allowed; }\n\n.pf-c-chip {\n  --pf-c-chip--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-chip--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-chip--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-chip--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-chip--BackgroundColor: var(--pf-global--Color--light-100);\n  --pf-c-chip--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-chip--before--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-chip--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-chip--before--BorderRadius: var(--pf-c-chip--BorderRadius);\n  --pf-c-chip--m-overflow__text--Color: var(--pf-global--primary-color--100);\n  --pf-c-chip--m-draggable--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-chip--m-draggable--BoxShadow: var(--pf-global--BoxShadow--sm);\n  --pf-c-chip--m-draggable__icon--FontSize: var(--pf-global--icon--FontSize--sm);\n  --pf-c-chip__text--FontSize: var(--pf-global--FontSize--xs);\n  --pf-c-chip__text--Color: var(--pf-global--Color--100);\n  --pf-c-chip__text--MaxWidth: 16ch;\n  --pf-c-chip__c-button--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-chip__c-button--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-chip__c-button--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-chip__c-button--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-chip__c-button--MarginTop: calc(var(--pf-c-chip--PaddingTop) * -1);\n  --pf-c-chip__c-button--MarginRight: calc(var(--pf-c-chip--PaddingRight) / 2 * -1);\n  --pf-c-chip__c-button--MarginBottom: calc(var(--pf-c-chip--PaddingBottom) * -1);\n  --pf-c-chip__c-button--FontSize: var(--pf-global--FontSize--xs);\n  --pf-c-chip__c-badge--MarginLeft: var(--pf-global--spacer--xs);\n  --pf-c-chip__icon--MarginLeft: var(--pf-global--spacer--sm);\n  color: var(--pf-global--Color--100);\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  padding: var(--pf-c-chip--PaddingTop) var(--pf-c-chip--PaddingRight) var(--pf-c-chip--PaddingBottom) var(--pf-c-chip--PaddingLeft);\n  list-style: none;\n  background-color: var(--pf-c-chip--BackgroundColor);\n  border-radius: var(--pf-c-chip--BorderRadius); }\n  .pf-c-chip::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    border: var(--pf-c-chip--before--BorderWidth) solid var(--pf-c-chip--before--BorderColor);\n    border-radius: var(--pf-c-chip--before--BorderRadius); }\n  .pf-c-chip.pf-m-overflow {\n    border: 0; }\n    .pf-c-chip.pf-m-overflow .pf-c-chip__text {\n      color: var(--pf-c-chip--m-overflow__text--Color); }\n  .pf-c-chip.pf-m-draggable {\n    --pf-c-chip--BackgroundColor: var(--pf-c-chip--m-draggable--BackgroundColor);\n    box-shadow: var(--pf-c-chip--m-draggable--BoxShadow); }\n    .pf-c-chip.pf-m-draggable .pf-c-chip__icon {\n      font-size: var(--pf-c-chip--m-draggable__icon--FontSize); }\n  .pf-c-chip .pf-c-button {\n    --pf-c-button--PaddingTop: var(--pf-c-chip__c-button--PaddingTop);\n    --pf-c-button--PaddingRight: var(--pf-c-chip__c-button--PaddingRight);\n    --pf-c-button--PaddingBottom: var(--pf-c-chip__c-button--PaddingBottom);\n    --pf-c-button--PaddingLeft: var(--pf-c-chip__c-button--PaddingLeft);\n    --pf-c-button--FontSize: var(--pf-c-chip__c-button--FontSize);\n    margin-top: var(--pf-c-chip__c-button--MarginTop);\n    margin-right: var(--pf-c-chip__c-button--MarginRight);\n    margin-bottom: var(--pf-c-chip__c-button--MarginBottom); }\n  .pf-c-chip .pf-c-badge {\n    margin-left: var(--pf-c-chip__c-badge--MarginLeft); }\n\n.pf-c-chip__text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  position: relative;\n  max-width: var(--pf-c-chip__text--MaxWidth);\n  font-size: var(--pf-c-chip__text--FontSize);\n  color: var(--pf-c-chip__text--Color); }\n\n.pf-c-chip__icon + .pf-c-chip__text,\n.pf-c-chip__text + .pf-c-chip__icon {\n  margin-left: var(--pf-c-chip__icon--MarginLeft); }\n\n.pf-c-chip-group {\n  color: var(--pf-global--Color--100);\n  --pf-c-chip-group__list--MarginBottom: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-chip-group__list--MarginRight: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-chip-group--m-category--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-chip-group--m-category--PaddingRight: var(--pf-global--spacer--xs);\n  --pf-c-chip-group--m-category--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-chip-group--m-category--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-chip-group--m-category--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-chip-group--m-category--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-chip-group__label--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-chip-group__label--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-chip-group__label--MaxWidth: 18ch;\n  --pf-c-chip-group__close--MarginTop: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-chip-group__close--MarginBottom: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-chip-group__list-item--MarginRight: var(--pf-global--spacer--xs);\n  --pf-c-chip-group__list-item--MarginBottom: var(--pf-global--spacer--xs); }\n  .pf-c-chip-group.pf-m-category {\n    padding-top: var(--pf-c-chip-group--m-category--PaddingTop);\n    padding-right: var(--pf-c-chip-group--m-category--PaddingRight);\n    padding-bottom: var(--pf-c-chip-group--m-category--PaddingBottom);\n    padding-left: var(--pf-c-chip-group--m-category--PaddingLeft);\n    background-color: var(--pf-c-chip-group--m-category--BackgroundColor);\n    border-radius: var(--pf-c-chip-group--m-category--BorderRadius); }\n\n.pf-c-chip-group__main {\n  display: flex;\n  flex: 1;\n  flex-wrap: wrap;\n  align-items: baseline; }\n\n.pf-c-chip-group__list {\n  margin-right: var(--pf-c-chip-group__list--MarginRight);\n  margin-bottom: var(--pf-c-chip-group__list--MarginBottom); }\n\n.pf-c-chip-group,\n.pf-c-chip-group__list {\n  display: inline-flex;\n  flex-wrap: wrap;\n  align-items: center; }\n\n.pf-c-chip-group__list-item {\n  display: inline-flex;\n  margin-right: var(--pf-c-chip-group__list-item--MarginRight);\n  margin-bottom: var(--pf-c-chip-group__list-item--MarginBottom); }\n\n.pf-c-chip-group__label {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  max-width: var(--pf-c-chip-group__label--MaxWidth);\n  margin-right: var(--pf-c-chip-group__label--MarginRight);\n  font-size: var(--pf-c-chip-group__label--FontSize); }\n\n.pf-c-chip-group__close {\n  display: flex;\n  align-self: flex-start;\n  margin-top: var(--pf-c-chip-group__close--MarginTop);\n  margin-bottom: var(--pf-c-chip-group__close--MarginBottom); }\n\n.pf-c-clipboard-copy {\n  --pf-c-clipboard-copy__toggle-icon--Transition: .2s ease-in 0s;\n  --pf-c-clipboard-copy--m-expanded__toggle-icon--Rotate: 90deg;\n  --pf-c-clipboard-copy__expandable-content--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-clipboard-copy__expandable-content--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-clipboard-copy__expandable-content--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-clipboard-copy__expandable-content--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-clipboard-copy__expandable-content--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-clipboard-copy__expandable-content--BorderTopWidth: 0;\n  --pf-c-clipboard-copy__expandable-content--BorderRightWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-clipboard-copy__expandable-content--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-clipboard-copy__expandable-content--BorderLeftWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-clipboard-copy__expandable-content--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-clipboard-copy__expandable-content--OutlineOffset: calc(-1 * var(--pf-global--spacer--xs)); }\n  .pf-c-clipboard-copy.pf-m-expanded .pf-c-clipboard-copy__toggle-icon {\n    transform: rotate(var(--pf-c-clipboard-copy--m-expanded__toggle-icon--Rotate)); }\n\n.pf-c-clipboard-copy__group {\n  display: flex; }\n  .pf-c-clipboard-copy__group > * + * {\n    margin-left: -1px; }\n\n.pf-c-clipboard-copy__toggle-icon {\n  transition: var(--pf-c-clipboard-copy__toggle-icon--Transition); }\n\n.pf-c-clipboard-copy__expandable-content {\n  padding: var(--pf-c-clipboard-copy__expandable-content--PaddingTop) var(--pf-c-clipboard-copy__expandable-content--PaddingRight) var(--pf-c-clipboard-copy__expandable-content--PaddingBottom) var(--pf-c-clipboard-copy__expandable-content--PaddingLeft);\n  word-wrap: break-word;\n  background-color: var(--pf-c-clipboard-copy__expandable-content--BackgroundColor);\n  background-clip: padding-box;\n  border: solid var(--pf-c-clipboard-copy__expandable-content--BorderColor);\n  border-width: var(--pf-c-clipboard-copy__expandable-content--BorderTopWidth) var(--pf-c-clipboard-copy__expandable-content--BorderRightWidth) var(--pf-c-clipboard-copy__expandable-content--BorderBottomWidth) var(--pf-c-clipboard-copy__expandable-content--BorderLeftWidth);\n  box-shadow: var(--pf-c-clipboard-copy__expandable-content--BoxShadow); }\n  .pf-c-clipboard-copy__expandable-content pre {\n    white-space: pre-wrap; }\n\n.pf-c-code-editor {\n  --pf-c-code-editor__controls--c-button--m-control--Color: var(--pf-global--Color--200);\n  --pf-c-code-editor__controls--c-button--m-control--hover--Color: var(--pf-global--Color--100);\n  --pf-c-code-editor__controls--c-button--m-control--focus--Color: var(--pf-global--Color--100);\n  --pf-c-code-editor__controls--c-button--m-control--disabled--after--BorderBottomColor: var(--pf-global--BorderColor--100);\n  --pf-c-code-editor__header--before--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-code-editor__header--before--BorderBottomColor: var(--pf-global--BorderColor--100);\n  --pf-c-code-editor__main--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-code-editor__main--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-code-editor__main--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-code-editor--m-read-only__main--BackgroundColor: var(--pf-global--disabled-color--300);\n  --pf-c-code-editor__main--m-drag-hover--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-code-editor__main--m-drag-hover--before--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-code-editor__main--m-drag-hover--after--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-code-editor__main--m-drag-hover--after--Opacity: .1;\n  --pf-c-code-editor__code--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-code-editor__code--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-code-editor__code--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-code-editor__code--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-code-editor__code-pre--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-code-editor__code-pre--FontFamily: var(--pf-global--FontFamily--monospace);\n  --pf-c-code-editor__tab--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-code-editor__tab--Color: var(--pf-global--Color--200);\n  --pf-c-code-editor__tab--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-code-editor__tab--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-code-editor__tab--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-code-editor__tab--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-code-editor__tab--BorderTopWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-code-editor__tab--BorderRightWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-code-editor__tab--BorderBottomWidth: 0;\n  --pf-c-code-editor__tab--BorderLeftWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-code-editor__tab--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-code-editor__tab-icon--text--MarginLeft: var(--pf-global--spacer--sm); }\n  .pf-c-code-editor.pf-m-read-only {\n    --pf-c-code-editor__main--BackgroundColor: var(--pf-c-code-editor--m-read-only__main--BackgroundColor); }\n\n.pf-c-code-editor__header {\n  position: relative;\n  display: flex;\n  align-items: flex-end; }\n  .pf-c-code-editor__header::before {\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    pointer-events: none;\n    content: "";\n    border-bottom: var(--pf-c-code-editor__header--before--BorderBottomWidth) solid var(--pf-c-code-editor__header--before--BorderBottomColor); }\n\n.pf-c-code-editor__controls {\n  display: flex; }\n  .pf-c-code-editor__controls .pf-c-button.pf-m-control {\n    --pf-c-button--m-control--Color: var(--pf-c-code-editor__controls--c-button--m-control--Color); }\n    .pf-c-code-editor__controls .pf-c-button.pf-m-control:hover {\n      --pf-c-code-editor__controls--c-button--m-control--Color: var(--pf-c-code-editor__controls--c-button--m-control--hover--Color); }\n    .pf-c-code-editor__controls .pf-c-button.pf-m-control:focus {\n      --pf-c-code-editor__controls--c-button--m-control--Color: var(--pf-c-code-editor__controls--c-button--m-control--focus--Color); }\n    .pf-c-code-editor__controls .pf-c-button.pf-m-control:disabled::after {\n      border-bottom-color: var(--pf-c-code-editor__controls--c-button--m-control--disabled--after--BorderBottomColor); }\n\n.pf-c-code-editor__main {\n  position: relative;\n  background-color: var(--pf-c-code-editor__main--BackgroundColor);\n  border: var(--pf-c-code-editor__main--BorderWidth) solid;\n  border-color: var(--pf-c-code-editor__main--BorderColor); }\n  .pf-c-code-editor__main.pf-m-drag-hover::after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    background-color: var(--pf-c-code-editor__main--m-drag-hover--after--BackgroundColor);\n    opacity: var(--pf-c-code-editor__main--m-drag-hover--after--Opacity); }\n  .pf-c-code-editor__main.pf-m-drag-hover::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    border: var(--pf-c-code-editor__main--m-drag-hover--before--BorderWidth) solid var(--pf-c-code-editor__main--m-drag-hover--before--BorderColor); }\n  .pf-c-code-editor__main .monaco-editor {\n    background-color: var(--pf-c-code-editor__main--BackgroundColor); }\n\n.pf-c-code-editor__header + .pf-c-code-editor__main {\n  border-top-width: 0; }\n\n.pf-c-code-editor__code {\n  position: relative;\n  padding: var(--pf-c-code-editor__code--PaddingTop) var(--pf-c-code-editor__code--PaddingRight) var(--pf-c-code-editor__code--PaddingBottom) var(--pf-c-code-editor__code--PaddingLeft); }\n  .pf-c-code-editor__code .pf-c-code-editor__code-pre {\n    font-family: var(--pf-c-code-editor__code-pre--FontFamily);\n    font-size: var(--pf-c-code-editor__code-pre--FontSize);\n    white-space: pre-wrap; }\n\n.pf-c-code-editor__tab {\n  position: relative;\n  display: flex;\n  align-items: center;\n  padding: var(--pf-c-code-editor__tab--PaddingTop) var(--pf-c-code-editor__tab--PaddingRight) var(--pf-c-code-editor__tab--PaddingBottom) var(--pf-c-code-editor__tab--PaddingLeft);\n  margin-left: auto;\n  color: var(--pf-c-code-editor__tab--Color);\n  background-color: var(--pf-c-code-editor__tab--BackgroundColor);\n  border-color: var(--pf-c-code-editor__tab--BorderColor);\n  border-style: solid;\n  border-width: var(--pf-c-code-editor__tab--BorderTopWidth) var(--pf-c-code-editor__tab--BorderRightWidth) var(--pf-c-code-editor__tab--BorderBottomWidth) var(--pf-c-code-editor__tab--BorderLeftWidth); }\n\n.pf-c-code-editor__tab-icon + .pf-c-code-editor__tab-text {\n  margin-left: var(--pf-c-code-editor__tab-icon--text--MarginLeft); }\n\n.pf-c-content {\n  --pf-c-content--MarginBottom: var(--pf-global--spacer--md);\n  --pf-c-content--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-content--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-content--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-content--Color: var(--pf-global--Color--100);\n  --pf-c-content--heading--FontFamily: var(--pf-global--FontFamily--heading--sans-serif);\n  --pf-c-content--h1--MarginTop: var(--pf-global--spacer--lg);\n  --pf-c-content--h1--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-content--h1--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-content--h1--FontSize: var(--pf-global--FontSize--2xl);\n  --pf-c-content--h1--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-content--h2--MarginTop: var(--pf-global--spacer--lg);\n  --pf-c-content--h2--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-content--h2--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-content--h2--FontSize: var(--pf-global--FontSize--xl);\n  --pf-c-content--h2--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-content--h3--MarginTop: var(--pf-global--spacer--lg);\n  --pf-c-content--h3--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-content--h3--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-content--h3--FontSize: var(--pf-global--FontSize--lg);\n  --pf-c-content--h3--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-content--h4--MarginTop: var(--pf-global--spacer--lg);\n  --pf-c-content--h4--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-content--h4--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-content--h4--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-content--h4--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-content--h5--MarginTop: var(--pf-global--spacer--lg);\n  --pf-c-content--h5--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-content--h5--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-content--h5--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-content--h5--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-content--h6--MarginTop: var(--pf-global--spacer--lg);\n  --pf-c-content--h6--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-content--h6--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-content--h6--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-content--h6--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-content--small--MarginBottom: var(--pf-global--spacer--md);\n  --pf-c-content--small--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-content--small--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-content--small--Color: var(--pf-global--Color--200);\n  --pf-c-content--a--Color: var(--pf-global--link--Color);\n  --pf-c-content--a--TextDecoration: var(--pf-global--link--TextDecoration);\n  --pf-c-content--a--hover--Color: var(--pf-global--link--Color--hover);\n  --pf-c-content--a--hover--TextDecoration: var(--pf-global--link--TextDecoration--hover);\n  --pf-c-content--blockquote--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-content--blockquote--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-content--blockquote--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-content--blockquote--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-content--blockquote--Color: var(--pf-global--Color--200);\n  --pf-c-content--blockquote--BorderLeftColor: var(--pf-global--BorderColor--100);\n  --pf-c-content--blockquote--BorderLeftWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-content--ol--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-content--ol--MarginLeft: var(--pf-global--spacer--lg);\n  --pf-c-content--ol--nested--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-content--ol--nested--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-content--ul--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-content--ul--MarginLeft: var(--pf-global--spacer--lg);\n  --pf-c-content--ul--nested--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-content--ul--nested--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-content--ul--ListStyle: var(--pf-global--ListStyle);\n  --pf-c-content--li--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-content--dl--ColumnGap: var(--pf-global--spacer--2xl);\n  --pf-c-content--dl--RowGap: var(--pf-global--spacer--md);\n  --pf-c-content--dt--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-content--dt--MarginTop: var(--pf-global--spacer--md);\n  --pf-c-content--dt--sm--MarginTop: 0;\n  --pf-c-content--hr--Height: var(--pf-global--BorderWidth--sm);\n  --pf-c-content--hr--BackgroundColor: var(--pf-global--BorderColor--100);\n  font-size: var(--pf-c-content--FontSize);\n  line-height: var(--pf-c-content--LineHeight);\n  color: var(--pf-c-content--Color); }\n  .pf-c-content a {\n    color: var(--pf-c-content--a--Color);\n    text-decoration: var(--pf-c-content--a--TextDecoration); }\n    .pf-c-content a:hover {\n      --pf-c-content--a--Color: var(--pf-c-content--a--hover--Color);\n      --pf-c-content--a--TextDecoration: var(--pf-c-content--a--hover--TextDecoration); }\n  .pf-c-content li + li {\n    margin-top: var(--pf-c-content--li--MarginTop); }\n  .pf-c-content p:not(:last-child),\n  .pf-c-content dl:not(:last-child),\n  .pf-c-content ol:not(:last-child),\n  .pf-c-content ul:not(:last-child),\n  .pf-c-content blockquote:not(:last-child),\n  .pf-c-content small:not(:last-child),\n  .pf-c-content pre:not(:last-child),\n  .pf-c-content table:not(:last-child),\n  .pf-c-content hr:not(:last-child) {\n    margin-bottom: var(--pf-c-content--MarginBottom); }\n  .pf-c-content h1,\n  .pf-c-content h2,\n  .pf-c-content h3,\n  .pf-c-content h4,\n  .pf-c-content h5,\n  .pf-c-content h6 {\n    margin: 0;\n    font-family: var(--pf-c-content--heading--FontFamily); }\n    .pf-c-content h1:first-child,\n    .pf-c-content h2:first-child,\n    .pf-c-content h3:first-child,\n    .pf-c-content h4:first-child,\n    .pf-c-content h5:first-child,\n    .pf-c-content h6:first-child {\n      margin-top: 0; }\n    .pf-c-content h1:last-child,\n    .pf-c-content h2:last-child,\n    .pf-c-content h3:last-child,\n    .pf-c-content h4:last-child,\n    .pf-c-content h5:last-child,\n    .pf-c-content h6:last-child {\n      margin-bottom: 0; }\n  .pf-c-content ol,\n  .pf-c-content ul {\n    margin: 0; }\n  .pf-c-content h1 {\n    margin-top: var(--pf-c-content--h1--MarginTop);\n    margin-bottom: var(--pf-c-content--h1--MarginBottom);\n    font-size: var(--pf-c-content--h1--FontSize);\n    font-weight: var(--pf-c-content--h1--FontWeight);\n    line-height: var(--pf-c-content--h1--LineHeight); }\n  .pf-c-content h2 {\n    margin-top: var(--pf-c-content--h2--MarginTop);\n    margin-bottom: var(--pf-c-content--h2--MarginBottom);\n    font-size: var(--pf-c-content--h2--FontSize);\n    font-weight: var(--pf-c-content--h2--FontWeight);\n    line-height: var(--pf-c-content--h2--LineHeight); }\n  .pf-c-content h3 {\n    margin-top: var(--pf-c-content--h3--MarginTop);\n    margin-bottom: var(--pf-c-content--h3--MarginBottom);\n    font-size: var(--pf-c-content--h3--FontSize);\n    font-weight: var(--pf-c-content--h3--FontWeight);\n    line-height: var(--pf-c-content--h3--LineHeight); }\n  .pf-c-content h4 {\n    margin-top: var(--pf-c-content--h4--MarginTop);\n    margin-bottom: var(--pf-c-content--h4--MarginBottom);\n    font-size: var(--pf-c-content--h4--FontSize);\n    font-weight: var(--pf-c-content--h4--FontWeight);\n    line-height: var(--pf-c-content--h4--LineHeight); }\n  .pf-c-content h5 {\n    margin-top: var(--pf-c-content--h5--MarginTop);\n    margin-bottom: var(--pf-c-content--h5--MarginBottom);\n    font-size: var(--pf-c-content--h5--FontSize);\n    font-weight: var(--pf-c-content--h5--FontWeight);\n    line-height: var(--pf-c-content--h5--LineHeight); }\n  .pf-c-content h6 {\n    margin-top: var(--pf-c-content--h6--MarginTop);\n    margin-bottom: var(--pf-c-content--h6--MarginBottom);\n    font-size: var(--pf-c-content--h6--FontSize);\n    font-weight: var(--pf-c-content--h6--FontWeight);\n    line-height: var(--pf-c-content--h6--LineHeight); }\n  .pf-c-content small {\n    display: block;\n    font-size: var(--pf-c-content--small--FontSize);\n    line-height: var(--pf-c-content--small--LineHeight);\n    color: var(--pf-c-content--small--Color); }\n    .pf-c-content small:not(:last-child) {\n      margin-bottom: var(--pf-c-content--small--MarginBottom); }\n  .pf-c-content blockquote {\n    padding: var(--pf-c-content--blockquote--PaddingTop) var(--pf-c-content--blockquote--PaddingRight) var(--pf-c-content--blockquote--PaddingBottom) var(--pf-c-content--blockquote--PaddingLeft);\n    color: var(--pf-c-content--blockquote--Color);\n    border-left: var(--pf-c-content--blockquote--BorderLeftWidth) solid var(--pf-c-content--blockquote--BorderLeftColor); }\n  .pf-c-content hr {\n    height: var(--pf-c-content--hr--Height);\n    background-color: var(--pf-c-content--hr--BackgroundColor);\n    border: none; }\n  .pf-c-content ol {\n    padding-left: var(--pf-c-content--ol--PaddingLeft);\n    margin-left: var(--pf-c-content--ol--MarginLeft); }\n    .pf-c-content ol ul {\n      margin-top: var(--pf-c-content--ul--nested--MarginTop);\n      --pf-c-content--ul--MarginLeft: var(--pf-c-content--ul--nested--MarginLeft); }\n    .pf-c-content ol ol {\n      margin-top: var(--pf-c-content--ol--nested--MarginTop);\n      --pf-c-content--ol--MarginLeft: var(--pf-c-content--ol--nested--MarginLeft); }\n  .pf-c-content ul {\n    padding-left: var(--pf-c-content--ul--PaddingLeft);\n    margin-left: var(--pf-c-content--ul--MarginLeft);\n    list-style: var(--pf-c-content--ul--ListStyle); }\n    .pf-c-content ul ul {\n      margin-top: var(--pf-c-content--ul--nested--MarginTop);\n      --pf-c-content--ul--MarginLeft: var(--pf-c-content--ul--nested--MarginLeft); }\n    .pf-c-content ul ol {\n      margin-top: var(--pf-c-content--ol--nested--MarginTop);\n      --pf-c-content--ol--MarginLeft: var(--pf-c-content--ol--nested--MarginLeft); }\n  .pf-c-content dl {\n    display: grid;\n    grid-template-columns: 1fr; }\n    @media screen and (min-width: 576px) {\n      .pf-c-content dl {\n        grid-template: auto / auto 1fr;\n        grid-column-gap: var(--pf-c-content--dl--ColumnGap);\n        grid-row-gap: var(--pf-c-content--dl--RowGap); } }\n  .pf-c-content dt {\n    font-weight: var(--pf-c-content--dt--FontWeight); }\n    .pf-c-content dt:not(:first-child) {\n      margin-top: var(--pf-c-content--dt--MarginTop); }\n      @media screen and (min-width: 576px) {\n        .pf-c-content dt:not(:first-child) {\n          --pf-c-content--dt--MarginTop: var(--pf-c-content--dt--sm--MarginTop); } }\n    @media screen and (min-width: 576px) {\n      .pf-c-content dt {\n        grid-column: 1; } }\n  @media screen and (min-width: 576px) {\n    .pf-c-content dd {\n      grid-column: 2; } }\n\n.pf-m-overpass-font .pf-c-content {\n  --pf-c-content--h2--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-content--h4--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-content--h5--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-content--h6--FontWeight: var(--pf-global--FontWeight--semi-bold); }\n  .pf-m-overpass-font .pf-c-content blockquote {\n    font-weight: var(--pf-global--FontWeight--light); }\n\n.pf-c-context-selector {\n  --pf-c-context-selector--Width: 15.625rem;\n  --pf-c-context-selector__toggle--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-context-selector__toggle--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-context-selector__toggle--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-context-selector__toggle--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-context-selector__toggle--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-context-selector__toggle--BorderTopColor: var(--pf-global--BorderColor--300);\n  --pf-c-context-selector__toggle--BorderRightColor: var(--pf-global--BorderColor--300);\n  --pf-c-context-selector__toggle--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-context-selector__toggle--BorderLeftColor: var(--pf-global--BorderColor--300);\n  --pf-c-context-selector__toggle--Color: var(--pf-global--Color--100);\n  --pf-c-context-selector__toggle--hover--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-context-selector__toggle--active--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-context-selector__toggle--active--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-context-selector__toggle--expanded--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-context-selector__toggle--expanded--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-context-selector__toggle-text--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-context-selector__toggle-text--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-context-selector__toggle-text--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-context-selector__toggle-icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-context-selector__toggle-icon--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-context-selector__menu--Top: calc(100% + var(--pf-global--spacer--xs));\n  --pf-c-context-selector__menu--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-context-selector__menu--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-context-selector__menu--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-context-selector__menu--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-context-selector__menu-search--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-context-selector__menu-search--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-context-selector__menu-search--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-context-selector__menu-search--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-context-selector__menu-search--BorderBottomColor: var(--pf-global--BorderColor--100);\n  --pf-c-context-selector__menu-search--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-context-selector__menu-footer--BoxShadow: var(--pf-global--BoxShadow--sm-top);\n  --pf-c-context-selector__menu-footer--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-context-selector__menu-footer--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-context-selector__menu-footer--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-context-selector__menu-footer--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-context-selector__menu-list--MaxHeight: 12.5rem;\n  --pf-c-context-selector__menu-list-item--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-context-selector__menu-list-item--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-context-selector__menu-list-item--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-context-selector__menu-list-item--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-context-selector__menu-list-item--hover--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-context-selector__menu-list-item--disabled--Color: var(--pf-global--Color--dark-200);\n  position: relative;\n  display: inline-block;\n  width: var(--pf-c-context-selector--Width);\n  max-width: 100%; }\n\n.pf-c-context-selector__toggle {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  width: 100%;\n  padding: var(--pf-c-context-selector__toggle--PaddingTop) var(--pf-c-context-selector__toggle--PaddingRight) var(--pf-c-context-selector__toggle--PaddingBottom) var(--pf-c-context-selector__toggle--PaddingLeft);\n  color: var(--pf-c-context-selector__toggle--Color);\n  white-space: nowrap;\n  cursor: pointer;\n  border: none; }\n  .pf-c-context-selector__toggle::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    border: var(--pf-c-context-selector__toggle--BorderWidth) solid;\n    border-color: var(--pf-c-context-selector__toggle--BorderTopColor) var(--pf-c-context-selector__toggle--BorderRightColor) var(--pf-c-context-selector__toggle--BorderBottomColor) var(--pf-c-context-selector__toggle--BorderLeftColor); }\n  .pf-c-context-selector__toggle:hover::before {\n    --pf-c-context-selector__toggle--BorderBottomColor: var(--pf-c-context-selector__toggle--hover--BorderBottomColor); }\n  .pf-c-context-selector__toggle:active::before, .pf-c-context-selector__toggle.pf-m-active::before, .pf-c-context-selector__toggle:focus-within::before {\n    --pf-c-context-selector__toggle--BorderBottomColor: var(--pf-c-context-selector__toggle--active--BorderBottomColor);\n    border-bottom-width: var(--pf-c-context-selector__toggle--active--BorderBottomWidth); }\n  .pf-m-expanded > .pf-c-context-selector__toggle::before {\n    --pf-c-context-selector__toggle--BorderBottomColor: var(--pf-c-context-selector__toggle--expanded--BorderBottomColor);\n    border-bottom-width: var(--pf-c-context-selector__toggle--expanded--BorderBottomWidth); }\n  .pf-c-context-selector__toggle .pf-c-context-selector__toggle-icon {\n    margin-right: var(--pf-c-context-selector__toggle-icon--MarginRight);\n    margin-left: var(--pf-c-context-selector__toggle-icon--MarginLeft); }\n  .pf-c-context-selector__toggle .pf-c-context-selector__toggle-text {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    font-size: var(--pf-c-context-selector__toggle-text--FontSize);\n    font-weight: var(--pf-c-context-selector__toggle-text--FontWeight);\n    line-height: var(--pf-c-context-selector__toggle-text--LineHeight); }\n\n.pf-c-context-selector__menu {\n  color: var(--pf-global--Color--100);\n  position: absolute;\n  top: var(--pf-c-context-selector__menu--Top);\n  z-index: var(--pf-c-context-selector__menu--ZIndex);\n  min-width: 100%;\n  padding-top: var(--pf-c-context-selector__menu--PaddingTop);\n  background-color: var(--pf-c-context-selector__menu--BackgroundColor);\n  background-clip: padding-box;\n  box-shadow: var(--pf-c-context-selector__menu--BoxShadow); }\n\n.pf-c-context-selector__menu-search {\n  position: relative;\n  padding: var(--pf-c-context-selector__menu-search--PaddingTop) var(--pf-c-context-selector__menu-search--PaddingRight) var(--pf-c-context-selector__menu-search--PaddingBottom) var(--pf-c-context-selector__menu-search--PaddingLeft);\n  border-bottom: var(--pf-c-context-selector__menu-search--BorderBottomWidth) solid var(--pf-c-context-selector__menu-search--BorderBottomColor); }\n\n.pf-c-context-selector__menu-footer {\n  padding: var(--pf-c-context-selector__menu-footer--PaddingTop) var(--pf-c-context-selector__menu-footer--PaddingRight) var(--pf-c-context-selector__menu-footer--PaddingBottom) var(--pf-c-context-selector__menu-footer--PaddingLeft);\n  text-align: right;\n  box-shadow: var(--pf-c-context-selector__menu-footer--BoxShadow); }\n\n.pf-c-context-selector__menu-list {\n  max-height: var(--pf-c-context-selector__menu-list--MaxHeight);\n  overflow-y: scroll; }\n\n.pf-c-context-selector__menu-list-item {\n  display: flex;\n  align-items: center;\n  width: 100%;\n  padding: var(--pf-c-context-selector__menu-list-item--PaddingTop) var(--pf-c-context-selector__menu-list-item--PaddingRight) var(--pf-c-context-selector__menu-list-item--PaddingBottom) var(--pf-c-context-selector__menu-list-item--PaddingLeft);\n  white-space: nowrap;\n  border: none; }\n  .pf-c-context-selector__menu-list-item:hover, .pf-c-context-selector__menu-list-item:focus {\n    text-decoration: none;\n    background-color: var(--pf-c-context-selector__menu-list-item--hover--BackgroundColor); }\n  .pf-c-context-selector__menu-list-item:disabled {\n    color: var(--pf-c-context-selector__menu-list-item--disabled--Color);\n    pointer-events: none; }\n\n@media screen and (min-width: 768px) {\n  .pf-c-data-list:not([class*="pf-m-grid"]) {\n    --pf-c-data-list__cell--cell--PaddingTop: var(--pf-c-data-list__cell--cell--md--PaddingTop);\n    --pf-c-data-list__cell--PaddingBottom: var(--pf-c-data-list__cell--md--PaddingBottom);\n    --pf-c-data-list__item-control--MarginRight: var(--pf-c-data-list__item-control--md--MarginRight);\n    --pf-c-data-list__item-action--MarginLeft: var(--pf-c-data-list__item-action--md--MarginLeft);\n    --pf-c-data-list__expandable-content-body--PaddingTop: var(--pf-c-data-list__expandable-content-body--md--PaddingTop);\n    --pf-c-data-list__expandable-content-body--PaddingBottom: var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell--PaddingBottom: var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell-cell--PaddingTop: var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop); } }\n  @media screen and (min-width: 768px) and (min-width: 1200px) {\n    .pf-c-data-list:not([class*="pf-m-grid"]) {\n      --pf-c-data-list__item-row--PaddingRight: var(--pf-c-data-list__item-row--xl--PaddingRight);\n      --pf-c-data-list__item-row--PaddingLeft: var(--pf-c-data-list__item-row--xl--PaddingLeft);\n      --pf-c-data-list__expandable-content-body--PaddingRight: var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);\n      --pf-c-data-list__expandable-content-body--PaddingLeft: var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft); } }\n\n@media screen and (min-width: 768px) {\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__item-content {\n      display: flex;\n      flex-wrap: wrap;\n      flex-grow: 1;\n      padding-bottom: var(--pf-c-data-list__item-content--md--PaddingBottom); }\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon) {\n      margin-right: var(--pf-c-data-list__cell--MarginRight); }\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__cell + .pf-c-data-list__cell {\n      flex: 1;\n      order: initial; }\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__cell.pf-m-align-right {\n      margin-left: auto; }\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__cell.pf-m-no-fill {\n      flex-grow: 0; }\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__cell.pf-m-flex-2 {\n      flex-grow: 2; }\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__cell.pf-m-flex-3 {\n      flex-grow: 3; }\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__cell.pf-m-flex-4 {\n      flex-grow: 4; }\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__cell.pf-m-flex-5 {\n      flex-grow: 5; }\n    .pf-c-data-list:not([class*="pf-m-grid"]) .pf-c-data-list__expandable-content {\n      max-height: initial;\n      overflow-y: visible; } }\n\n@media screen and (min-width: 0) {\n  .pf-c-data-list.pf-m-grid-none {\n    --pf-c-data-list__cell--cell--PaddingTop: var(--pf-c-data-list__cell--cell--md--PaddingTop);\n    --pf-c-data-list__cell--PaddingBottom: var(--pf-c-data-list__cell--md--PaddingBottom);\n    --pf-c-data-list__item-control--MarginRight: var(--pf-c-data-list__item-control--md--MarginRight);\n    --pf-c-data-list__item-action--MarginLeft: var(--pf-c-data-list__item-action--md--MarginLeft);\n    --pf-c-data-list__expandable-content-body--PaddingTop: var(--pf-c-data-list__expandable-content-body--md--PaddingTop);\n    --pf-c-data-list__expandable-content-body--PaddingBottom: var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell--PaddingBottom: var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell-cell--PaddingTop: var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop); } }\n  @media screen and (min-width: 0) and (min-width: 1200px) {\n    .pf-c-data-list.pf-m-grid-none {\n      --pf-c-data-list__item-row--PaddingRight: var(--pf-c-data-list__item-row--xl--PaddingRight);\n      --pf-c-data-list__item-row--PaddingLeft: var(--pf-c-data-list__item-row--xl--PaddingLeft);\n      --pf-c-data-list__expandable-content-body--PaddingRight: var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);\n      --pf-c-data-list__expandable-content-body--PaddingLeft: var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft); } }\n\n@media screen and (min-width: 0) {\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__item-content {\n      display: flex;\n      flex-wrap: wrap;\n      flex-grow: 1;\n      padding-bottom: var(--pf-c-data-list__item-content--md--PaddingBottom); }\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon) {\n      margin-right: var(--pf-c-data-list__cell--MarginRight); }\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell + .pf-c-data-list__cell {\n      flex: 1;\n      order: initial; }\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell.pf-m-align-right {\n      margin-left: auto; }\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell.pf-m-no-fill {\n      flex-grow: 0; }\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell.pf-m-flex-2 {\n      flex-grow: 2; }\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell.pf-m-flex-3 {\n      flex-grow: 3; }\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell.pf-m-flex-4 {\n      flex-grow: 4; }\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__cell.pf-m-flex-5 {\n      flex-grow: 5; }\n    .pf-c-data-list.pf-m-grid-none .pf-c-data-list__expandable-content {\n      max-height: initial;\n      overflow-y: visible; } }\n\n@media screen and (min-width: 576px) {\n  .pf-c-data-list.pf-m-grid-sm {\n    --pf-c-data-list__cell--cell--PaddingTop: var(--pf-c-data-list__cell--cell--md--PaddingTop);\n    --pf-c-data-list__cell--PaddingBottom: var(--pf-c-data-list__cell--md--PaddingBottom);\n    --pf-c-data-list__item-control--MarginRight: var(--pf-c-data-list__item-control--md--MarginRight);\n    --pf-c-data-list__item-action--MarginLeft: var(--pf-c-data-list__item-action--md--MarginLeft);\n    --pf-c-data-list__expandable-content-body--PaddingTop: var(--pf-c-data-list__expandable-content-body--md--PaddingTop);\n    --pf-c-data-list__expandable-content-body--PaddingBottom: var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell--PaddingBottom: var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell-cell--PaddingTop: var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop); } }\n  @media screen and (min-width: 576px) and (min-width: 1200px) {\n    .pf-c-data-list.pf-m-grid-sm {\n      --pf-c-data-list__item-row--PaddingRight: var(--pf-c-data-list__item-row--xl--PaddingRight);\n      --pf-c-data-list__item-row--PaddingLeft: var(--pf-c-data-list__item-row--xl--PaddingLeft);\n      --pf-c-data-list__expandable-content-body--PaddingRight: var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);\n      --pf-c-data-list__expandable-content-body--PaddingLeft: var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft); } }\n\n@media screen and (min-width: 576px) {\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__item-content {\n      display: flex;\n      flex-wrap: wrap;\n      flex-grow: 1;\n      padding-bottom: var(--pf-c-data-list__item-content--md--PaddingBottom); }\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon) {\n      margin-right: var(--pf-c-data-list__cell--MarginRight); }\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell + .pf-c-data-list__cell {\n      flex: 1;\n      order: initial; }\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell.pf-m-align-right {\n      margin-left: auto; }\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell.pf-m-no-fill {\n      flex-grow: 0; }\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell.pf-m-flex-2 {\n      flex-grow: 2; }\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell.pf-m-flex-3 {\n      flex-grow: 3; }\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell.pf-m-flex-4 {\n      flex-grow: 4; }\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__cell.pf-m-flex-5 {\n      flex-grow: 5; }\n    .pf-c-data-list.pf-m-grid-sm .pf-c-data-list__expandable-content {\n      max-height: initial;\n      overflow-y: visible; } }\n\n@media screen and (min-width: 768px) {\n  .pf-c-data-list.pf-m-grid-md {\n    --pf-c-data-list__cell--cell--PaddingTop: var(--pf-c-data-list__cell--cell--md--PaddingTop);\n    --pf-c-data-list__cell--PaddingBottom: var(--pf-c-data-list__cell--md--PaddingBottom);\n    --pf-c-data-list__item-control--MarginRight: var(--pf-c-data-list__item-control--md--MarginRight);\n    --pf-c-data-list__item-action--MarginLeft: var(--pf-c-data-list__item-action--md--MarginLeft);\n    --pf-c-data-list__expandable-content-body--PaddingTop: var(--pf-c-data-list__expandable-content-body--md--PaddingTop);\n    --pf-c-data-list__expandable-content-body--PaddingBottom: var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell--PaddingBottom: var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell-cell--PaddingTop: var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop); } }\n  @media screen and (min-width: 768px) and (min-width: 1200px) {\n    .pf-c-data-list.pf-m-grid-md {\n      --pf-c-data-list__item-row--PaddingRight: var(--pf-c-data-list__item-row--xl--PaddingRight);\n      --pf-c-data-list__item-row--PaddingLeft: var(--pf-c-data-list__item-row--xl--PaddingLeft);\n      --pf-c-data-list__expandable-content-body--PaddingRight: var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);\n      --pf-c-data-list__expandable-content-body--PaddingLeft: var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft); } }\n\n@media screen and (min-width: 768px) {\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__item-content {\n      display: flex;\n      flex-wrap: wrap;\n      flex-grow: 1;\n      padding-bottom: var(--pf-c-data-list__item-content--md--PaddingBottom); }\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon) {\n      margin-right: var(--pf-c-data-list__cell--MarginRight); }\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell + .pf-c-data-list__cell {\n      flex: 1;\n      order: initial; }\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell.pf-m-align-right {\n      margin-left: auto; }\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell.pf-m-no-fill {\n      flex-grow: 0; }\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell.pf-m-flex-2 {\n      flex-grow: 2; }\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell.pf-m-flex-3 {\n      flex-grow: 3; }\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell.pf-m-flex-4 {\n      flex-grow: 4; }\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__cell.pf-m-flex-5 {\n      flex-grow: 5; }\n    .pf-c-data-list.pf-m-grid-md .pf-c-data-list__expandable-content {\n      max-height: initial;\n      overflow-y: visible; } }\n\n@media screen and (min-width: 992px) {\n  .pf-c-data-list.pf-m-grid-lg {\n    --pf-c-data-list__cell--cell--PaddingTop: var(--pf-c-data-list__cell--cell--md--PaddingTop);\n    --pf-c-data-list__cell--PaddingBottom: var(--pf-c-data-list__cell--md--PaddingBottom);\n    --pf-c-data-list__item-control--MarginRight: var(--pf-c-data-list__item-control--md--MarginRight);\n    --pf-c-data-list__item-action--MarginLeft: var(--pf-c-data-list__item-action--md--MarginLeft);\n    --pf-c-data-list__expandable-content-body--PaddingTop: var(--pf-c-data-list__expandable-content-body--md--PaddingTop);\n    --pf-c-data-list__expandable-content-body--PaddingBottom: var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell--PaddingBottom: var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell-cell--PaddingTop: var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop); } }\n  @media screen and (min-width: 992px) and (min-width: 1200px) {\n    .pf-c-data-list.pf-m-grid-lg {\n      --pf-c-data-list__item-row--PaddingRight: var(--pf-c-data-list__item-row--xl--PaddingRight);\n      --pf-c-data-list__item-row--PaddingLeft: var(--pf-c-data-list__item-row--xl--PaddingLeft);\n      --pf-c-data-list__expandable-content-body--PaddingRight: var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);\n      --pf-c-data-list__expandable-content-body--PaddingLeft: var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft); } }\n\n@media screen and (min-width: 992px) {\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__item-content {\n      display: flex;\n      flex-wrap: wrap;\n      flex-grow: 1;\n      padding-bottom: var(--pf-c-data-list__item-content--md--PaddingBottom); }\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon) {\n      margin-right: var(--pf-c-data-list__cell--MarginRight); }\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell + .pf-c-data-list__cell {\n      flex: 1;\n      order: initial; }\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell.pf-m-align-right {\n      margin-left: auto; }\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell.pf-m-no-fill {\n      flex-grow: 0; }\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell.pf-m-flex-2 {\n      flex-grow: 2; }\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell.pf-m-flex-3 {\n      flex-grow: 3; }\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell.pf-m-flex-4 {\n      flex-grow: 4; }\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__cell.pf-m-flex-5 {\n      flex-grow: 5; }\n    .pf-c-data-list.pf-m-grid-lg .pf-c-data-list__expandable-content {\n      max-height: initial;\n      overflow-y: visible; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-c-data-list.pf-m-grid-xl {\n    --pf-c-data-list__cell--cell--PaddingTop: var(--pf-c-data-list__cell--cell--md--PaddingTop);\n    --pf-c-data-list__cell--PaddingBottom: var(--pf-c-data-list__cell--md--PaddingBottom);\n    --pf-c-data-list__item-control--MarginRight: var(--pf-c-data-list__item-control--md--MarginRight);\n    --pf-c-data-list__item-action--MarginLeft: var(--pf-c-data-list__item-action--md--MarginLeft);\n    --pf-c-data-list__expandable-content-body--PaddingTop: var(--pf-c-data-list__expandable-content-body--md--PaddingTop);\n    --pf-c-data-list__expandable-content-body--PaddingBottom: var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell--PaddingBottom: var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell-cell--PaddingTop: var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop); } }\n  @media screen and (min-width: 1200px) and (min-width: 1200px) {\n    .pf-c-data-list.pf-m-grid-xl {\n      --pf-c-data-list__item-row--PaddingRight: var(--pf-c-data-list__item-row--xl--PaddingRight);\n      --pf-c-data-list__item-row--PaddingLeft: var(--pf-c-data-list__item-row--xl--PaddingLeft);\n      --pf-c-data-list__expandable-content-body--PaddingRight: var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);\n      --pf-c-data-list__expandable-content-body--PaddingLeft: var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft); } }\n\n@media screen and (min-width: 1200px) {\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__item-content {\n      display: flex;\n      flex-wrap: wrap;\n      flex-grow: 1;\n      padding-bottom: var(--pf-c-data-list__item-content--md--PaddingBottom); }\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon) {\n      margin-right: var(--pf-c-data-list__cell--MarginRight); }\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell + .pf-c-data-list__cell {\n      flex: 1;\n      order: initial; }\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell.pf-m-align-right {\n      margin-left: auto; }\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell.pf-m-no-fill {\n      flex-grow: 0; }\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell.pf-m-flex-2 {\n      flex-grow: 2; }\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell.pf-m-flex-3 {\n      flex-grow: 3; }\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell.pf-m-flex-4 {\n      flex-grow: 4; }\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__cell.pf-m-flex-5 {\n      flex-grow: 5; }\n    .pf-c-data-list.pf-m-grid-xl .pf-c-data-list__expandable-content {\n      max-height: initial;\n      overflow-y: visible; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-c-data-list.pf-m-grid-2xl {\n    --pf-c-data-list__cell--cell--PaddingTop: var(--pf-c-data-list__cell--cell--md--PaddingTop);\n    --pf-c-data-list__cell--PaddingBottom: var(--pf-c-data-list__cell--md--PaddingBottom);\n    --pf-c-data-list__item-control--MarginRight: var(--pf-c-data-list__item-control--md--MarginRight);\n    --pf-c-data-list__item-action--MarginLeft: var(--pf-c-data-list__item-action--md--MarginLeft);\n    --pf-c-data-list__expandable-content-body--PaddingTop: var(--pf-c-data-list__expandable-content-body--md--PaddingTop);\n    --pf-c-data-list__expandable-content-body--PaddingBottom: var(--pf-c-data-list__expandable-content-body--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell--PaddingBottom: var(--pf-c-data-list--m-compact__cell--md--PaddingBottom);\n    --pf-c-data-list--m-compact__cell-cell--PaddingTop: var(--pf-c-data-list--m-compact__cell-cell--md--PaddingTop); } }\n  @media screen and (min-width: 1450px) and (min-width: 1200px) {\n    .pf-c-data-list.pf-m-grid-2xl {\n      --pf-c-data-list__item-row--PaddingRight: var(--pf-c-data-list__item-row--xl--PaddingRight);\n      --pf-c-data-list__item-row--PaddingLeft: var(--pf-c-data-list__item-row--xl--PaddingLeft);\n      --pf-c-data-list__expandable-content-body--PaddingRight: var(--pf-c-data-list__expandable-content-body--xl--PaddingRight);\n      --pf-c-data-list__expandable-content-body--PaddingLeft: var(--pf-c-data-list__expandable-content-body--xl--PaddingLeft); } }\n\n@media screen and (min-width: 1450px) {\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__item-content {\n      display: flex;\n      flex-wrap: wrap;\n      flex-grow: 1;\n      padding-bottom: var(--pf-c-data-list__item-content--md--PaddingBottom); }\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell:not(:last-child):not(.pf-m-icon) {\n      margin-right: var(--pf-c-data-list__cell--MarginRight); }\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell + .pf-c-data-list__cell {\n      flex: 1;\n      order: initial; }\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell.pf-m-align-right {\n      margin-left: auto; }\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell.pf-m-no-fill {\n      flex-grow: 0; }\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell.pf-m-flex-2 {\n      flex-grow: 2; }\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell.pf-m-flex-3 {\n      flex-grow: 3; }\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell.pf-m-flex-4 {\n      flex-grow: 4; }\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__cell.pf-m-flex-5 {\n      flex-grow: 5; }\n    .pf-c-data-list.pf-m-grid-2xl .pf-c-data-list__expandable-content {\n      max-height: initial;\n      overflow-y: visible; } }\n\n.pf-c-data-list {\n  --pf-c-data-list--BorderTopColor: var(--pf-global--BorderColor--300);\n  --pf-c-data-list--BorderTopWidth: var(--pf-global--spacer--sm);\n  --pf-c-data-list--sm--BorderTopWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-data-list--sm--BorderTopColor: var(--pf-global--BorderColor--100);\n  --pf-c-data-list__item--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-data-list__item--m-selected--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-data-list__item--m-expanded--before--BackgroundColor: var(--pf-global--active-color--100);\n  --pf-c-data-list__item--m-selected--before--BackgroundColor: var(--pf-global--active-color--100);\n  --pf-c-data-list__item--m-selected--BoxShadow: var(--pf-global--BoxShadow--sm-top), var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-data-list__item--m-selectable--OutlineOffset: calc(-1 * var(--pf-global--spacer--xs));\n  --pf-c-data-list__item--m-selectable--hover--ZIndex: calc(var(--pf-c-data-list__item--m-selected--ZIndex) + 1);\n  --pf-c-data-list__item--m-selectable--hover--BoxShadow: var(--pf-global--BoxShadow--sm-top), var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-data-list__item--m-selectable--focus--BoxShadow: var(--pf-global--BoxShadow--sm-top), var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-data-list__item--m-selectable--active--BoxShadow: var(--pf-global--BoxShadow--sm-top), var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-data-list__item--m-expanded--m-selectable--before--BackgroundColor: var(--pf-global--active-color--300);\n  --pf-c-data-list__item--BorderBottomColor: var(--pf-global--BorderColor--300);\n  --pf-c-data-list__item--BorderBottomWidth: 0.5rem;\n  --pf-c-data-list__item--m-selectable--hover--item--BorderTopColor: var(--pf-c-data-list__item--BorderBottomColor);\n  --pf-c-data-list__item--m-selectable--hover--item--BorderTopWidth: var(--pf-c-data-list__item--BorderBottomWidth);\n  --pf-c-data-list__item--sm--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-data-list__item--sm--BorderBottomColor: var(--pf-global--BorderColor--100);\n  --pf-c-data-list__item--before--BackgroundColor: transparent;\n  --pf-c-data-list__item--before--Width: var(--pf-global--BorderWidth--lg);\n  --pf-c-data-list__item--before--Transition: var(--pf-global--Transition);\n  --pf-c-data-list__item--before--Top: 0;\n  --pf-c-data-list__item--before--sm--Top: calc(var(--pf-c-data-list__item--BorderBottomWidth) * -1);\n  --pf-c-data-list__item-row--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-data-list__item-row--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-data-list__item-row--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-data-list__item-row--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-data-list__item-content--md--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-data-list__cell--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-data-list__cell--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-data-list__cell--MarginRight: var(--pf-global--spacer--xl);\n  --pf-c-data-list__cell--md--PaddingBottom: 0;\n  --pf-c-data-list__cell--m-icon--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-data-list__cell--cell--PaddingTop: 0;\n  --pf-c-data-list__cell--cell--md--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-data-list__cell--m-icon--cell--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-data-list--cell--MinWidth: initial;\n  --pf-c-data-list--cell--Overflow: visible;\n  --pf-c-data-list--cell--TextOverflow: clip;\n  --pf-c-data-list--cell--WhiteSpace: normal;\n  --pf-c-data-list--cell--WordBreak: normal;\n  --pf-c-data-list--cell--m-truncate--MinWidth: 5ch;\n  --pf-c-data-list__toggle--MarginLeft: calc(var(--pf-global--spacer--sm) * -1);\n  --pf-c-data-list__toggle--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-data-list__toggle-icon--Transition: .2s ease-in 0s;\n  --pf-c-data-list__item--m-expanded__toggle-icon--Rotate: 90deg;\n  --pf-c-data-list__item-draggable-button--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-data-list__item-draggable-button--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-data-list__item-draggable-button--MarginTop: calc(var(--pf-global--spacer--sm) * -1);\n  --pf-c-data-list__item-draggable-button--MarginLeft: calc(var(--pf-global--spacer--md) * -1);\n  --pf-c-data-list__item-draggable-button-icon--Color: var(--pf-global--icon--Color--light);\n  --pf-c-data-list__item-draggable-button--m-disabled__draggable-icon--Color: var(--pf-global--disabled-color--200);\n  --pf-c-data-list__item-draggable-button--hover__draggable-icon--Color: var(--pf-global--icon--Color--dark);\n  --pf-c-data-list__item-draggable-button--focus__draggable-icon--Color: var(--pf-global--icon--Color--dark);\n  --pf-c-data-list__item--m-ghost-row--after--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-data-list__item--m-ghost-row--after--Opacity: .6;\n  --pf-c-data-list__item-control--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-data-list__item-control--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-data-list__item-control--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-data-list__item-control--md--MarginRight: var(--pf-global--spacer--xl);\n  --pf-c-data-list__item-control--not-last-child--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-data-list__item-action--Display: flex;\n  --pf-c-data-list__item-action--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-data-list__item-action--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-data-list__item-action--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-data-list__item-action--md--MarginLeft: var(--pf-global--spacer--xl);\n  --pf-c-data-list__item-action--not-last-child--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-data-list__action--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-data-list__expandable-content--BorderTopWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-data-list__expandable-content--BorderTopColor: var(--pf-global--BorderColor--100);\n  --pf-c-data-list__expandable-content--MarginRight: calc(var(--pf-c-data-list__expandable-content-body--PaddingRight) * -1);\n  --pf-c-data-list__expandable-content--MarginLeft: calc(var(--pf-c-data-list__expandable-content-body--PaddingLeft) * -1);\n  --pf-c-data-list__expandable-content--MaxHeight: 37.5rem;\n  --pf-c-data-list__expandable-content--before--Top: calc(var(--pf-c-data-list__item--BorderBottomWidth) * -1);\n  --pf-c-data-list__expandable-content-body--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-data-list__expandable-content-body--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-data-list__expandable-content-body--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-data-list__expandable-content-body--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-data-list__expandable-content-body--md--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-data-list__expandable-content-body--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-data-list__expandable-content-body--md--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-data-list__expandable-content-body--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-data-list--m-compact--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-data-list--m-compact__check--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-data-list--m-compact__cell--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-data-list--m-compact__cell--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-data-list--m-compact__cell--md--PaddingBottom: 0;\n  --pf-c-data-list--m-compact__cell-cell--PaddingTop: 0;\n  --pf-c-data-list--m-compact__cell-cell--md--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-data-list--m-compact__cell--cell--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-data-list--m-compact__item-control--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-data-list--m-compact__item-control--PaddingBottom: 0;\n  --pf-c-data-list--m-compact__item-control--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-data-list--m-compact__item-action--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-data-list--m-compact__item-action--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-data-list--m-compact__item-action--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-data-list--m-compact__item-content--PaddingBottom: var(--pf-global--spacer--sm);\n  color: var(--pf-global--Color--100);\n  overflow-wrap: break-word;\n  list-style-type: disc;\n  border-top: var(--pf-c-data-list--BorderTopWidth) solid var(--pf-c-data-list--BorderTopColor); }\n  @media screen and (min-width: 576px) {\n    .pf-c-data-list {\n      --pf-c-data-list--BorderTopColor: var(--pf-c-data-list--sm--BorderTopColor);\n      --pf-c-data-list--BorderTopWidth: var(--pf-c-data-list--sm--BorderTopWidth); } }\n  @media screen and (min-width: 576px) {\n    .pf-c-data-list {\n      --pf-c-data-list__item--BorderBottomWidth: var(--pf-c-data-list__item--sm--BorderBottomWidth);\n      --pf-c-data-list__item--BorderBottomColor: var(--pf-c-data-list__item--sm--BorderBottomColor); } }\n  @media (min-width: 576px) {\n    .pf-c-data-list {\n      --pf-c-data-list__item--before--Top: var(--pf-c-data-list__item--before--sm--Top); } }\n  .pf-c-data-list.pf-m-compact {\n    font-size: var(--pf-c-data-list--m-compact--FontSize);\n    --pf-c-data-list__item-action--MarginLeft: var(--pf-c-data-list--m-compact__item-action--MarginLeft);\n    --pf-c-data-list__item-action--PaddingTop: var(--pf-c-data-list--m-compact__item-action--PaddingTop);\n    --pf-c-data-list__item-action--PaddingBottom: var(--pf-c-data-list--m-compact__item-action--PaddingBottom);\n    --pf-c-data-list__item-control--MarginRight: var(--pf-c-data-list--m-compact__item-control--MarginRight);\n    --pf-c-data-list__item-control--PaddingTop: var(--pf-c-data-list--m-compact__item-control--PaddingTop);\n    --pf-c-data-list__item-control--PaddingBottom: var(--pf-c-data-list--m-compact__item-control--PaddingBottom);\n    --pf-c-data-list__item-content--md--PaddingBottom: var(--pf-c-data-list--m-compact__item-content--PaddingBottom); }\n    .pf-c-data-list.pf-m-compact .pf-c-data-list__cell {\n      --pf-c-data-list__cell--PaddingTop: var(--pf-c-data-list--m-compact__cell--PaddingTop);\n      --pf-c-data-list__cell--PaddingBottom: var(--pf-c-data-list--m-compact__cell--PaddingBottom);\n      --pf-c-data-list__cell--MarginRight: var(--pf-c-data-list--m-compact__cell--cell--MarginRight);\n      --pf-c-data-list__cell--cell--PaddingTop: var(--pf-c-data-list--m-compact__cell-cell--PaddingTop); }\n    .pf-c-data-list.pf-m-compact .pf-c-data-list__check {\n      font-size: var(--pf-c-data-list--m-compact__check--FontSize); }\n  .pf-c-data-list.pf-m-drag-over {\n    overflow-anchor: none; }\n\n.pf-c-data-list.pf-m-truncate,\n.pf-c-data-list__item-row.pf-m-truncate,\n.pf-c-data-list__cell.pf-m-truncate,\n.pf-c-data-list__text.pf-m-truncate {\n  --pf-c-data-list--cell--MinWidth: var(--pf-c-data-list--cell--m-truncate--MinWidth);\n  --pf-c-data-list--cell--Overflow: hidden;\n  --pf-c-data-list--cell--TextOverflow: ellipsis;\n  --pf-c-data-list--cell--WhiteSpace: nowrap; }\n\n.pf-c-data-list.pf-m-break-word,\n.pf-c-data-list__item-row.pf-m-break-word,\n.pf-c-data-list__cell.pf-m-break-word,\n.pf-c-data-list__text.pf-m-break-word {\n  --pf-c-data-list--cell--WordBreak: break-word; }\n\n.pf-c-data-list.pf-m-nowrap,\n.pf-c-data-list__item-row.pf-m-nowrap,\n.pf-c-data-list__cell.pf-m-nowrap,\n.pf-c-data-list__text.pf-m-nowrap {\n  --pf-c-data-list--cell--WhiteSpace: nowrap; }\n\n.pf-c-data-list__item {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  background-color: var(--pf-c-data-list__item--BackgroundColor);\n  border-bottom: var(--pf-c-data-list__item--BorderBottomWidth) solid var(--pf-c-data-list__item--BorderBottomColor); }\n  .pf-c-data-list__item::before {\n    position: absolute;\n    top: var(--pf-c-data-list__item--before--Top);\n    bottom: 0;\n    left: 0;\n    width: var(--pf-c-data-list__item--before--Width);\n    content: "";\n    background-color: var(--pf-c-data-list__item--before--BackgroundColor);\n    transition: var(--pf-c-data-list__item--before--Transition); }\n  .pf-c-data-list__item.pf-m-selectable {\n    cursor: pointer;\n    outline-offset: var(--pf-c-data-list__item--m-selectable--OutlineOffset); }\n    .pf-c-data-list__item.pf-m-selectable:hover, .pf-c-data-list__item.pf-m-selectable:focus {\n      position: relative;\n      z-index: var(--pf-c-data-list__item--m-selectable--hover--ZIndex); }\n      .pf-c-data-list__item.pf-m-selectable:hover:not(.pf-m-selected):not(:last-child), .pf-c-data-list__item.pf-m-selectable:focus:not(.pf-m-selected):not(:last-child) {\n        --pf-c-data-list__item--BorderBottomWidth: 0; }\n        .pf-c-data-list__item.pf-m-selectable:hover:not(.pf-m-selected):not(:last-child) + .pf-c-data-list__item, .pf-c-data-list__item.pf-m-selectable:focus:not(.pf-m-selected):not(:last-child) + .pf-c-data-list__item {\n          border-top: var(--pf-c-data-list__item--m-selectable--hover--item--BorderTopWidth) solid var(--pf-c-data-list__item--m-selectable--hover--item--BorderTopColor); }\n    .pf-c-data-list__item.pf-m-selectable:hover {\n      box-shadow: var(--pf-c-data-list__item--m-selectable--hover--BoxShadow); }\n    .pf-c-data-list__item.pf-m-selectable:focus {\n      box-shadow: var(--pf-c-data-list__item--m-selectable--focus--BoxShadow); }\n    .pf-c-data-list__item.pf-m-selectable:active {\n      box-shadow: var(--pf-c-data-list__item--m-selectable--active--BoxShadow); }\n  .pf-c-data-list__item.pf-m-selected {\n    --pf-c-data-list__item--before--BackgroundColor: var(--pf-c-data-list__item--m-selected--before--BackgroundColor);\n    position: relative;\n    z-index: var(--pf-c-data-list__item--m-selected--ZIndex);\n    box-shadow: var(--pf-c-data-list__item--m-selected--BoxShadow); }\n  .pf-c-data-list__item.pf-m-ghost-row::after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    background-color: var(--pf-c-data-list__item--m-ghost-row--after--BackgroundColor);\n    opacity: var(--pf-c-data-list__item--m-ghost-row--after--Opacity); }\n  .pf-c-data-list__item.pf-m-expanded {\n    --pf-c-data-list__item--before--BackgroundColor: var(--pf-c-data-list__item--m-expanded--before--BackgroundColor); }\n    .pf-c-data-list__item.pf-m-expanded.pf-m-selectable:not(.pf-m-selected) {\n      --pf-c-data-list__item--before--BackgroundColor: var(--pf-c-data-list__item--m-expanded--m-selectable--before--BackgroundColor); }\n\n.pf-c-data-list__item-row {\n  display: flex;\n  flex-wrap: nowrap;\n  padding-right: var(--pf-c-data-list__item-row--PaddingRight);\n  padding-left: var(--pf-c-data-list__item-row--PaddingLeft); }\n\n.pf-c-data-list__item-control {\n  display: flex;\n  flex-wrap: nowrap;\n  padding-top: var(--pf-c-data-list__item-control--PaddingTop);\n  padding-bottom: var(--pf-c-data-list__item-control--PaddingBottom);\n  margin-right: var(--pf-c-data-list__item-control--MarginRight); }\n  .pf-c-data-list__item-control > *:not(:last-child) {\n    margin-right: var(--pf-c-data-list__item-control--not-last-child--MarginRight); }\n\n.pf-c-data-list__item-draggable-button {\n  padding-right: var(--pf-c-data-list__item-draggable-button--PaddingRight);\n  padding-left: var(--pf-c-data-list__item-draggable-button--PaddingLeft);\n  margin-top: var(--pf-c-data-list__item-draggable-button--MarginTop);\n  margin-left: var(--pf-c-data-list__item-draggable-button--MarginLeft);\n  border: 0; }\n  .pf-c-data-list__item-draggable-button:hover {\n    --pf-c-data-list__item-draggable-button-icon--Color: var(--pf-c-data-list__item-draggable-button--hover__draggable-icon--Color);\n    cursor: grab; }\n  .pf-c-data-list__item-draggable-button:focus {\n    --pf-c-data-list__item-draggable-button-icon--Color: var(--pf-c-data-list__item-draggable-button--focus__draggable-icon--Color); }\n  .pf-c-data-list__item-draggable-button:active {\n    cursor: grabbing; }\n  .pf-c-data-list__item-draggable-button.pf-m-disabled {\n    --pf-c-data-list__item-draggable-button-icon--Color: var(--pf-c-data-list__item-draggable-button--m-disabled__draggable-icon--Color);\n    pointer-events: none;\n    cursor: none; }\n  .pf-c-data-list__item-draggable-button .pf-c-data-list__item-draggable-icon {\n    color: var(--pf-c-data-list__item-draggable-button-icon--Color); }\n\n.pf-c-data-list__item-action {\n  --pf-hidden-visible--visible--Display: var(--pf-c-data-list__item-action--Display);\n  align-items: flex-start;\n  align-content: flex-start;\n  padding-top: var(--pf-c-data-list__item-action--PaddingTop);\n  padding-bottom: var(--pf-c-data-list__item-action--PaddingBottom);\n  margin-left: var(--pf-c-data-list__item-action--MarginLeft); }\n  .pf-c-data-list__item-action > *:not(:last-child) {\n    margin-right: var(--pf-c-data-list__item-action--not-last-child--MarginRight); }\n  .pf-c-data-list__item-action .pf-c-data-list__action {\n    margin-top: var(--pf-c-data-list__action--MarginTop); }\n\n.pf-c-data-list__toggle {\n  margin-top: var(--pf-c-data-list__toggle--MarginTop);\n  margin-left: var(--pf-c-data-list__toggle--MarginLeft); }\n\n.pf-c-data-list__toggle-icon {\n  pointer-events: none;\n  transition: var(--pf-c-data-list__toggle-icon--Transition); }\n  .pf-c-data-list__item.pf-m-expanded .pf-c-data-list__toggle-icon {\n    transform: rotate(var(--pf-c-data-list__item--m-expanded__toggle-icon--Rotate)); }\n\n.pf-c-data-list__item-content {\n  display: grid;\n  width: 100%;\n  grid-template-columns: auto 1fr; }\n\n.pf-c-data-list__cell {\n  flex: 1;\n  grid-column: 1 / -1;\n  padding-top: var(--pf-c-data-list__cell--PaddingTop);\n  padding-bottom: var(--pf-c-data-list__cell--PaddingBottom); }\n  .pf-c-data-list__cell + .pf-c-data-list__cell {\n    flex: 1 0 100%;\n    order: 1;\n    padding-top: var(--pf-c-data-list__cell--cell--PaddingTop); }\n  .pf-c-data-list__cell.pf-m-icon {\n    flex-grow: 0;\n    margin-right: var(--pf-c-data-list__cell--m-icon--MarginRight);\n    grid-column: 1 / 2; }\n  .pf-c-data-list__cell.pf-m-icon + .pf-c-data-list__cell {\n    grid-column: 2 / 3;\n    padding-top: var(--pf-c-data-list__cell--m-icon--cell--PaddingTop); }\n  .pf-c-data-list__cell.pf-m-align-right {\n    margin-left: 0; }\n\n.pf-c-data-list__text {\n  display: inline-block; }\n\n.pf-c-data-list__text,\n.pf-c-data-list__cell {\n  min-width: var(--pf-c-data-list--cell--MinWidth);\n  max-width: 100%;\n  overflow: var(--pf-c-data-list--cell--Overflow);\n  text-overflow: var(--pf-c-data-list--cell--TextOverflow);\n  word-break: var(--pf-c-data-list--cell--WordBreak);\n  white-space: var(--pf-c-data-list--cell--WhiteSpace); }\n\n.pf-c-data-list__expandable-content {\n  max-height: var(--pf-c-data-list__expandable-content--MaxHeight);\n  overflow-y: auto;\n  border-top: var(--pf-c-data-list__expandable-content--BorderTopWidth) solid var(--pf-c-data-list__expandable-content--BorderTopColor); }\n  .pf-c-data-list__expandable-content .pf-c-data-list__expandable-content-body {\n    padding: var(--pf-c-data-list__expandable-content-body--PaddingTop) var(--pf-c-data-list__expandable-content-body--PaddingRight) var(--pf-c-data-list__expandable-content-body--PaddingBottom) var(--pf-c-data-list__expandable-content-body--PaddingLeft); }\n    .pf-c-data-list__expandable-content .pf-c-data-list__expandable-content-body.pf-m-no-padding {\n      padding: 0; }\n\n.pf-c-description-list {\n  --pf-c-description-list--RowGap: var(--pf-global--gutter--md);\n  --pf-c-description-list--ColumnGap: var(--pf-global--spacer--lg);\n  --pf-c-description-list--GridTemplateColumns--count: 1;\n  --pf-c-description-list--GridTemplateColumns--width: 1fr;\n  --pf-c-description-list--GridTemplateColumns: repeat(var(--pf-c-description-list--GridTemplateColumns--count), var(--pf-c-description-list--GridTemplateColumns--width));\n  --pf-c-description-list__group--RowGap: var(--pf-global--spacer--sm);\n  --pf-c-description-list__group--ColumnGap: var(--pf-global--spacer--md);\n  --pf-c-description-list__group--GridTemplateColumns: auto;\n  --pf-c-description-list__group--GridColumn: auto;\n  --pf-c-description-list__term--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-description-list__term--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-description-list--m-horizontal__term--width: 12ch;\n  --pf-c-description-list--m-horizontal__description--width: minmax(10ch, auto);\n  --pf-c-description-list--m-horizontal__group--GridTemplateColumns: var(--pf-c-description-list__term--width) var(--pf-c-description-list--m-horizontal__description--width);\n  --pf-c-description-list--m-1-col--GridTemplateColumns--count: 1;\n  --pf-c-description-list--m-auto-fit--GridTemplateColumns--min: 15.625rem;\n  --pf-c-description-list--m-auto-fit--GridTemplateColumns--minmax--min: var(--pf-c-description-list--m-auto-fit--GridTemplateColumns--min);\n  display: grid;\n  align-items: baseline;\n  row-gap: var(--pf-c-description-list--RowGap);\n  column-gap: var(--pf-c-description-list--ColumnGap);\n  grid-template-columns: var(--pf-c-description-list--GridTemplateColumns); }\n  @media screen and (min-width: 768px) {\n    .pf-c-description-list {\n      --pf-c-description-list--m-2-col--GridTemplateColumns--count: 2;\n      --pf-c-description-list--m-3-col--GridTemplateColumns--count: 3; } }\n  .pf-c-description-list.pf-m-horizontal {\n    --pf-c-description-list__group--GridTemplateColumns: var(--pf-c-description-list--m-horizontal__group--GridTemplateColumns);\n    --pf-c-description-list__term--width: var(--pf-c-description-list--m-horizontal__term--width); }\n    @media (min-width: 768px) {\n      .pf-c-description-list.pf-m-horizontal {\n        --pf-c-description-list__term--width: var(--pf-c-description-list--m-horizontal__term--width-on-md, var(--pf-c-description-list--m-horizontal__term--width)); } }\n    @media (min-width: 992px) {\n      .pf-c-description-list.pf-m-horizontal {\n        --pf-c-description-list__term--width: var(--pf-c-description-list--m-horizontal__term--width-on-lg, var(--pf-c-description-list--m-horizontal__term--width-on-md, var(--pf-c-description-list--m-horizontal__term--width))); } }\n    @media (min-width: 1200px) {\n      .pf-c-description-list.pf-m-horizontal {\n        --pf-c-description-list__term--width: var(--pf-c-description-list--m-horizontal__term--width-on-xl, var(--pf-c-description-list--m-horizontal__term--width-on-lg, var(--pf-c-description-list--m-horizontal__term--width-on-md, var(--pf-c-description-list--m-horizontal__term--width)))); } }\n    @media (min-width: 1450px) {\n      .pf-c-description-list.pf-m-horizontal {\n        --pf-c-description-list__term--width: var(--pf-c-description-list--m-horizontal__term--width-on-2xl, var(--pf-c-description-list--m-horizontal__term--width-on-xl, var(--pf-c-description-list--m-horizontal__term--width-on-lg, var(--pf-c-description-list--m-horizontal__term--width-on-md, var(--pf-c-description-list--m-horizontal__term--width))))); } }\n  .pf-c-description-list.pf-m-inline-grid {\n    display: inline-grid; }\n  .pf-c-description-list.pf-m-auto-column-widths {\n    --pf-c-description-list--GridTemplateColumns--width: minmax(8ch, max-content); }\n  .pf-c-description-list.pf-m-auto-fit {\n    grid-template-columns: repeat(auto-fit, minmax(var(--pf-c-description-list--m-auto-fit--GridTemplateColumns--minmax--min), 1fr));\n    --pf-c-description-list--GridTemplateColumns--minmax--min: var(--pf-c-description-list--GridTemplateColumns--min); }\n    @media (min-width: 768px) {\n      .pf-c-description-list.pf-m-auto-fit {\n        --pf-c-description-list--GridTemplateColumns--minmax--min: var(--pf-c-description-list--GridTemplateColumns--min-on-md, var(--pf-c-description-list--GridTemplateColumns--min)); } }\n    @media (min-width: 992px) {\n      .pf-c-description-list.pf-m-auto-fit {\n        --pf-c-description-list--GridTemplateColumns--minmax--min: var(--pf-c-description-list--GridTemplateColumns--min-on-lg, var(--pf-c-description-list--GridTemplateColumns--min-on-md, var(--pf-c-description-list--GridTemplateColumns--min))); } }\n    @media (min-width: 1200px) {\n      .pf-c-description-list.pf-m-auto-fit {\n        --pf-c-description-list--GridTemplateColumns--minmax--min: var(--pf-c-description-list--GridTemplateColumns--min-on-xl, var(--pf-c-description-list--GridTemplateColumns--min-on-lg, var(--pf-c-description-list--GridTemplateColumns--min-on-md, var(--pf-c-description-list--GridTemplateColumns--min)))); } }\n    @media (min-width: 1450px) {\n      .pf-c-description-list.pf-m-auto-fit {\n        --pf-c-description-list--GridTemplateColumns--minmax--min: var(--pf-c-description-list--GridTemplateColumns--min-on-2xl, var(--pf-c-description-list--GridTemplateColumns--min-on-xl, var(--pf-c-description-list--GridTemplateColumns--min-on-lg, var(--pf-c-description-list--GridTemplateColumns--min-on-md, var(--pf-c-description-list--GridTemplateColumns--min))))); } }\n\n.pf-c-description-list__group {\n  display: grid;\n  grid-column: var(--pf-c-description-list__group--GridColumn);\n  row-gap: var(--pf-c-description-list__group--RowGap);\n  column-gap: var(--pf-c-description-list__group--ColumnGap);\n  grid-template-columns: var(--pf-c-description-list__group--GridTemplateColumns);\n  align-items: baseline; }\n\n.pf-c-description-list__term,\n.pf-c-description-list__description {\n  text-align: left; }\n\n.pf-c-description-list__term {\n  font-size: var(--pf-c-description-list__term--FontSize);\n  font-weight: var(--pf-c-description-list__term--FontWeight); }\n  .pf-c-description-list__term .pf-c-description-list__text {\n    display: inline; }\n\n.pf-c-description-list.pf-m-1-col {\n  --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-1-col--GridTemplateColumns--count); }\n\n.pf-c-description-list.pf-m-2-col {\n  --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-2-col--GridTemplateColumns--count); }\n\n.pf-c-description-list.pf-m-3-col {\n  --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-3-col--GridTemplateColumns--count); }\n\n@media (min-width: 768px) {\n  .pf-c-description-list.pf-m-1-col-on-md {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-1-col--GridTemplateColumns--count); }\n  .pf-c-description-list.pf-m-2-col-on-md {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-2-col--GridTemplateColumns--count); }\n  .pf-c-description-list.pf-m-3-col-on-md {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-3-col--GridTemplateColumns--count); } }\n\n@media (min-width: 992px) {\n  .pf-c-description-list.pf-m-1-col-on-lg {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-1-col--GridTemplateColumns--count); }\n  .pf-c-description-list.pf-m-2-col-on-lg {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-2-col--GridTemplateColumns--count); }\n  .pf-c-description-list.pf-m-3-col-on-lg {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-3-col--GridTemplateColumns--count); } }\n\n@media (min-width: 1200px) {\n  .pf-c-description-list.pf-m-1-col-on-xl {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-1-col--GridTemplateColumns--count); }\n  .pf-c-description-list.pf-m-2-col-on-xl {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-2-col--GridTemplateColumns--count); }\n  .pf-c-description-list.pf-m-3-col-on-xl {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-3-col--GridTemplateColumns--count); } }\n\n@media (min-width: 1450px) {\n  .pf-c-description-list.pf-m-1-col-on-2xl {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-1-col--GridTemplateColumns--count); }\n  .pf-c-description-list.pf-m-2-col-on-2xl {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-2-col--GridTemplateColumns--count); }\n  .pf-c-description-list.pf-m-3-col-on-2xl {\n    --pf-c-description-list--GridTemplateColumns--count: var(--pf-c-description-list--m-3-col--GridTemplateColumns--count); } }\n\n.pf-c-dual-list-selector {\n  --pf-c-dual-list-selector__header--GridArea: pane-header;\n  --pf-c-dual-list-selector__tools--GridArea: pane-tools;\n  --pf-c-dual-list-selector__status--GridArea: pane-status;\n  --pf-c-dual-list-selector__menu--GridArea: pane-menu;\n  --pf-c-dual-list-selector__controls--GridArea: controls;\n  --pf-c-dual-list-selector--m-chosen__header--GridArea: pane-header-c;\n  --pf-c-dual-list-selector--m-chosen__tools--GridArea: pane-tools-c;\n  --pf-c-dual-list-selector--m-chosen__status--GridArea: pane-status-c;\n  --pf-c-dual-list-selector--m-chosen__menu--GridArea: pane-menu-c;\n  --pf-c-dual-list-selector--GridTemplateColumns--pane--MinMax--min: 12.5rem;\n  --pf-c-dual-list-selector--GridTemplateColumns--pane--MinMax--max: 28.125rem;\n  --pf-c-dual-list-selector__header--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-dual-list-selector__title-text--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-dual-list-selector__tools--MarginBottom: var(--pf-global--spacer--md);\n  --pf-c-dual-list-selector__tools-filter--tools-actions--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-dual-list-selector__menu--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-dual-list-selector__menu--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-dual-list-selector__menu--MinHeight: 12.5rem;\n  --pf-c-dual-list-selector__menu--MaxHeight: 20rem;\n  --pf-c-dual-list-selector__item--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-dual-list-selector__item--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-dual-list-selector__item--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-dual-list-selector__item--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-dual-list-selector__item--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-dual-list-selector__item--BackgroundColor: transparent;\n  --pf-c-dual-list-selector__item--hover--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-dual-list-selector__item--focus-within--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-dual-list-selector__item--m-selected--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-dual-list-selector__item--list__item--PaddingLeft: calc(var(--pf-global--spacer--lg) + var(--pf-global--spacer--xl));\n  --pf-c-dual-list-selector__item--list__item--m-expandable--PaddingLeft: calc(var(--pf-global--spacer--lg) + var(--pf-global--spacer--md));\n  --pf-c-dual-list-selector__item--list--list__item--PaddingLeft: calc(var(--pf-global--spacer--2xl) + var(--pf-global--spacer--xl));\n  --pf-c-dual-list-selector__item-text--Color: var(--pf-global--Color--100);\n  --pf-c-dual-list-selector__item--m-selected__text--Color: var(--pf-global--active-color--100);\n  --pf-c-dual-list-selector__item--m-selected__text--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-dual-list-selector__status--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-dual-list-selector__status-text--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-dual-list-selector__status-text--Color: var(--pf-global--Color--200);\n  --pf-c-dual-list-selector__controls--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-dual-list-selector__controls--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-dual-list-selector__item-toggle--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-dual-list-selector__item-check--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-dual-list-selector__item-count--Marginleft: var(--pf-global--spacer--sm);\n  --pf-c-dual-list-selector__item--c-badge--m-read--BackgroundColor: var(--pf-global--disabled-color--200);\n  --pf-c-dual-list-selector__item-toggle-icon--Transform: 0;\n  --pf-c-dual-list-selector__list-item--m-expanded__item-toggle-icon--Rotate: 90deg;\n  --pf-c-dual-list-selector__item-toggle-icon--Transition: var(--pf-global--Transition);\n  display: grid;\n  grid-template-areas: "pane-header . pane-header-c" "pane-tools . pane-tools-c" "pane-status . pane-status-c" "pane-menu controls pane-menu-c";\n  grid-template-columns: minmax(var(--pf-c-dual-list-selector--GridTemplateColumns--pane--MinMax--min), var(--pf-c-dual-list-selector--GridTemplateColumns--pane--MinMax--max)) min-content minmax(var(--pf-c-dual-list-selector--GridTemplateColumns--pane--MinMax--min), var(--pf-c-dual-list-selector--GridTemplateColumns--pane--MinMax--max));\n  grid-template-rows: repeat(3, auto) auto; }\n\n.pf-c-dual-list-selector__pane {\n  display: contents; }\n  .pf-c-dual-list-selector__pane.pf-m-chosen {\n    --pf-c-dual-list-selector__header--GridArea: var(--pf-c-dual-list-selector--m-chosen__header--GridArea);\n    --pf-c-dual-list-selector__tools--GridArea: var(--pf-c-dual-list-selector--m-chosen__tools--GridArea);\n    --pf-c-dual-list-selector__status--GridArea: var(--pf-c-dual-list-selector--m-chosen__status--GridArea);\n    --pf-c-dual-list-selector__menu--GridArea: var(--pf-c-dual-list-selector--m-chosen__menu--GridArea); }\n\n.pf-c-dual-list-selector__header {\n  grid-area: var(--pf-c-dual-list-selector__header--GridArea);\n  margin-bottom: var(--pf-c-dual-list-selector__header--MarginBottom); }\n\n.pf-c-dual-list-selector__title-text {\n  font-weight: var(--pf-c-dual-list-selector__title-text--FontWeight); }\n\n.pf-c-dual-list-selector__tools {\n  display: flex;\n  grid-area: var(--pf-c-dual-list-selector__tools--GridArea);\n  margin-bottom: var(--pf-c-dual-list-selector__tools--MarginBottom); }\n\n.pf-c-dual-list-selector__tools-filter {\n  flex-grow: 1; }\n\n.pf-c-dual-list-selector__tools-actions {\n  display: flex; }\n  .pf-c-dual-list-selector__tools-filter ~ .pf-c-dual-list-selector__tools-actions {\n    margin-left: var(--pf-c-dual-list-selector__tools-filter--tools-actions--MarginLeft); }\n\n.pf-c-dual-list-selector__status {\n  display: flex;\n  grid-area: var(--pf-c-dual-list-selector__status--GridArea);\n  margin-bottom: var(--pf-c-dual-list-selector__status--MarginBottom); }\n\n.pf-c-dual-list-selector__status-text {\n  flex-grow: 1;\n  font-size: var(--pf-c-dual-list-selector__status-text--FontSize);\n  color: var(--pf-c-dual-list-selector__status-text--Color); }\n\n.pf-c-dual-list-selector__menu {\n  grid-area: var(--pf-c-dual-list-selector__menu--GridArea);\n  min-height: var(--pf-c-dual-list-selector__menu--MinHeight);\n  max-height: var(--pf-c-dual-list-selector__menu--MaxHeight);\n  overflow: auto;\n  border: var(--pf-c-dual-list-selector__menu--BorderWidth) solid var(--pf-c-dual-list-selector__menu--BorderColor); }\n\n.pf-c-dual-list-selector__list {\n  display: flex;\n  flex-direction: column; }\n  .pf-c-dual-list-selector__list .pf-c-dual-list-selector__list {\n    --pf-c-dual-list-selector__item--PaddingLeft: var(--pf-c-dual-list-selector__item--list__item--PaddingLeft); }\n    .pf-c-dual-list-selector__list .pf-c-dual-list-selector__list .pf-c-dual-list-selector__list-item.pf-m-expandable {\n      --pf-c-dual-list-selector__item--PaddingLeft: var(--pf-c-dual-list-selector__item--list__item--m-expandable--PaddingLeft); }\n    .pf-c-dual-list-selector__list .pf-c-dual-list-selector__list .pf-c-dual-list-selector__list {\n      --pf-c-dual-list-selector__item--PaddingLeft: var(--pf-c-dual-list-selector__item--list--list__item--PaddingLeft); }\n\n.pf-c-dual-list-selector__list-item.pf-m-expanded > .pf-c-dual-list-selector__item {\n  --pf-c-dual-list-selector__item-toggle-icon--Transform: rotate(--pf-c-dual-list-selector__list-item--m-expanded__item-toggle-icon--rotate); }\n\n.pf-c-dual-list-selector__item,\n.pf-c-dual-list-selector__main {\n  display: flex; }\n\n.pf-c-dual-list-selector__item,\n.pf-c-dual-list-selector__item-main {\n  flex-basis: 100%; }\n\n.pf-c-dual-list-selector__item {\n  width: 100%;\n  padding: var(--pf-c-dual-list-selector__item--PaddingTop) var(--pf-c-dual-list-selector__item--PaddingRight) var(--pf-c-dual-list-selector__item--PaddingBottom) var(--pf-c-dual-list-selector__item--PaddingLeft);\n  font-size: var(--pf-c-dual-list-selector__item--FontSize);\n  text-align: left;\n  cursor: pointer;\n  background-color: var(--pf-c-dual-list-selector__item--BackgroundColor);\n  border: 0; }\n  .pf-c-dual-list-selector__item:hover {\n    --pf-c-dual-list-selector__item--BackgroundColor: var(--pf-c-dual-list-selector__item--hover--BackgroundColor); }\n  .pf-c-dual-list-selector__item:focus-within {\n    --pf-c-dual-list-selector__item--BackgroundColor: var(--pf-c-dual-list-selector__item--focus-within--BackgroundColor); }\n  .pf-c-dual-list-selector__item.pf-m-selected {\n    --pf-c-dual-list-selector__item--BackgroundColor: var(--pf-c-dual-list-selector__item--m-selected--BackgroundColor); }\n    .pf-c-dual-list-selector__item.pf-m-selected .pf-c-dual-list-selector__item-text {\n      --pf-c-dual-list-selector__item-text--Color: var(--pf-c-dual-list-selector__item--m-selected__text--Color);\n      font-weight: var(--pf-c-dual-list-selector__item--m-selected__text--FontWeight); }\n  .pf-c-dual-list-selector__item .pf-c-dual-list-selector__item-count {\n    margin-left: var(--pf-c-dual-list-selector__item-count--Marginleft); }\n    .pf-c-dual-list-selector__item .pf-c-dual-list-selector__item-count .pf-c-badge.pf-m-read {\n      --pf-c-badge--m-read--BackgroundColor: var(--pf-c-dual-list-selector__item--c-badge--m-read--BackgroundColor); }\n\n.pf-c-dual-list-selector__item-text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  flex-grow: 1;\n  color: var(--pf-c-dual-list-selector__item-text--Color); }\n\n.pf-c-dual-list-selector__controls {\n  grid-area: var(--pf-c-dual-list-selector__controls--GridArea);\n  align-self: center;\n  padding-right: var(--pf-c-dual-list-selector__controls--PaddingRight);\n  padding-left: var(--pf-c-dual-list-selector__controls--PaddingLeft); }\n\n.pf-c-dual-list-selector__item-main {\n  display: flex;\n  min-width: 0; }\n\n.pf-c-dual-list-selector__item-toggle {\n  padding-right: var(--pf-c-dual-list-selector__item-toggle--PaddingRight); }\n\n.pf-c-dual-list-selector__item-check {\n  display: flex;\n  align-items: center;\n  margin-right: var(--pf-c-dual-list-selector__item-check--MarginRight); }\n\n.pf-c-dual-list-selector__item-toggle-icon {\n  display: inline-block;\n  transition: var(--pf-c-dual-list-selector__item-toggle-icon--Transition); }\n\n.pf-c-toolbar {\n  --pf-c-toolbar--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-toolbar--RowGap: var(--pf-global--spacer--lg);\n  --pf-c-toolbar--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-toolbar--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-toolbar__content--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-toolbar__content--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-toolbar--m-page-insets--inset: var(--pf-global--spacer--md);\n  --pf-c-toolbar--m-page-insets--xl--inset: var(--pf-global--spacer--lg);\n  --pf-c-toolbar__expandable-content--PaddingTop: var(--pf-c-toolbar--RowGap);\n  --pf-c-toolbar__expandable-content--PaddingRight: var(--pf-c-toolbar__content--PaddingRight);\n  --pf-c-toolbar__expandable-content--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-toolbar__expandable-content--PaddingLeft: var(--pf-c-toolbar__content--PaddingLeft);\n  --pf-c-toolbar__expandable-content--lg--PaddingRight: 0;\n  --pf-c-toolbar__expandable-content--lg--PaddingBottom: 0;\n  --pf-c-toolbar__expandable-content--lg--PaddingLeft: 0;\n  --pf-c-toolbar__expandable-content--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-toolbar__expandable-content--BoxShadow: var(--pf-global--BoxShadow--md-bottom);\n  --pf-c-toolbar__expandable-content--BackgroundColor: var(--pf-c-toolbar--BackgroundColor);\n  --pf-c-toolbar__expandable-content--m-expanded--GridRowGap: var(--pf-global--gutter--md);\n  --pf-c-toolbar__group--m-chip-container--MarginTop: calc(var(--pf-global--spacer--md) * -1);\n  --pf-c-toolbar__group--m-chip-container__item--MarginTop: var(--pf-global--spacer--md);\n  --pf-c-toolbar--spacer--base: var(--pf-global--spacer--md);\n  --pf-c-toolbar__item--spacer: var(--pf-c-toolbar--spacer--base);\n  --pf-c-toolbar__group--spacer: var(--pf-c-toolbar--spacer--base);\n  --pf-c-toolbar__group--m-toggle-group--spacer: var(--pf-global--spacer--sm);\n  --pf-c-toolbar__group--m-toggle-group--m-show--spacer: var(--pf-c-toolbar__group--spacer);\n  --pf-c-toolbar__group--m-icon-button-group--spacer: var(--pf-c-toolbar__group--spacer);\n  --pf-c-toolbar__group--m-icon-button-group--space-items: 0;\n  --pf-c-toolbar__group--m-button-group--spacer: var(--pf-c-toolbar__group--spacer);\n  --pf-c-toolbar__group--m-button-group--space-items: var(--pf-global--spacer--sm);\n  --pf-c-toolbar__group--m-filter-group--spacer: var(--pf-c-toolbar__group--spacer);\n  --pf-c-toolbar__group--m-filter-group--space-items: 0;\n  --pf-c-toolbar__item--m-overflow-menu--spacer: var(--pf-c-toolbar__item--spacer);\n  --pf-c-toolbar__item--m-bulk-select--spacer: var(--pf-global--spacer--lg);\n  --pf-c-toolbar__expand-all-icon--Rotate: 0;\n  --pf-c-toolbar__expand-all-icon--Transition: var(--pf-global--Transition);\n  --pf-c-toolbar__item--m-expand-all--m-expanded__expand-all-icon--Rotate: 90deg;\n  --pf-c-toolbar__item--m-search-filter--spacer: var(--pf-global--spacer--sm);\n  --pf-c-toolbar__item--m-chip-group--spacer: var(--pf-global--spacer--sm);\n  --pf-c-toolbar__item--m-label--spacer: var(--pf-c-toolbar__item--spacer);\n  --pf-c-toolbar__item--m-label--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-toolbar__toggle--m-expanded__c-button--m-plain--Color: var(--pf-global--Color--100);\n  --pf-c-toolbar--c-divider--m-vertical--spacer: var(--pf-c-toolbar--spacer--base);\n  position: relative;\n  row-gap: var(--pf-c-toolbar--RowGap);\n  display: grid;\n  padding-top: var(--pf-c-toolbar--PaddingTop);\n  padding-bottom: var(--pf-c-toolbar--PaddingBottom);\n  background-color: var(--pf-c-toolbar--BackgroundColor); }\n  @media screen and (min-width: 992px) {\n    .pf-c-toolbar {\n      --pf-c-toolbar__expandable-content--PaddingRight: var(--pf-c-toolbar__expandable-content--lg--PaddingRight);\n      --pf-c-toolbar__expandable-content--PaddingBottom: var(--pf-c-toolbar__expandable-content--lg--PaddingBottom);\n      --pf-c-toolbar__expandable-content--PaddingLeft: var(--pf-c-toolbar__expandable-content--lg--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-toolbar {\n      --pf-c-toolbar--m-page-insets--inset: var(--pf-c-toolbar--m-page-insets--xl--inset); } }\n  .pf-c-toolbar.pf-m-page-insets {\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--m-page-insets--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--m-page-insets--inset); }\n\n.pf-c-toolbar__content-section > .pf-c-divider,\n.pf-c-toolbar__group > .pf-c-divider {\n  --pf-c-toolbar--spacer: var(--pf-c-toolbar--c-divider--m-vertical--spacer); }\n\n.pf-c-toolbar__content-section > .pf-c-divider.pf-m-vertical,\n.pf-c-toolbar__group > .pf-c-divider.pf-m-vertical {\n  margin-right: var(--pf-c-toolbar--spacer); }\n  .pf-c-toolbar__content-section > .pf-c-divider.pf-m-vertical:last-child,\n  .pf-c-toolbar__group > .pf-c-divider.pf-m-vertical:last-child {\n    --pf-c-toolbar--spacer: 0; }\n\n.pf-c-toolbar__group {\n  --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--spacer);\n  display: flex;\n  align-items: center;\n  margin-right: var(--pf-c-toolbar--spacer); }\n  .pf-c-toolbar__group.pf-m-button-group {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-button-group--spacer); }\n    .pf-c-toolbar__group.pf-m-button-group > * {\n      --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-button-group--space-items); }\n  .pf-c-toolbar__group.pf-m-icon-button-group {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-icon-button-group--spacer); }\n    .pf-c-toolbar__group.pf-m-icon-button-group > * {\n      --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-icon-button-group--space-items); }\n  .pf-c-toolbar__group.pf-m-filter-group {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-filter-group--spacer); }\n    .pf-c-toolbar__group.pf-m-filter-group > * {\n      --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-filter-group--space-items); }\n    .pf-c-toolbar__group.pf-m-filter-group > * + * {\n      margin-left: -1px; }\n  .pf-c-toolbar__group.pf-m-toggle-group {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-toggle-group--spacer); }\n    .pf-c-toolbar__group.pf-m-toggle-group .pf-c-toolbar__group,\n    .pf-c-toolbar__group.pf-m-toggle-group .pf-c-toolbar__item {\n      display: none;\n      visibility: hidden; }\n    .pf-c-toolbar__group.pf-m-toggle-group .pf-c-toolbar__toggle {\n      display: inline-block;\n      visibility: visible; }\n  .pf-c-toolbar__group:last-child {\n    --pf-c-toolbar--spacer: 0; }\n\n.pf-c-toolbar__item {\n  --pf-c-toolbar--spacer: var(--pf-c-toolbar__item--spacer);\n  margin-right: var(--pf-c-toolbar--spacer); }\n  .pf-c-toolbar__item.pf-m-overflow-menu {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__item--m-overflow-menu--spacer); }\n  .pf-c-toolbar__item.pf-m-bulk-select {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__item--m-bulk-select--spacer); }\n  .pf-c-toolbar__item.pf-m-expand-all.pf-m-expanded {\n    --pf-c-toolbar__expand-all-icon--Rotate: var(--pf-c-toolbar__item--m-expand-all--m-expanded__expand-all-icon--Rotate); }\n  .pf-c-toolbar__item.pf-m-search-filter {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__item--m-search-filter--spacer); }\n  .pf-c-toolbar__item.pf-m-chip-group {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__item--m-chip-group--spacer); }\n  .pf-c-toolbar__item.pf-m-label {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__item--m-label--spacer);\n    font-weight: var(--pf-c-toolbar__item--m-label--FontWeight); }\n  .pf-c-toolbar__item.pf-m-pagination {\n    margin-left: auto; }\n    .pf-c-toolbar__item.pf-m-pagination .pf-c-pagination {\n      flex-wrap: nowrap; }\n  .pf-c-toolbar__item:last-child {\n    --pf-c-toolbar--spacer: 0; }\n\n.pf-c-toolbar__expand-all-icon {\n  display: inline-block;\n  transition: var(--pf-c-toolbar__expand-all-icon--Transition);\n  transform: rotate(var(--pf-c-toolbar__expand-all-icon--Rotate)); }\n\n.pf-c-toolbar__content,\n.pf-c-toolbar__content-section {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center; }\n\n.pf-c-toolbar__content {\n  position: relative;\n  padding-right: var(--pf-c-toolbar__content--PaddingRight);\n  padding-left: var(--pf-c-toolbar__content--PaddingLeft); }\n\n.pf-c-toolbar__content-section {\n  width: 100%; }\n\n.pf-c-toolbar__expandable-content {\n  position: absolute;\n  top: 100%;\n  right: 0;\n  left: 0;\n  z-index: var(--pf-c-toolbar__expandable-content--ZIndex);\n  display: none;\n  width: 100%;\n  padding: var(--pf-c-toolbar__expandable-content--PaddingTop) var(--pf-c-toolbar__expandable-content--PaddingRight) var(--pf-c-toolbar__expandable-content--PaddingBottom) var(--pf-c-toolbar__expandable-content--PaddingLeft);\n  visibility: hidden;\n  background-color: var(--pf-c-toolbar__expandable-content--BackgroundColor);\n  box-shadow: var(--pf-c-toolbar__expandable-content--BoxShadow); }\n  @media screen and (min-width: 992px) {\n    .pf-c-toolbar__expandable-content {\n      position: static;\n      box-shadow: none; } }\n  .pf-c-toolbar__expandable-content.pf-m-expanded {\n    display: grid;\n    grid-row-gap: var(--pf-c-toolbar__expandable-content--m-expanded--GridRowGap);\n    visibility: visible; }\n  .pf-c-toolbar__expandable-content .pf-c-toolbar__group,\n  .pf-c-toolbar__expandable-content .pf-c-toolbar__item {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar__expandable-content .pf-c-toolbar__group {\n    display: grid;\n    grid-row-gap: var(--pf-c-toolbar__expandable-content--m-expanded--GridRowGap); }\n  .pf-c-toolbar__expandable-content .pf-m-label {\n    display: none;\n    visibility: hidden; }\n\n.pf-c-toolbar__content.pf-m-chip-container,\n.pf-c-toolbar__group.pf-m-chip-container {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\n  margin-top: var(--pf-c-toolbar__group--m-chip-container--MarginTop);\n  grid-row-gap: 0; }\n  .pf-c-toolbar__content.pf-m-chip-container .pf-c-toolbar__item,\n  .pf-c-toolbar__group.pf-m-chip-container .pf-c-toolbar__item {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__item--spacer);\n    margin-top: var(--pf-c-toolbar__group--m-chip-container__item--MarginTop); }\n  .pf-c-toolbar__content.pf-m-chip-container .pf-c-toolbar__group,\n  .pf-c-toolbar__group.pf-m-chip-container .pf-c-toolbar__group {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--spacer);\n    display: flex;\n    flex-wrap: wrap;\n    grid-row-gap: 0; }\n  .pf-c-toolbar__content.pf-m-chip-container .pf-c-toolbar__group:last-child,\n  .pf-c-toolbar__content.pf-m-chip-container .pf-c-toolbar__item:last-child,\n  .pf-c-toolbar__group.pf-m-chip-container .pf-c-toolbar__group:last-child,\n  .pf-c-toolbar__group.pf-m-chip-container .pf-c-toolbar__item:last-child {\n    --pf-c-toolbar--spacer: 0; }\n\n.pf-c-toolbar .pf-c-chip-group:last-child {\n  --pf-c-chip-group--MarginRight: 0; }\n\n.pf-c-toolbar .pf-c-chip-group li:last-child {\n  --pf-c-chip-group__li--m-toolbar--MarginRight: 0; }\n\n.pf-c-toolbar__toggle.pf-m-expanded .pf-c-button.pf-m-plain {\n  color: var(--pf-c-toolbar__toggle--m-expanded__c-button--m-plain--Color); }\n\n.pf-m-toggle-group.pf-m-show {\n  --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-toggle-group--m-show--spacer); }\n  .pf-m-toggle-group.pf-m-show .pf-c-toolbar__group,\n  .pf-m-toggle-group.pf-m-show .pf-c-toolbar__item {\n    display: flex;\n    flex: 0 1 auto;\n    visibility: visible; }\n  .pf-m-toggle-group.pf-m-show .pf-c-toolbar__toggle {\n    display: none;\n    visibility: hidden; }\n\n@media (min-width: 576px) {\n  .pf-m-toggle-group.pf-m-show-on-sm {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-toggle-group--m-show--spacer); }\n    .pf-m-toggle-group.pf-m-show-on-sm .pf-c-toolbar__group,\n    .pf-m-toggle-group.pf-m-show-on-sm .pf-c-toolbar__item {\n      display: flex;\n      flex: 0 1 auto;\n      visibility: visible; }\n    .pf-m-toggle-group.pf-m-show-on-sm .pf-c-toolbar__toggle {\n      display: none;\n      visibility: hidden; } }\n\n@media (min-width: 768px) {\n  .pf-m-toggle-group.pf-m-show-on-md {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-toggle-group--m-show--spacer); }\n    .pf-m-toggle-group.pf-m-show-on-md .pf-c-toolbar__group,\n    .pf-m-toggle-group.pf-m-show-on-md .pf-c-toolbar__item {\n      display: flex;\n      flex: 0 1 auto;\n      visibility: visible; }\n    .pf-m-toggle-group.pf-m-show-on-md .pf-c-toolbar__toggle {\n      display: none;\n      visibility: hidden; } }\n\n@media (min-width: 992px) {\n  .pf-m-toggle-group.pf-m-show-on-lg {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-toggle-group--m-show--spacer); }\n    .pf-m-toggle-group.pf-m-show-on-lg .pf-c-toolbar__group,\n    .pf-m-toggle-group.pf-m-show-on-lg .pf-c-toolbar__item {\n      display: flex;\n      flex: 0 1 auto;\n      visibility: visible; }\n    .pf-m-toggle-group.pf-m-show-on-lg .pf-c-toolbar__toggle {\n      display: none;\n      visibility: hidden; } }\n\n@media (min-width: 1200px) {\n  .pf-m-toggle-group.pf-m-show-on-xl {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-toggle-group--m-show--spacer); }\n    .pf-m-toggle-group.pf-m-show-on-xl .pf-c-toolbar__group,\n    .pf-m-toggle-group.pf-m-show-on-xl .pf-c-toolbar__item {\n      display: flex;\n      flex: 0 1 auto;\n      visibility: visible; }\n    .pf-m-toggle-group.pf-m-show-on-xl .pf-c-toolbar__toggle {\n      display: none;\n      visibility: hidden; } }\n\n@media (min-width: 1450px) {\n  .pf-m-toggle-group.pf-m-show-on-2xl {\n    --pf-c-toolbar--spacer: var(--pf-c-toolbar__group--m-toggle-group--m-show--spacer); }\n    .pf-m-toggle-group.pf-m-show-on-2xl .pf-c-toolbar__group,\n    .pf-m-toggle-group.pf-m-show-on-2xl .pf-c-toolbar__item {\n      display: flex;\n      flex: 0 1 auto;\n      visibility: visible; }\n    .pf-m-toggle-group.pf-m-show-on-2xl .pf-c-toolbar__toggle {\n      display: none;\n      visibility: hidden; } }\n\n.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right,\n.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right {\n  margin-left: auto; }\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right ~ .pf-m-pagination,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right ~ .pf-m-pagination {\n    margin-left: 0; }\n\n.pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left,\n.pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left {\n  margin-left: 0; }\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left ~ .pf-m-pagination,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left ~ .pf-m-pagination {\n    margin-left: auto; }\n\n.pf-c-toolbar .pf-m-hidden {\n  display: none;\n  visibility: hidden; }\n\n.pf-c-toolbar .pf-m-visible {\n  display: flex;\n  visibility: visible; }\n\n.pf-c-toolbar .pf-c-toolbar__content-section.pf-m-nowrap,\n.pf-c-toolbar .pf-c-toolbar__group.pf-m-nowrap {\n  flex-wrap: nowrap; }\n\n.pf-c-toolbar .pf-c-toolbar__content-section.pf-m-wrap,\n.pf-c-toolbar .pf-c-toolbar__group.pf-m-wrap {\n  flex-wrap: wrap; }\n\n@media (min-width: 576px) {\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-sm,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-sm {\n    margin-left: auto; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-sm ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-sm ~ .pf-m-pagination {\n      margin-left: 0; }\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-sm,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-sm {\n    margin-left: 0; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-sm ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-sm ~ .pf-m-pagination {\n      margin-left: auto; }\n  .pf-c-toolbar .pf-m-hidden-on-sm {\n    display: none;\n    visibility: hidden; }\n  .pf-c-toolbar .pf-m-visible-on-sm {\n    display: flex;\n    visibility: visible; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-nowrap-on-sm,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-nowrap-on-sm {\n    flex-wrap: nowrap; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-wrap-on-sm,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-wrap-on-sm {\n    flex-wrap: wrap; } }\n\n@media (min-width: 768px) {\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-md,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-md {\n    margin-left: auto; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-md ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-md ~ .pf-m-pagination {\n      margin-left: 0; }\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-md,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-md {\n    margin-left: 0; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-md ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-md ~ .pf-m-pagination {\n      margin-left: auto; }\n  .pf-c-toolbar .pf-m-hidden-on-md {\n    display: none;\n    visibility: hidden; }\n  .pf-c-toolbar .pf-m-visible-on-md {\n    display: flex;\n    visibility: visible; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-nowrap-on-md,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-nowrap-on-md {\n    flex-wrap: nowrap; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-wrap-on-md,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-wrap-on-md {\n    flex-wrap: wrap; } }\n\n@media (min-width: 992px) {\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-lg,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-lg {\n    margin-left: auto; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-lg ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-lg ~ .pf-m-pagination {\n      margin-left: 0; }\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-lg,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-lg {\n    margin-left: 0; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-lg ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-lg ~ .pf-m-pagination {\n      margin-left: auto; }\n  .pf-c-toolbar .pf-m-hidden-on-lg {\n    display: none;\n    visibility: hidden; }\n  .pf-c-toolbar .pf-m-visible-on-lg {\n    display: flex;\n    visibility: visible; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-nowrap-on-lg,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-nowrap-on-lg {\n    flex-wrap: nowrap; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-wrap-on-lg,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-wrap-on-lg {\n    flex-wrap: wrap; } }\n\n@media (min-width: 1200px) {\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-xl,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-xl {\n    margin-left: auto; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-xl ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-xl ~ .pf-m-pagination {\n      margin-left: 0; }\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-xl,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-xl {\n    margin-left: 0; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-xl ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-xl ~ .pf-m-pagination {\n      margin-left: auto; }\n  .pf-c-toolbar .pf-m-hidden-on-xl {\n    display: none;\n    visibility: hidden; }\n  .pf-c-toolbar .pf-m-visible-on-xl {\n    display: flex;\n    visibility: visible; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-nowrap-on-xl,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-nowrap-on-xl {\n    flex-wrap: nowrap; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-wrap-on-xl,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-wrap-on-xl {\n    flex-wrap: wrap; } }\n\n@media (min-width: 1450px) {\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-2xl,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-2xl {\n    margin-left: auto; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-right-on-2xl ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-right-on-2xl ~ .pf-m-pagination {\n      margin-left: 0; }\n  .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-2xl,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-2xl {\n    margin-left: 0; }\n    .pf-c-toolbar .pf-c-toolbar__item.pf-m-align-left-on-2xl ~ .pf-m-pagination,\n    .pf-c-toolbar .pf-c-toolbar__group.pf-m-align-left-on-2xl ~ .pf-m-pagination {\n      margin-left: auto; }\n  .pf-c-toolbar .pf-m-hidden-on-2xl {\n    display: none;\n    visibility: hidden; }\n  .pf-c-toolbar .pf-m-visible-on-2xl {\n    display: flex;\n    visibility: visible; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-nowrap-on-2xl,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-nowrap-on-2xl {\n    flex-wrap: nowrap; }\n  .pf-c-toolbar .pf-c-toolbar__content-section.pf-m-wrap-on-2xl,\n  .pf-c-toolbar .pf-c-toolbar__group.pf-m-wrap-on-2xl {\n    flex-wrap: wrap; } }\n\n.pf-c-toolbar .pf-m-space-items-none > * {\n  --pf-c-toolbar--spacer: 0; }\n\n.pf-c-toolbar .pf-m-space-items-none > :last-child {\n  --pf-c-toolbar--spacer: 0; }\n\n.pf-c-toolbar .pf-m-space-items-sm > * {\n  --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n\n.pf-c-toolbar .pf-m-space-items-sm > :last-child {\n  --pf-c-toolbar--spacer: 0; }\n\n.pf-c-toolbar .pf-m-space-items-md > * {\n  --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n\n.pf-c-toolbar .pf-m-space-items-md > :last-child {\n  --pf-c-toolbar--spacer: 0; }\n\n.pf-c-toolbar .pf-m-space-items-lg > * {\n  --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n\n.pf-c-toolbar .pf-m-space-items-lg > :last-child {\n  --pf-c-toolbar--spacer: 0; }\n\n@media (min-width: 576px) {\n  .pf-c-toolbar .pf-m-space-items-none-on-sm > * {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-none-on-sm > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-sm-on-sm > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-space-items-sm-on-sm > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-md-on-sm > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-space-items-md-on-sm > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-lg-on-sm > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n  .pf-c-toolbar .pf-m-space-items-lg-on-sm > :last-child {\n    --pf-c-toolbar--spacer: 0; } }\n\n@media (min-width: 768px) {\n  .pf-c-toolbar .pf-m-space-items-none-on-md > * {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-none-on-md > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-sm-on-md > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-space-items-sm-on-md > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-md-on-md > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-space-items-md-on-md > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-lg-on-md > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n  .pf-c-toolbar .pf-m-space-items-lg-on-md > :last-child {\n    --pf-c-toolbar--spacer: 0; } }\n\n@media (min-width: 992px) {\n  .pf-c-toolbar .pf-m-space-items-none-on-lg > * {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-none-on-lg > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-sm-on-lg > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-space-items-sm-on-lg > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-md-on-lg > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-space-items-md-on-lg > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-lg-on-lg > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n  .pf-c-toolbar .pf-m-space-items-lg-on-lg > :last-child {\n    --pf-c-toolbar--spacer: 0; } }\n\n@media (min-width: 1200px) {\n  .pf-c-toolbar .pf-m-space-items-none-on-xl > * {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-none-on-xl > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-sm-on-xl > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-space-items-sm-on-xl > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-md-on-xl > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-space-items-md-on-xl > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-lg-on-xl > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n  .pf-c-toolbar .pf-m-space-items-lg-on-xl > :last-child {\n    --pf-c-toolbar--spacer: 0; } }\n\n@media (min-width: 1450px) {\n  .pf-c-toolbar .pf-m-space-items-none-on-2xl > * {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-none-on-2xl > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-sm-on-2xl > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-space-items-sm-on-2xl > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-md-on-2xl > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-space-items-md-on-2xl > :last-child {\n    --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-space-items-lg-on-2xl > * {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n  .pf-c-toolbar .pf-m-space-items-lg-on-2xl > :last-child {\n    --pf-c-toolbar--spacer: 0; } }\n\n.pf-c-toolbar .pf-m-spacer-none {\n  --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-spacer-none:last-child {\n    --pf-c-toolbar--spacer: 0; }\n\n.pf-c-toolbar .pf-m-spacer-sm {\n  --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-spacer-sm:last-child {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n\n.pf-c-toolbar .pf-m-spacer-md {\n  --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-spacer-md:last-child {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n\n.pf-c-toolbar .pf-m-spacer-lg {\n  --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n  .pf-c-toolbar .pf-m-spacer-lg:last-child {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n\n@media (min-width: 576px) {\n  .pf-c-toolbar .pf-m-spacer-none-on-sm {\n    --pf-c-toolbar--spacer: 0; }\n    .pf-c-toolbar .pf-m-spacer-none-on-sm:last-child {\n      --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-spacer-sm-on-sm {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n    .pf-c-toolbar .pf-m-spacer-sm-on-sm:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-spacer-md-on-sm {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n    .pf-c-toolbar .pf-m-spacer-md-on-sm:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-spacer-lg-on-sm {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n    .pf-c-toolbar .pf-m-spacer-lg-on-sm:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); } }\n\n@media (min-width: 768px) {\n  .pf-c-toolbar .pf-m-spacer-none-on-md {\n    --pf-c-toolbar--spacer: 0; }\n    .pf-c-toolbar .pf-m-spacer-none-on-md:last-child {\n      --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-spacer-sm-on-md {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n    .pf-c-toolbar .pf-m-spacer-sm-on-md:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-spacer-md-on-md {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n    .pf-c-toolbar .pf-m-spacer-md-on-md:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-spacer-lg-on-md {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n    .pf-c-toolbar .pf-m-spacer-lg-on-md:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); } }\n\n@media (min-width: 992px) {\n  .pf-c-toolbar .pf-m-spacer-none-on-lg {\n    --pf-c-toolbar--spacer: 0; }\n    .pf-c-toolbar .pf-m-spacer-none-on-lg:last-child {\n      --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-spacer-sm-on-lg {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n    .pf-c-toolbar .pf-m-spacer-sm-on-lg:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-spacer-md-on-lg {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n    .pf-c-toolbar .pf-m-spacer-md-on-lg:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-spacer-lg-on-lg {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n    .pf-c-toolbar .pf-m-spacer-lg-on-lg:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); } }\n\n@media (min-width: 1200px) {\n  .pf-c-toolbar .pf-m-spacer-none-on-xl {\n    --pf-c-toolbar--spacer: 0; }\n    .pf-c-toolbar .pf-m-spacer-none-on-xl:last-child {\n      --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-spacer-sm-on-xl {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n    .pf-c-toolbar .pf-m-spacer-sm-on-xl:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-spacer-md-on-xl {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n    .pf-c-toolbar .pf-m-spacer-md-on-xl:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-spacer-lg-on-xl {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n    .pf-c-toolbar .pf-m-spacer-lg-on-xl:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); } }\n\n@media (min-width: 1450px) {\n  .pf-c-toolbar .pf-m-spacer-none-on-2xl {\n    --pf-c-toolbar--spacer: 0; }\n    .pf-c-toolbar .pf-m-spacer-none-on-2xl:last-child {\n      --pf-c-toolbar--spacer: 0; }\n  .pf-c-toolbar .pf-m-spacer-sm-on-2xl {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n    .pf-c-toolbar .pf-m-spacer-sm-on-2xl:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--sm); }\n  .pf-c-toolbar .pf-m-spacer-md-on-2xl {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n    .pf-c-toolbar .pf-m-spacer-md-on-2xl:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--md); }\n  .pf-c-toolbar .pf-m-spacer-lg-on-2xl {\n    --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); }\n    .pf-c-toolbar .pf-m-spacer-lg-on-2xl:last-child {\n      --pf-c-toolbar--spacer: var(--pf-global--spacer--lg); } }\n\n.pf-c-toolbar.pf-m-inset-none {\n  --pf-c-toolbar--inset: 0;\n  --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n  --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n\n.pf-c-toolbar.pf-m-inset-sm {\n  --pf-c-toolbar--inset: var(--pf-global--spacer--sm);\n  --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n  --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n\n.pf-c-toolbar.pf-m-inset-md {\n  --pf-c-toolbar--inset: var(--pf-global--spacer--md);\n  --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n  --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n\n.pf-c-toolbar.pf-m-inset-lg {\n  --pf-c-toolbar--inset: var(--pf-global--spacer--lg);\n  --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n  --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n\n.pf-c-toolbar.pf-m-inset-xl {\n  --pf-c-toolbar--inset: var(--pf-global--spacer--xl);\n  --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n  --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n\n.pf-c-toolbar.pf-m-inset-2xl {\n  --pf-c-toolbar--inset: var(--pf-global--spacer--2xl);\n  --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n  --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n\n@media (min-width: 576px) {\n  .pf-c-toolbar.pf-m-inset-none-on-sm {\n    --pf-c-toolbar--inset: 0;\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-sm-on-sm {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--sm);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-md-on-sm {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--md);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-lg-on-sm {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--lg);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-xl-on-sm {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-2xl-on-sm {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--2xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); } }\n\n@media (min-width: 768px) {\n  .pf-c-toolbar.pf-m-inset-none-on-md {\n    --pf-c-toolbar--inset: 0;\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-sm-on-md {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--sm);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-md-on-md {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--md);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-lg-on-md {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--lg);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-xl-on-md {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-2xl-on-md {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--2xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); } }\n\n@media (min-width: 992px) {\n  .pf-c-toolbar.pf-m-inset-none-on-lg {\n    --pf-c-toolbar--inset: 0;\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-sm-on-lg {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--sm);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-md-on-lg {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--md);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-lg-on-lg {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--lg);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-xl-on-lg {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-2xl-on-lg {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--2xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); } }\n\n@media (min-width: 1200px) {\n  .pf-c-toolbar.pf-m-inset-none-on-xl {\n    --pf-c-toolbar--inset: 0;\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-sm-on-xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--sm);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-md-on-xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--md);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-lg-on-xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--lg);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-xl-on-xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-2xl-on-xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--2xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); } }\n\n@media (min-width: 1450px) {\n  .pf-c-toolbar.pf-m-inset-none-on-2xl {\n    --pf-c-toolbar--inset: 0;\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-sm-on-2xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--sm);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-md-on-2xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--md);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-lg-on-2xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--lg);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-xl-on-2xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); }\n  .pf-c-toolbar.pf-m-inset-2xl-on-2xl {\n    --pf-c-toolbar--inset: var(--pf-global--spacer--2xl);\n    --pf-c-toolbar__content--PaddingRight: var(--pf-c-toolbar--inset);\n    --pf-c-toolbar__content--PaddingLeft: var(--pf-c-toolbar--inset); } }\n\n.pf-c-toolbar__content-section > :last-child {\n  --pf-c-toolbar--spacer: 0; }\n\n.pf-c-date-picker {\n  --pf-c-date-picker--m-top__calendar--Top: 0;\n  --pf-c-date-picker--m-top__calendar--TranslateY: calc(-100% - var(--pf-global--spacer--xs));\n  --pf-c-date-picker__helper-text--MarginTop: var(--pf-global--spacer--xs);\n  --pf-c-date-picker__helper-text--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-date-picker__helper-text--Color: var(--pf-global--Color--100);\n  --pf-c-date-picker__helper-text--m-error--Color: var(--pf-global--danger-color--100);\n  --pf-c-date-picker__calendar--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-date-picker__calendar--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-date-picker__calendar--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-date-picker__calendar--Top: calc(100% + var(--pf-global--spacer--xs));\n  --pf-c-date-picker__calendar--Right: auto;\n  --pf-c-date-picker__calendar--Left: 0;\n  --pf-c-date-picker__calendar--m-align-right--Right: 0;\n  --pf-c-date-picker__calendar--m-align-right--Left: auto;\n  position: relative; }\n\n.pf-c-date-picker__helper-text {\n  margin-top: var(--pf-c-date-picker__helper-text--MarginTop);\n  font-size: var(--pf-c-date-picker__helper-text--FontSize);\n  color: var(--pf-c-date-picker__helper-text--Color); }\n  .pf-c-date-picker__helper-text.pf-m-error {\n    --pf-c-date-picker__helper-text--Color: var(--pf-c-date-picker__helper-text--m-error--Color); }\n\n.pf-c-date-picker__calendar {\n  position: absolute;\n  top: var(--pf-c-date-picker__calendar--Top);\n  right: var(--pf-c-date-picker__calendar--Right);\n  left: var(--pf-c-date-picker__calendar--Left);\n  z-index: var(--pf-c-date-picker__calendar--ZIndex);\n  background-color: var(--pf-c-date-picker__calendar--BackgroundColor);\n  box-shadow: var(--pf-c-date-picker__calendar--BoxShadow); }\n  .pf-c-date-picker__calendar.pf-m-align-right {\n    --pf-c-date-picker__calendar--Right: var(--pf-c-date-picker__calendar--m-align-right--Right);\n    --pf-c-date-picker__calendar--Left: var(--pf-c-date-picker__calendar--m-align-right--Left); }\n  .pf-c-date-picker.pf-m-top .pf-c-date-picker__calendar {\n    --pf-c-date-picker__calendar--Top: var(--pf-c-date-picker--m-top__calendar--Top);\n    transform: translateY(var(--pf-c-date-picker--m-top__calendar--TranslateY)); }\n\n.pf-c-divider {\n  --pf-c-divider--Height: var(--pf-global--BorderWidth--sm);\n  --pf-c-divider--BackgroundColor: var(--pf-global--BorderColor--100);\n  --pf-c-divider--after--Height: var(--pf-c-divider--Height);\n  --pf-c-divider--after--BackgroundColor: var(--pf-c-divider--BackgroundColor);\n  --pf-c-divider--after--FlexBasis: 100%;\n  --pf-c-divider--after--Inset: 0%;\n  --pf-c-divider--m-vertical--after--FlexBasis: 100%;\n  --pf-c-divider--m-vertical--after--Width: var(--pf-global--BorderWidth--sm);\n  display: flex;\n  align-items: center;\n  align-self: stretch;\n  justify-content: center;\n  width: 100%;\n  border: 0; }\n  .pf-c-divider::after {\n    flex-basis: calc(var(--pf-c-divider--after--FlexBasis) - calc(var(--pf-c-divider--after--Inset) * 2));\n    align-self: stretch;\n    height: var(--pf-c-divider--after--Height);\n    content: "";\n    background-color: var(--pf-c-divider--after--BackgroundColor);\n    justify-self: center; }\n  .pf-c-divider.pf-m-vertical {\n    display: inline-flex;\n    flex-direction: column;\n    width: auto;\n    height: inherit;\n    min-height: 100%;\n    max-height: 100%; }\n    .pf-c-divider.pf-m-vertical::after {\n      flex-basis: calc(var(--pf-c-divider--m-vertical--after--FlexBasis) - var(--pf-c-divider--after--Inset));\n      width: var(--pf-c-divider--m-vertical--after--Width); }\n  .pf-c-divider.pf-m-inset-none {\n    --pf-c-divider--after--Inset: 0%; }\n  .pf-c-divider.pf-m-inset-xs {\n    --pf-c-divider--after--Inset: var(--pf-global--spacer--xs); }\n  .pf-c-divider.pf-m-inset-sm {\n    --pf-c-divider--after--Inset: var(--pf-global--spacer--sm); }\n  .pf-c-divider.pf-m-inset-md {\n    --pf-c-divider--after--Inset: var(--pf-global--spacer--md); }\n  .pf-c-divider.pf-m-inset-lg {\n    --pf-c-divider--after--Inset: var(--pf-global--spacer--lg); }\n  .pf-c-divider.pf-m-inset-xl {\n    --pf-c-divider--after--Inset: var(--pf-global--spacer--xl); }\n  .pf-c-divider.pf-m-inset-2xl {\n    --pf-c-divider--after--Inset: var(--pf-global--spacer--2xl); }\n  .pf-c-divider.pf-m-inset-3xl {\n    --pf-c-divider--after--Inset: var(--pf-global--spacer--3xl); }\n  @media (min-width: 576px) {\n    .pf-c-divider.pf-m-inset-none-on-sm {\n      --pf-c-divider--after--Inset: 0%; }\n    .pf-c-divider.pf-m-inset-xs-on-sm {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xs); }\n    .pf-c-divider.pf-m-inset-sm-on-sm {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--sm); }\n    .pf-c-divider.pf-m-inset-md-on-sm {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--md); }\n    .pf-c-divider.pf-m-inset-lg-on-sm {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--lg); }\n    .pf-c-divider.pf-m-inset-xl-on-sm {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xl); }\n    .pf-c-divider.pf-m-inset-2xl-on-sm {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--2xl); }\n    .pf-c-divider.pf-m-inset-3xl-on-sm {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--3xl); } }\n  @media (min-width: 768px) {\n    .pf-c-divider.pf-m-inset-none-on-md {\n      --pf-c-divider--after--Inset: 0%; }\n    .pf-c-divider.pf-m-inset-xs-on-md {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xs); }\n    .pf-c-divider.pf-m-inset-sm-on-md {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--sm); }\n    .pf-c-divider.pf-m-inset-md-on-md {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--md); }\n    .pf-c-divider.pf-m-inset-lg-on-md {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--lg); }\n    .pf-c-divider.pf-m-inset-xl-on-md {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xl); }\n    .pf-c-divider.pf-m-inset-2xl-on-md {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--2xl); }\n    .pf-c-divider.pf-m-inset-3xl-on-md {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--3xl); } }\n  @media (min-width: 992px) {\n    .pf-c-divider.pf-m-inset-none-on-lg {\n      --pf-c-divider--after--Inset: 0%; }\n    .pf-c-divider.pf-m-inset-xs-on-lg {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xs); }\n    .pf-c-divider.pf-m-inset-sm-on-lg {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--sm); }\n    .pf-c-divider.pf-m-inset-md-on-lg {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--md); }\n    .pf-c-divider.pf-m-inset-lg-on-lg {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--lg); }\n    .pf-c-divider.pf-m-inset-xl-on-lg {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xl); }\n    .pf-c-divider.pf-m-inset-2xl-on-lg {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--2xl); }\n    .pf-c-divider.pf-m-inset-3xl-on-lg {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--3xl); } }\n  @media (min-width: 1200px) {\n    .pf-c-divider.pf-m-inset-none-on-xl {\n      --pf-c-divider--after--Inset: 0%; }\n    .pf-c-divider.pf-m-inset-xs-on-xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xs); }\n    .pf-c-divider.pf-m-inset-sm-on-xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--sm); }\n    .pf-c-divider.pf-m-inset-md-on-xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--md); }\n    .pf-c-divider.pf-m-inset-lg-on-xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--lg); }\n    .pf-c-divider.pf-m-inset-xl-on-xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xl); }\n    .pf-c-divider.pf-m-inset-2xl-on-xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--2xl); }\n    .pf-c-divider.pf-m-inset-3xl-on-xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--3xl); } }\n  @media (min-width: 1450px) {\n    .pf-c-divider.pf-m-inset-none-on-2xl {\n      --pf-c-divider--after--Inset: 0%; }\n    .pf-c-divider.pf-m-inset-xs-on-2xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xs); }\n    .pf-c-divider.pf-m-inset-sm-on-2xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--sm); }\n    .pf-c-divider.pf-m-inset-md-on-2xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--md); }\n    .pf-c-divider.pf-m-inset-lg-on-2xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--lg); }\n    .pf-c-divider.pf-m-inset-xl-on-2xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--xl); }\n    .pf-c-divider.pf-m-inset-2xl-on-2xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--2xl); }\n    .pf-c-divider.pf-m-inset-3xl-on-2xl {\n      --pf-c-divider--after--Inset: var(--pf-global--spacer--3xl); } }\n\n.pf-c-drawer {\n  --pf-c-drawer__section--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-drawer__content--FlexBasis: 100%;\n  --pf-c-drawer__content--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-drawer__content--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-drawer__panel--FlexBasis: 100%;\n  --pf-c-drawer__panel--md--FlexBasis: 50%;\n  --pf-c-drawer__panel--MinWidth: 50%;\n  --pf-c-drawer__panel--MaxHeight: auto;\n  --pf-c-drawer--m-panel-bottom__panel--md--MinHeight: 50%;\n  --pf-c-drawer__panel--xl--MinWidth: 28.125rem;\n  --pf-c-drawer__panel--xl--FlexBasis: 28.125rem;\n  --pf-c-drawer--m-panel-bottom__panel--xl--MinHeight: 18.75rem;\n  --pf-c-drawer--m-panel-bottom__panel--xl--FlexBasis: 18.75rem;\n  --pf-c-drawer__panel--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-drawer__panel--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-drawer__panel--TransitionDuration: var(--pf-global--TransitionDuration);\n  --pf-c-drawer__panel--TransitionProperty: margin, transform, box-shadow;\n  --pf-c-drawer__panel--m-resizable--PaddingLeft: var(--pf-c-drawer__splitter--m-vertical--Width);\n  --pf-c-drawer--m-panel-left__panel--m-resizable--PaddingRight: var(--pf-c-drawer__splitter--m-vertical--Width);\n  --pf-c-drawer--m-panel-bottom__panel--m-resizable--PaddingTop: var(--pf-c-drawer__splitter--Height);\n  --pf-c-drawer--child--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-drawer--child--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-drawer--child--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-drawer--child--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-drawer--child--md--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-drawer--child--md--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-drawer--child--md--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-drawer--child--md--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-drawer--child--m-padding--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-drawer--child--m-padding--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-drawer--child--m-padding--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-drawer--child--m-padding--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-drawer--child--m-padding--md--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-drawer--child--m-padding--md--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-drawer--child--m-padding--md--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-drawer--child--m-padding--md--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-drawer__content--child--PaddingTop: 0;\n  --pf-c-drawer__content--child--PaddingRight: 0;\n  --pf-c-drawer__content--child--PaddingBottom: 0;\n  --pf-c-drawer__content--child--PaddingLeft: 0;\n  --pf-c-drawer__splitter--Top: 0;\n  --pf-c-drawer__splitter--Right: auto;\n  --pf-c-drawer__splitter--Bottom: 0;\n  --pf-c-drawer__splitter--Left: 0;\n  --pf-c-drawer__splitter--Height: 0.5625rem;\n  --pf-c-drawer__splitter--Width: 100%;\n  --pf-c-drawer__splitter--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-drawer__splitter--Cursor: row-resize;\n  --pf-c-drawer__splitter--m-vertical--Height: 100%;\n  --pf-c-drawer__splitter--m-vertical--Width: 0.5625rem;\n  --pf-c-drawer__splitter--m-vertical--Cursor: col-resize;\n  --pf-c-drawer--m-inline__splitter--focus--OutlineOffset: -0.0625rem;\n  --pf-c-drawer__splitter--after--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-drawer__splitter--after--border-width--base: var(--pf-global--BorderWidth--sm);\n  --pf-c-drawer__splitter--after--BorderTopWidth: 0;\n  --pf-c-drawer__splitter--after--BorderRightWidth: var(--pf-c-drawer__splitter--after--border-width--base);\n  --pf-c-drawer__splitter--after--BorderBottomWidth: 0;\n  --pf-c-drawer__splitter--after--BorderLeftWidth: 0;\n  --pf-c-drawer--m-panel-left__splitter--after--BorderLeftWidth: var(--pf-c-drawer__splitter--after--border-width--base);\n  --pf-c-drawer--m-panel-bottom__splitter--after--BorderBottomWidth: var(--pf-c-drawer__splitter--after--border-width--base);\n  --pf-c-drawer--m-inline__splitter--m-vertical--Width: 0.625rem;\n  --pf-c-drawer--m-inline__splitter-handle--Left: 50%;\n  --pf-c-drawer--m-inline__splitter--after--BorderRightWidth: var(--pf-c-drawer__splitter--after--border-width--base);\n  --pf-c-drawer--m-inline__splitter--after--BorderLeftWidth: var(--pf-c-drawer__splitter--after--border-width--base);\n  --pf-c-drawer--m-inline--m-panel-bottom__splitter--Height: 0.625rem;\n  --pf-c-drawer--m-inline--m-panel-bottom__splitter-handle--Top: 50%;\n  --pf-c-drawer--m-inline--m-panel-bottom__splitter--after--BorderTopWidth: var(--pf-c-drawer__splitter--after--border-width--base);\n  --pf-c-drawer__splitter-handle--Top: 50%;\n  --pf-c-drawer__splitter-handle--Left: calc(50% - var(--pf-c-drawer__splitter--after--border-width--base));\n  --pf-c-drawer--m-panel-left__splitter-handle--Left: 50%;\n  --pf-c-drawer--m-panel-bottom__splitter-handle--Top: calc(50% - var(--pf-c-drawer__splitter--after--border-width--base));\n  --pf-c-drawer__splitter-handle--after--BorderColor: var(--pf-global--Color--200);\n  --pf-c-drawer__splitter-handle--after--BorderTopWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-drawer__splitter-handle--after--BorderRightWidth: 0;\n  --pf-c-drawer__splitter-handle--after--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-drawer__splitter-handle--after--BorderLeftWidth: 0;\n  --pf-c-drawer__splitter--hover__splitter-handle--after--BorderColor: var(--pf-global--Color--100);\n  --pf-c-drawer__splitter--focus__splitter-handle--after--BorderColor: var(--pf-global--Color--100);\n  --pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderTopWidth: 0;\n  --pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderRightWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderBottomWidth: 0;\n  --pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderLeftWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-drawer__splitter-handle--after--Width: 0.75rem;\n  --pf-c-drawer__splitter-handle--after--Height: 0.25rem;\n  --pf-c-drawer__splitter--m-vertical__splitter-handle--after--Width: 0.25rem;\n  --pf-c-drawer__splitter--m-vertical__splitter-handle--after--Height: 0.75rem;\n  --pf-c-drawer__actions--MarginTop: calc(var(pf-global--spacer--form-element) * -1);\n  --pf-c-drawer__actions--MarginRight: calc(var(pf-global--spacer--form-element) * -1);\n  --pf-c-drawer__panel--BoxShadow: none;\n  --pf-c-drawer--m-expanded__panel--BoxShadow: var(--pf-global--BoxShadow--lg-left);\n  --pf-c-drawer--m-expanded--m-panel-left__panel--BoxShadow: var(--pf-global--BoxShadow--lg-right);\n  --pf-c-drawer--m-expanded--m-panel-bottom__panel--BoxShadow: var(--pf-global--BoxShadow--lg-top);\n  --pf-c-drawer__panel--after--Width: var(--pf-global--BorderWidth--sm);\n  --pf-c-drawer--m-panel-bottom__panel--after--Height: var(--pf-global--BorderWidth--sm);\n  --pf-c-drawer__panel--after--BackgroundColor: transparent;\n  --pf-c-drawer--m-inline--m-expanded__panel--after--BackgroundColor: var(--pf-global--BorderColor--100);\n  --pf-c-drawer--m-inline__panel--PaddingLeft: var(--pf-c-drawer__panel--after--Width);\n  --pf-c-drawer--m-panel-left--m-inline__panel--PaddingRight: var(--pf-c-drawer__panel--after--Width);\n  --pf-c-drawer--m-panel-bottom--m-inline__panel--PaddingTop: var(--pf-c-drawer__panel--after--Width);\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  overflow-x: hidden; }\n  @media screen and (min-width: 768px) {\n    .pf-c-drawer {\n      --pf-c-drawer__panel--FlexBasis: var(--pf-c-drawer__panel--md--FlexBasis);\n      --pf-c-drawer--child--PaddingTop: var(--pf-c-drawer--child--md--PaddingTop);\n      --pf-c-drawer--child--PaddingRight: var(--pf-c-drawer--child--md--PaddingRight);\n      --pf-c-drawer--child--PaddingBottom: var(--pf-c-drawer--child--md--PaddingBottom);\n      --pf-c-drawer--child--PaddingLeft: var(--pf-c-drawer--child--md--PaddingLeft);\n      --pf-c-drawer--child--m-padding--PaddingTop: var(--pf-c-drawer--child--m-padding--md--PaddingTop);\n      --pf-c-drawer--child--m-padding--PaddingRight: var(--pf-c-drawer--child--m-padding--md--PaddingRight);\n      --pf-c-drawer--child--m-padding--PaddingBottom: var(--pf-c-drawer--child--m-padding--md--PaddingBottom);\n      --pf-c-drawer--child--m-padding--PaddingLeft: var(--pf-c-drawer--child--m-padding--md--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-drawer {\n      --pf-c-drawer__panel--FlexBasis: var(--pf-c-drawer__panel--xl--FlexBasis);\n      --pf-c-drawer__panel--MinWidth: var(--pf-c-drawer__panel--xl--MinWidth); }\n      .pf-c-drawer.pf-m-panel-bottom {\n        --pf-c-drawer__panel--MinWidth: auto;\n        --pf-c-drawer__panel--FlexBasis: var(--pf-c-drawer--m-panel-bottom__panel--xl--FlexBasis);\n        --pf-c-drawer__panel--MinHeight: var(--pf-c-drawer--m-panel-bottom__panel--xl--MinHeight); } }\n  .pf-c-drawer.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__panel , .pf-c-drawer.pf-m-static > .pf-c-drawer__main > .pf-c-drawer__panel {\n    padding-left: var(--pf-c-drawer--m-inline__panel--PaddingLeft); }\n  .pf-c-drawer.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    order: 0;\n    margin-right: calc(var(--pf-c-drawer__panel--FlexBasis) * -1);\n    transform: translateX(-100%); }\n  .pf-c-drawer.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__content {\n    order: 1; }\n  .pf-c-drawer.pf-m-panel-bottom > .pf-c-drawer__main {\n    flex-direction: column; }\n  .pf-c-drawer.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(-100%); }\n  .pf-c-drawer.pf-m-expanded.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-expanded.pf-m-panel-bottom > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translate(0, -100%); }\n\n.pf-c-drawer__section {\n  flex-grow: 0;\n  background-color: var(--pf-c-drawer__section--BackgroundColor); }\n  .pf-c-drawer__section.pf-m-no-background {\n    background-color: transparent; }\n\n.pf-c-drawer__main {\n  display: flex;\n  flex-grow: 1;\n  overflow: hidden; }\n\n.pf-c-drawer__content,\n.pf-c-drawer__panel {\n  display: flex;\n  flex-direction: column;\n  flex-shrink: 0;\n  overflow: auto; }\n\n.pf-c-drawer__content {\n  z-index: var(--pf-c-drawer__content--ZIndex);\n  flex-basis: var(--pf-c-drawer__content--FlexBasis);\n  order: 0;\n  background-color: var(--pf-c-drawer__content--BackgroundColor); }\n  .pf-c-drawer__content > .pf-c-drawer__body {\n    padding: var(--pf-c-drawer__content--child--PaddingTop) var(--pf-c-drawer__content--child--PaddingRight) var(--pf-c-drawer__content--child--PaddingBottom) var(--pf-c-drawer__content--child--PaddingLeft); }\n  .pf-c-drawer__content.pf-m-no-background {\n    background-color: transparent; }\n\n.pf-c-drawer__panel {\n  position: relative;\n  z-index: var(--pf-c-drawer__panel--ZIndex);\n  flex-basis: var(--pf-c-drawer__panel--FlexBasis);\n  order: 1;\n  max-height: var(--pf-c-drawer__panel--MaxHeight);\n  overflow: auto;\n  background-color: var(--pf-c-drawer__panel--BackgroundColor);\n  box-shadow: var(--pf-c-drawer__panel--BoxShadow);\n  transition-duration: var(--pf-c-drawer__panel--TransitionDuration);\n  transition-property: var(--pf-c-drawer__panel--TransitionProperty);\n  -webkit-overflow-scrolling: touch; }\n  .pf-c-drawer__panel::after {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: var(--pf-c-drawer__panel--after--Width);\n    height: 100%;\n    content: "";\n    background-color: var(--pf-c-drawer__panel--after--BackgroundColor); }\n  .pf-c-drawer__panel.pf-m-no-background {\n    background-color: transparent; }\n\n@keyframes pf-remove-tab-focus {\n  to {\n    visibility: hidden; } }\n\n.pf-c-drawer__panel[hidden] {\n  animation-name: pf-remove-tab-focus;\n  animation-delay: var(--pf-c-drawer__panel--TransitionDuration);\n  animation-fill-mode: forwards; }\n\n.pf-c-drawer__head {\n  display: grid;\n  grid-template-columns: auto;\n  grid-auto-columns: max-content; }\n  .pf-c-drawer__head > * {\n    grid-column: 1; }\n\n.pf-c-drawer__actions {\n  grid-column: 2;\n  grid-row: 1;\n  display: flex;\n  align-self: baseline;\n  margin-top: var(--pf-c-drawer__actions--MarginTop);\n  margin-right: var(--pf-c-drawer__actions--MarginRight); }\n\n.pf-c-drawer__body {\n  min-height: 0;\n  padding: var(--pf-c-drawer--child--PaddingTop) var(--pf-c-drawer--child--PaddingRight) var(--pf-c-drawer--child--PaddingBottom) var(--pf-c-drawer--child--PaddingLeft); }\n  .pf-c-drawer__body.pf-m-no-padding {\n    padding: 0; }\n    .pf-c-drawer__body.pf-m-no-padding > .pf-c-drawer__actions,\n    .pf-c-drawer__body.pf-m-no-padding > .pf-c-drawer__head > .pf-c-drawer__actions {\n      margin-top: 0;\n      margin-right: 0; }\n  .pf-c-drawer__body.pf-m-padding {\n    padding: var(--pf-c-drawer--child--m-padding--PaddingTop) var(--pf-c-drawer--child--m-padding--PaddingRight) var(--pf-c-drawer--child--m-padding--PaddingBottom) var(--pf-c-drawer--child--m-padding--PaddingLeft); }\n  .pf-c-drawer__body:not(.pf-m-no-padding) + * {\n    padding-top: 0; }\n  .pf-c-drawer__body:last-child {\n    flex: 1 1; }\n\n.pf-c-drawer__body > .pf-c-page__main {\n  min-height: 100%; }\n\n.pf-c-drawer__splitter {\n  position: absolute;\n  top: var(--pf-c-drawer__splitter--Top);\n  right: var(--pf-c-drawer__splitter--Right);\n  bottom: var(--pf-c-drawer__splitter--Bottom);\n  left: var(--pf-c-drawer__splitter--Left);\n  display: none;\n  width: var(--pf-c-drawer__splitter--Width);\n  height: var(--pf-c-drawer__splitter--Height);\n  cursor: var(--pf-c-drawer__splitter--Cursor);\n  visibility: hidden;\n  background-color: var(--pf-c-drawer__splitter--BackgroundColor); }\n  .pf-c-drawer__splitter.pf-m-vertical {\n    --pf-c-drawer__splitter--Height: var(--pf-c-drawer__splitter--m-vertical--Height);\n    --pf-c-drawer__splitter--Width: var(--pf-c-drawer__splitter--m-vertical--Width);\n    --pf-c-drawer__splitter--Cursor: var(--pf-c-drawer__splitter--m-vertical--Cursor);\n    --pf-c-drawer__splitter-handle--after--Width: var(--pf-c-drawer__splitter--m-vertical__splitter-handle--after--Width);\n    --pf-c-drawer__splitter-handle--after--Height: var(--pf-c-drawer__splitter--m-vertical__splitter-handle--after--Height);\n    --pf-c-drawer__splitter-handle--after--BorderTopWidth: var(--pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderTopWidth);\n    --pf-c-drawer__splitter-handle--after--BorderRightWidth: var(--pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderRightWidth);\n    --pf-c-drawer__splitter-handle--after--BorderBottomWidth: var(--pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderBottomWidth);\n    --pf-c-drawer__splitter-handle--after--BorderLeftWidth: var(--pf-c-drawer__splitter--m-vertical__splitter-handle--after--BorderLeftWidth); }\n  .pf-c-drawer__splitter:hover {\n    --pf-c-drawer__splitter-handle--after--BorderColor: var(--pf-c-drawer__splitter--hover__splitter-handle--after--BorderColor); }\n  .pf-c-drawer__splitter:focus {\n    --pf-c-drawer__splitter-handle--after--BorderColor: var(--pf-c-drawer__splitter--focus__splitter-handle--after--BorderColor); }\n  .pf-c-drawer__splitter::after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    border: solid var(--pf-c-drawer__splitter--after--BorderColor);\n    border-width: var(--pf-c-drawer__splitter--after--BorderTopWidth) var(--pf-c-drawer__splitter--after--BorderRightWidth) var(--pf-c-drawer__splitter--after--BorderBottomWidth) var(--pf-c-drawer__splitter--after--BorderLeftWidth); }\n\n.pf-c-drawer__splitter-handle {\n  position: absolute;\n  top: var(--pf-c-drawer__splitter-handle--Top);\n  left: var(--pf-c-drawer__splitter-handle--Left);\n  transform: translate(-50%, -50%); }\n  .pf-c-drawer__splitter-handle::after {\n    display: block;\n    width: var(--pf-c-drawer__splitter-handle--after--Width);\n    height: var(--pf-c-drawer__splitter-handle--after--Height);\n    content: "";\n    border-color: var(--pf-c-drawer__splitter-handle--after--BorderColor);\n    border-style: solid;\n    border-width: var(--pf-c-drawer__splitter-handle--after--BorderTopWidth) var(--pf-c-drawer__splitter-handle--after--BorderRightWidth) var(--pf-c-drawer__splitter-handle--after--BorderBottomWidth) var(--pf-c-drawer__splitter-handle--after--BorderLeftWidth); }\n\n@media screen and (min-width: 768px) {\n  .pf-c-drawer {\n    min-width: var(--pf-c-drawer__panel--MinWidth); }\n    .pf-c-drawer.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n      box-shadow: var(--pf-c-drawer--m-expanded__panel--BoxShadow); }\n    .pf-c-drawer > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-resizable {\n      padding-left: var(--pf-c-drawer__panel--m-resizable--PaddingLeft); }\n      .pf-c-drawer > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-resizable::after {\n        width: 0;\n        height: 0; }\n  .pf-c-drawer.pf-m-panel-left {\n    --pf-c-drawer--m-expanded__panel--BoxShadow: var(--pf-c-drawer--m-expanded--m-panel-left__panel--BoxShadow); }\n    .pf-c-drawer.pf-m-panel-left.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__panel , .pf-c-drawer.pf-m-panel-left.pf-m-static > .pf-c-drawer__main > .pf-c-drawer__panel {\n      padding-right: var(--pf-c-drawer--m-panel-left--m-inline__panel--PaddingRight);\n      padding-left: 0; }\n    .pf-c-drawer.pf-m-panel-left.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n      transform: translateX(0); }\n    .pf-c-drawer.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel::after {\n      right: 0;\n      left: auto; }\n    .pf-c-drawer.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-resizable {\n      padding-right: var(--pf-c-drawer--m-panel-left__panel--m-resizable--PaddingRight);\n      padding-left: 0; }\n      .pf-c-drawer.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-resizable > .pf-c-drawer__splitter {\n        --pf-c-drawer__splitter--Right: 0;\n        --pf-c-drawer__splitter--Left: auto;\n        --pf-c-drawer__splitter-handle--Left: var(--pf-c-drawer--m-panel-left__splitter-handle--Left);\n        --pf-c-drawer__splitter--after--BorderRightWidth: 0;\n        --pf-c-drawer__splitter--after--BorderLeftWidth: var(--pf-c-drawer--m-panel-left__splitter--after--BorderLeftWidth); }\n  .pf-c-drawer.pf-m-panel-bottom {\n    --pf-c-drawer--m-expanded__panel--BoxShadow: var(--pf-c-drawer--m-expanded--m-panel-bottom__panel--BoxShadow);\n    --pf-c-drawer__panel--MaxHeight: 100%;\n    min-width: auto;\n    min-height: var(--pf-c-drawer--m-panel-bottom__panel--md--MinHeight); }\n    .pf-c-drawer.pf-m-panel-bottom.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__panel , .pf-c-drawer.pf-m-panel-bottom.pf-m-static > .pf-c-drawer__main > .pf-c-drawer__panel {\n      padding-top: var(--pf-c-drawer--m-panel-bottom--m-inline__panel--PaddingTop);\n      padding-left: 0; }\n    .pf-c-drawer.pf-m-panel-bottom > .pf-c-drawer__main > .pf-c-drawer__panel::after {\n      top: 0;\n      left: auto;\n      width: 100%;\n      height: var(--pf-c-drawer--m-panel-bottom__panel--after--Height); }\n    .pf-c-drawer.pf-m-panel-bottom > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-resizable {\n      padding-top: var(--pf-c-drawer--m-panel-bottom__panel--m-resizable--PaddingTop);\n      padding-left: 0; }\n      .pf-c-drawer.pf-m-panel-bottom > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-resizable > .pf-c-drawer__splitter {\n        --pf-c-drawer__splitter--Top: 0;\n        --pf-c-drawer__splitter--Right: 0;\n        --pf-c-drawer__splitter--Bottom: auto;\n        --pf-c-drawer__splitter-handle--Top: var(--pf-c-drawer--m-panel-bottom__splitter-handle--Top);\n        --pf-c-drawer__splitter--after--BorderRightWidth: 0;\n        --pf-c-drawer__splitter--after--BorderBottomWidth: var(--pf-c-drawer--m-panel-bottom__splitter--after--BorderBottomWidth); }\n  .pf-c-drawer.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-resizable > .pf-c-drawer__splitter {\n    --pf-c-drawer__splitter--m-vertical--Width: var(--pf-c-drawer--m-inline__splitter--m-vertical--Width);\n    --pf-c-drawer__splitter-handle--Left: var(--pf-c-drawer--m-inline__splitter-handle--Left);\n    --pf-c-drawer__splitter--after--BorderRightWidth: var(--pf-c-drawer--m-inline__splitter--after--BorderRightWidth);\n    --pf-c-drawer__splitter--after--BorderLeftWidth: var(--pf-c-drawer--m-inline__splitter--after--BorderLeftWidth);\n    outline-offset: var(--pf-c-drawer--m-inline__splitter--focus--OutlineOffset); }\n  .pf-c-drawer.pf-m-inline.pf-m-panel-bottom > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-resizable > .pf-c-drawer__splitter {\n    --pf-c-drawer__splitter--Height: var(--pf-c-drawer--m-inline--m-panel-bottom__splitter--Height);\n    --pf-c-drawer__splitter-handle--Top: var(--pf-c-drawer--m-inline--m-panel-bottom__splitter-handle--Top);\n    --pf-c-drawer__splitter--after--BorderTopWidth: var(--pf-c-drawer--m-inline--m-panel-bottom__splitter--after--BorderTopWidth);\n    --pf-c-drawer__splitter--after--BorderRightWidth: 0;\n    --pf-c-drawer__splitter--after--BorderLeftWidth: 0; }\n  .pf-c-drawer > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-no-border,\n  .pf-c-drawer.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel.pf-m-no-border {\n    --pf-c-drawer--m-expanded__panel--BoxShadow: none; }\n  .pf-c-drawer__splitter {\n    display: block;\n    visibility: visible; } }\n\n@media (min-width: 768px) {\n  .pf-c-drawer__panel.pf-m-width-25 {\n    --pf-c-drawer__panel--FlexBasis: 25%; }\n  .pf-c-drawer__panel.pf-m-width-33 {\n    --pf-c-drawer__panel--FlexBasis: 33%; }\n  .pf-c-drawer__panel.pf-m-width-50 {\n    --pf-c-drawer__panel--FlexBasis: 50%; }\n  .pf-c-drawer__panel.pf-m-width-66 {\n    --pf-c-drawer__panel--FlexBasis: 66%; }\n  .pf-c-drawer__panel.pf-m-width-75 {\n    --pf-c-drawer__panel--FlexBasis: 75%; }\n  .pf-c-drawer__panel.pf-m-width-100 {\n    --pf-c-drawer__panel--FlexBasis: 100%; } }\n\n@media (min-width: 992px) {\n  .pf-c-drawer__panel.pf-m-width-25-on-lg {\n    --pf-c-drawer__panel--FlexBasis: 25%; }\n  .pf-c-drawer__panel.pf-m-width-33-on-lg {\n    --pf-c-drawer__panel--FlexBasis: 33%; }\n  .pf-c-drawer__panel.pf-m-width-50-on-lg {\n    --pf-c-drawer__panel--FlexBasis: 50%; }\n  .pf-c-drawer__panel.pf-m-width-66-on-lg {\n    --pf-c-drawer__panel--FlexBasis: 66%; }\n  .pf-c-drawer__panel.pf-m-width-75-on-lg {\n    --pf-c-drawer__panel--FlexBasis: 75%; }\n  .pf-c-drawer__panel.pf-m-width-100-on-lg {\n    --pf-c-drawer__panel--FlexBasis: 100%; } }\n\n@media (min-width: 1200px) {\n  .pf-c-drawer__panel.pf-m-width-25-on-xl {\n    --pf-c-drawer__panel--FlexBasis: 25%; }\n  .pf-c-drawer__panel.pf-m-width-33-on-xl {\n    --pf-c-drawer__panel--FlexBasis: 33%; }\n  .pf-c-drawer__panel.pf-m-width-50-on-xl {\n    --pf-c-drawer__panel--FlexBasis: 50%; }\n  .pf-c-drawer__panel.pf-m-width-66-on-xl {\n    --pf-c-drawer__panel--FlexBasis: 66%; }\n  .pf-c-drawer__panel.pf-m-width-75-on-xl {\n    --pf-c-drawer__panel--FlexBasis: 75%; }\n  .pf-c-drawer__panel.pf-m-width-100-on-xl {\n    --pf-c-drawer__panel--FlexBasis: 100%; } }\n\n@media (min-width: 1450px) {\n  .pf-c-drawer__panel.pf-m-width-25-on-2xl {\n    --pf-c-drawer__panel--FlexBasis: 25%; }\n  .pf-c-drawer__panel.pf-m-width-33-on-2xl {\n    --pf-c-drawer__panel--FlexBasis: 33%; }\n  .pf-c-drawer__panel.pf-m-width-50-on-2xl {\n    --pf-c-drawer__panel--FlexBasis: 50%; }\n  .pf-c-drawer__panel.pf-m-width-66-on-2xl {\n    --pf-c-drawer__panel--FlexBasis: 66%; }\n  .pf-c-drawer__panel.pf-m-width-75-on-2xl {\n    --pf-c-drawer__panel--FlexBasis: 75%; }\n  .pf-c-drawer__panel.pf-m-width-100-on-2xl {\n    --pf-c-drawer__panel--FlexBasis: 100%; } }\n\n@media (min-width: 768px) {\n  .pf-c-drawer.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__content,\n  .pf-c-drawer.pf-m-static > .pf-c-drawer__main > .pf-c-drawer__content {\n    flex-shrink: 1; }\n  .pf-c-drawer.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__panel,\n  .pf-c-drawer.pf-m-static > .pf-c-drawer__main > .pf-c-drawer__panel {\n    --pf-c-drawer--m-expanded__panel--BoxShadow: none; }\n    .pf-c-drawer.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__panel:not(.pf-m-no-border)::after,\n    .pf-c-drawer.pf-m-static > .pf-c-drawer__main > .pf-c-drawer__panel:not(.pf-m-no-border)::after {\n      background-color: var(--pf-c-drawer--m-inline--m-expanded__panel--after--BackgroundColor); }\n  .pf-c-drawer.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__content {\n    overflow-x: auto; }\n  .pf-c-drawer.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-left: calc(var(--pf-c-drawer__panel--FlexBasis) * -1);\n    transform: translateX(100%); }\n  .pf-c-drawer.pf-m-inline.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-left: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-inline > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: unset;\n    visibility: visible; }\n  .pf-c-drawer.pf-m-inline.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: calc(var(--pf-c-drawer__panel--FlexBasis) * -1);\n    margin-left: 0;\n    transform: translateX(-100%); }\n  .pf-c-drawer.pf-m-inline.pf-m-panel-left.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-inline.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: unset;\n    visibility: visible; }\n  .pf-c-drawer.pf-m-static > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static.pf-m-panel-bottom > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: none;\n    visibility: hidden; } }\n\n@media (min-width: 992px) {\n  .pf-c-drawer.pf-m-inline-on-lg > .pf-c-drawer__main > .pf-c-drawer__content,\n  .pf-c-drawer.pf-m-static-on-lg > .pf-c-drawer__main > .pf-c-drawer__content {\n    flex-shrink: 1; }\n  .pf-c-drawer.pf-m-inline-on-lg > .pf-c-drawer__main > .pf-c-drawer__panel,\n  .pf-c-drawer.pf-m-static-on-lg > .pf-c-drawer__main > .pf-c-drawer__panel {\n    --pf-c-drawer--m-expanded__panel--BoxShadow: none; }\n    .pf-c-drawer.pf-m-inline-on-lg > .pf-c-drawer__main > .pf-c-drawer__panel:not(.pf-m-no-border)::after,\n    .pf-c-drawer.pf-m-static-on-lg > .pf-c-drawer__main > .pf-c-drawer__panel:not(.pf-m-no-border)::after {\n      background-color: var(--pf-c-drawer--m-inline--m-expanded__panel--after--BackgroundColor); }\n  .pf-c-drawer.pf-m-inline-on-lg > .pf-c-drawer__main > .pf-c-drawer__content {\n    overflow-x: auto; }\n  .pf-c-drawer.pf-m-inline-on-lg > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-left: calc(var(--pf-c-drawer__panel--FlexBasis) * -1);\n    transform: translateX(100%); }\n  .pf-c-drawer.pf-m-inline-on-lg.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-left: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-inline-on-lg > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: unset;\n    visibility: visible; }\n  .pf-c-drawer.pf-m-inline-on-lg.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: calc(var(--pf-c-drawer__panel--FlexBasis) * -1);\n    margin-left: 0;\n    transform: translateX(-100%); }\n  .pf-c-drawer.pf-m-inline-on-lg.pf-m-panel-left.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-inline-on-lg.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: unset;\n    visibility: visible; }\n  .pf-c-drawer.pf-m-static-on-lg > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static-on-lg.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static-on-lg.pf-m-panel-bottom > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static-on-lg > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: none;\n    visibility: hidden; } }\n\n@media (min-width: 1200px) {\n  .pf-c-drawer.pf-m-inline-on-xl > .pf-c-drawer__main > .pf-c-drawer__content,\n  .pf-c-drawer.pf-m-static-on-xl > .pf-c-drawer__main > .pf-c-drawer__content {\n    flex-shrink: 1; }\n  .pf-c-drawer.pf-m-inline-on-xl > .pf-c-drawer__main > .pf-c-drawer__panel,\n  .pf-c-drawer.pf-m-static-on-xl > .pf-c-drawer__main > .pf-c-drawer__panel {\n    --pf-c-drawer--m-expanded__panel--BoxShadow: none; }\n    .pf-c-drawer.pf-m-inline-on-xl > .pf-c-drawer__main > .pf-c-drawer__panel:not(.pf-m-no-border)::after,\n    .pf-c-drawer.pf-m-static-on-xl > .pf-c-drawer__main > .pf-c-drawer__panel:not(.pf-m-no-border)::after {\n      background-color: var(--pf-c-drawer--m-inline--m-expanded__panel--after--BackgroundColor); }\n  .pf-c-drawer.pf-m-inline-on-xl > .pf-c-drawer__main > .pf-c-drawer__content {\n    overflow-x: auto; }\n  .pf-c-drawer.pf-m-inline-on-xl > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-left: calc(var(--pf-c-drawer__panel--FlexBasis) * -1);\n    transform: translateX(100%); }\n  .pf-c-drawer.pf-m-inline-on-xl.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-left: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-inline-on-xl > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: unset;\n    visibility: visible; }\n  .pf-c-drawer.pf-m-inline-on-xl.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: calc(var(--pf-c-drawer__panel--FlexBasis) * -1);\n    margin-left: 0;\n    transform: translateX(-100%); }\n  .pf-c-drawer.pf-m-inline-on-xl.pf-m-panel-left.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-inline-on-xl.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: unset;\n    visibility: visible; }\n  .pf-c-drawer.pf-m-static-on-xl > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static-on-xl.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static-on-xl.pf-m-panel-bottom > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static-on-xl > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: none;\n    visibility: hidden; } }\n\n@media (min-width: 1450px) {\n  .pf-c-drawer.pf-m-inline-on-2xl > .pf-c-drawer__main > .pf-c-drawer__content,\n  .pf-c-drawer.pf-m-static-on-2xl > .pf-c-drawer__main > .pf-c-drawer__content {\n    flex-shrink: 1; }\n  .pf-c-drawer.pf-m-inline-on-2xl > .pf-c-drawer__main > .pf-c-drawer__panel,\n  .pf-c-drawer.pf-m-static-on-2xl > .pf-c-drawer__main > .pf-c-drawer__panel {\n    --pf-c-drawer--m-expanded__panel--BoxShadow: none; }\n    .pf-c-drawer.pf-m-inline-on-2xl > .pf-c-drawer__main > .pf-c-drawer__panel:not(.pf-m-no-border)::after,\n    .pf-c-drawer.pf-m-static-on-2xl > .pf-c-drawer__main > .pf-c-drawer__panel:not(.pf-m-no-border)::after {\n      background-color: var(--pf-c-drawer--m-inline--m-expanded__panel--after--BackgroundColor); }\n  .pf-c-drawer.pf-m-inline-on-2xl > .pf-c-drawer__main > .pf-c-drawer__content {\n    overflow-x: auto; }\n  .pf-c-drawer.pf-m-inline-on-2xl > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-left: calc(var(--pf-c-drawer__panel--FlexBasis) * -1);\n    transform: translateX(100%); }\n  .pf-c-drawer.pf-m-inline-on-2xl.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-left: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-inline-on-2xl > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: unset;\n    visibility: visible; }\n  .pf-c-drawer.pf-m-inline-on-2xl.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: calc(var(--pf-c-drawer__panel--FlexBasis) * -1);\n    margin-left: 0;\n    transform: translateX(-100%); }\n  .pf-c-drawer.pf-m-inline-on-2xl.pf-m-panel-left.pf-m-expanded > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-inline-on-2xl.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: unset;\n    visibility: visible; }\n  .pf-c-drawer.pf-m-static-on-2xl > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static-on-2xl.pf-m-panel-left > .pf-c-drawer__main > .pf-c-drawer__panel {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static-on-2xl.pf-m-panel-bottom > .pf-c-drawer__main > .pf-c-drawer__panel {\n    transform: translateX(0); }\n  .pf-c-drawer.pf-m-static-on-2xl > .pf-c-drawer__main > .pf-c-drawer__panel > .pf-c-drawer__body > .pf-c-drawer__head .pf-c-drawer__close {\n    display: none;\n    visibility: hidden; } }\n\n.pf-c-dropdown {\n  --pf-c-dropdown__toggle--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-dropdown__toggle--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__toggle--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-dropdown__toggle--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__toggle--MinWidth: var(--pf-global--target-size--MinWidth);\n  --pf-c-dropdown__toggle--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-dropdown__toggle--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-dropdown__toggle--Color: var(--pf-global--Color--100);\n  --pf-c-dropdown__toggle--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-dropdown__toggle--BackgroundColor: transparent;\n  --pf-c-dropdown__toggle--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-dropdown__toggle--before--BorderTopColor: var(--pf-global--BorderColor--300);\n  --pf-c-dropdown__toggle--before--BorderRightColor: var(--pf-global--BorderColor--300);\n  --pf-c-dropdown__toggle--before--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-dropdown__toggle--before--BorderLeftColor: var(--pf-global--BorderColor--300);\n  --pf-c-dropdown__toggle--hover--before--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-dropdown__toggle--active--before--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-dropdown__toggle--active--before--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-dropdown__toggle--focus--before--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-dropdown__toggle--focus--before--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-dropdown--m-expanded__toggle--before--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-dropdown--m-expanded__toggle--before--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-dropdown__toggle--disabled--BackgroundColor: var(--pf-global--disabled-color--300);\n  --pf-c-dropdown__toggle--m-plain--Color: var(--pf-global--Color--200);\n  --pf-c-dropdown__toggle--m-plain--hover--Color: var(--pf-global--Color--100);\n  --pf-c-dropdown__toggle--m-plain--disabled--Color: var(--pf-global--disabled-color--200);\n  --pf-c-dropdown__toggle--m-plain--child--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-dropdown__toggle--m-primary--Color: var(--pf-global--Color--light-100);\n  --pf-c-dropdown__toggle--m-primary--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-dropdown__toggle--m-primary--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-dropdown__toggle--m-primary--hover--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-dropdown__toggle--m-primary--active--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-dropdown__toggle--m-primary--focus--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-dropdown--m-expanded__toggle--m-primary--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-dropdown__toggle-button--Color: var(--pf-global--Color--100);\n  --pf-c-dropdown__toggle--m-split-button--child--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-dropdown__toggle--m-split-button--child--PaddingRight: var(--pf-global--spacer--xs);\n  --pf-c-dropdown__toggle--m-split-button--child--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-dropdown__toggle--m-split-button--child--PaddingLeft: var(--pf-global--spacer--xs);\n  --pf-c-dropdown__toggle--m-split-button--child--BackgroundColor: transparent;\n  --pf-c-dropdown__toggle--m-split-button--first-child--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__toggle--m-split-button--last-child--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__toggle--m-split-button--m-action--child--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__toggle--m-split-button--m-action--child--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__toggle--m-split-button--m-action__toggle-button--MarginRight: calc(-1 * var(--pf-global--BorderWidth--sm));\n  --pf-c-dropdown__toggle--m-split-button__toggle-check__input--TranslateY: -0.0625rem;\n  --pf-c-dropdown__toggle--m-split-button__toggle-text--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__toggle-icon--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-dropdown__toggle-icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__toggle-icon--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-dropdown--m-top--m-expanded__toggle-icon--Rotate: 180deg;\n  --pf-c-dropdown__menu--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-dropdown__menu--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-dropdown__menu--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__menu--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__menu--Top: calc(100% + var(--pf-global--spacer--xs));\n  --pf-c-dropdown__menu--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-dropdown--m-top__menu--Top: 0;\n  --pf-c-dropdown--m-top__menu--TranslateY: calc(-100% - var(--pf-global--spacer--xs));\n  --pf-c-dropdown__menu-item--BackgroundColor: transparent;\n  --pf-c-dropdown__menu-item--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__menu-item--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-dropdown__menu-item--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__menu-item--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-dropdown__menu-item--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-dropdown__menu-item--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-dropdown__menu-item--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-dropdown__menu-item--Color: var(--pf-global--Color--dark-100);\n  --pf-c-dropdown__menu-item--hover--Color: var(--pf-global--Color--dark-100);\n  --pf-c-dropdown__menu-item--disabled--Color: var(--pf-global--Color--dark-200);\n  --pf-c-dropdown__menu-item--hover--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-dropdown__menu-item--disabled--BackgroundColor: transparent;\n  --pf-c-dropdown__menu-item--m-text--Color: var(--pf-global--Color--dark-200);\n  --pf-c-dropdown__menu-item-icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__menu-item-icon--Width: var(--pf-global--icon--FontSize--lg);\n  --pf-c-dropdown__menu-item-icon--Height: var(--pf-global--icon--FontSize--lg);\n  --pf-c-dropdown__menu-item-description--FontSize: var(--pf-global--FontSize--xs);\n  --pf-c-dropdown__menu-item-description--Color: var(--pf-global--Color--dark-200);\n  --pf-c-dropdown__group--group--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__group-title--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-dropdown__group-title--PaddingRight: var(--pf-c-dropdown__menu-item--PaddingRight);\n  --pf-c-dropdown__group-title--PaddingBottom: var(--pf-c-dropdown__menu-item--PaddingBottom);\n  --pf-c-dropdown__group-title--PaddingLeft: var(--pf-c-dropdown__menu-item--PaddingLeft);\n  --pf-c-dropdown__group-title--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-dropdown__group-title--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-dropdown__group-title--Color: var(--pf-global--Color--dark-200);\n  --pf-c-dropdown__toggle-image--MarginTop: var(--pf-global--spacer--xs);\n  --pf-c-dropdown__toggle-image--MarginBottom: var(--pf-global--spacer--xs);\n  --pf-c-dropdown__toggle-image--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-dropdown--c-divider--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-dropdown--c-divider--MarginBottom: var(--pf-global--spacer--sm);\n  position: relative;\n  display: inline-block;\n  max-width: 100%; }\n  .pf-c-dropdown .pf-c-divider {\n    margin-top: var(--pf-c-dropdown--c-divider--MarginTop);\n    margin-bottom: var(--pf-c-dropdown--c-divider--MarginBottom); }\n    .pf-c-dropdown .pf-c-divider:last-child {\n      --pf-c-dropdown--c-divider--MarginBottom: 0; }\n\n.pf-c-dropdown__toggle {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  min-width: var(--pf-c-dropdown__toggle--MinWidth);\n  max-width: 100%;\n  padding: var(--pf-c-dropdown__toggle--PaddingTop) var(--pf-c-dropdown__toggle--PaddingRight) var(--pf-c-dropdown__toggle--PaddingBottom) var(--pf-c-dropdown__toggle--PaddingLeft);\n  font-size: var(--pf-c-dropdown__toggle--FontSize);\n  font-weight: var(--pf-c-dropdown__toggle--FontWeight);\n  line-height: var(--pf-c-dropdown__toggle--LineHeight);\n  color: var(--pf-c-dropdown__toggle--Color);\n  background-color: var(--pf-c-dropdown__toggle--BackgroundColor);\n  border: none; }\n  .pf-c-dropdown__toggle::before,\n  .pf-c-dropdown__toggle.pf-m-action .pf-c-dropdown__toggle-button::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    border: var(--pf-c-dropdown__toggle--before--BorderWidth) solid;\n    border-color: var(--pf-c-dropdown__toggle--before--BorderTopColor) var(--pf-c-dropdown__toggle--before--BorderRightColor) var(--pf-c-dropdown__toggle--before--BorderBottomColor) var(--pf-c-dropdown__toggle--before--BorderLeftColor); }\n  .pf-c-dropdown__toggle.pf-m-disabled, .pf-c-dropdown__toggle:disabled {\n    pointer-events: none; }\n    .pf-c-dropdown__toggle.pf-m-disabled:not(.pf-m-plain), .pf-c-dropdown__toggle:disabled:not(.pf-m-plain) {\n      --pf-c-dropdown__toggle--BackgroundColor: var(--pf-c-dropdown__toggle--disabled--BackgroundColor); }\n      .pf-c-dropdown__toggle.pf-m-disabled:not(.pf-m-plain)::before, .pf-c-dropdown__toggle:disabled:not(.pf-m-plain)::before {\n        border: 0; }\n  .pf-c-dropdown__toggle.pf-m-split-button {\n    padding: 0; }\n    .pf-c-dropdown__toggle.pf-m-split-button > * {\n      position: relative;\n      padding-top: var(--pf-c-dropdown__toggle--m-split-button--child--PaddingTop);\n      padding-right: var(--pf-c-dropdown__toggle--m-split-button--child--PaddingRight);\n      padding-bottom: var(--pf-c-dropdown__toggle--m-split-button--child--PaddingBottom);\n      padding-left: var(--pf-c-dropdown__toggle--m-split-button--child--PaddingLeft);\n      background-color: var(--pf-c-dropdown__toggle--m-split-button--child--BackgroundColor); }\n      .pf-c-dropdown__toggle.pf-m-split-button > *:first-child {\n        --pf-c-dropdown__toggle--m-split-button--child--PaddingLeft: var(--pf-c-dropdown__toggle--m-split-button--first-child--PaddingLeft); }\n      .pf-c-dropdown__toggle.pf-m-split-button > *:last-child {\n        --pf-c-dropdown__toggle--m-split-button--child--PaddingRight: var(--pf-c-dropdown__toggle--m-split-button--last-child--PaddingRight); }\n    .pf-c-dropdown__toggle.pf-m-split-button.pf-m-action {\n      --pf-c-dropdown__toggle--m-split-button--child--PaddingRight: var(--pf-c-dropdown__toggle--m-split-button--m-action--child--PaddingRight);\n      --pf-c-dropdown__toggle--m-split-button--child--PaddingLeft: var(--pf-c-dropdown__toggle--m-split-button--m-action--child--PaddingLeft); }\n      .pf-c-dropdown__toggle.pf-m-split-button.pf-m-action .pf-c-dropdown__toggle-button {\n        margin-right: var(--pf-c-dropdown__toggle--m-split-button--m-action__toggle-button--MarginRight); }\n        .pf-c-dropdown__toggle.pf-m-split-button.pf-m-action .pf-c-dropdown__toggle-button::before {\n          border-left: 0; }\n        .pf-c-dropdown__toggle.pf-m-split-button.pf-m-action .pf-c-dropdown__toggle-button:last-child {\n          --pf-c-dropdown__toggle--m-split-button--m-action__toggle-button--MarginRight: 0; }\n    .pf-c-dropdown__toggle.pf-m-split-button .pf-c-dropdown__toggle-check {\n      display: flex;\n      align-items: center;\n      cursor: pointer; }\n      .pf-c-dropdown__toggle.pf-m-split-button .pf-c-dropdown__toggle-check input {\n        transform: translateY(var(--pf-c-dropdown__toggle--m-split-button__toggle-check__input--TranslateY)); }\n    .pf-c-dropdown__toggle.pf-m-split-button .pf-c-dropdown__toggle-button {\n      color: var(--pf-c-dropdown__toggle-button--Color);\n      border: 0; }\n    .pf-c-dropdown__toggle.pf-m-split-button .pf-c-dropdown__toggle-text {\n      margin-left: var(--pf-c-dropdown__toggle--m-split-button__toggle-text--MarginLeft); }\n  .pf-c-dropdown__toggle:not(.pf-m-action):hover::before,\n  .pf-c-dropdown__toggle.pf-m-action .pf-c-dropdown__toggle-button:hover::before {\n    --pf-c-dropdown__toggle--before--BorderBottomColor: var(--pf-c-dropdown__toggle--hover--before--BorderBottomColor); }\n  .pf-c-dropdown__toggle:not(.pf-m-action):active::before, .pf-c-dropdown__toggle:not(.pf-m-action).pf-m-active::before,\n  .pf-c-dropdown__toggle.pf-m-action .pf-c-dropdown__toggle-button:active::before {\n    --pf-c-dropdown__toggle--before--BorderBottomColor: var(--pf-c-dropdown__toggle--active--before--BorderBottomColor);\n    border-bottom-width: var(--pf-c-dropdown__toggle--active--before--BorderBottomWidth); }\n  .pf-c-dropdown__toggle:not(.pf-m-action):focus::before,\n  .pf-c-dropdown__toggle.pf-m-action .pf-c-dropdown__toggle-button:focus::before {\n    --pf-c-dropdown__toggle--before--BorderBottomColor: var(--pf-c-dropdown__toggle--focus--before--BorderBottomColor);\n    border-bottom-width: var(--pf-c-dropdown__toggle--focus--before--BorderBottomWidth); }\n  .pf-m-expanded > .pf-c-dropdown__toggle:not(.pf-m-action)::before,\n  .pf-m-expanded > .pf-c-dropdown__toggle.pf-m-action .pf-c-dropdown__toggle-button::before {\n    --pf-c-dropdown__toggle--before--BorderBottomColor: var(--pf-c-dropdown--m-expanded__toggle--before--BorderBottomColor);\n    border-bottom-width: var(--pf-c-dropdown--m-expanded__toggle--before--BorderBottomWidth); }\n  .pf-c-dropdown__toggle.pf-m-plain {\n    justify-content: center;\n    color: var(--pf-c-dropdown__toggle--m-plain--Color); }\n    .pf-c-dropdown__toggle.pf-m-plain > * {\n      line-height: var(--pf-c-dropdown__toggle--m-plain--child--LineHeight); }\n    .pf-c-dropdown__toggle.pf-m-plain::before {\n      border: 0; }\n    .pf-c-dropdown__toggle.pf-m-plain:hover, .pf-c-dropdown__toggle.pf-m-plain:active, .pf-c-dropdown__toggle.pf-m-plain.pf-m-active, .pf-c-dropdown__toggle.pf-m-plain:focus,\n    .pf-m-expanded > .pf-c-dropdown__toggle.pf-m-plain {\n      --pf-c-dropdown__toggle--m-plain--Color: var(--pf-c-dropdown__toggle--m-plain--hover--Color); }\n    .pf-c-dropdown__toggle.pf-m-plain.pf-m-disabled, .pf-c-dropdown__toggle.pf-m-plain:disabled {\n      --pf-c-dropdown__toggle--m-plain--Color: var(--pf-c-dropdown__toggle--m-plain--disabled--Color); }\n  .pf-c-dropdown__toggle.pf-m-primary {\n    --pf-c-dropdown__toggle--Color: var(--pf-c-dropdown__toggle--m-primary--Color);\n    --pf-c-dropdown__toggle--BackgroundColor: var(--pf-c-dropdown__toggle--m-primary--BackgroundColor);\n    border-radius: var(--pf-c-dropdown__toggle--m-primary--BorderRadius); }\n    .pf-c-dropdown__toggle.pf-m-primary::before {\n      border: 0; }\n    .pf-c-dropdown__toggle.pf-m-primary:hover {\n      --pf-c-dropdown__toggle--BackgroundColor: var(--pf-c-dropdown__toggle--m-primary--hover--BackgroundColor); }\n    .pf-c-dropdown__toggle.pf-m-primary:active, .pf-c-dropdown__toggle.pf-m-primary.pf-m-active {\n      --pf-c-dropdown__toggle--BackgroundColor: var(--pf-c-dropdown__toggle--m-primary--active--BackgroundColor); }\n    .pf-c-dropdown__toggle.pf-m-primary:focus {\n      --pf-c-dropdown__toggle--BackgroundColor: var(--pf-c-dropdown__toggle--m-primary--focus--BackgroundColor); }\n    .pf-m-expanded > .pf-c-dropdown__toggle.pf-m-primary {\n      --pf-c-dropdown__toggle--BackgroundColor: var(--pf-c-dropdown--m-expanded__toggle--m-primary--BackgroundColor); }\n  .pf-c-dropdown__toggle .pf-c-dropdown__toggle-text {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n\n.pf-c-dropdown__toggle-icon {\n  margin-right: var(--pf-c-dropdown__toggle-icon--MarginRight);\n  margin-left: var(--pf-c-dropdown__toggle-icon--MarginLeft);\n  line-height: var(--pf-c-dropdown__toggle-icon--LineHeight); }\n  .pf-c-dropdown.pf-m-top.pf-m-expanded .pf-c-dropdown__toggle-icon {\n    transform: rotate(var(--pf-c-dropdown--m-top--m-expanded__toggle-icon--Rotate)); }\n\n.pf-c-dropdown__toggle-image {\n  display: inline-flex;\n  margin-top: var(--pf-c-dropdown__toggle-image--MarginTop);\n  margin-right: var(--pf-c-dropdown__toggle-image--MarginRight);\n  margin-bottom: var(--pf-c-dropdown__toggle-image--MarginBottom); }\n  .pf-c-dropdown__toggle-image:last-child {\n    --pf-c-dropdown__toggle-image--MarginRight: 0; }\n\n.pf-c-dropdown__menu {\n  position: absolute;\n  top: var(--pf-c-dropdown__menu--Top);\n  z-index: var(--pf-c-dropdown__menu--ZIndex);\n  min-width: 100%;\n  padding-top: var(--pf-c-dropdown__menu--PaddingTop);\n  padding-bottom: var(--pf-c-dropdown__menu--PaddingBottom);\n  background: var(--pf-c-dropdown__menu--BackgroundColor);\n  background-clip: padding-box;\n  box-shadow: var(--pf-c-dropdown__menu--BoxShadow); }\n  .pf-c-dropdown__menu.pf-m-align-right {\n    right: 0; }\n  .pf-c-dropdown.pf-m-top .pf-c-dropdown__menu {\n    --pf-c-dropdown__menu--Top: var(--pf-c-dropdown--m-top__menu--Top);\n    transform: translateY(var(--pf-c-dropdown--m-top__menu--TranslateY)); }\n\n.pf-c-dropdown__menu-item {\n  display: block;\n  width: 100%;\n  padding: var(--pf-c-dropdown__menu-item--PaddingTop) var(--pf-c-dropdown__menu-item--PaddingRight) var(--pf-c-dropdown__menu-item--PaddingBottom) var(--pf-c-dropdown__menu-item--PaddingLeft);\n  font-size: var(--pf-c-dropdown__menu-item--FontSize);\n  font-weight: var(--pf-c-dropdown__menu-item--FontWeight);\n  line-height: var(--pf-c-dropdown__menu-item--LineHeight);\n  color: var(--pf-c-dropdown__menu-item--Color);\n  text-align: left;\n  white-space: nowrap;\n  background-color: var(--pf-c-dropdown__menu-item--BackgroundColor);\n  border: none; }\n  .pf-c-dropdown__menu-item:hover, .pf-c-dropdown__menu-item:focus {\n    --pf-c-dropdown__menu-item--Color: var(--pf-c-dropdown__menu-item--hover--Color);\n    --pf-c-dropdown__menu-item--BackgroundColor: var(--pf-c-dropdown__menu-item--hover--BackgroundColor);\n    text-decoration: none; }\n  .pf-c-dropdown__menu-item:disabled, .pf-c-dropdown__menu-item.pf-m-disabled {\n    --pf-c-dropdown__menu-item--Color: var(--pf-c-dropdown__menu-item--disabled--Color);\n    --pf-c-dropdown__menu-item--BackgroundColor: var(--pf-c-dropdown__menu-item--disabled--BackgroundColor);\n    pointer-events: none; }\n  .pf-c-dropdown__menu-item.pf-m-icon {\n    display: flex;\n    align-items: center; }\n    .pf-c-dropdown__menu-item.pf-m-icon.pf-m-description {\n      flex-direction: column;\n      align-items: start; }\n    .pf-c-dropdown__menu-item.pf-m-icon .pf-c-dropdown__menu-item-main {\n      display: flex;\n      align-items: center; }\n  .pf-c-dropdown__menu-item.pf-m-text {\n    --pf-c-dropdown__menu-item--Color: var(--pf-c-dropdown__menu-item--m-text--Color); }\n    .pf-c-dropdown__menu-item.pf-m-text:hover, .pf-c-dropdown__menu-item.pf-m-text:focus {\n      --pf-c-dropdown__menu-item--BackgroundColor: transparent; }\n\n.pf-c-dropdown__menu-item-icon {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  width: var(--pf-c-dropdown__menu-item-icon--Width);\n  height: var(--pf-c-dropdown__menu-item-icon--Height);\n  margin-right: var(--pf-c-dropdown__menu-item-icon--MarginRight); }\n  .pf-c-dropdown__menu-item-icon > * {\n    max-width: 100%;\n    max-height: 100%; }\n\n.pf-c-dropdown__menu-item-description {\n  font-size: var(--pf-c-dropdown__menu-item-description--FontSize);\n  color: var(--pf-c-dropdown__menu-item-description--Color); }\n\n.pf-c-dropdown__group + .pf-c-dropdown__group {\n  padding-top: var(--pf-c-dropdown__group--group--PaddingTop); }\n\n.pf-c-dropdown__group-title {\n  padding-top: var(--pf-c-dropdown__group-title--PaddingTop);\n  padding-right: var(--pf-c-dropdown__group-title--PaddingRight);\n  padding-bottom: var(--pf-c-dropdown__group-title--PaddingBottom);\n  padding-left: var(--pf-c-dropdown__group-title--PaddingLeft);\n  font-size: var(--pf-c-dropdown__group-title--FontSize);\n  font-weight: var(--pf-c-dropdown__group-title--FontWeight);\n  color: var(--pf-c-dropdown__group-title--Color); }\n\n.pf-c-empty-state {\n  --pf-c-empty-state--PaddingTop: var(--pf-global--spacer--xl);\n  --pf-c-empty-state--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-empty-state--PaddingBottom: var(--pf-global--spacer--xl);\n  --pf-c-empty-state--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-empty-state__content--MaxWidth: none;\n  --pf-c-empty-state__icon--MarginBottom: var(--pf-global--spacer--lg);\n  --pf-c-empty-state__icon--FontSize: var(--pf-global--icon--FontSize--xl);\n  --pf-c-empty-state__icon--Color: var(--pf-global--icon--Color--light);\n  --pf-c-empty-state__content--c-title--m-lg--FontSize: var(--pf-global--FontSize--xl);\n  --pf-c-empty-state__body--MarginTop: var(--pf-global--spacer--md);\n  --pf-c-empty-state__body--Color: var(--pf-global--Color--200);\n  --pf-c-empty-state__primary--MarginTop: var(--pf-global--spacer--xl);\n  --pf-c-empty-state__primary--secondary--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-empty-state__secondary--MarginTop: var(--pf-global--spacer--xl);\n  --pf-c-empty-state__secondary--MarginBottom: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-empty-state__secondary--child--MarginRight: calc(var(--pf-global--spacer--xs) / 2);\n  --pf-c-empty-state__secondary--child--MarginBottom: var(--pf-global--spacer--xs);\n  --pf-c-empty-state__secondary--child--MarginLeft: calc(var(--pf-global--spacer--xs) / 2);\n  --pf-c-empty-state--m-xs__content--MaxWidth: 21.875rem;\n  --pf-c-empty-state--m-xs__body--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-empty-state--m-xs--button--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-empty-state--m-xs--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-empty-state--m-xs--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-empty-state--m-xs--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-empty-state--m-xs--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-empty-state--m-xs__icon--MarginBottom: var(--pf-global--spacer--md);\n  --pf-c-empty-state--m-xs__body--MarginTop: var(--pf-global--spacer--md);\n  --pf-c-empty-state--m-xs__primary--MarginTop: var(--pf-global--spacer--md);\n  --pf-c-empty-state--m-xs__secondary--MarginTop: var(--pf-global--spacer--md);\n  --pf-c-empty-state--m-sm__content--MaxWidth: 25rem;\n  --pf-c-empty-state--m-lg__content--MaxWidth: 37.5rem;\n  --pf-c-empty-state--m-xl__body--FontSize: var(--pf-global--FontSize--xl);\n  --pf-c-empty-state--m-xl__body--MarginTop: var(--pf-global--spacer--lg);\n  --pf-c-empty-state--m-xl__icon--MarginBottom: var(--pf-global--spacer--xl);\n  --pf-c-empty-state--m-xl__icon--FontSize: 6.25rem;\n  --pf-c-empty-state--m-xl--c-button__secondary--MarginTop: var(--pf-global--spacer--md);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: var(--pf-c-empty-state--PaddingTop) var(--pf-c-empty-state--PaddingRight) var(--pf-c-empty-state--PaddingBottom) var(--pf-c-empty-state--PaddingLeft);\n  text-align: center; }\n  .pf-c-empty-state.pf-m-xs {\n    --pf-c-empty-state--PaddingTop: var(--pf-c-empty-state--m-xs--PaddingTop);\n    --pf-c-empty-state--PaddingRight: var(--pf-c-empty-state--m-xs--PaddingRight);\n    --pf-c-empty-state--PaddingBottom: var(--pf-c-empty-state--m-xs--PaddingBottom);\n    --pf-c-empty-state--PaddingLeft: var(--pf-c-empty-state--m-xs--PaddingLeft);\n    --pf-c-empty-state__content--MaxWidth: var(--pf-c-empty-state--m-xs__content--MaxWidth);\n    --pf-c-empty-state__icon--MarginBottom: var(--pf-c-empty-state--m-xs__icon--MarginBottom);\n    --pf-c-empty-state__body--MarginTop: var(--pf-c-empty-state--m-xs__body--MarginTop);\n    --pf-c-empty-state__primary--MarginTop: var(--pf-c-empty-state--m-xs__primary--MarginTop);\n    --pf-c-empty-state__secondary--MarginTop: var(--pf-c-empty-state--m-xs__secondary--MarginTop); }\n    .pf-c-empty-state.pf-m-xs .pf-c-empty-state__body {\n      font-size: var(--pf-c-empty-state--m-xs__body--FontSize); }\n    .pf-c-empty-state.pf-m-xs .pf-c-button {\n      --pf-c-button--FontSize: var(--pf-c-empty-state--m-xs--button--FontSize); }\n  .pf-c-empty-state.pf-m-sm {\n    --pf-c-empty-state__content--MaxWidth: var(--pf-c-empty-state--m-sm__content--MaxWidth); }\n  .pf-c-empty-state.pf-m-lg {\n    --pf-c-empty-state__content--MaxWidth: var(--pf-c-empty-state--m-lg__content--MaxWidth); }\n  .pf-c-empty-state.pf-m-xl {\n    --pf-c-empty-state__body--MarginTop: var(--pf-c-empty-state--m-xl__body--MarginTop);\n    --pf-c-empty-state__icon--MarginBottom: var(--pf-c-empty-state--m-xl__icon--MarginBottom);\n    --pf-c-empty-state__icon--FontSize: var(--pf-c-empty-state--m-xl__icon--FontSize);\n    --pf-c-empty-state--c-button__secondary--MarginTop: var(--pf-c-empty-state--m-xl--c-button__secondary--MarginTop); }\n    .pf-c-empty-state.pf-m-xl .pf-c-empty-state__body {\n      font-size: var(--pf-c-empty-state--m-xl__body--FontSize); }\n  .pf-c-empty-state.pf-m-full-height {\n    height: 100%; }\n\n.pf-c-empty-state__content {\n  max-width: var(--pf-c-empty-state__content--MaxWidth); }\n  .pf-c-empty-state__content > .pf-c-title.pf-m-lg {\n    font-size: var(--pf-c-empty-state__content--c-title--m-lg--FontSize); }\n\n.pf-c-empty-state__icon {\n  margin-bottom: var(--pf-c-empty-state__icon--MarginBottom);\n  font-size: var(--pf-c-empty-state__icon--FontSize);\n  color: var(--pf-c-empty-state__icon--Color); }\n\n.pf-c-empty-state__body {\n  margin-top: var(--pf-c-empty-state__body--MarginTop);\n  color: var(--pf-c-empty-state__body--Color); }\n\n.pf-c-empty-state__content > .pf-c-button.pf-m-primary,\n.pf-c-empty-state__primary {\n  margin-top: var(--pf-c-empty-state__primary--MarginTop); }\n  .pf-c-empty-state__content > .pf-c-button.pf-m-primary + .pf-c-empty-state__secondary,\n  .pf-c-empty-state__primary + .pf-c-empty-state__secondary {\n    margin-top: var(--pf-c-empty-state__primary--secondary--MarginTop); }\n\n.pf-c-empty-state__secondary {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  margin-top: var(--pf-c-empty-state__secondary--MarginTop);\n  margin-bottom: var(--pf-c-empty-state__secondary--MarginBottom); }\n  .pf-c-empty-state__secondary > * {\n    margin-right: var(--pf-c-empty-state__secondary--child--MarginRight);\n    margin-bottom: var(--pf-c-empty-state__secondary--child--MarginBottom);\n    margin-left: var(--pf-c-empty-state__secondary--child--MarginLeft); }\n\n.pf-m-overpass-font .pf-c-empty-state .pf-c-empty-state__content > .pf-c-title.pf-m-lg {\n  font-size: var(--pf-global--FontSize--lg); }\n\n.pf-c-expandable-section {\n  --pf-c-expandable-section__toggle--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-expandable-section__toggle--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-expandable-section__toggle--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-expandable-section__toggle--PaddingLeft: 0;\n  --pf-c-expandable-section__toggle--Color: var(--pf-global--link--Color);\n  --pf-c-expandable-section__toggle--hover--Color: var(--pf-global--link--Color--hover);\n  --pf-c-expandable-section__toggle--active--Color: var(--pf-global--link--Color--hover);\n  --pf-c-expandable-section__toggle--focus--Color: var(--pf-global--link--Color--hover);\n  --pf-c-expandable-section__toggle--m-expanded--Color: var(--pf-global--link--Color--hover);\n  --pf-c-expandable-section__toggle-icon--Color: var(--pf-global--Color--100);\n  --pf-c-expandable-section__toggle-icon--Transition: .2s ease-in 0s;\n  --pf-c-expandable-section__toggle-icon--Rotate: 0;\n  --pf-c-expandable-section--m-expanded__toggle-icon--Rotate: 90deg;\n  --pf-c-expandable-section__toggle-text--MarginLeft: calc(var(--pf-global--spacer--xs) + var(--pf-global--spacer--sm));\n  --pf-c-expandable-section__content--MarginTop: var(--pf-global--spacer--md); }\n  .pf-c-expandable-section.pf-m-expanded {\n    --pf-c-expandable-section__toggle--Color: var(--pf-c-expandable-section__toggle--m-expanded--Color);\n    --pf-c-expandable-section__toggle-icon--Rotate: var(--pf-c-expandable-section--m-expanded__toggle-icon--Rotate); }\n\n.pf-c-expandable-section__toggle {\n  display: flex;\n  padding: var(--pf-c-expandable-section__toggle--PaddingTop) var(--pf-c-expandable-section__toggle--PaddingRight) var(--pf-c-expandable-section__toggle--PaddingBottom) var(--pf-c-expandable-section__toggle--PaddingLeft);\n  color: var(--pf-c-expandable-section__toggle--Color);\n  border: none; }\n  .pf-c-expandable-section__toggle:hover {\n    --pf-c-expandable-section__toggle--Color: var(--pf-c-expandable-section__toggle--hover--Color); }\n  .pf-c-expandable-section__toggle:active, .pf-c-expandable-section__toggle.pf-m-active {\n    --pf-c-expandable-section__toggle--Color: var(--pf-c-expandable-section__toggle--active--Color); }\n  .pf-c-expandable-section__toggle:focus {\n    --pf-c-expandable-section__toggle--Color: var(--pf-c-expandable-section__toggle--focus--Color); }\n\n.pf-c-expandable-section__toggle-icon {\n  color: var(--pf-c-expandable-section__toggle-icon--Color);\n  transition: var(--pf-c-expandable-section__toggle-icon--Transition);\n  transform: rotate(var(--pf-c-expandable-section__toggle-icon--Rotate)); }\n\n.pf-c-expandable-section__toggle-text {\n  margin-left: var(--pf-c-expandable-section__toggle-text--MarginLeft); }\n\n.pf-c-expandable-section__content {\n  margin-top: var(--pf-c-expandable-section__content--MarginTop); }\n\n.pf-m-overpass-font .pf-c-expandable-section__toggle {\n  font-weight: var(--pf-global--FontWeight--semi-bold); }\n\n.pf-c-file-upload {\n  --pf-c-file-upload--m-loading__file-details--before--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-file-upload--m-loading__file-details--before--Left: var(--pf-global--BorderWidth--sm);\n  --pf-c-file-upload--m-loading__file-details--before--Right: var(--pf-global--BorderWidth--sm);\n  --pf-c-file-upload--m-loading__file-details--before--Bottom: var(--pf-global--BorderWidth--sm);\n  --pf-c-file-upload--m-drag-hover--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-file-upload--m-drag-hover--before--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-file-upload--m-drag-hover--before--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-file-upload--m-drag-hover--after--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-file-upload--m-drag-hover--after--Opacity: .1;\n  --pf-c-file-upload__file-details__c-form-control--MinHeight: calc(var(--pf-global--spacer--3xl) * 2);\n  --pf-c-file-upload__file-select__c-button--m-control--OutlineOffset: calc(-1 * var(--pf-global--spacer--xs));\n  position: relative;\n  display: flex;\n  flex-direction: column; }\n  .pf-c-file-upload.pf-m-drag-hover::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: var(--pf-c-file-upload--m-drag-hover--before--ZIndex);\n    content: "";\n    border: var(--pf-c-file-upload--m-drag-hover--before--BorderWidth) solid var(--pf-c-file-upload--m-drag-hover--before--BorderColor); }\n  .pf-c-file-upload.pf-m-drag-hover::after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    background-color: var(--pf-c-file-upload--m-drag-hover--after--BackgroundColor);\n    opacity: var(--pf-c-file-upload--m-drag-hover--after--Opacity); }\n  .pf-c-file-upload.pf-m-loading .pf-c-file-upload__file-details {\n    position: relative; }\n    .pf-c-file-upload.pf-m-loading .pf-c-file-upload__file-details::before {\n      position: absolute;\n      top: 0;\n      right: var(--pf-c-file-upload--m-loading__file-details--before--Left);\n      bottom: var(--pf-c-file-upload--m-loading__file-details--before--Left);\n      left: var(--pf-c-file-upload--m-loading__file-details--before--Left);\n      content: "";\n      background-color: var(--pf-c-file-upload--m-loading__file-details--before--BackgroundColor); }\n\n.pf-c-file-upload__file-select .pf-c-button.pf-m-control {\n  outline-offset: var(--pf-c-file-upload__file-select__c-button--m-control--OutlineOffset); }\n\n.pf-c-file-upload__file-details {\n  position: relative;\n  display: flex; }\n  .pf-c-file-upload__file-details .pf-c-form-control {\n    flex: 1 1 auto;\n    min-height: var(--pf-c-file-upload__file-details__c-form-control--MinHeight);\n    border-top: 0; }\n\n.pf-c-file-upload__file-details-spinner {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%); }\n\n.pf-c-form {\n  --pf-c-form--GridGap: var(--pf-global--gutter--md);\n  --pf-c-form__group--m-action--MarginTop: var(--pf-global--spacer--xl);\n  --pf-c-form--m-horizontal__group-label--md--GridColumnWidth: 9.375rem;\n  --pf-c-form--m-horizontal__group-label--md--GridColumnGap: var(--pf-global--spacer--md);\n  --pf-c-form--m-horizontal__group-control--md--GridColumnWidth: 1fr;\n  --pf-c-form--m-limit-width--MaxWidth: 31.25rem;\n  --pf-c-form--m-horizontal__group-label--md--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-form__group-label--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-form__label--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-form__label--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-form__label--m-disabled--Color: var(--pf-global--disabled-color--100);\n  --pf-c-form__label-text--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-form__label-required--MarginLeft: var(--pf-global--spacer--xs);\n  --pf-c-form__label-required--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-form__label-required--Color: var(--pf-global--danger-color--100);\n  --pf-c-form__group-label-help--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-form__group-label-help--PaddingRight: var(--pf-global--spacer--xs);\n  --pf-c-form__group-label-help--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-form__group-label-help--PaddingLeft: var(--pf-global--spacer--xs);\n  --pf-c-form__group-label-help--MarginTop: calc(var(--pf-c-form__group-label-help--PaddingTop) * -1);\n  --pf-c-form__group-label-help--MarginRight: calc(var(--pf-c-form__group-label-help--PaddingRight) * -1);\n  --pf-c-form__group-label-help--MarginBottom: calc(var(--pf-c-form__group-label-help--PaddingBottom) * -1);\n  --pf-c-form__group-label-help--MarginLeft: calc(var(--pf-c-form__group-label-help--PaddingLeft) * -1 + var(--pf-global--spacer--xs));\n  --pf-c-form__group-label-help--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-form__group-label-help--TranslateY: 0.125rem;\n  --pf-c-form__group-control--m-inline--child--MarginRight: var(--pf-global--spacer--lg);\n  --pf-c-form__group-control__helper-text--MarginBottom: var(--pf-global--spacer--xs);\n  --pf-c-form__actions--child--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-form__actions--child--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-form__actions--child--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-form__actions--child--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-form__actions--MarginTop: calc(var(--pf-c-form__actions--child--MarginTop) * -1);\n  --pf-c-form__actions--MarginRight: calc(var(--pf-c-form__actions--child--MarginRight) * -1);\n  --pf-c-form__actions--MarginBottom: calc(var(--pf-c-form__actions--child--MarginBottom) * -1);\n  --pf-c-form__actions--MarginLeft: calc(var(--pf-c-form__actions--child--MarginLeft) * -1);\n  --pf-c-form__helper-text--MarginTop: var(--pf-global--spacer--xs);\n  --pf-c-form__helper-text--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-form__helper-text--Color: var(--pf-global--Color--100);\n  --pf-c-form__helper-text-icon--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-form__helper-text-icon--MarginRight: var(--pf-global--spacer--xs);\n  --pf-c-form__helper-text--m-success--Color: var(--pf-global--success-color--200);\n  --pf-c-form__helper-text--m-warning--Color: var(--pf-global--warning-color--200);\n  --pf-c-form__helper-text--m-error--Color: var(--pf-global--danger-color--100);\n  --pf-c-form__section--MarginTop: var(--pf-global--spacer--xl);\n  --pf-c-form__section--Gap: var(--pf-global--gutter--md);\n  display: grid;\n  grid-gap: var(--pf-c-form--GridGap); }\n  .pf-c-form.pf-m-horizontal {\n    --pf-c-form__group-label--PaddingBottom: 0; }\n    .pf-c-form.pf-m-horizontal.pf-m-align-right .pf-c-form__label {\n      text-align: right; }\n    @media (min-width: 768px) {\n      .pf-c-form.pf-m-horizontal .pf-c-form__group {\n        display: grid;\n        grid-column-gap: var(--pf-c-form--m-horizontal__group-label--md--GridColumnGap);\n        grid-template-columns: var(--pf-c-form--m-horizontal__group-label--md--GridColumnWidth) var(--pf-c-form--m-horizontal__group-control--md--GridColumnWidth); }\n      .pf-c-form.pf-m-horizontal .pf-c-form__group-label {\n        padding-top: var(--pf-c-form--m-horizontal__group-label--md--PaddingTop); }\n        .pf-c-form.pf-m-horizontal .pf-c-form__group-label.pf-m-no-padding-top {\n          --pf-c-form--m-horizontal__group-label--md--PaddingTop: 0; }\n      .pf-c-form.pf-m-horizontal .pf-c-form__group-control {\n        grid-column: 2; } }\n  .pf-c-form.pf-m-limit-width {\n    max-width: var(--pf-c-form--m-limit-width--MaxWidth); }\n\n.pf-c-form__group.pf-m-action {\n  margin-top: var(--pf-c-form__group--m-action--MarginTop);\n  overflow: hidden; }\n\n.pf-c-form__section {\n  display: grid;\n  gap: var(--pf-c-form__section--Gap); }\n  .pf-c-form__section + .pf-c-form__group:not(.pf-m-action), .pf-c-form__section:not(:first-child) {\n    margin-top: var(--pf-c-form__section--MarginTop); }\n\n.pf-c-form__group-label {\n  --pf-c-form__helper-text--MarginTop: 0;\n  padding-bottom: var(--pf-c-form__group-label--PaddingBottom); }\n\n.pf-c-form__label {\n  font-size: var(--pf-c-form__label--FontSize);\n  line-height: var(--pf-c-form__label--LineHeight); }\n  .pf-c-form__label::selection {\n    background-color: none; }\n  .pf-c-form__label:not(.pf-m-disabled):hover {\n    cursor: pointer; }\n  .pf-c-form__label.pf-m-disabled {\n    color: var(--pf-c-form__label--m-disabled--Color); }\n  .pf-c-form__label.pf-m-disabled:hover {\n    cursor: not-allowed; }\n\n.pf-c-form__label-text {\n  font-weight: var(--pf-c-form__label-text--FontWeight); }\n\n.pf-c-form__label-required {\n  margin-left: var(--pf-c-form__label-required--MarginLeft);\n  font-size: var(--pf-c-form__label-required--FontSize);\n  color: var(--pf-c-form__label-required--Color); }\n\n.pf-c-form__group-label-help {\n  padding-top: var(--pf-c-form__group-label-help--PaddingTop);\n  padding-right: var(--pf-c-form__group-label-help--PaddingRight);\n  padding-bottom: var(--pf-c-form__group-label-help--PaddingBottom);\n  padding-left: var(--pf-c-form__group-label-help--PaddingLeft);\n  margin-top: var(--pf-c-form__group-label-help--MarginTop);\n  margin-right: var(--pf-c-form__group-label-help--MarginRight);\n  margin-bottom: var(--pf-c-form__group-label-help--MarginBottom);\n  margin-left: var(--pf-c-form__group-label-help--MarginLeft);\n  font-size: var(--pf-c-form__group-label-help--FontSize);\n  line-height: 1;\n  border: 0;\n  transform: translateY(var(--pf-c-form__group-label-help--TranslateY)); }\n\n.pf-c-form__group-control.pf-m-inline {\n  display: flex;\n  flex-flow: row wrap; }\n  .pf-c-form__group-control.pf-m-inline > * {\n    margin-right: var(--pf-c-form__group-control--m-inline--child--MarginRight); }\n\n.pf-c-form__group-control .pf-c-form__helper-text:first-child {\n  --pf-c-form__helper-text--MarginTop: 0;\n  margin-bottom: var(--pf-c-form__group-control__helper-text--MarginBottom); }\n\n.pf-c-form__helper-text {\n  margin-top: var(--pf-c-form__helper-text--MarginTop);\n  font-size: var(--pf-c-form__helper-text--FontSize);\n  color: var(--pf-c-form__helper-text--Color); }\n  .pf-c-form__helper-text.pf-m-error {\n    --pf-c-form__helper-text--Color: var(--pf-c-form__helper-text--m-error--Color); }\n  .pf-c-form__helper-text.pf-m-success {\n    --pf-c-form__helper-text--Color: var(--pf-c-form__helper-text--m-success--Color); }\n  .pf-c-form__helper-text.pf-m-warning {\n    --pf-c-form__helper-text--Color: var(--pf-c-form__helper-text--m-warning--Color); }\n  .pf-c-form__helper-text.pf-m-inactive {\n    display: none;\n    visibility: hidden; }\n  .pf-c-form__helper-text.pf-m-hidden {\n    visibility: hidden;\n    opacity: 0; }\n\n.pf-c-form__helper-text-icon {\n  margin-right: var(--pf-c-form__helper-text-icon--MarginRight);\n  font-size: var(--pf-c-form__helper-text-icon--FontSize); }\n\n.pf-c-form__fieldset {\n  border: 0; }\n\n.pf-c-form__actions {\n  display: flex;\n  flex-wrap: wrap;\n  margin-top: var(--pf-c-form__actions--MarginTop);\n  margin-right: var(--pf-c-form__actions--MarginRight);\n  margin-bottom: var(--pf-c-form__actions--MarginBottom);\n  margin-left: var(--pf-c-form__actions--MarginLeft); }\n  .pf-c-form__actions > * {\n    margin-top: var(--pf-c-form__actions--child--MarginTop);\n    margin-right: var(--pf-c-form__actions--child--MarginRight);\n    margin-bottom: var(--pf-c-form__actions--child--MarginBottom);\n    margin-left: var(--pf-c-form__actions--child--MarginLeft); }\n\n.pf-c-form-control {\n  --pf-c-form-control--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-form-control--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-form-control--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-form-control--BorderTopColor: var(--pf-global--BorderColor--300);\n  --pf-c-form-control--BorderRightColor: var(--pf-global--BorderColor--300);\n  --pf-c-form-control--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-form-control--BorderLeftColor: var(--pf-global--BorderColor--300);\n  --pf-c-form-control--BorderRadius: 0;\n  --pf-c-form-control--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-form-control--Height: calc(var(--pf-c-form-control--FontSize) * var(--pf-c-form-control--LineHeight) + var(--pf-c-form-control--BorderWidth) * 2 + var(--pf-c-form-control--PaddingTop) + var(--pf-c-form-control--PaddingBottom));\n  --pf-c-form-control--inset--base: var(--pf-global--spacer--sm);\n  --pf-c-form-control--PaddingTop: calc(var(--pf-global--spacer--form-element) - var(--pf-global--BorderWidth--sm));\n  --pf-c-form-control--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-global--BorderWidth--sm));\n  --pf-c-form-control--PaddingRight: var(--pf-c-form-control--inset--base);\n  --pf-c-form-control--PaddingLeft: var(--pf-c-form-control--inset--base);\n  --pf-c-form-control--hover--BorderBottomColor: var(--pf-global--primary-color--100);\n  --pf-c-form-control--focus--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-form-control--focus--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-c-form-control--focus--BorderBottomWidth));\n  --pf-c-form-control--focus--BorderBottomColor: var(--pf-global--primary-color--100);\n  --pf-c-form-control--m-expanded--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-form-control--m-expanded--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-c-form-control--focus--BorderBottomWidth));\n  --pf-c-form-control--m-expanded--BorderBottomColor: var(--pf-global--primary-color--100);\n  --pf-c-form-control--placeholder--Color: var(--pf-global--Color--dark-200);\n  --pf-c-form-control--disabled--Color: var(--pf-global--disabled-color--100);\n  --pf-c-form-control--disabled--BackgroundColor: var(--pf-global--disabled-color--300);\n  --pf-c-form-control--disabled--BorderColor: transparent;\n  --pf-c-form-control--readonly--BackgroundColor: var(--pf-global--disabled-color--300);\n  --pf-c-form-control--readonly--hover--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-form-control--readonly--focus--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-global--BorderWidth--sm));\n  --pf-c-form-control--readonly--focus--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-form-control--readonly--focus--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-form-control--success--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-form-control--success--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-c-form-control--success--BorderBottomWidth));\n  --pf-c-form-control--success--BorderBottomColor: var(--pf-global--success-color--100);\n  --pf-c-form-control--success--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-form-control--success--BackgroundPositionX: calc(100% - var(--pf-c-form-control--PaddingLeft));\n  --pf-c-form-control--success--BackgroundPositionY: center;\n  --pf-c-form-control--success--BackgroundPosition: var(--pf-c-form-control--success--BackgroundPositionX) var(--pf-c-form-control--success--BackgroundPositionY);\n  --pf-c-form-control--success--BackgroundSizeX: var(--pf-c-form-control--FontSize);\n  --pf-c-form-control--success--BackgroundSizeY: var(--pf-c-form-control--FontSize);\n  --pf-c-form-control--success--BackgroundSize: var(--pf-c-form-control--success--BackgroundSizeX) var(--pf-c-form-control--success--BackgroundSizeY);\n  --pf-c-form-control--success--BackgroundUrl: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 512 512\'%3E%3Cpath fill=\'%233e8635\' d=\'M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z\'/%3E%3C/svg%3E");\n  --pf-c-form-control--m-warning--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-form-control--m-warning--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-c-form-control--m-warning--BorderBottomWidth));\n  --pf-c-form-control--m-warning--BorderBottomColor: var(--pf-global--warning-color--100);\n  --pf-c-form-control--m-warning--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-form-control--m-warning--BackgroundPositionX: calc(100% - calc(var(--pf-c-form-control--PaddingLeft) - 0.0625rem));\n  --pf-c-form-control--m-warning--BackgroundPositionY: center;\n  --pf-c-form-control--m-warning--BackgroundPosition: var(--pf-c-form-control--m-warning--BackgroundPositionX) var(--pf-c-form-control--m-warning--BackgroundPositionY);\n  --pf-c-form-control--m-warning--BackgroundSizeX: 1.25rem;\n  --pf-c-form-control--m-warning--BackgroundSizeY: var(--pf-c-form-control--FontSize);\n  --pf-c-form-control--m-warning--BackgroundSize: var(--pf-c-form-control--m-warning--BackgroundSizeX) var(--pf-c-form-control--m-warning--BackgroundSizeY);\n  --pf-c-form-control--m-warning--BackgroundUrl: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 512 512\'%3E%3Cpath fill=\'%23f0ab00\' d=\'M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\'/%3E%3C/svg%3E");\n  --pf-c-form-control--invalid--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-form-control--invalid--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-c-form-control--invalid--BorderBottomWidth));\n  --pf-c-form-control--invalid--BorderBottomColor: var(--pf-global--danger-color--100);\n  --pf-c-form-control--invalid--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-form-control--invalid--BackgroundPositionX: calc(100% - var(--pf-c-form-control--PaddingLeft));\n  --pf-c-form-control--invalid--BackgroundPositionY: center;\n  --pf-c-form-control--invalid--BackgroundPosition: var(--pf-c-form-control--invalid--BackgroundPositionX) var(--pf-c-form-control--invalid--BackgroundPositionY);\n  --pf-c-form-control--invalid--BackgroundSizeX: var(--pf-c-form-control--FontSize);\n  --pf-c-form-control--invalid--BackgroundSizeY: var(--pf-c-form-control--FontSize);\n  --pf-c-form-control--invalid--BackgroundSize: var(--pf-c-form-control--invalid--BackgroundSizeX) var(--pf-c-form-control--invalid--BackgroundSizeY);\n  --pf-c-form-control--invalid--BackgroundUrl: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 512 512\'%3E%3Cpath fill=\'%23c9190b\' d=\'M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\'/%3E%3C/svg%3E");\n  --pf-c-form-control--invalid--exclamation--Background: var(--pf-c-form-control--invalid--BackgroundUrl) var(--pf-c-form-control--invalid--BackgroundPosition) / var(--pf-c-form-control--invalid--BackgroundSize) no-repeat;\n  --pf-c-form-control--invalid--Background: var(--pf-c-form-control--BackgroundColor) var(--pf-c-form-control--invalid--exclamation--Background);\n  --pf-c-form-control--m-search--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-form-control--m-search--BackgroundPosition: var(--pf-c-form-control--PaddingRight);\n  --pf-c-form-control--m-search--BackgroundSize: var(--pf-c-form-control--FontSize) var(--pf-c-form-control--FontSize);\n  --pf-c-form-control--m-search--BackgroundUrl: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 512 512\'%3E%3Cpath fill=\'%236a6e73\' d=\'M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z\'/%3E%3C/svg%3E");\n  --pf-c-form-control--m-icon--PaddingRight: calc(var(--pf-c-form-control--inset--base) + var(--pf-c-form-control--m-icon--BackgroundSizeX) + var(--pf-c-form-control--m-icon--icon--spacer));\n  --pf-c-form-control--m-icon--BackgroundUrl: none;\n  --pf-c-form-control--m-icon--BackgroundPositionX: calc(100% - var(--pf-c-form-control--inset--base));\n  --pf-c-form-control--m-icon--BackgroundPositionY: center;\n  --pf-c-form-control--m-icon--BackgroundSizeX: var(--pf-c-form-control--FontSize);\n  --pf-c-form-control--m-icon--BackgroundSizeY: var(--pf-c-form-control--FontSize);\n  --pf-c-form-control--m-icon--icon--spacer: var(--pf-global--spacer--sm);\n  --pf-c-form-control--m-icon--icon--PaddingRight: calc(var(--pf-c-form-control--inset--base) + var(--pf-c-form-control--invalid--BackgroundSizeX) + var(--pf-c-form-control--m-icon--icon--spacer) + var(--pf-c-form-control--m-icon--BackgroundSizeX) + var(--pf-c-form-control--m-icon--icon--spacer));\n  --pf-c-form-control--m-icon--icon--BackgroundPositionX: calc(var(--pf-c-form-control--m-icon--BackgroundPositionX) - var(--pf-c-form-control--m-icon--icon--spacer) - var(--pf-c-form-control--invalid--BackgroundSizeX));\n  --pf-c-form-control--m-icon--invalid--BackgroundUrl: var(--pf-c-form-control--invalid--BackgroundUrl), var(--pf-c-form-control--m-icon--BackgroundUrl);\n  --pf-c-form-control--m-icon--invalid--BackgroundPosition: var(--pf-c-form-control--invalid--BackgroundPosition), var(--pf-c-form-control--m-icon--icon--BackgroundPositionX) var(--pf-c-form-control--m-icon--BackgroundPositionY);\n  --pf-c-form-control--m-icon--invalid--BackgroundSize: var(--pf-c-form-control--invalid--BackgroundSize), var(--pf-c-form-control--m-icon--BackgroundSizeX) var(--pf-c-form-control--m-icon--BackgroundSizeY);\n  --pf-c-form-control--m-icon--success--BackgroundUrl: var(--pf-c-form-control--success--BackgroundUrl), var(--pf-c-form-control--m-icon--BackgroundUrl);\n  --pf-c-form-control--m-icon--success--BackgroundPosition: var(--pf-c-form-control--success--BackgroundPosition), var(--pf-c-form-control--m-icon--icon--BackgroundPositionX) var(--pf-c-form-control--m-icon--BackgroundPositionY);\n  --pf-c-form-control--m-icon--success--BackgroundSize: var(--pf-c-form-control--success--BackgroundSize), var(--pf-c-form-control--m-icon--BackgroundSizeX) var(--pf-c-form-control--m-icon--BackgroundSizeY);\n  --pf-c-form-control--m-icon--m-warning--BackgroundUrl: var(--pf-c-form-control--m-warning--BackgroundUrl), var(--pf-c-form-control--m-icon--BackgroundUrl);\n  --pf-c-form-control--m-icon--m-warning--BackgroundPosition: var(--pf-c-form-control--m-warning--BackgroundPosition), var(--pf-c-form-control--m-icon--icon--BackgroundPositionX) var(--pf-c-form-control--m-icon--BackgroundPositionY);\n  --pf-c-form-control--m-icon--m-warning--BackgroundSize: var(--pf-c-form-control--m-warning--BackgroundSize), var(--pf-c-form-control--m-icon--BackgroundSizeX) var(--pf-c-form-control--m-icon--BackgroundSizeY);\n  --pf-c-form-control--m-calendar--BackgroundUrl: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 512 512\'%3E%3Cpath fill=\'%236a6e73\' d=\'M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm320-196c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM192 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM64 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z\'/%3E%3C/svg%3E");\n  --pf-c-form-control--m-clock--BackgroundUrl: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 512 512\'%3E%3Cpath fill=\'%236a6e73\' d=\'M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm61.8-104.4l-84.9-61.7c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v141.7l66.8 48.6c5.4 3.9 6.5 11.4 2.6 16.8L334.6 349c-3.9 5.3-11.4 6.5-16.8 2.6z\'/%3E%3C/svg%3E");\n  --pf-c-form-control__select--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-form-control__select--BackgroundUrl: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 320 512\'%3E%3Cpath fill=\'%23urrentColor\' d=\'M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\'/%3E%3C/svg%3E");\n  --pf-c-form-control__select--BackgroundSize: .625em;\n  --pf-c-form-control__select--BackgroundPositionX: calc(100% - var(--pf-global--spacer--md) + 1px);\n  --pf-c-form-control__select--BackgroundPositionY: center;\n  --pf-c-form-control__select--BackgroundPosition: var(--pf-c-form-control__select--BackgroundPositionX) var(--pf-c-form-control__select--BackgroundPositionY);\n  --pf-c-form-control__select--success--PaddingRight: var(--pf-global--spacer--3xl);\n  --pf-c-form-control__select--success--BackgroundPosition: calc(var(--pf-c-form-control__select--BackgroundPositionX) - var(--pf-global--spacer--lg));\n  --pf-c-form-control__select--m-warning--PaddingRight: var(--pf-global--spacer--3xl);\n  --pf-c-form-control__select--m-warning--BackgroundPosition: calc(var(--pf-c-form-control__select--BackgroundPositionX) - var(--pf-global--spacer--lg) + 0.0625rem);\n  --pf-c-form-control__select--invalid--PaddingRight: var(--pf-global--spacer--3xl);\n  --pf-c-form-control__select--invalid--BackgroundPosition: calc(var(--pf-c-form-control__select--BackgroundPositionX) - var(--pf-global--spacer--lg));\n  --pf-c-form-control--textarea--success--BackgroundPositionY: var(--pf-c-form-control--PaddingLeft);\n  --pf-c-form-control--textarea--m-warning--BackgroundPositionY: var(--pf-c-form-control--PaddingLeft);\n  --pf-c-form-control--textarea--invalid--BackgroundPositionY: var(--pf-c-form-control--PaddingLeft);\n  color: var(--pf-global--Color--100);\n  width: 100%;\n  padding: var(--pf-c-form-control--PaddingTop) var(--pf-c-form-control--PaddingRight) var(--pf-c-form-control--PaddingBottom) var(--pf-c-form-control--PaddingLeft);\n  font-size: var(--pf-c-form-control--FontSize);\n  line-height: var(--pf-c-form-control--LineHeight);\n  background-color: var(--pf-c-form-control--BackgroundColor);\n  background-repeat: no-repeat;\n  border: var(--pf-c-form-control--BorderWidth) solid;\n  border-color: var(--pf-c-form-control--BorderTopColor) var(--pf-c-form-control--BorderRightColor) var(--pf-c-form-control--BorderBottomColor) var(--pf-c-form-control--BorderLeftColor);\n  border-radius: var(--pf-c-form-control--BorderRadius);\n  -moz-appearance: none;\n  -webkit-appearance: none; }\n  .pf-c-form-control::placeholder {\n    color: var(--pf-c-form-control--placeholder--Color); }\n  .pf-c-form-control:not(textarea) {\n    height: var(--pf-c-form-control--Height);\n    text-overflow: ellipsis; }\n  .pf-c-form-control[readonly] {\n    background-color: var(--pf-c-form-control--readonly--BackgroundColor); }\n    .pf-c-form-control[readonly]:not(.pf-m-success):not([aria-invalid="true"]):hover {\n      --pf-c-form-control--BorderBottomColor: var(--pf-c-form-control--readonly--hover--BorderBottomColor); }\n    .pf-c-form-control[readonly]:not(.pf-m-success):not([aria-invalid="true"]):focus {\n      --pf-c-form-control--focus--PaddingBottom: var(--pf-c-form-control--readonly--focus--PaddingBottom);\n      --pf-c-form-control--focus--BorderBottomWidth: var(--pf-c-form-control--readonly--focus--BorderBottomWidth);\n      --pf-c-form-control--focus--BorderBottomColor: var(--pf-c-form-control--readonly--focus--BorderBottomColor); }\n  .pf-c-form-control:hover {\n    --pf-c-form-control--BorderBottomColor: var(--pf-c-form-control--hover--BorderBottomColor); }\n  .pf-c-form-control:focus {\n    --pf-c-form-control--BorderBottomColor: var(--pf-c-form-control--focus--BorderBottomColor);\n    padding-bottom: var(--pf-c-form-control--focus--PaddingBottom);\n    border-bottom-width: var(--pf-c-form-control--focus--BorderBottomWidth); }\n  .pf-c-form-control.pf-m-expanded {\n    --pf-c-form-control--BorderBottomColor: var(--pf-c-form-control--m-expanded--BorderBottomColor);\n    padding-bottom: var(--pf-c-form-control--m-expanded--PaddingBottom);\n    border-bottom-width: var(--pf-c-form-control--m-expanded--BorderBottomWidth); }\n  .pf-c-form-control:disabled {\n    --pf-c-form-control--Color: var(--pf-c-form-control--disabled--Color);\n    --pf-c-form-control--BackgroundColor: var(--pf-c-form-control--disabled--BackgroundColor);\n    cursor: not-allowed;\n    border-color: var(--pf-c-form-control--disabled--BorderColor); }\n  .pf-c-form-control[aria-invalid="true"] {\n    --pf-c-form-control--PaddingRight: var(--pf-c-form-control--invalid--PaddingRight);\n    --pf-c-form-control--BorderBottomColor: var(--pf-c-form-control--invalid--BorderBottomColor);\n    padding-bottom: var(--pf-c-form-control--invalid--PaddingBottom);\n    background-image: var(--pf-c-form-control--invalid--BackgroundUrl);\n    background-position: var(--pf-c-form-control--invalid--BackgroundPosition);\n    background-size: var(--pf-c-form-control--invalid--BackgroundSize);\n    border-bottom-width: var(--pf-c-form-control--invalid--BorderBottomWidth); }\n    .pf-c-form-control[aria-invalid="true"].pf-m-icon {\n      --pf-c-form-control--PaddingRight: var(--pf-c-form-control--m-icon--icon--PaddingRight);\n      background-image: var(--pf-c-form-control--m-icon--invalid--BackgroundUrl);\n      background-position: var(--pf-c-form-control--m-icon--invalid--BackgroundPosition);\n      background-size: var(--pf-c-form-control--m-icon--invalid--BackgroundSize); }\n  .pf-c-form-control.pf-m-success {\n    --pf-c-form-control--PaddingRight: var(--pf-c-form-control--success--PaddingRight);\n    --pf-c-form-control--BorderBottomColor: var(--pf-c-form-control--success--BorderBottomColor);\n    padding-bottom: var(--pf-c-form-control--success--PaddingBottom);\n    background-image: var(--pf-c-form-control--success--BackgroundUrl);\n    background-position: var(--pf-c-form-control--success--BackgroundPosition);\n    background-size: var(--pf-c-form-control--success--BackgroundSize);\n    border-bottom-width: var(--pf-c-form-control--success--BorderBottomWidth); }\n    .pf-c-form-control.pf-m-success.pf-m-icon {\n      --pf-c-form-control--PaddingRight: var(--pf-c-form-control--m-icon--icon--PaddingRight);\n      background-image: var(--pf-c-form-control--m-icon--success--BackgroundUrl);\n      background-position: var(--pf-c-form-control--m-icon--success--BackgroundPosition);\n      background-size: var(--pf-c-form-control--m-icon--success--BackgroundSize); }\n  .pf-c-form-control.pf-m-warning {\n    --pf-c-form-control--PaddingRight: var(--pf-c-form-control--m-warning--PaddingRight);\n    --pf-c-form-control--BorderBottomColor: var(--pf-c-form-control--m-warning--BorderBottomColor);\n    padding-bottom: var(--pf-c-form-control--m-warning--PaddingBottom);\n    background-image: var(--pf-c-form-control--m-warning--BackgroundUrl);\n    background-position: var(--pf-c-form-control--m-warning--BackgroundPosition);\n    background-size: var(--pf-c-form-control--m-warning--BackgroundSize);\n    border-bottom-width: var(--pf-c-form-control--m-warning--BorderBottomWidth); }\n    .pf-c-form-control.pf-m-warning.pf-m-icon {\n      --pf-c-form-control--PaddingRight: var(--pf-c-form-control--m-icon--icon--PaddingRight);\n      background-image: var(--pf-c-form-control--m-icon--m-warning--BackgroundUrl);\n      background-position: var(--pf-c-form-control--m-icon--m-warning--BackgroundPosition);\n      background-size: var(--pf-c-form-control--m-icon--m-warning--BackgroundSize); }\n  .pf-c-form-control.pf-m-search {\n    --pf-c-form-control--PaddingLeft: var(--pf-c-form-control--m-search--PaddingLeft);\n    background-image: var(--pf-c-form-control--m-search--BackgroundUrl);\n    background-position: var(--pf-c-form-control--m-search--BackgroundPosition);\n    background-size: var(--pf-c-form-control--m-search--BackgroundSize); }\n  .pf-c-form-control.pf-m-icon {\n    --pf-c-form-control--PaddingRight: var(--pf-c-form-control--m-icon--PaddingRight);\n    background-image: var(--pf-c-form-control--m-icon--BackgroundUrl);\n    background-position: var(--pf-c-form-control--m-icon--BackgroundPositionX) var(--pf-c-form-control--m-icon--BackgroundPositionY);\n    background-size: var(--pf-c-form-control--m-icon--BackgroundSizeX) var(--pf-c-form-control--m-icon--BackgroundSizeY); }\n    .pf-c-form-control.pf-m-icon.pf-m-calendar {\n      --pf-c-form-control--m-icon--BackgroundUrl: var(--pf-c-form-control--m-calendar--BackgroundUrl); }\n    .pf-c-form-control.pf-m-icon.pf-m-clock {\n      --pf-c-form-control--m-icon--BackgroundUrl: var(--pf-c-form-control--m-clock--BackgroundUrl); }\n  select.pf-c-form-control {\n    --pf-c-form-control--PaddingRight: var(--pf-c-form-control__select--PaddingRight);\n    background-image: var(--pf-c-form-control__select--BackgroundUrl);\n    background-position: var(--pf-c-form-control__select--BackgroundPosition);\n    background-size: var(--pf-c-form-control__select--BackgroundSize); }\n    select.pf-c-form-control[aria-invalid="true"] {\n      --pf-c-form-control--PaddingRight: var(--pf-c-form-control__select--invalid--PaddingRight);\n      --pf-c-form-control--invalid--BackgroundPosition: var(--pf-c-form-control__select--invalid--BackgroundPosition);\n      background-image: var(--pf-c-form-control__select--BackgroundUrl), var(--pf-c-form-control--invalid--BackgroundUrl);\n      background-position: var(--pf-c-form-control__select--BackgroundPosition), var(--pf-c-form-control--invalid--BackgroundPosition);\n      background-size: var(--pf-c-form-control__select--BackgroundSize), var(--pf-c-form-control--invalid--BackgroundSize); }\n    select.pf-c-form-control.pf-m-success {\n      --pf-c-form-control--PaddingRight: var(--pf-c-form-control__select--success--PaddingRight);\n      --pf-c-form-control--success--BackgroundPosition: var(--pf-c-form-control__select--success--BackgroundPosition);\n      background-image: var(--pf-c-form-control__select--BackgroundUrl), var(--pf-c-form-control--success--BackgroundUrl);\n      background-position: var(--pf-c-form-control__select--BackgroundPosition), var(--pf-c-form-control--success--BackgroundPosition);\n      background-size: var(--pf-c-form-control__select--BackgroundSize), var(--pf-c-form-control--success--BackgroundSize); }\n    select.pf-c-form-control.pf-m-warning {\n      --pf-c-form-control--PaddingRight: var(--pf-c-form-control__select--m-warning--PaddingRight);\n      background-image: var(--pf-c-form-control__select--BackgroundUrl), var(--pf-c-form-control--m-warning--BackgroundUrl);\n      background-position: var(--pf-c-form-control__select--BackgroundPosition), var(--pf-c-form-control__select--m-warning--BackgroundPosition);\n      background-size: var(--pf-c-form-control__select--BackgroundSize), var(--pf-c-form-control--m-warning--BackgroundSize); }\n  textarea.pf-c-form-control {\n    --pf-c-form-control--success--BackgroundPositionY: var(--pf-c-form-control--textarea--success--BackgroundPositionY);\n    --pf-c-form-control--invalid--BackgroundPositionY: var(--pf-c-form-control--textarea--invalid--BackgroundPositionY);\n    --pf-c-form-control--m-warning--BackgroundPositionY: var(--pf-c-form-control--textarea--m-warning--BackgroundPositionY); }\n  .pf-c-form-control.pf-m-resize-vertical {\n    resize: vertical; }\n  .pf-c-form-control.pf-m-resize-horizontal {\n    resize: horizontal; }\n\n.pf-c-hint {\n  --pf-c-hint--GridRowGap: var(--pf-global--spacer--md);\n  --pf-c-hint--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-hint--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-hint--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-hint--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-hint--BackgroundColor: var(--pf-global--palette--blue-50);\n  --pf-c-hint--BorderColor: var(--pf-global--palette--blue-100);\n  --pf-c-hint--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-hint--BoxShadow: var(--pf-global--BoxShadow--sm);\n  --pf-c-hint--Color: var(--pf-global--Color--100);\n  --pf-c-hint__title--FontSize: var(--pf-global--FontSize--lg);\n  --pf-c-hint__body--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-hint__footer--child--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-hint__actions--MarginLeft: var(--pf-global--spacer--2xl);\n  --pf-c-hint__actions--c-dropdown--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  display: grid;\n  grid-template-columns: 1fr auto;\n  grid-row-gap: var(--pf-c-hint--GridRowGap);\n  padding: var(--pf-c-hint--PaddingTop) var(--pf-c-hint--PaddingRight) var(--pf-c-hint--PaddingBottom) var(--pf-c-hint--PaddingLeft);\n  color: var(--pf-c-hint--Color);\n  background-color: var(--pf-c-hint--BackgroundColor);\n  border: var(--pf-c-hint--BorderWidth) solid var(--pf-c-hint--BorderColor);\n  box-shadow: var(--pf-c-hint--BoxShadow); }\n  .pf-c-hint .pf-c-button.pf-m-link.pf-m-inline {\n    text-align: left;\n    white-space: normal; }\n\n.pf-c-hint__actions {\n  display: inline-grid;\n  grid-auto-flow: column;\n  margin-left: var(--pf-c-hint__actions--MarginLeft);\n  text-align: right;\n  grid-column: 2;\n  grid-row: 1; }\n  .pf-c-hint__actions .pf-c-dropdown .pf-c-dropdown__toggle.pf-m-plain {\n    margin-top: var(--pf-c-hint__actions--c-dropdown--MarginTop); }\n  .pf-c-hint__actions + .pf-c-hint__body {\n    grid-column: 1; }\n\n.pf-c-hint__title {\n  font-size: var(--pf-c-hint__title--FontSize); }\n\n.pf-c-hint__body {\n  grid-column: 1 / -1;\n  font-size: var(--pf-c-hint__body--FontSize); }\n\n.pf-c-hint__footer {\n  grid-column: 1 / -1; }\n  .pf-c-hint__footer > :not(:last-child) {\n    margin-right: var(--pf-c-hint__footer--child--MarginRight); }\n\n.pf-c-inline-edit {\n  --pf-c-inline-edit__group--item--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-inline-edit__action--c-button--m-valid--m-plain--Color: var(--pf-global--link--Color);\n  --pf-c-inline-edit__action--c-button--m-valid--m-plain--hover--Color: var(--pf-global--link--Color--hover);\n  --pf-c-inline-edit__action--m-icon-group--item--MarginRight: 0;\n  --pf-c-inline-edit__group--m-footer--MarginTop: var(--pf-global--spacer--xl);\n  --pf-c-inline-edit__label--m-bold--FontWeight: var(--pf-global--FontWeight--semi-bold); }\n\n.pf-c-inline-edit__group {\n  display: flex;\n  align-items: baseline; }\n  .pf-c-inline-edit__group > * {\n    margin-right: var(--pf-c-inline-edit__group--item--MarginRight); }\n  .pf-c-inline-edit__group.pf-m-icon-group {\n    --pf-c-inline-edit__group--item--MarginRight: var(--pf-c-inline-edit__action--m-icon-group--item--MarginRight); }\n  .pf-c-inline-edit__group.pf-m-footer {\n    margin-top: var(--pf-c-inline-edit__group--m-footer--MarginTop); }\n  .pf-c-inline-edit__group.pf-m-column {\n    --pf-c-inline-edit__group--item--MarginRight: 0;\n    flex-direction: column; }\n  .pf-c-inline-edit__group > :last-child {\n    --pf-c-inline-edit__group--item--MarginRight: 0; }\n\n.pf-c-inline-edit__input {\n  flex: 1; }\n\n.pf-c-inline-edit__action.pf-m-valid .pf-c-button.pf-m-plain {\n  --pf-c-button--m-plain--Color: var(--pf-c-inline-edit__action--c-button--m-valid--m-plain--Color); }\n  .pf-c-inline-edit__action.pf-m-valid .pf-c-button.pf-m-plain:hover {\n    --pf-c-button--m-plain--Color: var(--pf-c-inline-edit__action--c-button--m-valid--m-plain--hover--Color); }\n\n.pf-c-inline-edit__input,\n.pf-c-inline-edit__action,\n.pf-c-inline-edit__group.pf-m-action-group {\n  display: none;\n  visibility: hidden; }\n\n.pf-c-inline-edit__action.pf-m-enable-editable {\n  display: inline-block;\n  visibility: visible; }\n\n.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__input,\n.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__action,\n.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__group.pf-m-action-group,\n.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__input,\n.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__action,\n.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__group.pf-m-action-group {\n  visibility: visible; }\n\n.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__input,\n.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__input {\n  display: block; }\n\n.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__action,\n.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__action {\n  display: inline-block; }\n\n.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__group.pf-m-action-group,\n.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__group.pf-m-action-group {\n  display: inline-flex; }\n\n.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__value,\n.pf-c-inline-edit.pf-m-inline-editable .pf-c-inline-edit__action.pf-m-enable-editable,\n.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__value,\n.pf-c-inline-edit .pf-m-inline-editable .pf-c-inline-edit__action.pf-m-enable-editable {\n  display: none;\n  visibility: hidden; }\n\n.pf-c-inline-edit__label + .pf-c-inline-edit__action.pf-m-enable > .pf-c-button {\n  margin-top: calc(var(--pf-c-button--PaddingTop) * -1);\n  margin-bottom: calc(var(--pf-c-button--PaddingBottom) * -1); }\n\n.pf-c-inline-edit__label.pf-m-bold {\n  font-weight: var(--pf-c-inline-edit__label--m-bold--FontWeight); }\n\n.pf-c-input-group {\n  --pf-c-input-group--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-input-group__text--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-input-group__text--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-input-group__text--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-input-group__text--Color: var(--pf-global--Color--dark-200);\n  --pf-c-input-group__text--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-input-group__text--BorderTopColor: var(--pf-global--BorderColor--300);\n  --pf-c-input-group__text--BorderRightColor: var(--pf-global--BorderColor--300);\n  --pf-c-input-group__text--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-input-group__text--BorderLeftColor: var(--pf-global--BorderColor--300);\n  --pf-c-input-group__text--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-input-group__textarea--MinHeight: var(--pf-global--spacer--xl);\n  --pf-c-input-group--c-form-control--invalid--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-input-group--c-form-control--MarginRight: 0;\n  color: var(--pf-global--Color--100);\n  display: flex;\n  width: 100%;\n  background-color: var(--pf-c-input-group--BackgroundColor); }\n  .pf-c-input-group > * + * {\n    margin-left: -1px; }\n  .pf-c-input-group .pf-c-form-control[aria-invalid="true"]:not(:last-child) {\n    margin-right: var(--pf-c-input-group--c-form-control--MarginRight); }\n  .pf-c-input-group input:not([type="checkbox"]):not([type="radio"]),\n  .pf-c-input-group textarea {\n    flex: 2;\n    min-width: 0; }\n  .pf-c-input-group textarea {\n    min-height: var(--pf-c-input-group__textarea--MinHeight); }\n\n.pf-c-input-group__text {\n  display: flex;\n  align-items: center;\n  padding-right: var(--pf-c-input-group__text--PaddingRight);\n  padding-left: var(--pf-c-input-group__text--PaddingLeft);\n  font-size: var(--pf-c-input-group__text--FontSize);\n  color: var(--pf-c-input-group__text--Color);\n  text-align: center;\n  background-color: var(--pf-c-input-group__text--BackgroundColor);\n  border: var(--pf-c-input-group__text--BorderWidth) solid;\n  border-color: var(--pf-c-input-group__text--BorderTopColor) var(--pf-c-input-group__text--BorderRightColor) var(--pf-c-input-group__text--BorderBottomColor) var(--pf-c-input-group__text--BorderLeftColor); }\n  label.pf-c-input-group__text {\n    cursor: pointer; }\n\n.pf-c-jump-links {\n  --pf-c-jump-links__list--PaddingTop: 0;\n  --pf-c-jump-links__list--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-jump-links__list--PaddingBottom: 0;\n  --pf-c-jump-links__list--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-jump-links--m-vertical__list--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-jump-links--m-vertical__list--PaddingRight: 0;\n  --pf-c-jump-links--m-vertical__list--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-jump-links--m-vertical__list--PaddingLeft: 0;\n  --pf-c-jump-links__list--FlexDirection: row;\n  --pf-c-jump-links--m-vertical__list--FlexDirection: column;\n  --pf-c-jump-links__list--before--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-jump-links__list--before--BorderTopWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-jump-links__list--before--BorderRightWidth: 0;\n  --pf-c-jump-links__list--before--BorderBottomWidth: 0;\n  --pf-c-jump-links__list--before--BorderLeftWidth: 0;\n  --pf-c-jump-links--m-vertical__list--before--BorderLeftWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-jump-links--m-vertical__list--before--BorderTopWidth: 0;\n  --pf-c-jump-links__list__list--MarginTop: calc(var(--pf-global--spacer--sm) * -1);\n  --pf-c-jump-links__link--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-jump-links__link--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-jump-links__link--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-jump-links__link--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-jump-links__list__list__link--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-jump-links__list__list__link--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-jump-links__list__list__link--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-jump-links__link--OutlineOffset: calc(-1 * var(--pf-global--spacer--sm));\n  --pf-c-jump-links__link--before--BorderTopWidth: 0;\n  --pf-c-jump-links__link--before--BorderRightWidth: 0;\n  --pf-c-jump-links__link--before--BorderBottomWidth: 0;\n  --pf-c-jump-links__link--before--BorderLeftWidth: 0;\n  --pf-c-jump-links__link--before--BorderColor: transparent;\n  --pf-c-jump-links__link--focus--before--BorderTopWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-jump-links__link--focus--before--BorderLeftWidth: 0;\n  --pf-c-jump-links__link--focus--before--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-jump-links__item--m-current__link--before--BorderTopWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-jump-links__item--m-current__link--before--BorderLeftWidth: 0;\n  --pf-c-jump-links__item--m-current__link--before--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-jump-links--m-vertical__link--focus--before--BorderTopWidth: 0;\n  --pf-c-jump-links--m-vertical__link--focus--before--BorderLeftWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-jump-links--m-vertical__item--m-current__link--before--BorderTopWidth: 0;\n  --pf-c-jump-links--m-vertical__item--m-current__link--before--BorderLeftWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-jump-links__link-text--Color: var(--pf-global--Color--200);\n  --pf-c-jump-links__link--hover__link-text--Color: var(--pf-global--Color--100);\n  --pf-c-jump-links__link--focus__link-text--Color: var(--pf-global--Color--100);\n  --pf-c-jump-links__item--m-current__link-text--Color: var(--pf-global--Color--100);\n  --pf-c-jump-links__label--MarginBottom: var(--pf-global--spacer--md);\n  display: flex; }\n  .pf-c-jump-links.pf-m-center {\n    justify-content: center; }\n    .pf-c-jump-links.pf-m-center .pf-c-jump-links__main {\n      align-items: center; }\n  .pf-c-jump-links.pf-m-vertical {\n    --pf-c-jump-links__list--PaddingTop: var(--pf-c-jump-links--m-vertical__list--PaddingTop);\n    --pf-c-jump-links__list--PaddingRight: var(--pf-c-jump-links--m-vertical__list--PaddingRight);\n    --pf-c-jump-links__list--PaddingBottom: var(--pf-c-jump-links--m-vertical__list--PaddingBottom);\n    --pf-c-jump-links__list--PaddingLeft: var(--pf-c-jump-links--m-vertical__list--PaddingLeft);\n    --pf-c-jump-links__list--before--BorderTopWidth: var(--pf-c-jump-links--m-vertical__list--before--BorderTopWidth);\n    --pf-c-jump-links__list--before--BorderLeftWidth: var(--pf-c-jump-links--m-vertical__list--before--BorderLeftWidth);\n    --pf-c-jump-links__link--focus--before--BorderTopWidth: var(--pf-c-jump-links--m-vertical__link--focus--before--BorderTopWidth);\n    --pf-c-jump-links__link--focus--before--BorderLeftWidth: var(--pf-c-jump-links--m-vertical__link--focus--before--BorderLeftWidth);\n    --pf-c-jump-links__item--m-current__link--before--BorderTopWidth: var(--pf-c-jump-links--m-vertical__item--m-current__link--before--BorderTopWidth);\n    --pf-c-jump-links__item--m-current__link--before--BorderLeftWidth: var(--pf-c-jump-links--m-vertical__item--m-current__link--before--BorderLeftWidth);\n    --pf-c-jump-links__list--FlexDirection: var(--pf-c-jump-links--m-vertical__list--FlexDirection);\n    flex-direction: column; }\n\n.pf-c-jump-links__list {\n  position: relative;\n  display: flex;\n  flex-direction: var(--pf-c-jump-links__list--FlexDirection);\n  padding-top: var(--pf-c-jump-links__list--PaddingTop);\n  padding-right: var(--pf-c-jump-links__list--PaddingRight);\n  padding-bottom: var(--pf-c-jump-links__list--PaddingBottom);\n  padding-left: var(--pf-c-jump-links__list--PaddingLeft); }\n  .pf-c-jump-links__list::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    pointer-events: none;\n    content: "";\n    border: solid var(--pf-c-jump-links__list--before--BorderColor);\n    border-width: var(--pf-c-jump-links__list--before--BorderTopWidth) var(--pf-c-jump-links__list--before--BorderRightWidth) var(--pf-c-jump-links__list--before--BorderBottomWidth) var(--pf-c-jump-links__list--before--BorderLeftWidth); }\n  .pf-c-jump-links__list .pf-c-jump-links__list {\n    --pf-c-jump-links__list--PaddingTop: 0;\n    --pf-c-jump-links__list--PaddingBottom: 0;\n    --pf-c-jump-links__link--PaddingTop: var(--pf-c-jump-links__list__list__link--PaddingTop);\n    --pf-c-jump-links__link--PaddingBottom: var(--pf-c-jump-links__list__list__link--PaddingBottom);\n    --pf-c-jump-links__link--PaddingLeft: var(--pf-c-jump-links__list__list__link--PaddingLeft);\n    margin-top: var(--pf-c-jump-links__list__list--MarginTop); }\n\n.pf-c-jump-links__link {\n  position: relative;\n  display: flex;\n  flex: 1;\n  padding-top: var(--pf-c-jump-links__link--PaddingTop);\n  padding-right: var(--pf-c-jump-links__link--PaddingRight);\n  padding-bottom: var(--pf-c-jump-links__link--PaddingBottom);\n  padding-left: var(--pf-c-jump-links__link--PaddingLeft);\n  text-decoration: none;\n  outline-offset: var(--pf-c-jump-links__link--OutlineOffset); }\n  .pf-c-jump-links__link:hover {\n    --pf-c-jump-links__link-text--Color: var(--pf-c-jump-links__link--hover__link-text--Color); }\n  .pf-c-jump-links__link:focus {\n    --pf-c-jump-links__link-text--Color: var(--pf-c-jump-links__link--focus__link-text--Color);\n    --pf-c-jump-links__link--before--BorderTopWidth: var(--pf-c-jump-links__link--focus--before--BorderTopWidth);\n    --pf-c-jump-links__link--before--BorderLeftWidth: var(--pf-c-jump-links__link--focus--before--BorderLeftWidth);\n    --pf-c-jump-links__link--before--BorderColor: var(--pf-c-jump-links__link--focus--before--BorderColor); }\n  .pf-c-jump-links__link::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    pointer-events: none;\n    content: "";\n    border-color: var(--pf-c-jump-links__link--before--BorderColor);\n    border-style: solid;\n    border-width: var(--pf-c-jump-links__link--before--BorderTopWidth) var(--pf-c-jump-links__link--before--BorderRightWidth) var(--pf-c-jump-links__link--before--BorderBottomWidth) var(--pf-c-jump-links__link--before--BorderLeftWidth); }\n\n.pf-c-jump-links__item.pf-m-current {\n  --pf-c-jump-links__link--before--BorderTopWidth: var(--pf-c-jump-links__item--m-current__link--before--BorderTopWidth);\n  --pf-c-jump-links__link--before--BorderLeftWidth: var(--pf-c-jump-links__item--m-current__link--before--BorderLeftWidth);\n  --pf-c-jump-links__link--before--BorderColor: var(--pf-c-jump-links__item--m-current__link--before--BorderColor);\n  --pf-c-jump-links__link-text--Color: var(--pf-c-jump-links__item--m-current__link-text--Color); }\n\n.pf-c-jump-links__link-text {\n  color: var(--pf-c-jump-links__link-text--Color); }\n\n.pf-c-jump-links__label {\n  margin-bottom: var(--pf-c-jump-links__label--MarginBottom); }\n\n.pf-c-jump-links__main {\n  display: flex;\n  flex-direction: column; }\n\n.pf-c-label {\n  --pf-c-label--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-label--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-label--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-label--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-label--BorderRadius: var(--pf-global--BorderRadius--lg);\n  --pf-c-label--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-label--Color: var(--pf-global--Color--100);\n  --pf-c-label--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-label__content--before--BorderWidth: 0;\n  --pf-c-label__content--before--BorderColor: transparent;\n  --pf-c-label--m-outline--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-label--m-outline__content--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-label--m-outline__content--before--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-label__content--link--hover--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-label__content--link--focus--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-label__content--link--hover--before--BorderColor: var(--pf-global--BorderColor--200);\n  --pf-c-label__content--link--focus--before--BorderColor: var(--pf-global--BorderColor--200);\n  --pf-c-label--m-outline__content--link--hover--before--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-label--m-outline__content--link--focus--before--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-label--m-outline__content--link--hover--before--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-label--m-outline__content--link--focus--before--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-label--m-blue--BackgroundColor: var(--pf-global--palette--blue-50);\n  --pf-c-label--m-blue__content--Color: var(--pf-global--info-color--200);\n  --pf-c-label--m-blue__icon--Color: var(--pf-global--primary-color--100);\n  --pf-c-label--m-blue__content--link--hover--before--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-label--m-blue__content--link--focus--before--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-label--m-outline--m-blue__content--before--BorderColor: var(--pf-global--active-color--200);\n  --pf-c-label--m-outline--m-blue__content--link--hover--before--BorderColor: var(--pf-global--active-color--200);\n  --pf-c-label--m-outline--m-blue__content--link--focus--before--BorderColor: var(--pf-global--active-color--200);\n  --pf-c-label--m-green--BackgroundColor: var(--pf-global--palette--green-50);\n  --pf-c-label--m-green__content--Color: var(--pf-global--success-color--200);\n  --pf-c-label--m-green__icon--Color: var(--pf-global--success-color--100);\n  --pf-c-label--m-green__content--link--hover--before--BorderColor: var(--pf-global--success-color--100);\n  --pf-c-label--m-green__content--link--focus--before--BorderColor: var(--pf-global--success-color--100);\n  --pf-c-label--m-outline--m-green__content--before--BorderColor: var(--pf-global--palette--green-100);\n  --pf-c-label--m-outline--m-green__content--link--hover--before--BorderColor: var(--pf-global--palette--green-100);\n  --pf-c-label--m-outline--m-green__content--link--focus--before--BorderColor: var(--pf-global--palette--green-100);\n  --pf-c-label--m-orange--BackgroundColor: var(--pf-global--palette--gold-50);\n  --pf-c-label--m-orange__content--Color: var(--pf-global--palette--gold-700);\n  --pf-c-label--m-orange__icon--Color: var(--pf-global--palette--orange-300);\n  --pf-c-label--m-orange__content--link--hover--before--BorderColor: var(--pf-global--palette--orange-300);\n  --pf-c-label--m-orange__content--link--focus--before--BorderColor: var(--pf-global--palette--orange-300);\n  --pf-c-label--m-outline--m-orange__content--before--BorderColor: var(--pf-global--palette--gold-100);\n  --pf-c-label--m-outline--m-orange__content--link--hover--before--BorderColor: var(--pf-global--palette--gold-100);\n  --pf-c-label--m-outline--m-orange__content--link--focus--before--BorderColor: var(--pf-global--palette--gold-100);\n  --pf-c-label--m-red--BackgroundColor: var(--pf-global--palette--red-50);\n  --pf-c-label--m-red__content--Color: var(--pf-global--palette--red-300);\n  --pf-c-label--m-red__icon--Color: var(--pf-global--danger-color--100);\n  --pf-c-label--m-red__content--link--hover--before--BorderColor: var(--pf-global--danger-color--100);\n  --pf-c-label--m-red__content--link--focus--before--BorderColor: var(--pf-global--danger-color--100);\n  --pf-c-label--m-outline--m-red__content--before--BorderColor: var(--pf-global--danger-color--100);\n  --pf-c-label--m-outline--m-red__content--link--hover--before--BorderColor: var(--pf-global--danger-color--100);\n  --pf-c-label--m-outline--m-red__content--link--focus--before--BorderColor: var(--pf-global--danger-color--100);\n  --pf-c-label--m-purple--BackgroundColor: var(--pf-global--palette--purple-50);\n  --pf-c-label--m-purple__content--Color: var(--pf-global--palette--purple-700);\n  --pf-c-label--m-purple__icon--Color: var(--pf-global--palette--purple-500);\n  --pf-c-label--m-purple__content--link--hover--before--BorderColor: var(--pf-global--palette--purple-500);\n  --pf-c-label--m-purple__content--link--focus--before--BorderColor: var(--pf-global--palette--purple-500);\n  --pf-c-label--m-outline--m-purple__content--before--BorderColor: var(--pf-global--palette--purple-100);\n  --pf-c-label--m-outline--m-purple__content--link--hover--before--BorderColor: var(--pf-global--palette--purple-100);\n  --pf-c-label--m-outline--m-purple__content--link--focus--before--BorderColor: var(--pf-global--palette--purple-100);\n  --pf-c-label--m-cyan--BackgroundColor: var(--pf-global--palette--cyan-50);\n  --pf-c-label--m-cyan__content--Color: var(--pf-global--default-color--300);\n  --pf-c-label--m-cyan__icon--Color: var(--pf-global--default-color--200);\n  --pf-c-label--m-cyan__content--link--hover--before--BorderColor: var(--pf-global--default-color--200);\n  --pf-c-label--m-cyan__content--link--focus--before--BorderColor: var(--pf-global--default-color--200);\n  --pf-c-label--m-outline--m-cyan__content--before--BorderColor: var(--pf-global--palette--cyan-100);\n  --pf-c-label--m-outline--m-cyan__content--link--hover--before--BorderColor: var(--pf-global--palette--cyan-100);\n  --pf-c-label--m-outline--m-cyan__content--link--focus--before--BorderColor: var(--pf-global--palette--cyan-100);\n  --pf-c-label--m-overflow__content--Color: var(--pf-global--link--Color);\n  --pf-c-label--m-overflow__content--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-label--m-overflow__content--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-label--m-overflow__content--before--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-label--m-overflow__content--link--hover--before--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-label--m-overflow__content--link--hover--before--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-label--m-overflow__content--link--focus--before--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-label--m-overflow__content--link--focus--before--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-label__content--Color: var(--pf-global--Color--100);\n  --pf-c-label__text--MaxWidth: 16ch;\n  --pf-c-label__icon--Color: var(--pf-global--Color--100);\n  --pf-c-label__icon--MarginRight: var(--pf-global--spacer--xs);\n  --pf-c-label__c-button--FontSize: var(--pf-global--FontSize--xs);\n  --pf-c-label__c-button--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-label__c-button--MarginRight: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-label__c-button--MarginBottom: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-label__c-button--MarginLeft: var(--pf-global--spacer--xs);\n  --pf-c-label__c-button--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-label__c-button--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-label__c-button--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-label__c-button--PaddingLeft: var(--pf-global--spacer--sm);\n  position: relative;\n  padding: var(--pf-c-label--PaddingTop) var(--pf-c-label--PaddingRight) var(--pf-c-label--PaddingBottom) var(--pf-c-label--PaddingLeft);\n  font-size: var(--pf-c-label--FontSize);\n  color: var(--pf-c-label--Color);\n  white-space: nowrap;\n  background-color: var(--pf-c-label--BackgroundColor);\n  border: 0;\n  border-radius: var(--pf-c-label--BorderRadius); }\n  .pf-c-label.pf-m-blue {\n    --pf-c-label--BackgroundColor: var(--pf-c-label--m-blue--BackgroundColor);\n    --pf-c-label__content--Color: var(--pf-c-label--m-blue__content--Color);\n    --pf-c-label__icon--Color: var(--pf-c-label--m-blue__icon--Color);\n    --pf-c-label--m-outline__content--before--BorderColor: var(--pf-c-label--m-outline--m-blue__content--before--BorderColor);\n    --pf-c-label__content--link--hover--before--BorderColor: var(--pf-c-label--m-blue__content--link--hover--before--BorderColor);\n    --pf-c-label__content--link--focus--before--BorderColor: var(--pf-c-label--m-blue__content--link--focus--before--BorderColor);\n    --pf-c-label--m-outline__content--link--hover--before--BorderColor: var(--pf-c-label--m-outline--m-blue__content--link--hover--before--BorderColor);\n    --pf-c-label--m-outline__content--link--focus--before--BorderColor: var(--pf-c-label--m-outline--m-blue__content--link--focus--before--BorderColor); }\n  .pf-c-label.pf-m-green {\n    --pf-c-label--BackgroundColor: var(--pf-c-label--m-green--BackgroundColor);\n    --pf-c-label__content--Color: var(--pf-c-label--m-green__content--Color);\n    --pf-c-label__icon--Color: var(--pf-c-label--m-green__icon--Color);\n    --pf-c-label--m-outline__content--before--BorderColor: var(--pf-c-label--m-outline--m-green__content--before--BorderColor);\n    --pf-c-label__content--link--hover--before--BorderColor: var(--pf-c-label--m-green__content--link--hover--before--BorderColor);\n    --pf-c-label__content--link--focus--before--BorderColor: var(--pf-c-label--m-green__content--link--focus--before--BorderColor);\n    --pf-c-label--m-outline__content--link--hover--before--BorderColor: var(--pf-c-label--m-outline--m-green__content--link--hover--before--BorderColor);\n    --pf-c-label--m-outline__content--link--focus--before--BorderColor: var(--pf-c-label--m-outline--m-green__content--link--focus--before--BorderColor); }\n  .pf-c-label.pf-m-orange {\n    --pf-c-label--BackgroundColor: var(--pf-c-label--m-orange--BackgroundColor);\n    --pf-c-label__content--Color: var(--pf-c-label--m-orange__content--Color);\n    --pf-c-label__icon--Color: var(--pf-c-label--m-orange__icon--Color);\n    --pf-c-label--m-outline__content--before--BorderColor: var(--pf-c-label--m-outline--m-orange__content--before--BorderColor);\n    --pf-c-label__content--link--hover--before--BorderColor: var(--pf-c-label--m-orange__content--link--hover--before--BorderColor);\n    --pf-c-label__content--link--focus--before--BorderColor: var(--pf-c-label--m-orange__content--link--focus--before--BorderColor);\n    --pf-c-label--m-outline__content--link--hover--before--BorderColor: var(--pf-c-label--m-outline--m-orange__content--link--hover--before--BorderColor);\n    --pf-c-label--m-outline__content--link--focus--before--BorderColor: var(--pf-c-label--m-outline--m-orange__content--link--focus--before--BorderColor); }\n  .pf-c-label.pf-m-red {\n    --pf-c-label--BackgroundColor: var(--pf-c-label--m-red--BackgroundColor);\n    --pf-c-label__content--Color: var(--pf-c-label--m-red__content--Color);\n    --pf-c-label__icon--Color: var(--pf-c-label--m-red__icon--Color);\n    --pf-c-label--m-outline__content--before--BorderColor: var(--pf-c-label--m-outline--m-red__content--before--BorderColor);\n    --pf-c-label__content--link--hover--before--BorderColor: var(--pf-c-label--m-red__content--link--hover--before--BorderColor);\n    --pf-c-label__content--link--focus--before--BorderColor: var(--pf-c-label--m-red__content--link--focus--before--BorderColor);\n    --pf-c-label--m-outline__content--link--hover--before--BorderColor: var(--pf-c-label--m-outline--m-red__content--link--hover--before--BorderColor);\n    --pf-c-label--m-outline__content--link--focus--before--BorderColor: var(--pf-c-label--m-outline--m-red__content--link--focus--before--BorderColor); }\n  .pf-c-label.pf-m-purple {\n    --pf-c-label--BackgroundColor: var(--pf-c-label--m-purple--BackgroundColor);\n    --pf-c-label__content--Color: var(--pf-c-label--m-purple__content--Color);\n    --pf-c-label__icon--Color: var(--pf-c-label--m-purple__icon--Color);\n    --pf-c-label--m-outline__content--before--BorderColor: var(--pf-c-label--m-outline--m-purple__content--before--BorderColor);\n    --pf-c-label__content--link--hover--before--BorderColor: var(--pf-c-label--m-purple__content--link--hover--before--BorderColor);\n    --pf-c-label__content--link--focus--before--BorderColor: var(--pf-c-label--m-purple__content--link--focus--before--BorderColor);\n    --pf-c-label--m-outline__content--link--hover--before--BorderColor: var(--pf-c-label--m-outline--m-purple__content--link--hover--before--BorderColor);\n    --pf-c-label--m-outline__content--link--focus--before--BorderColor: var(--pf-c-label--m-outline--m-purple__content--link--focus--before--BorderColor); }\n  .pf-c-label.pf-m-cyan {\n    --pf-c-label--BackgroundColor: var(--pf-c-label--m-cyan--BackgroundColor);\n    --pf-c-label__content--Color: var(--pf-c-label--m-cyan__content--Color);\n    --pf-c-label__icon--Color: var(--pf-c-label--m-cyan__icon--Color);\n    --pf-c-label--m-outline__content--before--BorderColor: var(--pf-c-label--m-outline--m-cyan__content--before--BorderColor);\n    --pf-c-label__content--link--hover--before--BorderColor: var(--pf-c-label--m-cyan__content--link--hover--before--BorderColor);\n    --pf-c-label__content--link--focus--before--BorderColor: var(--pf-c-label--m-cyan__content--link--focus--before--BorderColor);\n    --pf-c-label--m-outline__content--link--hover--before--BorderColor: var(--pf-c-label--m-outline--m-cyan__content--link--hover--before--BorderColor);\n    --pf-c-label--m-outline__content--link--focus--before--BorderColor: var(--pf-c-label--m-outline--m-cyan__content--link--focus--before--BorderColor); }\n  .pf-c-label.pf-m-outline {\n    --pf-c-label__content--before--BorderWidth: var(--pf-c-label--m-outline__content--before--BorderWidth);\n    --pf-c-label__content--before--BorderColor: var(--pf-c-label--m-outline__content--before--BorderColor);\n    --pf-c-label--BackgroundColor: var(--pf-c-label--m-outline--BackgroundColor); }\n    .pf-c-label.pf-m-overflow:hover, .pf-c-label.pf-m-outline a.pf-c-label__content:hover,\n    .pf-c-label.pf-m-outline button.pf-c-label__content:hover {\n      --pf-c-label__content--before--BorderWidth: var(--pf-c-label--m-outline__content--link--hover--before--BorderWidth);\n      --pf-c-label__content--before--BorderColor: var(--pf-c-label--m-outline__content--link--hover--before--BorderColor); }\n    .pf-c-label.pf-m-overflow:focus, .pf-c-label.pf-m-outline a.pf-c-label__content:focus,\n    .pf-c-label.pf-m-outline button.pf-c-label__content:focus {\n      --pf-c-label__content--before--BorderWidth: var(--pf-c-label--m-outline__content--link--focus--before--BorderWidth);\n      --pf-c-label__content--before--BorderColor: var(--pf-c-label--m-outline__content--link--focus--before--BorderColor); }\n  .pf-c-label .pf-c-button {\n    --pf-c-button--FontSize: var(--pf-c-label__c-button--FontSize);\n    --pf-c-button--PaddingTop: var(--pf-c-label__c-button--PaddingTop);\n    --pf-c-button--PaddingRight: var(--pf-c-label__c-button--PaddingRight);\n    --pf-c-button--PaddingBottom: var(--pf-c-label__c-button--PaddingBottom);\n    --pf-c-button--PaddingLeft: var(--pf-c-label__c-button--PaddingLeft);\n    margin-top: var(--pf-c-label__c-button--MarginTop);\n    margin-right: var(--pf-c-label__c-button--MarginRight);\n    margin-bottom: var(--pf-c-label__c-button--MarginBottom);\n    margin-left: var(--pf-c-label__c-button--MarginLeft); }\n  .pf-c-label.pf-m-overflow {\n    --pf-c-label__content--Color: var(--pf-c-label--m-overflow__content--Color);\n    --pf-c-label--BackgroundColor: var(--pf-c-label--m-overflow__content--BackgroundColor);\n    --pf-c-label__content--before--BorderWidth: var(--pf-c-label--m-overflow__content--before--BorderWidth);\n    --pf-c-label__content--before--BorderColor: var(--pf-c-label--m-overflow__content--before--BorderColor);\n    --pf-c-label__content--link--hover--before--BorderWidth: var(--pf-c-label--m-overflow__content--link--hover--before--BorderWidth);\n    --pf-c-label__content--link--hover--before--BorderColor: var(--pf-c-label--m-overflow__content--link--hover--before--BorderColor);\n    --pf-c-label__content--link--focus--before--BorderWidth: var(--pf-c-label--m-overflow__content--link--focus--before--BorderWidth);\n    --pf-c-label__content--link--focus--before--BorderColor: var(--pf-c-label--m-overflow__content--link--focus--before--BorderColor); }\n\n.pf-c-label,\n.pf-c-label__content {\n  display: inline-flex;\n  align-items: center; }\n\n.pf-c-label__text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  max-width: var(--pf-c-label__text--MaxWidth); }\n\n.pf-c-label__content {\n  color: var(--pf-c-label__content--Color);\n  border: 0; }\n  .pf-c-label__content::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    border: var(--pf-c-label__content--before--BorderWidth) solid var(--pf-c-label__content--before--BorderColor);\n    border-radius: var(--pf-c-label--BorderRadius); }\n  a.pf-c-label__content,\n  button.pf-c-label__content {\n    cursor: pointer;\n    border: none; }\n    a.pf-c-label__content, a.pf-c-label__content:hover, a.pf-c-label__content:focus,\n    button.pf-c-label__content,\n    button.pf-c-label__content:hover,\n    button.pf-c-label__content:focus {\n      text-decoration: none; }\n    a.pf-c-label__content:hover,\n    button.pf-c-label__content:hover {\n      --pf-c-label__content--before--BorderWidth: var(--pf-c-label__content--link--hover--before--BorderWidth);\n      --pf-c-label__content--before--BorderColor: var(--pf-c-label__content--link--hover--before--BorderColor); }\n    a.pf-c-label__content:focus,\n    button.pf-c-label__content:focus {\n      --pf-c-label__content--before--BorderWidth: var(--pf-c-label__content--link--focus--before--BorderWidth);\n      --pf-c-label__content--before--BorderColor: var(--pf-c-label__content--link--focus--before--BorderColor); }\n\n.pf-c-label__icon {\n  margin-right: var(--pf-c-label__icon--MarginRight);\n  color: var(--pf-c-label__icon--Color); }\n\n.pf-c-label-group {\n  --pf-c-label-group__list--MarginBottom: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-label-group__list--MarginRight: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-label-group--m-category--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-label-group--m-category--PaddingRight: var(--pf-global--spacer--xs);\n  --pf-c-label-group--m-category--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-label-group--m-category--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-label-group--m-vertical--m-category--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-label-group--m-category--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-label-group--m-category--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-label-group--m-category--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-label-group--m-category--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-label-group__label--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-label-group__label--MarginBottom: 0;\n  --pf-c-label-group--m-vertical__label--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-label-group__label--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-label-group__label--MaxWidth: 18ch;\n  --pf-c-label-group__close--MarginTop: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-label-group__close--MarginBottom: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-label-group--m-vertical__close--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-label-group--m-vertical__close--MarginRight: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-label-group--m-vertical__close--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-label-group--m-vertical__close--c-button--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-label-group--m-vertical__close--c-button--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-label-group__list-item--MarginRight: var(--pf-global--spacer--xs);\n  --pf-c-label-group__list-item--MarginBottom: var(--pf-global--spacer--xs);\n  display: inline-flex; }\n  .pf-c-label-group.pf-m-category {\n    padding-top: var(--pf-c-label-group--m-category--PaddingTop);\n    padding-right: var(--pf-c-label-group--m-category--PaddingRight);\n    padding-bottom: var(--pf-c-label-group--m-category--PaddingBottom);\n    padding-left: var(--pf-c-label-group--m-category--PaddingLeft);\n    background-color: var(--pf-c-label-group--m-category--BackgroundColor);\n    border: var(--pf-c-label-group--m-category--BorderWidth) solid var(--pf-c-label-group--m-category--BorderColor);\n    border-radius: var(--pf-c-label-group--m-category--BorderRadius); }\n  .pf-c-label-group.pf-m-vertical {\n    --pf-c-label-group__list--MarginRight: 0;\n    --pf-c-label-group__list--MarginBottom: 0;\n    --pf-c-label-group__list-item--MarginRight: 0;\n    --pf-c-label-group__label--MarginRight: 0;\n    --pf-c-label-group__label--MarginBottom: var(--pf-c-label-group--m-vertical__label--MarginBottom);\n    --pf-c-label-group__close--MarginTop: var(--pf-c-label-group--m-vertical__close--MarginTop);\n    --pf-c-label-group__close--MarginLeft: var(--pf-c-label-group--m-vertical__close--MarginLeft);\n    --pf-c-label-group__close--MarginBottom: 0;\n    --pf-c-label-group__close--MarginRight: var(--pf-c-label-group--m-vertical__close--MarginRight);\n    --pf-c-label-group--m-category--PaddingRight: var(--pf-c-label-group--m-vertical--m-category--PaddingRight); }\n    .pf-c-label-group.pf-m-vertical.pf-c-label-group {\n      align-items: flex-start; }\n    .pf-c-label-group.pf-m-vertical .pf-c-label-group__list {\n      flex-direction: column;\n      align-items: flex-start; }\n    .pf-c-label-group.pf-m-vertical .pf-c-label-group__main {\n      flex-direction: column; }\n    .pf-c-label-group.pf-m-vertical .pf-c-label-group__list-item:last-child {\n      --pf-c-label-group__list-item--MarginBottom: 0; }\n    .pf-c-label-group.pf-m-vertical .pf-c-label-group__close .pf-c-button {\n      --pf-c-button--PaddingLeft: var(--pf-c-label-group--m-vertical__close--c-button--PaddingLeft);\n      --pf-c-button--PaddingRight: var(--pf-c-label-group--m-vertical__close--c-button--PaddingRight); }\n\n.pf-c-label-group__main {\n  display: flex;\n  flex: 1;\n  flex-wrap: wrap;\n  align-items: baseline; }\n\n.pf-c-label-group__list {\n  display: inline-flex;\n  flex-wrap: wrap;\n  margin-right: var(--pf-c-label-group__list--MarginRight);\n  margin-bottom: var(--pf-c-label-group__list--MarginBottom); }\n\n.pf-c-label-group__list-item {\n  display: inline-flex;\n  margin-right: var(--pf-c-label-group__list-item--MarginRight);\n  margin-bottom: var(--pf-c-label-group__list-item--MarginBottom); }\n\n.pf-c-label-group__label {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  max-width: var(--pf-c-label-group__label--MaxWidth);\n  margin-right: var(--pf-c-label-group__label--MarginRight);\n  margin-bottom: var(--pf-c-label-group__label--MarginBottom);\n  font-size: var(--pf-c-label-group__label--FontSize); }\n\n.pf-c-label-group__close {\n  margin-top: var(--pf-c-label-group__close--MarginTop);\n  margin-right: var(--pf-c-label-group__close--MarginRight);\n  margin-bottom: var(--pf-c-label-group__close--MarginBottom);\n  margin-left: var(--pf-c-label-group__close--MarginLeft); }\n\n.pf-c-list {\n  --pf-c-list--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-list--nested--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-list--nested--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-list--ul--ListStyle: var(--pf-global--ListStyle);\n  --pf-c-list--li--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-list--m-inline--li--MarginRight: var(--pf-global--spacer--lg);\n  padding-left: var(--pf-c-list--PaddingLeft); }\n  .pf-c-list ol,\n  .pf-c-list ul {\n    margin-top: var(--pf-c-list--nested--MarginTop);\n    margin-left: var(--pf-c-list--nested--MarginLeft); }\n  .pf-c-list li + li {\n    margin-top: var(--pf-c-list--li--MarginTop); }\n  ul.pf-c-list:not(.pf-m-inline) {\n    list-style: var(--pf-c-list--ul--ListStyle); }\n  .pf-c-list.pf-m-inline {\n    --pf-c-list--PaddingLeft: 0;\n    display: flex;\n    flex-wrap: wrap; }\n    .pf-c-list.pf-m-inline li {\n      --pf-c-list--li--MarginTop: 0; }\n      .pf-c-list.pf-m-inline li:not(:last-child) {\n        margin-right: var(--pf-c-list--m-inline--li--MarginRight); }\n\n.pf-c-login {\n  --pf-c-login--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-login--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-login--xl--BackgroundImage: none;\n  --pf-c-login__container--xl--GridColumnGap: var(--pf-global--spacer--3xl);\n  --pf-c-login__container--MaxWidth: 31.25rem;\n  --pf-c-login__container--xl--MaxWidth: none;\n  --pf-c-login__container--PaddingLeft: 6.125rem;\n  --pf-c-login__container--PaddingRight: 6.125rem;\n  --pf-c-login__container--xl--GridTemplateColumns: 34rem minmax(auto, 34rem);\n  --pf-c-login__header--MarginBottom: var(--pf-global--spacer--md);\n  --pf-c-login__header--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-login__header--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-login__header--xl--MarginBottom: var(--pf-global--spacer--2xl);\n  --pf-c-login__header--xl--MarginTop: var(--pf-global--spacer--3xl);\n  --pf-c-login__header--c-brand--MarginBottom: var(--pf-global--spacer--lg);\n  --pf-c-login__header--c-brand--xl--MarginBottom: var(--pf-global--spacer--2xl);\n  --pf-c-login__main--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-login__main--MarginBottom: var(--pf-global--spacer--lg);\n  --pf-c-login__main-header--PaddingTop: var(--pf-global--spacer--2xl);\n  --pf-c-login__main-header--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-login__main-header--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-login__main-header--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-login__main-header--md--PaddingRight: var(--pf-global--spacer--2xl);\n  --pf-c-login__main-header--md--PaddingLeft: var(--pf-global--spacer--2xl);\n  --pf-c-login__main-header--ColumnGap: var(--pf-global--spacer--md);\n  --pf-c-login__main-header--RowGap: var(--pf-global--spacer--md);\n  --pf-c-login__main-header-desc--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-login__main-header-desc--md--MarginBottom: 0;\n  --pf-c-login__main-header-desc--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-login__main-body--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-login__main-body--PaddingBottom: var(--pf-global--spacer--xl);\n  --pf-c-login__main-body--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-login__main-body--md--PaddingRight: var(--pf-global--spacer--2xl);\n  --pf-c-login__main-body--md--PaddingLeft: var(--pf-global--spacer--2xl);\n  --pf-c-login__main-footer--PaddingBottom: var(--pf-global--spacer--3xl);\n  --pf-c-login__main-footer--c-title--MarginBottom: var(--pf-global--spacer--md);\n  --pf-c-login__main-footer-links--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-login__main-footer-links--PaddingRight: var(--pf-global--spacer--3xl);\n  --pf-c-login__main-footer-links--PaddingBottom: var(--pf-global--spacer--xl);\n  --pf-c-login__main-footer-links--PaddingLeft: var(--pf-global--spacer--3xl);\n  --pf-c-login__main-footer-links-item--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-login__main-footer-links-item--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-login__main-footer-links-item--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-login__main-footer-links-item-link-svg--Fill: var(--pf-global--icon--Color--light);\n  --pf-c-login__main-footer-links-item-link-svg--Width: var(--pf-global--icon--FontSize--lg);\n  --pf-c-login__main-footer-links-item-link-svg--Height: var(--pf-global--icon--FontSize--lg);\n  --pf-c-login__main-footer-links-item-link-svg--hover--Fill: var(--pf-global--icon--Color--dark);\n  --pf-c-login__main-footer-band--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-login__main-footer-band--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-login__main-footer-band--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-login__main-footer-band--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-login__main-footer-band--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-login__main-footer-band-item--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-login__footer--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-login__footer--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-login__footer--c-list--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-login__footer--c-list--xl--PaddingTop: var(--pf-global--spacer--2xl);\n  display: flex;\n  justify-content: center;\n  min-height: 100vh;\n  padding-top: var(--pf-c-login--PaddingTop);\n  padding-bottom: var(--pf-c-login--PaddingBottom); }\n  @media (min-width: 1200px) {\n    .pf-c-login {\n      --pf-c-login__container--MaxWidth: var(--pf-c-login__container--xl--MaxWidth); } }\n  @media (min-width: 576px) {\n    .pf-c-login {\n      --pf-c-login__header--PaddingRight: 0;\n      --pf-c-login__header--PaddingLeft: 0; } }\n  @media (min-width: 1200px) {\n    .pf-c-login {\n      --pf-c-login__header--MarginBottom: var(--pf-c-login__header--xl--MarginBottom);\n      --pf-c-login__header--c-brand--MarginBottom: var(--pf-c-login__header--c-brand--xl--MarginBottom); } }\n  @media (min-width: 1200px) {\n    .pf-c-login {\n      --pf-c-login__main--MarginBottom: 0; } }\n  @media (min-width: 768px) {\n    .pf-c-login {\n      --pf-c-login__main-header--PaddingRight: var(--pf-c-login__main-header--md--PaddingRight);\n      --pf-c-login__main-header--PaddingLeft: var(--pf-c-login__main-header--md--PaddingLeft);\n      --pf-c-login__main-header-desc--MarginBottom: var(--pf-c-login__main-header-desc--md--MarginBottom); } }\n  @media (min-width: 768px) {\n    .pf-c-login {\n      --pf-c-login__main-body--PaddingRight: var(--pf-c-login__main-body--md--PaddingRight);\n      --pf-c-login__main-body--PaddingLeft: var(--pf-c-login__main-body--md--PaddingLeft); } }\n  @media (min-width: 576px) {\n    .pf-c-login {\n      --pf-c-login__footer--PaddingRight: 0;\n      --pf-c-login__footer--PaddingLeft: 0; } }\n  @media (min-width: 1200px) {\n    .pf-c-login {\n      --pf-c-login__footer--c-list--PaddingTop: var(--pf-c-login__footer--c-list--xl--PaddingTop); } }\n  @media (min-width: 1200px) {\n    .pf-c-login {\n      background-image: var(--pf-c-login--xl--BackgroundImage); } }\n  @media (min-width: 576px) {\n    .pf-c-login {\n      align-items: center; } }\n\n.pf-c-login__container {\n  width: 100%;\n  max-width: var(--pf-c-login__container--MaxWidth); }\n  @media (min-width: 1200px) {\n    .pf-c-login__container {\n      display: grid;\n      justify-content: center;\n      grid-column-gap: var(--pf-c-login__container--xl--GridColumnGap);\n      grid-template-columns: var(--pf-c-login__container--xl--GridTemplateColumns);\n      grid-template-areas: "main header" "main footer" "main .";\n      padding-right: var(--pf-c-login__container--PaddingRight);\n      padding-left: var(--pf-c-login__container--PaddingLeft); } }\n\n.pf-c-login__header {\n  color: var(--pf-global--Color--100);\n  grid-area: header;\n  padding-right: var(--pf-c-login__header--PaddingRight);\n  padding-left: var(--pf-c-login__header--PaddingLeft); }\n  @media (min-width: 1200px) {\n    .pf-c-login__header {\n      margin-top: var(--pf-c-login__header--xl--MarginTop); } }\n  .pf-c-login__header .pf-c-brand {\n    margin-bottom: var(--pf-c-login__header--c-brand--MarginBottom); }\n\n.pf-c-login__main {\n  margin-bottom: var(--pf-c-login__main--MarginBottom);\n  background-color: var(--pf-c-login__main--BackgroundColor);\n  grid-area: main; }\n  .pf-c-login__main > :first-child:not(.pf-c-login__main-header) {\n    padding-top: var(--pf-c-login__main-header--PaddingTop); }\n  .pf-c-login__main > :last-child:not(.pf-c-login__main-footer) {\n    padding-bottom: var(--pf-c-login__main-footer--PaddingBottom); }\n\n.pf-c-login__main-header {\n  display: grid;\n  grid-template-columns: 100%;\n  column-gap: var(--pf-c-login__main-header--ColumnGap);\n  row-gap: var(--pf-c-login__main-header--RowGap);\n  align-items: center;\n  padding: var(--pf-c-login__main-header--PaddingTop) var(--pf-c-login__main-header--PaddingRight) var(--pf-c-login__main-header--PaddingBottom) var(--pf-c-login__main-header--PaddingLeft); }\n  @media (min-width: 768px) {\n    .pf-c-login__main-header {\n      grid-template-columns: 1fr auto; } }\n  .pf-c-login__main-header .pf-c-dropdown {\n    grid-column: auto;\n    grid-row: auto; }\n    @media (min-width: 768px) {\n      .pf-c-login__main-header .pf-c-dropdown {\n        grid-column: 2 / 3;\n        grid-row: 1; } }\n\n.pf-c-login__main-header-desc {\n  margin-bottom: var(--pf-c-login__main-header-desc--MarginBottom);\n  font-size: var(--pf-c-login__main-header-desc--FontSize);\n  grid-column: 1 / -1; }\n\n.pf-c-login__main-body {\n  padding-right: var(--pf-c-login__main-body--PaddingRight);\n  padding-bottom: var(--pf-c-login__main-body--PaddingBottom);\n  padding-left: var(--pf-c-login__main-body--PaddingLeft); }\n\n.pf-c-login__main-footer {\n  display: flex;\n  flex-wrap: wrap; }\n  .pf-c-login__main-footer .pf-c-title {\n    margin-bottom: var(--pf-c-login__main-footer--c-title--MarginBottom);\n    text-align: center; }\n  .pf-c-login__main-footer > * {\n    flex-basis: 100%; }\n\n.pf-c-login__main-footer-links {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  padding: var(--pf-c-login__main-footer-links--PaddingTop) var(--pf-c-login__main-footer-links--PaddingRight) var(--pf-c-login__main-footer-links--PaddingBottom) var(--pf-c-login__main-footer-links--PaddingLeft); }\n\n.pf-c-login__main-footer-links-item {\n  padding-right: var(--pf-c-login__main-footer-links-item--PaddingRight);\n  padding-left: var(--pf-c-login__main-footer-links-item--PaddingLeft);\n  margin-bottom: var(--pf-c-login__main-footer-links-item--MarginBottom); }\n\n.pf-c-login__main-footer-links-item-link svg {\n  fill: var(--pf-c-login__main-footer-links-item-link-svg--Fill);\n  width: 100%;\n  max-width: var(--pf-c-login__main-footer-links-item-link-svg--Width);\n  height: 100%;\n  max-height: var(--pf-c-login__main-footer-links-item-link-svg--Height); }\n\n.pf-c-login__main-footer-links-item-link:hover svg {\n  fill: var(--pf-c-login__main-footer-links-item-link-svg--hover--Fill); }\n\n.pf-c-login__main-footer-band {\n  padding: var(--pf-c-login__main-footer-band--PaddingTop) var(--pf-c-login__main-footer-band--PaddingRight) var(--pf-c-login__main-footer-band--PaddingBottom) var(--pf-c-login__main-footer-band--PaddingLeft);\n  text-align: center;\n  background-color: var(--pf-c-login__main-footer-band--BackgroundColor); }\n  .pf-c-login__main-footer-band > * + * {\n    padding-top: var(--pf-c-login__main-footer-band-item--PaddingTop); }\n\n.pf-c-login__footer {\n  color: var(--pf-global--Color--100);\n  grid-area: footer;\n  padding-right: var(--pf-c-login__footer--PaddingRight);\n  padding-left: var(--pf-c-login__footer--PaddingLeft); }\n  .pf-c-login__footer .pf-c-list a {\n    color: unset; }\n  .pf-c-login__footer .pf-c-list:not(:only-child) {\n    padding-top: var(--pf-c-login__footer--c-list--PaddingTop); }\n\n.pf-c-menu {\n  color: var(--pf-global--Color--100);\n  --pf-c-menu--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-menu--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-menu--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-menu--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-menu--m-flyout__menu--Top: calc(var(--pf-c-menu--PaddingTop) * -1);\n  --pf-c-menu--c-divider--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-menu--c-divider--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-menu__search--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-menu__search--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-menu__search--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-menu__search--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-menu__list-item--Color: var(--pf-global--Color--100);\n  --pf-c-menu__list-item--hover--Color: var(--pf-global--Color--100);\n  --pf-c-menu__list-item--BackgroundColor: transparent;\n  --pf-c-menu__list-item--hover--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-menu__item--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-menu__item--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-menu__item--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-menu__item--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-menu__item--OutlineOffset: calc(0.125rem * -1);\n  --pf-c-menu__item--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-menu__item--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-menu__item--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-menu__item--disabled--Color: var(--pf-global--Color--dark-200);\n  --pf-c-menu__group-title--PaddingTop: var(--pf-c-menu__item--PaddingTop);\n  --pf-c-menu__group-title--PaddingRight: var(--pf-c-menu__item--PaddingRight);\n  --pf-c-menu__group-title--PaddingBottom: var(--pf-c-menu__item--PaddingBottom);\n  --pf-c-menu__group-title--PaddingLeft: var(--pf-c-menu__item--PaddingLeft);\n  --pf-c-menu__group-title--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-menu__group-title--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-menu__group-title--Color: var(--pf-global--Color--dark-200);\n  --pf-c-menu__item-description--FontSize: var(--pf-global--FontSize--xs);\n  --pf-c-menu__item-description--Color: var(--pf-global--Color--200);\n  --pf-c-menu__item-icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-menu__item-toggle-icon--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-menu__item-toggle-icon--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-menu__item-text--item-toggle-icon--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-menu__item-toggle-icon--item-text--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-menu__item-select-icon--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-menu__item-select-icon--Color: var(--pf-global--active-color--100);\n  --pf-c-menu__item-select-icon--FontSize: var(--pf-global--icon--FontSize--sm);\n  --pf-c-menu__item-main__external-icon--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-menu__item-main__external-icon--Color: var(--pf-global--link--Color);\n  --pf-c-menu__item-main__external-icon--FontSize: var(--pf-global--icon--FontSize--sm);\n  --pf-c-menu__item-action--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-menu__item-action--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-menu__item-action--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-menu__item-action--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-menu__item-action-icon--Color: var(--pf-global--Color--dark-200);\n  --pf-c-menu__item-action-icon--Height: calc(var(--pf-c-menu__item--FontSize) * var(--pf-c-menu__item--LineHeight));\n  --pf-c-menu__item-action--hover__icon--Color: var(--pf-global--Color--dark-100);\n  --pf-c-menu__item-action--m-favorite__icon--Color: var(--pf-global--disabled-color--200);\n  --pf-c-menu__item-action--m-favorite__icon--FontSize: var(--pf-global--icon--FontSize--sm);\n  --pf-c-menu__item-action--m-favorite--m-favorited__icon--Color: var(--pf-global--palette--gold-400);\n  --pf-c-menu--m-drilldown--Width: auto;\n  --pf-c-menu--m-drilldown--Height: auto;\n  --pf-c-menu--m-drilldown--TransitionDuration--transform: var(--pf-global--TransitionDuration);\n  --pf-c-menu--m-drilldown--TransitionDuration--height: var(--pf-global--TransitionDuration);\n  --pf-c-menu--m-drilldown--Transition: transform var(--pf-c-menu--m-drilldown--TransitionDuration--transform), height var(--pf-c-menu--m-drilldown--TransitionDuration--height);\n  --pf-c-menu--m-drilldown--c-menu--Top: calc(var(--pf-c-menu--PaddingTop) * -1);\n  --pf-c-menu--m-drilldown--c-menu--TransitionDuration--transform: var(--pf-global--TransitionDuration);\n  --pf-c-menu--m-drilldown--c-menu--TransitionDuration--visibility: var(--pf-global--TransitionDuration);\n  --pf-c-menu--m-drilldown--c-menu--Transition: transform var(--pf-c-menu--m-drilldown--c-menu--TransitionDuration--transform), visibility var(--pf-c-menu--m-drilldown--c-menu--TransitionDuration--visibility);\n  --pf-c-menu--m-drilldown__list--TransitionDuration--transform: var(--pf-global--TransitionDuration);\n  --pf-c-menu--m-drilldown__list--Transition: transform var(--pf-c-menu--m-drilldown__list--TransitionDuration--transform);\n  --pf-c-menu--m-drilled-in--c-menu__list-item--m-current-path--c-menu--ZIndex: var(--pf-global--ZIndex--2xl);\n  padding-top: var(--pf-c-menu--PaddingTop);\n  padding-bottom: var(--pf-c-menu--PaddingBottom);\n  background-color: var(--pf-c-menu--BackgroundColor);\n  box-shadow: var(--pf-c-menu--BoxShadow); }\n  .pf-c-menu.pf-m-flyout .pf-c-menu {\n    position: absolute;\n    top: var(--pf-c-menu--m-flyout__menu--Top);\n    left: 100%; }\n  .pf-c-menu.pf-m-flyout .pf-c-menu__list-item {\n    position: relative; }\n  .pf-c-menu.pf-m-drilldown {\n    width: var(--pf-c-menu--m-drilldown--Width);\n    height: var(--pf-c-menu--m-drilldown--Height);\n    overflow: hidden;\n    transition: var(--pf-c-menu--m-drilldown--Transition); }\n    .pf-c-menu.pf-m-drilldown.pf-m-drilled-in > .pf-c-menu__content > .pf-c-menu__list,\n    .pf-c-menu.pf-m-drilldown.pf-m-drilled-in > .pf-c-menu__list {\n      transform: translateX(-100%); }\n    .pf-c-menu.pf-m-drilldown .pf-c-menu {\n      --pf-c-menu--BoxShadow: none;\n      position: absolute;\n      top: var(--pf-c-menu--m-drilldown--c-menu--Top);\n      left: 100%;\n      width: 100%;\n      transition: var(--pf-c-menu--m-drilldown--c-menu--Transition); }\n      .pf-c-menu.pf-m-drilldown .pf-c-menu.pf-m-drilled-in {\n        transform: translateX(-100%); }\n    .pf-c-menu.pf-m-drilldown .pf-c-menu__list {\n      position: relative;\n      transition: var(--pf-c-menu--m-drilldown__list--Transition); }\n    .pf-c-menu.pf-m-drilldown .pf-c-menu__list-item.pf-m-current-path .pf-c-menu {\n      z-index: var(--pf-c-menu--m-drilled-in--c-menu__list-item--m-current-path--c-menu--ZIndex); }\n    .pf-c-menu.pf-m-drilldown .pf-c-menu__list-item:not(.pf-m-current-path) .pf-c-menu {\n      visibility: hidden; }\n    .pf-c-menu.pf-m-drilldown .pf-c-menu__item {\n      outline-offset: var(--pf-c-menu__item--OutlineOffset); }\n  .pf-c-menu .pf-c-divider {\n    margin-top: var(--pf-c-menu--c-divider--MarginTop);\n    margin-bottom: var(--pf-c-menu--c-divider--MarginBottom); }\n\n.pf-c-menu__search {\n  padding-top: var(--pf-c-menu__search--PaddingTop);\n  padding-right: var(--pf-c-menu__search--PaddingRight);\n  padding-bottom: var(--pf-c-menu__search--PaddingBottom);\n  padding-left: var(--pf-c-menu__search--PaddingLeft); }\n\n.pf-c-menu__list-item {\n  display: flex;\n  color: var(--pf-c-menu__list-item--Color);\n  background-color: var(--pf-c-menu__list-item--BackgroundColor); }\n  .pf-c-menu__list-item:hover:not(.pf-m-disabled), .pf-c-menu__list-item:focus-within:not(.pf-m-disabled) {\n    --pf-c-menu__list-item--Color: var(--pf-c-menu__list-item--hover--Color);\n    --pf-c-menu__list-item--BackgroundColor: var(--pf-c-menu__list-item--hover--BackgroundColor); }\n    .pf-c-menu__list-item:hover:not(.pf-m-disabled) .pf-c-menu__item-external-icon, .pf-c-menu__list-item:focus-within:not(.pf-m-disabled) .pf-c-menu__item-external-icon {\n      opacity: 1; }\n  .pf-c-menu__list-item.pf-m-disabled .pf-c-menu__item {\n    --pf-c-menu__item--Color: var(--pf-c-menu__item--disabled--Color);\n    pointer-events: none; }\n\n.pf-c-menu__item {\n  display: flex;\n  flex-basis: 100%;\n  flex-direction: column;\n  min-width: 0;\n  padding-top: var(--pf-c-menu__item--PaddingTop);\n  padding-right: var(--pf-c-menu__item--PaddingRight);\n  padding-bottom: var(--pf-c-menu__item--PaddingBottom);\n  padding-left: var(--pf-c-menu__item--PaddingLeft);\n  font-size: var(--pf-c-menu__item--FontSize);\n  font-weight: var(--pf-c-menu__item--FontWeight);\n  line-height: var(--pf-c-menu__item--LineHeight);\n  color: var(--pf-c-menu__item--Color);\n  text-align: left;\n  background-color: var(--pf-c-menu__item--BackgroundColor);\n  border: none; }\n  .pf-c-menu__item:hover {\n    text-decoration: none; }\n  .pf-c-menu__item:disabled {\n    --pf-c-menu__item--Color: var(--pf-c-menu__item--disabled--Color);\n    pointer-events: none; }\n  .pf-c-menu__item.pf-m-selected .pf-c-menu__item-select-icon {\n    opacity: 1; }\n\n.pf-c-menu__item-main {\n  display: flex;\n  align-items: center;\n  width: 100%; }\n  .pf-c-menu__item-main .pf-c-menu__item-external-icon {\n    margin-left: var(--pf-c-menu__item-main__external-icon--MarginLeft);\n    font-size: var(--pf-c-menu__item-main__external-icon--FontSize);\n    color: var(--pf-c-menu__item-main__external-icon--Color);\n    opacity: 0; }\n\n.pf-c-menu__item-text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  flex-grow: 1; }\n\n.pf-c-menu__group-title {\n  padding-top: var(--pf-c-menu__group-title--PaddingTop);\n  padding-right: var(--pf-c-menu__group-title--PaddingRight);\n  padding-bottom: var(--pf-c-menu__group-title--PaddingBottom);\n  padding-left: var(--pf-c-menu__group-title--PaddingLeft);\n  font-size: var(--pf-c-menu__group-title--FontSize);\n  font-weight: var(--pf-c-menu__group-title--FontWeight);\n  color: var(--pf-c-menu__group-title--Color); }\n\n.pf-c-menu__item-description {\n  font-size: var(--pf-c-menu__item-description--FontSize);\n  color: var(--pf-c-menu__item-description--Color);\n  word-break: break-all; }\n\n.pf-c-menu__item-icon {\n  margin-right: var(--pf-c-menu__item-icon--MarginRight); }\n\n.pf-c-menu__item-toggle-icon {\n  padding-right: var(--pf-c-menu__item-toggle-icon--PaddingRight);\n  padding-left: var(--pf-c-menu__item-toggle-icon--PaddingLeft); }\n\n.pf-c-menu__item-text + .pf-c-menu__item-toggle-icon {\n  margin-left: var(--pf-c-menu__item-text--item-toggle-icon--MarginLeft); }\n\n.pf-c-menu__item-toggle-icon + .pf-c-menu__item-text {\n  margin-left: var(--pf-c-menu__item-toggle-icon--item-text--MarginLeft); }\n\n.pf-c-menu__item-select-icon {\n  margin-left: var(--pf-c-menu__item-select-icon--MarginLeft);\n  font-size: var(--pf-c-menu__item-select-icon--FontSize);\n  color: var(--pf-c-menu__item-select-icon--Color);\n  opacity: 0; }\n\n.pf-c-menu__item-action {\n  display: flex;\n  padding-top: var(--pf-c-menu__item-action--PaddingTop);\n  padding-right: var(--pf-c-menu__item-action--PaddingRight);\n  padding-bottom: var(--pf-c-menu__item-action--PaddingBottom);\n  padding-left: var(--pf-c-menu__item-action--PaddingLeft);\n  border: none; }\n  .pf-c-menu__item-action:hover, .pf-c-menu__item-action:focus {\n    --pf-c-menu__item-action-icon--Color: var(--pf-c-menu__item-action--hover__icon--Color); }\n  .pf-c-menu__item-action.pf-m-favorite {\n    --pf-c-menu__item-action-icon--Color: var(--pf-c-menu__item-action--m-favorite__icon--Color); }\n    .pf-c-menu__item-action.pf-m-favorite.pf-m-favorited {\n      --pf-c-menu__item-action-icon--Color: var(--pf-c-menu__item-action--m-favorite--m-favorited__icon--Color); }\n    .pf-c-menu__item-action.pf-m-favorite .pf-c-menu__item-action-icon {\n      font-size: var(--pf-c-menu__item-action--m-favorite__icon--FontSize); }\n\n.pf-c-menu__item-action-icon {\n  display: flex;\n  align-items: center;\n  height: var(--pf-c-menu__item-action-icon--Height);\n  color: var(--pf-c-menu__item-action-icon--Color); }\n\n.pf-c-modal-box {\n  --pf-c-modal-box--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-modal-box--BoxShadow: var(--pf-global--BoxShadow--xl);\n  --pf-c-modal-box--ZIndex: var(--pf-global--ZIndex--xl);\n  --pf-c-modal-box--Width: 100%;\n  --pf-c-modal-box--MaxWidth: calc(100% - var(--pf-global--spacer--xl));\n  --pf-c-modal-box--m-sm--sm--MaxWidth: 35rem;\n  --pf-c-modal-box--m-md--Width: 52.5rem;\n  --pf-c-modal-box--m-lg--lg--MaxWidth: 70rem;\n  --pf-c-modal-box--MaxHeight: calc(100% - var(--pf-global--spacer--2xl));\n  --pf-c-modal-box--m-align-top--spacer: var(--pf-global--spacer--sm);\n  --pf-c-modal-box--m-align-top--xl--spacer: var(--pf-global--spacer--xl);\n  --pf-c-modal-box--m-align-top--MarginTop: var(--pf-c-modal-box--m-align-top--spacer);\n  --pf-c-modal-box--m-align-top--MaxHeight: calc(100% - min(var(--pf-c-modal-box--m-align-top--spacer), var(--pf-global--spacer--2xl)) - var(--pf-c-modal-box--m-align-top--spacer));\n  --pf-c-modal-box--m-align-top--MaxWidth: calc(100% - min(var(--pf-c-modal-box--m-align-top--spacer) * 2, var(--pf-global--spacer--xl)));\n  --pf-c-modal-box--m-danger__title-icon--Color: var(--pf-global--danger-color--100);\n  --pf-c-modal-box--m-warning__title-icon--Color: var(--pf-global--warning-color--100);\n  --pf-c-modal-box--m-success__title-icon--Color: var(--pf-global--success-color--100);\n  --pf-c-modal-box--m-info__title-icon--Color: var(--pf-global--info-color--100);\n  --pf-c-modal-box--m-default__title-icon--Color: var(--pf-global--default-color--200);\n  --pf-c-modal-box__header--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__header--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__header--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__header--last-child--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__title--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-modal-box__title--FontFamily: var(--pf-global--FontFamily--heading--sans-serif);\n  --pf-c-modal-box__title--FontSize: var(--pf-global--FontSize--2xl);\n  --pf-c-modal-box__title-icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-modal-box__title-icon--Color: var(--pf-global--Color--100);\n  --pf-c-modal-box__description--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-modal-box__body--MinHeight: calc(var(--pf-global--FontSize--md) * var(--pf-global--LineHeight--md));\n  --pf-c-modal-box__body--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__body--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__body--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__body--last-child--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__header--body--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-modal-box--c-button--Top: calc(var(--pf-global--spacer--lg));\n  --pf-c-modal-box--c-button--Right: var(--pf-global--spacer--md);\n  --pf-c-modal-box--c-button--sibling--MarginRight: calc(var(--pf-global--spacer--xl) + var(--pf-global--spacer--sm));\n  --pf-c-modal-box__footer--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__footer--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__footer--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__footer--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-modal-box__footer--c-button--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-modal-box__footer--c-button--sm--MarginRight: calc(var(--pf-c-modal-box__footer--c-button--MarginRight) / 2);\n  position: relative;\n  z-index: var(--pf-c-modal-box--ZIndex);\n  display: flex;\n  flex-direction: column;\n  width: var(--pf-c-modal-box--Width);\n  max-width: var(--pf-c-modal-box--MaxWidth);\n  max-height: var(--pf-c-modal-box--MaxHeight);\n  background-color: var(--pf-c-modal-box--BackgroundColor);\n  box-shadow: var(--pf-c-modal-box--BoxShadow); }\n  @media (min-width: 1200px) {\n    .pf-c-modal-box {\n      --pf-c-modal-box--m-align-top--spacer: var(--pf-c-modal-box--m-align-top--xl--spacer); } }\n  .pf-c-modal-box.pf-m-sm {\n    --pf-c-modal-box--Width: var(--pf-c-modal-box--m-sm--sm--MaxWidth); }\n  .pf-c-modal-box.pf-m-md {\n    --pf-c-modal-box--Width: var(--pf-c-modal-box--m-md--Width); }\n  .pf-c-modal-box.pf-m-lg {\n    --pf-c-modal-box--Width: var(--pf-c-modal-box--m-lg--lg--MaxWidth); }\n  .pf-c-modal-box.pf-m-align-top {\n    top: var(--pf-c-modal-box--m-align-top--MarginTop);\n    align-self: flex-start;\n    max-width: var(--pf-c-modal-box--m-align-top--MaxWidth);\n    max-height: var(--pf-c-modal-box--m-align-top--MaxHeight); }\n  .pf-c-modal-box.pf-m-danger {\n    --pf-c-modal-box__title-icon--Color: var(--pf-c-modal-box--m-danger__title-icon--Color); }\n  .pf-c-modal-box.pf-m-warning {\n    --pf-c-modal-box__title-icon--Color: var(--pf-c-modal-box--m-warning__title-icon--Color); }\n  .pf-c-modal-box.pf-m-success {\n    --pf-c-modal-box__title-icon--Color: var(--pf-c-modal-box--m-success__title-icon--Color); }\n  .pf-c-modal-box.pf-m-default {\n    --pf-c-modal-box__title-icon--Color: var(--pf-c-modal-box--m-default__title-icon--Color); }\n  .pf-c-modal-box.pf-m-info {\n    --pf-c-modal-box__title-icon--Color: var(--pf-c-modal-box--m-info__title-icon--Color); }\n  .pf-c-modal-box > .pf-c-button {\n    position: absolute;\n    top: var(--pf-c-modal-box--c-button--Top);\n    right: var(--pf-c-modal-box--c-button--Right); }\n    .pf-c-modal-box > .pf-c-button + * {\n      margin-right: var(--pf-c-modal-box--c-button--sibling--MarginRight); }\n\n.pf-c-modal-box__header {\n  display: flex;\n  flex-direction: column;\n  padding-top: var(--pf-c-modal-box__header--PaddingTop);\n  padding-right: var(--pf-c-modal-box__header--PaddingRight);\n  padding-left: var(--pf-c-modal-box__header--PaddingLeft); }\n  .pf-c-modal-box__header.pf-m-help {\n    display: flex;\n    flex-direction: row; }\n  .pf-c-modal-box__header:last-child {\n    padding-bottom: var(--pf-c-modal-box__header--last-child--PaddingBottom); }\n  .pf-c-modal-box__header + .pf-c-modal-box__body {\n    --pf-c-modal-box__body--PaddingTop: var(--pf-c-modal-box__header--body--PaddingTop); }\n\n.pf-c-modal-box__header-main {\n  flex-grow: 1;\n  min-width: 0; }\n\n.pf-c-modal-box__title,\n.pf-c-modal-box__title-text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.pf-c-modal-box__title {\n  flex: 0 0 auto;\n  font-family: var(--pf-c-modal-box__title--FontFamily);\n  font-size: var(--pf-c-modal-box__title--FontSize);\n  line-height: var(--pf-c-modal-box__title--LineHeight); }\n  .pf-c-modal-box__title.pf-m-icon {\n    display: flex; }\n\n.pf-c-modal-box__title-icon {\n  margin-right: var(--pf-c-modal-box__title-icon--MarginRight);\n  color: var(--pf-c-modal-box__title-icon--Color); }\n\n.pf-c-modal-box__description {\n  padding-top: var(--pf-c-modal-box__description--PaddingTop); }\n\n.pf-c-modal-box__body {\n  flex: 1 1 auto;\n  min-height: var(--pf-c-modal-box__body--MinHeight);\n  padding-top: var(--pf-c-modal-box__body--PaddingTop);\n  padding-right: var(--pf-c-modal-box__body--PaddingRight);\n  padding-left: var(--pf-c-modal-box__body--PaddingLeft);\n  overflow-x: hidden;\n  overflow-y: auto;\n  overscroll-behavior: contain;\n  word-break: break-word;\n  -webkit-overflow-scrolling: touch; }\n  .pf-c-modal-box__body:last-child {\n    padding-bottom: var(--pf-c-modal-box__body--last-child--PaddingBottom); }\n\n.pf-c-modal-box__footer {\n  display: flex;\n  flex: 0 0 auto;\n  align-items: center;\n  padding-top: var(--pf-c-modal-box__footer--PaddingTop);\n  padding-right: var(--pf-c-modal-box__footer--PaddingRight);\n  padding-bottom: var(--pf-c-modal-box__footer--PaddingBottom);\n  padding-left: var(--pf-c-modal-box__footer--PaddingLeft); }\n  .pf-c-modal-box__footer > .pf-c-button:not(:last-child) {\n    margin-right: var(--pf-c-modal-box__footer--c-button--MarginRight); }\n    @media screen and (min-width: 576px) {\n      .pf-c-modal-box__footer > .pf-c-button:not(:last-child) {\n        --pf-c-modal-box__footer--c-button--MarginRight: var(--pf-c-modal-box__footer--c-button--sm--MarginRight); } }\n\n.pf-c-nav {\n  --pf-c-nav--Transition: var(--pf-global--Transition);\n  --pf-c-nav__item--m-expanded__toggle-icon--Rotate: 90deg;\n  --pf-c-nav--m-light__item--before--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-nav--m-light__item--m-current--not--m-expanded__link--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-nav--m-light__link--Color: var(--pf-global--Color--dark-100);\n  --pf-c-nav--m-light__link--hover--Color: var(--pf-global--Color--dark-100);\n  --pf-c-nav--m-light__link--focus--Color: var(--pf-global--Color--dark-100);\n  --pf-c-nav--m-light__link--active--Color: var(--pf-global--Color--dark-100);\n  --pf-c-nav--m-light__link--m-current--Color: var(--pf-global--Color--dark-100);\n  --pf-c-nav--m-light__link--hover--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-nav--m-light__link--focus--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-nav--m-light__link--active--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-nav--m-light__link--m-current--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-nav--m-light__link--before--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-nav--m-light__link--after--BorderColor: var(--pf-global--active-color--100);\n  --pf-c-nav--m-light__link--m-current--after--BorderColor: var(--pf-global--active-color--100);\n  --pf-c-nav--m-light__section-title--Color: var(--pf-global--Color--dark-200);\n  --pf-c-nav--m-light__section-title--BorderBottomColor: var(--pf-global--BorderColor--300);\n  --pf-c-nav--m-light--c-divider--BackgroundColor: var(--pf-global--BorderColor--300);\n  --pf-c-nav--m-light__subnav__link--hover--after--BorderColor: var(--pf-global--BorderColor--dark-100);\n  --pf-c-nav--m-light__subnav__link--focus--after--BorderColor: var(--pf-global--BorderColor--dark-100);\n  --pf-c-nav--m-light__subnav__link--active--after--BorderColor: var(--pf-global--BorderColor--dark-100);\n  --pf-c-nav--m-light__subnav__link--m-current--after--BorderColor: var(--pf-global--active-color--100);\n  --pf-c-nav__item--MarginTop: 0;\n  --pf-c-nav__item--m-current--not--m-expanded__link--BackgroundColor: var(--pf-global--BackgroundColor--dark-400);\n  --pf-c-nav__link--m-current--not--m-expanded__link--after--BorderWidth: var(--pf-global--BorderWidth--xl);\n  --pf-c-nav__item--before--BorderColor: var(--pf-global--BackgroundColor--dark-200);\n  --pf-c-nav__item--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-nav__link--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-nav__link--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-nav__link--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-nav__link--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-nav__link--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-nav__link--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-nav__link--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-nav__link--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-nav__link--Color: var(--pf-global--Color--light-100);\n  --pf-c-nav__link--hover--Color: var(--pf-global--Color--light-100);\n  --pf-c-nav__link--focus--Color: var(--pf-global--Color--light-100);\n  --pf-c-nav__link--active--Color: var(--pf-global--Color--light-100);\n  --pf-c-nav__link--m-current--Color: var(--pf-global--Color--light-100);\n  --pf-c-nav__link--BackgroundColor: transparent;\n  --pf-c-nav__link--hover--BackgroundColor: var(--pf-global--BackgroundColor--dark-200);\n  --pf-c-nav__link--focus--BackgroundColor: var(--pf-global--BackgroundColor--dark-200);\n  --pf-c-nav__link--active--BackgroundColor: var(--pf-global--BackgroundColor--dark-200);\n  --pf-c-nav__link--m-current--BackgroundColor: var(--pf-global--BackgroundColor--dark-400);\n  --pf-c-nav__link--OutlineOffset: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-nav__link--before--BorderColor: var(--pf-global--BackgroundColor--dark-200);\n  --pf-c-nav__link--before--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-nav__link--hover--before--BorderBottomWidth: 0;\n  --pf-c-nav__link--focus--before--BorderBottomWidth: 0;\n  --pf-c-nav__link--active--before--BorderBottomWidth: 0;\n  --pf-c-nav__link--m-current--before--BorderBottomWidth: 0;\n  --pf-c-nav__link--after--BorderColor: var(--pf-global--active-color--400);\n  --pf-c-nav__link--hover--after--BorderColor: var(--pf-global--active-color--400);\n  --pf-c-nav__link--focus--after--BorderColor: var(--pf-global--active-color--400);\n  --pf-c-nav__link--active--after--BorderColor: var(--pf-global--active-color--400);\n  --pf-c-nav__link--m-current--after--BorderColor: var(--pf-global--active-color--400);\n  --pf-c-nav__link--after--BorderLeftWidth: 0;\n  --pf-c-nav__link--hover--after--BorderLeftWidth: 0;\n  --pf-c-nav__link--focus--after--BorderLeftWidth: 0;\n  --pf-c-nav__link--active--after--BorderLeftWidth: 0;\n  --pf-c-nav__link--m-current--after--BorderLeftWidth: var(--pf-global--BorderWidth--xl);\n  --pf-c-nav--m-horizontal__link--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-nav--m-horizontal__link--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-nav--m-horizontal__link--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-nav--m-horizontal__link--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-nav--m-horizontal__link--lg--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-nav--m-horizontal__link--lg--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-nav--m-horizontal__link--Right: var(--pf-global--spacer--md);\n  --pf-c-nav--m-horizontal__link--Left: var(--pf-global--spacer--md);\n  --pf-c-nav--m-horizontal__link--Color: var(--pf-global--Color--light-300);\n  --pf-c-nav--m-horizontal__link--hover--Color: var(--pf-global--active-color--400);\n  --pf-c-nav--m-horizontal__link--focus--Color: var(--pf-global--active-color--400);\n  --pf-c-nav--m-horizontal__link--active--Color: var(--pf-global--active-color--400);\n  --pf-c-nav--m-horizontal__link--m-current--Color: var(--pf-global--active-color--400);\n  --pf-c-nav--m-horizontal__link--BackgroundColor: transparent;\n  --pf-c-nav--m-horizontal__link--hover--BackgroundColor: transparent;\n  --pf-c-nav--m-horizontal__link--focus--BackgroundColor: transparent;\n  --pf-c-nav--m-horizontal__link--active--BackgroundColor: transparent;\n  --pf-c-nav--m-horizontal__link--m-current--BackgroundColor: transparent;\n  --pf-c-nav--m-horizontal__link--before--BorderColor: var(--pf-global--active-color--400);\n  --pf-c-nav--m-horizontal__link--before--BorderWidth: 0;\n  --pf-c-nav--m-horizontal__link--hover--before--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-nav--m-horizontal__link--focus--before--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-nav--m-horizontal__link--active--before--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-nav--m-horizontal__link--m-current--before--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-nav--m-tertiary__link--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-nav--m-tertiary__link--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-nav--m-tertiary__link--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-nav--m-tertiary__link--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-nav--m-tertiary__link--Right: var(--pf-global--spacer--md);\n  --pf-c-nav--m-tertiary__link--Left: var(--pf-global--spacer--md);\n  --pf-c-nav--m-tertiary__link--Color: var(--pf-global--Color--dark-100);\n  --pf-c-nav--m-tertiary__link--hover--Color: var(--pf-global--active-color--100);\n  --pf-c-nav--m-tertiary__link--focus--Color: var(--pf-global--active-color--100);\n  --pf-c-nav--m-tertiary__link--active--Color: var(--pf-global--active-color--100);\n  --pf-c-nav--m-tertiary__link--m-current--Color: var(--pf-global--active-color--100);\n  --pf-c-nav--m-tertiary__link--BackgroundColor: transparent;\n  --pf-c-nav--m-tertiary__link--hover--BackgroundColor: transparent;\n  --pf-c-nav--m-tertiary__link--focus--BackgroundColor: transparent;\n  --pf-c-nav--m-tertiary__link--active--BackgroundColor: transparent;\n  --pf-c-nav--m-tertiary__link--m-current--BackgroundColor: transparent;\n  --pf-c-nav--m-tertiary__link--before--BorderColor: var(--pf-global--active-color--100);\n  --pf-c-nav--m-tertiary__link--before--BorderWidth: 0;\n  --pf-c-nav--m-tertiary__link--hover--before--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-nav--m-tertiary__link--focus--before--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-nav--m-tertiary__link--active--before--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-nav--m-tertiary__link--m-current--before--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-nav--m-tertiary__scroll-button--Color: var(--pf-global--Color--dark-100);\n  --pf-c-nav--m-tertiary__scroll-button--hover--Color: var(--pf-global--active-color--100);\n  --pf-c-nav--m-tertiary__scroll-button--focus--Color: var(--pf-global--active-color--100);\n  --pf-c-nav--m-tertiary__scroll-button--active--Color: var(--pf-global--active-color--100);\n  --pf-c-nav--m-tertiary__scroll-button--disabled--Color: var(--pf-global--disabled-color--200);\n  --pf-c-nav--m-tertiary__scroll-button--before--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-nav--m-tertiary__scroll-button--disabled--before--BorderColor: var(--pf-global--disabled-color--300);\n  --pf-c-nav__subnav--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-nav__subnav--xl--PaddingLeft: var(--pf-c-nav__link--PaddingLeft);\n  --pf-c-nav__subnav__link--MarginTop: 0;\n  --pf-c-nav__subnav__link--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-nav__subnav__link--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-nav__subnav__link--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-nav__subnav__link--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-nav__subnav__link--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-nav__subnav__link--hover--after--BorderColor: var(--pf-global--BorderColor--200);\n  --pf-c-nav__subnav__link--focus--after--BorderColor: var(--pf-global--BorderColor--200);\n  --pf-c-nav__subnav__link--active--after--BorderColor: var(--pf-global--BorderColor--200);\n  --pf-c-nav__subnav__link--m-current--after--BorderColor: var(--pf-global--active-color--400);\n  --pf-c-nav__subnav__link--hover--after--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-nav__subnav__link--focus--after--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-nav__subnav__link--active--after--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-nav__subnav__link--m-current--after--BorderWidth: var(--pf-global--BorderWidth--xl);\n  --pf-c-nav__subnav--MaxHeight: 0;\n  --pf-c-nav__item--m-expanded__subnav--MaxHeight: 100%;\n  --pf-c-nav__subnav--c-divider--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-nav__subnav--c-divider--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-nav__section--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-nav__section__item--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-nav__section__link--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-nav__section__link--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-nav__section__link--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-nav__section__link--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-nav__section__link--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-nav__section__link--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-nav__section__link--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-nav__section__link--before--BorderBottomWidth: 0;\n  --pf-c-nav__section__link--hover--after--BorderColor: transparent;\n  --pf-c-nav__section__link--focus--after--BorderColor: transparent;\n  --pf-c-nav__section__link--active--after--BorderColor: transparent;\n  --pf-c-nav__section__link--m-current--after--BorderColor: var(--pf-global--active-color--400);\n  --pf-c-nav__section__link--hover--after--BorderWidth: 0;\n  --pf-c-nav__section__link--focus--after--BorderWidth: 0;\n  --pf-c-nav__section__link--active--after--BorderWidth: 0;\n  --pf-c-nav__section__link--m-current--after--BorderWidth: var(--pf-global--BorderWidth--xl);\n  --pf-c-nav__section--section--MarginTop: var(--pf-global--spacer--xl);\n  --pf-c-nav__section-title--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-nav__section-title--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-nav__section-title--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-nav__section-title--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-nav__section-title--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-nav__section-title--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-nav__section-title--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-nav__section-title--Color: var(--pf-global--Color--light-100);\n  --pf-c-nav__section-title--BorderBottomColor: var(--pf-global--BackgroundColor--dark-200);\n  --pf-c-nav__section-title--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-nav__scroll-button--Color: var(--pf-global--Color--light-100);\n  --pf-c-nav__scroll-button--hover--Color: var(--pf-global--active-color--400);\n  --pf-c-nav__scroll-button--focus--Color: var(--pf-global--active-color--400);\n  --pf-c-nav__scroll-button--active--Color: var(--pf-global--active-color--400);\n  --pf-c-nav__scroll-button--disabled--Color: var(--pf-global--disabled-color--100);\n  --pf-c-nav__scroll-button--BackgroundColor: transparent;\n  --pf-c-nav__scroll-button--Width: var(--pf-global--target-size--MinWidth);\n  --pf-c-nav__scroll-button--OutlineOffset: calc(-1 * var(--pf-global--spacer--xs));\n  --pf-c-nav__scroll-button--Transition: margin .125s, transform .125s, opacity .125s;\n  --pf-c-nav__scroll-button--before--BorderColor: var(--pf-global--BackgroundColor--dark-200);\n  --pf-c-nav__scroll-button--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-nav__scroll-button--before--BorderRightWidth: 0;\n  --pf-c-nav__scroll-button--before--BorderLeftWidth: 0;\n  --pf-c-nav__scroll-button--disabled--before--BorderColor: transparent;\n  --pf-c-nav__toggle--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-nav__toggle--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-nav__toggle--FontSize: var(--pf-global--icon--FontSize--md);\n  --pf-c-nav__toggle-icon--Transition: var(--pf-global--TransitionDuration);\n  --pf-c-nav--c-divider--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-nav--c-divider--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-nav--c-divider--PaddingRight: 0;\n  --pf-c-nav--c-divider--PaddingLeft: 0;\n  --pf-c-nav--c-divider--BackgroundColor: var(--pf-global--BackgroundColor--dark-200); }\n  @media screen and (min-width: 1200px) {\n    .pf-c-nav {\n      --pf-c-nav__link--PaddingRight: var(--pf-c-nav__link--xl--PaddingRight);\n      --pf-c-nav__link--PaddingLeft: var(--pf-c-nav__link--xl--PaddingLeft);\n      --pf-c-nav__section__link--PaddingRight: var(--pf-c-nav__section__link--xl--PaddingRight);\n      --pf-c-nav__section__link--PaddingLeft: var(--pf-c-nav__section__link--xl--PaddingLeft);\n      --pf-c-nav__section-title--PaddingRight: var(--pf-c-nav__section-title--xl--PaddingRight);\n      --pf-c-nav__section-title--PaddingLeft: var(--pf-c-nav__section-title--xl--PaddingLeft);\n      --pf-c-nav__subnav--PaddingLeft: var(--pf-c-nav__subnav--xl--PaddingLeft); } }\n  .pf-c-nav.pf-m-horizontal, .pf-c-nav.pf-m-tertiary {\n    overflow: hidden; }\n    .pf-c-nav.pf-m-horizontal,\n    .pf-c-nav.pf-m-horizontal .pf-c-nav__list, .pf-c-nav.pf-m-tertiary,\n    .pf-c-nav.pf-m-tertiary .pf-c-nav__list {\n      position: relative;\n      display: flex; }\n    .pf-c-nav.pf-m-horizontal .pf-c-nav__list, .pf-c-nav.pf-m-tertiary .pf-c-nav__list {\n      flex: 1;\n      max-width: 100%;\n      overflow-x: auto;\n      white-space: nowrap;\n      -webkit-overflow-scrolling: touch;\n      scrollbar-width: none;\n      -ms-overflow-style: -ms-autohiding-scrollbar; }\n      .pf-c-nav.pf-m-horizontal .pf-c-nav__list::-webkit-scrollbar, .pf-c-nav.pf-m-tertiary .pf-c-nav__list::-webkit-scrollbar {\n        display: none; }\n    .pf-c-nav.pf-m-horizontal .pf-c-nav__item, .pf-c-nav.pf-m-tertiary .pf-c-nav__item {\n      display: flex; }\n    .pf-c-nav.pf-m-horizontal .pf-c-nav__link, .pf-c-nav.pf-m-tertiary .pf-c-nav__link {\n      align-items: center;\n      align-self: stretch;\n      white-space: nowrap; }\n      .pf-c-nav.pf-m-horizontal .pf-c-nav__link::before, .pf-c-nav.pf-m-tertiary .pf-c-nav__link::before {\n        top: auto;\n        bottom: 0; }\n      .pf-c-nav.pf-m-horizontal .pf-c-nav__link::after, .pf-c-nav.pf-m-tertiary .pf-c-nav__link::after {\n        content: none; }\n  .pf-c-nav.pf-m-horizontal .pf-c-nav__link::before {\n    right: var(--pf-c-nav--m-horizontal__link--Right);\n    left: var(--pf-c-nav--m-horizontal__link--Left); }\n  .pf-c-nav.pf-m-tertiary .pf-c-nav__link::before {\n    right: var(--pf-c-nav--m-tertiary__link--Right);\n    left: var(--pf-c-nav--m-tertiary__link--Left); }\n  .pf-c-nav.pf-m-light {\n    --pf-c-nav__item--before--BorderColor: var(--pf-c-nav--m-light__item--before--BorderColor);\n    --pf-c-nav__item--m-current--not--m-expanded__link--BackgroundColor: var(--pf-c-nav--m-light__item--m-current--not--m-expanded__link--BackgroundColor);\n    --pf-c-nav__link--Color: var(--pf-c-nav--m-light__link--Color);\n    --pf-c-nav__link--hover--Color: var(--pf-c-nav--m-light__link--hover--Color);\n    --pf-c-nav__link--focus--Color: var(--pf-c-nav--m-light__link--focus--Color);\n    --pf-c-nav__link--active--Color: var(--pf-c-nav--m-light__link--active--Color);\n    --pf-c-nav__link--m-current--Color: var(--pf-c-nav--m-light__link--m-current--Color);\n    --pf-c-nav__link--hover--BackgroundColor: var(--pf-c-nav--m-light__link--hover--BackgroundColor);\n    --pf-c-nav__link--focus--BackgroundColor: var(--pf-c-nav--m-light__link--focus--BackgroundColor);\n    --pf-c-nav__link--active--BackgroundColor: var(--pf-c-nav--m-light__link--active--BackgroundColor);\n    --pf-c-nav__link--m-current--BackgroundColor: var(--pf-c-nav--m-light__link--m-current--BackgroundColor);\n    --pf-c-nav__link--before--BorderColor: var(--pf-c-nav--m-light__link--before--BorderColor);\n    --pf-c-nav__link--after--BorderColor: var(--pf-c-nav--m-light__link--after--BorderColor);\n    --pf-c-nav__link--m-current--after--BorderColor: var(--pf-c-nav--m-light__link--m-current--after--BorderColor);\n    --pf-c-nav__subnav__link--hover--after--BorderColor: var(--pf-c-nav--m-light__subnav__link--hover--after--BorderColor);\n    --pf-c-nav__subnav__link--focus--after--BorderColor: var(--pf-c-nav--m-light__subnav__link--focus--after--BorderColor);\n    --pf-c-nav__subnav__link--active--after--BorderColor: var(--pf-c-nav--m-light__subnav__link--active--after--BorderColor);\n    --pf-c-nav__subnav__link--m-current--after--BorderColor: var(--pf-c-nav--m-light__subnav__link--m-current--after--BorderColor);\n    --pf-c-nav__section-title--Color: var(--pf-c-nav--m-light__section-title--Color);\n    --pf-c-nav__section-title--BorderBottomColor: var(--pf-c-nav--m-light__section-title--BorderBottomColor); }\n    .pf-c-nav.pf-m-light .pf-c-divider {\n      --pf-c-divider--after--BackgroundColor: var(--pf-c-nav--m-light--c-divider--BackgroundColor); }\n  .pf-c-nav.pf-m-horizontal {\n    --pf-c-nav__link--PaddingTop: var(--pf-c-nav--m-horizontal__link--PaddingTop);\n    --pf-c-nav__link--PaddingRight: var(--pf-c-nav--m-horizontal__link--PaddingRight);\n    --pf-c-nav__link--PaddingBottom: var(--pf-c-nav--m-horizontal__link--PaddingBottom);\n    --pf-c-nav__link--PaddingLeft: var(--pf-c-nav--m-horizontal__link--PaddingLeft);\n    --pf-c-nav__link--Right: var(--pf-c-nav--m-horizontal__link--Right);\n    --pf-c-nav__link--Left: var(--pf-c-nav--m-horizontal__link--Left);\n    --pf-c-nav__link--Color: var(--pf-c-nav--m-horizontal__link--Color);\n    --pf-c-nav__link--hover--Color: var(--pf-c-nav--m-horizontal__link--hover--Color);\n    --pf-c-nav__link--active--Color: var(--pf-c-nav--m-horizontal__link--active--Color);\n    --pf-c-nav__link--focus--Color: var(--pf-c-nav--m-horizontal__link--focus--Color);\n    --pf-c-nav__link--m-current--Color: var(--pf-c-nav--m-horizontal__link--m-current--Color);\n    --pf-c-nav__link--BackgroundColor: var(--pf-c-nav--m-horizontal__link--BackgroundColor);\n    --pf-c-nav__link--hover--BackgroundColor: var(--pf-c-nav--m-horizontal__link--hover--BackgroundColor);\n    --pf-c-nav__link--focus--BackgroundColor: var(--pf-c-nav--m-horizontal__link--focus--BackgroundColor);\n    --pf-c-nav__link--active--BackgroundColor: var(--pf-c-nav--m-horizontal__link--active--BackgroundColor);\n    --pf-c-nav__link--m-current--BackgroundColor: var(--pf-c-nav--m-horizontal__link--m-current--BackgroundColor);\n    --pf-c-nav__link--before--BorderColor: var(--pf-c-nav--m-horizontal__link--before--BorderColor);\n    --pf-c-nav__link--before--BorderBottomWidth: var(--pf-c-nav--m-horizontal__link--before--BorderWidth);\n    --pf-c-nav__link--hover--before--BorderBottomWidth: var(--pf-c-nav--m-horizontal__link--hover--before--BorderWidth);\n    --pf-c-nav__link--focus--before--BorderBottomWidth: var(--pf-c-nav--m-horizontal__link--focus--before--BorderWidth);\n    --pf-c-nav__link--active--before--BorderBottomWidth: var(--pf-c-nav--m-horizontal__link--active--before--BorderWidth);\n    --pf-c-nav__link--m-current--before--BorderBottomWidth: var(--pf-c-nav--m-horizontal__link--m-current--before--BorderWidth); }\n  .pf-c-nav.pf-m-tertiary {\n    --pf-c-nav__link--PaddingTop: var(--pf-c-nav--m-tertiary__link--PaddingTop);\n    --pf-c-nav__link--PaddingRight: var(--pf-c-nav--m-tertiary__link--PaddingRight);\n    --pf-c-nav__link--PaddingBottom: var(--pf-c-nav--m-tertiary__link--PaddingBottom);\n    --pf-c-nav__link--PaddingLeft: var(--pf-c-nav--m-tertiary__link--PaddingLeft);\n    --pf-c-nav__link--Right: var(--pf-c-nav--m-tertiary__link--Right);\n    --pf-c-nav__link--Left: var(--pf-c-nav--m-tertiary__link--Left);\n    --pf-c-nav__link--Color: var(--pf-c-nav--m-tertiary__link--Color);\n    --pf-c-nav__link--hover--Color: var(--pf-c-nav--m-tertiary__link--hover--Color);\n    --pf-c-nav__link--active--Color: var(--pf-c-nav--m-tertiary__link--active--Color);\n    --pf-c-nav__link--focus--Color: var(--pf-c-nav--m-tertiary__link--focus--Color);\n    --pf-c-nav__link--m-current--Color: var(--pf-c-nav--m-tertiary__link--m-current--Color);\n    --pf-c-nav__link--BackgroundColor: var(--pf-c-nav--m-tertiary__link--BackgroundColor);\n    --pf-c-nav__link--hover--BackgroundColor: var(--pf-c-nav--m-tertiary__link--hover--BackgroundColor);\n    --pf-c-nav__link--focus--BackgroundColor: var(--pf-c-nav--m-tertiary__link--focus--BackgroundColor);\n    --pf-c-nav__link--active--BackgroundColor: var(--pf-c-nav--m-tertiary__link--active--BackgroundColor);\n    --pf-c-nav__link--m-current--BackgroundColor: var(--pf-c-nav--m-tertiary__link--m-current--BackgroundColor);\n    --pf-c-nav__link--before--BorderColor: var(--pf-c-nav--m-tertiary__link--before--BorderColor);\n    --pf-c-nav__link--before--BorderBottomWidth: var(--pf-c-nav--m-tertiary__link--before--BorderWidth);\n    --pf-c-nav__link--hover--before--BorderBottomWidth: var(--pf-c-nav--m-tertiary__link--hover--before--BorderWidth);\n    --pf-c-nav__link--focus--before--BorderBottomWidth: var(--pf-c-nav--m-tertiary__link--focus--before--BorderWidth);\n    --pf-c-nav__link--active--before--BorderBottomWidth: var(--pf-c-nav--m-tertiary__link--active--before--BorderWidth);\n    --pf-c-nav__link--m-current--before--BorderBottomWidth: var(--pf-c-nav--m-tertiary__link--m-current--before--BorderWidth);\n    --pf-c-nav__scroll-button--Color: var(--pf-c-nav--m-tertiary__scroll-button--Color);\n    --pf-c-nav__scroll-button--hover--Color: var(--pf-c-nav--m-tertiary__scroll-button--hover--Color);\n    --pf-c-nav__scroll-button--focus--Color: var(--pf-c-nav--m-tertiary__scroll-button--focus--Color);\n    --pf-c-nav__scroll-button--active--Color: var(--pf-c-nav--m-tertiary__scroll-button--active--Color);\n    --pf-c-nav__scroll-button--disabled--Color: var(--pf-c-nav--m-tertiary__scroll-button--disabled--Color);\n    --pf-c-nav__scroll-button--before--BorderColor: var(--pf-c-nav--m-tertiary__scroll-button--before--BorderColor);\n    --pf-c-nav__scroll-button--disabled--before--BorderColor: var(--pf-c-nav--m-tertiary__scroll-button--disabled--before--BorderColor); }\n  .pf-c-nav .pf-c-divider {\n    --pf-c-divider--after--BackgroundColor: var(--pf-c-nav--c-divider--BackgroundColor);\n    padding-right: var(--pf-c-nav--c-divider--PaddingRight);\n    padding-left: var(--pf-c-nav--c-divider--PaddingLeft);\n    margin-top: var(--pf-c-nav--c-divider--MarginTop);\n    margin-bottom: var(--pf-c-nav--c-divider--MarginBottom); }\n  .pf-c-nav.pf-m-scrollable .pf-c-nav__scroll-button {\n    opacity: 1; }\n  .pf-c-nav.pf-m-scrollable .pf-c-nav__scroll-button:nth-of-type(1) {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-nav.pf-m-scrollable .pf-c-nav__scroll-button:nth-of-type(2) {\n    margin-left: 0;\n    transform: translateX(0); }\n\n.pf-c-nav__list {\n  display: block; }\n\n.pf-c-nav__item {\n  position: relative;\n  margin-top: var(--pf-c-nav__item--MarginTop); }\n  .pf-c-nav__item.pf-m-expandable {\n    --pf-c-nav__link--before--BorderBottomWidth: 0; }\n    .pf-c-nav__item.pf-m-expandable::before {\n      position: absolute;\n      right: 0;\n      bottom: calc(var(--pf-c-nav__item--before--BorderWidth) * -1);\n      left: 0;\n      content: "";\n      border-bottom: var(--pf-c-nav__item--before--BorderWidth) solid var(--pf-c-nav__item--before--BorderColor); }\n\n.pf-c-nav__link {\n  position: relative;\n  display: flex;\n  align-items: baseline;\n  padding: var(--pf-c-nav__link--PaddingTop) var(--pf-c-nav__link--PaddingRight) var(--pf-c-nav__link--PaddingBottom) var(--pf-c-nav__link--PaddingLeft);\n  font-size: var(--pf-c-nav__link--FontSize);\n  font-weight: var(--pf-c-nav__link--FontWeight);\n  color: var(--pf-c-nav__link--Color);\n  background-color: var(--pf-c-nav__link--BackgroundColor);\n  outline-offset: var(--pf-c-nav__link--OutlineOffset); }\n  .pf-c-nav__link::after, .pf-c-nav__link::before {\n    position: absolute;\n    content: "";\n    border: 0 solid; }\n  .pf-c-nav__link::before {\n    right: 0;\n    bottom: calc(var(--pf-c-nav__link--before--BorderBottomWidth) * -1);\n    left: 0;\n    border-color: var(--pf-c-nav__link--before--BorderColor);\n    border-bottom-width: var(--pf-c-nav__link--before--BorderBottomWidth); }\n  .pf-c-nav__link::after {\n    top: 0;\n    bottom: 0;\n    left: 0;\n    border: 0 solid;\n    border-color: var(--pf-c-nav__link--after--BorderColor);\n    border-left-width: var(--pf-c-nav__link--after--BorderLeftWidth); }\n  .pf-c-nav__link:hover {\n    color: var(--pf-c-nav__link--hover--Color);\n    background-color: var(--pf-c-nav__link--hover--BackgroundColor); }\n    .pf-c-nav__link:hover::before {\n      border-bottom-width: var(--pf-c-nav__link--hover--before--BorderBottomWidth); }\n    .pf-c-nav__link:hover::after {\n      border-color: var(--pf-c-nav__link--hover--after--BorderColor);\n      border-left-width: var(--pf-c-nav__link--hover--after--BorderLeftWidth); }\n  .pf-c-nav__link:focus {\n    color: var(--pf-c-nav__link--focus--Color);\n    background-color: var(--pf-c-nav__link--focus--BackgroundColor); }\n    .pf-c-nav__link:focus::before {\n      border-bottom-width: var(--pf-c-nav__link--focus--before--BorderBottomWidth); }\n    .pf-c-nav__link:focus::after {\n      border-color: var(--pf-c-nav__link--focus--after--BorderColor);\n      border-left-width: var(--pf-c-nav__link--focus--after--BorderLeftWidth); }\n  .pf-c-nav__link:active {\n    color: var(--pf-c-nav__link--active--Color);\n    background-color: var(--pf-c-nav__link--active--BackgroundColor); }\n    .pf-c-nav__link:active::before {\n      border-bottom-width: var(--pf-c-nav__link--active--before--BorderBottomWidth); }\n    .pf-c-nav__link:active::after {\n      border-color: var(--pf-c-nav__link--active--after--BorderColor);\n      border-left-width: var(--pf-c-nav__link--active--after--BorderLeftWidth); }\n  .pf-c-nav__link.pf-m-current, .pf-c-nav__link.pf-m-current:hover,\n  .pf-c-nav__item.pf-m-current:not(.pf-m-expanded) .pf-c-nav__link {\n    color: var(--pf-c-nav__link--m-current--Color);\n    background-color: var(--pf-c-nav__link--m-current--BackgroundColor); }\n    .pf-c-nav__link.pf-m-current::before, .pf-c-nav__link.pf-m-current:hover::before,\n    .pf-c-nav__item.pf-m-current:not(.pf-m-expanded) .pf-c-nav__link::before {\n      border-bottom-width: var(--pf-c-nav__link--m-current--before--BorderBottomWidth); }\n    .pf-c-nav__link.pf-m-current::after, .pf-c-nav__link.pf-m-current:hover::after,\n    .pf-c-nav__item.pf-m-current:not(.pf-m-expanded) .pf-c-nav__link::after {\n      border-color: var(--pf-c-nav__link--m-current--after--BorderColor);\n      border-left-width: var(--pf-c-nav__link--m-current--after--BorderLeftWidth); }\n  .pf-c-nav__link, .pf-c-nav__link:hover, .pf-c-nav__link:focus, .pf-c-nav__link:active {\n    width: 100%;\n    text-decoration: none;\n    border: none; }\n\n.pf-c-nav__subnav {\n  --pf-c-nav__link--PaddingTop: var(--pf-c-nav__subnav__link--PaddingTop);\n  --pf-c-nav__link--PaddingRight: var(--pf-c-nav__subnav__link--PaddingRight);\n  --pf-c-nav__link--PaddingBottom: var(--pf-c-nav__subnav__link--PaddingBottom);\n  --pf-c-nav__link--PaddingLeft: var(--pf-c-nav__subnav__link--PaddingLeft);\n  --pf-c-nav__link--FontSize: var(--pf-c-nav__subnav__link--FontSize);\n  --pf-c-nav__link--hover--after--BorderColor: var(--pf-c-nav__subnav__link--hover--after--BorderColor);\n  --pf-c-nav__link--focus--after--BorderColor: var(--pf-c-nav__subnav__link--focus--after--BorderColor);\n  --pf-c-nav__link--active--after--BorderColor: var(--pf-c-nav__subnav__link--active--after--BorderColor);\n  --pf-c-nav__link--m-current--after--BorderColor: var(--pf-c-nav__subnav__link--m-current--after--BorderColor);\n  --pf-c-nav__link--hover--after--BorderLeftWidth: var(--pf-c-nav__subnav__link--hover--after--BorderWidth);\n  --pf-c-nav__link--focus--after--BorderLeftWidth: var(--pf-c-nav__subnav__link--focus--after--BorderWidth);\n  --pf-c-nav__link--active--after--BorderLeftWidth: var(--pf-c-nav__subnav__link--active--after--BorderWidth);\n  --pf-c-nav__link--m-current--after--BorderLeftWidth: var(--pf-c-nav__subnav__link--m-current--after--BorderWidth);\n  --pf-c-nav--c-divider--PaddingRight: var(--pf-c-nav__subnav--c-divider--PaddingRight);\n  --pf-c-nav--c-divider--PaddingLeft: var(--pf-c-nav__subnav--c-divider--PaddingLeft);\n  max-height: var(--pf-c-nav__subnav--MaxHeight);\n  padding-bottom: var(--pf-c-nav__subnav--PaddingBottom);\n  padding-left: var(--pf-c-nav__subnav--PaddingLeft);\n  transition: var(--pf-c-nav--Transition);\n  scrollbar-width: none;\n  -ms-overflow-style: -ms-autohiding-scrollbar; }\n  .pf-c-nav__item.pf-m-expanded .pf-c-nav__subnav {\n    --pf-c-nav__subnav--MaxHeight: var(--pf-c-nav__item--m-expanded__subnav--MaxHeight);\n    overflow-y: auto;\n    opacity: 1; }\n  .pf-c-nav__subnav::-webkit-scrollbar {\n    display: none; }\n\n.pf-c-nav__toggle {\n  flex: none;\n  padding-right: var(--pf-c-nav__toggle--PaddingRight);\n  padding-left: var(--pf-c-nav__toggle--PaddingLeft);\n  margin-left: auto;\n  font-size: var(--pf-c-nav__toggle--FontSize);\n  line-height: 1; }\n\n.pf-c-nav__toggle-icon {\n  display: inline-block;\n  transition: var(--pf-c-nav__toggle-icon--Transition); }\n  .pf-c-nav__item.pf-m-expanded .pf-c-nav__toggle-icon {\n    transform: rotate(var(--pf-c-nav__item--m-expanded__toggle-icon--Rotate)); }\n\n.pf-c-nav__section {\n  --pf-c-nav__item--MarginTop: var(--pf-c-nav__section__item--MarginTop);\n  --pf-c-nav__link--PaddingTop: var(--pf-c-nav__section__link--PaddingTop);\n  --pf-c-nav__link--PaddingRight: var(--pf-c-nav__section__link--PaddingRight);\n  --pf-c-nav__link--PaddingBottom: var(--pf-c-nav__section__link--PaddingBottom);\n  --pf-c-nav__link--PaddingLeft: var(--pf-c-nav__section__link--PaddingLeft);\n  --pf-c-nav__link--FontSize: var(--pf-c-nav__section__link--FontSize);\n  --pf-c-nav__link--before--BorderBottomWidth: var(--pf-c-nav__section__link--before--BorderBottomWidth);\n  --pf-c-nav__link--hover--after--BorderColor: var(--pf-c-nav__section__link--hover--after--BorderColor);\n  --pf-c-nav__link--focus--after--BorderColor: var(--pf-c-nav__section__link--focus--after--BorderColor);\n  --pf-c-nav__link--active--after--BorderColor: var(--pf-c-nav__section__link--active--after--BorderColor);\n  --pf-c-nav__link--m-current--after--BorderColor: var(--pf-c-nav__section__link--m-current--after--BorderColor);\n  --pf-c-nav__link--hover--after--BorderLeftWidth: var(--pf-c-nav__section__link--hover--after--BorderWidth);\n  --pf-c-nav__link--focus--after--BorderLeftWidth: var(--pf-c-nav__section__link--focus--after--BorderWidth);\n  --pf-c-nav__link--active--after--BorderLeftWidth: var(--pf-c-nav__section__link--active--after--BorderWidth);\n  --pf-c-nav__link--m-current--after--BorderLeftWidth: var(--pf-c-nav__section__link--m-current--after--BorderWidth);\n  margin-top: var(--pf-c-nav__section--MarginTop);\n  --pf-c-nav--c-divider--MarginBottom: 0; }\n  .pf-c-nav__section + .pf-c-nav__section {\n    --pf-c-nav__section--MarginTop: var(--pf-c-nav__section--section--MarginTop); }\n\n.pf-c-nav__section-title {\n  padding: var(--pf-c-nav__section-title--PaddingTop) var(--pf-c-nav__section-title--PaddingRight) var(--pf-c-nav__section-title--PaddingBottom) var(--pf-c-nav__section-title--PaddingLeft);\n  font-size: var(--pf-c-nav__section-title--FontSize);\n  color: var(--pf-c-nav__section-title--Color);\n  border-bottom: var(--pf-c-nav__section-title--BorderBottomWidth) solid var(--pf-c-nav__section-title--BorderBottomColor); }\n\n.pf-c-nav__scroll-button {\n  flex: none;\n  width: var(--pf-c-nav__scroll-button--Width);\n  color: var(--pf-c-nav__scroll-button--Color);\n  background-color: var(--pf-c-nav__scroll-button--BackgroundColor);\n  border: 0;\n  outline-offset: var(--pf-c-nav__scroll-button--OutlineOffset);\n  opacity: 0;\n  transition: var(--pf-c-nav__scroll-button--Transition); }\n  .pf-c-nav__scroll-button::before {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    content: "";\n    border: solid var(--pf-c-nav__scroll-button--before--BorderColor);\n    border-width: 0 var(--pf-c-nav__scroll-button--before--BorderRightWidth) 0 var(--pf-c-nav__scroll-button--before--BorderLeftWidth); }\n  .pf-c-nav__scroll-button:hover {\n    color: var(--pf-c-nav__scroll-button--hover--Color); }\n  .pf-c-nav__scroll-button:focus {\n    color: var(--pf-c-nav__scroll-button--focus--Color); }\n  .pf-c-nav__scroll-button:active {\n    color: var(--pf-c-nav__scroll-button--active--Color); }\n  .pf-c-nav__scroll-button:disabled {\n    color: var(--pf-c-nav__scroll-button--disabled--Color);\n    border-color: var(--pf-c-nav__scroll-button--disabled--before--BorderColor); }\n  .pf-c-nav__scroll-button:nth-of-type(1) {\n    --pf-c-nav__scroll-button--before--BorderRightWidth: var(--pf-c-nav__scroll-button--before--BorderWidth);\n    margin-right: calc(var(--pf-c-nav__scroll-button--Width) * -1);\n    transform: translateX(-100%); }\n    .pf-c-nav__scroll-button:nth-of-type(1)::before {\n      right: 0; }\n  .pf-c-nav__scroll-button:nth-of-type(2) {\n    --pf-c-nav__scroll-button--before--BorderLeftWidth: var(--pf-c-nav__scroll-button--before--BorderWidth);\n    margin-left: calc(var(--pf-c-nav__scroll-button--Width) * -1);\n    transform: translateX(100%); }\n    .pf-c-nav__scroll-button:nth-of-type(2)::before {\n      left: 0; }\n\n.pf-c-notification-badge {\n  --pf-c-notification-badge--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-notification-badge--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-notification-badge--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-notification-badge--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-notification-badge--MarginTop: calc(-1 * var(--pf-global--spacer--form-element));\n  --pf-c-notification-badge--MarginRight: calc(-1 * var(--pf-global--spacer--md));\n  --pf-c-notification-badge--MarginBottom: calc(-1 * var(--pf-global--spacer--form-element));\n  --pf-c-notification-badge--MarginLeft: calc(-1 * var(--pf-global--spacer--md));\n  --pf-c-notification-badge--after--BorderColor: transparent;\n  --pf-c-notification-badge--after--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-notification-badge--after--BorderWidth: 0;\n  --pf-c-notification-badge--after--Top: 0;\n  --pf-c-notification-badge--after--Right: 0;\n  --pf-c-notification-badge--after--Width: auto;\n  --pf-c-notification-badge--after--Height: auto;\n  --pf-c-notification-badge--after--BackgroundColor: transparent;\n  --pf-c-notification-badge--after--TranslateX: 0;\n  --pf-c-notification-badge--after--TranslateY: 0;\n  --pf-c-notification-badge__i--Width: auto;\n  --pf-c-notification-badge__i--Height: auto;\n  --pf-c-notification-badge--m-read--after--BorderColor: transparent;\n  --pf-c-notification-badge--m-read--after--BackgroundColor: transparent;\n  --pf-c-notification-badge--m-unread--Color: var(--pf-global--Color--light-100);\n  --pf-c-notification-badge--m-unread--after--BackgroundColor: var(--pf-global--active-color--100);\n  --pf-c-notification-badge--m-unread--hover--after--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-notification-badge--m-attention--Color: var(--pf-global--Color--light-100);\n  --pf-c-notification-badge--m-attention--after--BackgroundColor: var(--pf-global--danger-color--100);\n  --pf-c-notification-badge--m-attention--hover--after--BackgroundColor: var(--pf-global--danger-color--200);\n  --pf-c-notification-badge__count--MarginLeft: var(--pf-global--spacer--xs);\n  --pf-c-notification-badge--pf-icon-attention-bell--LineHeight: var(--pf-global--LineHeight--sm);\n  position: relative;\n  display: inline-block;\n  padding: var(--pf-c-notification-badge--PaddingTop) var(--pf-c-notification-badge--PaddingRight) var(--pf-c-notification-badge--PaddingBottom) var(--pf-c-notification-badge--PaddingLeft);\n  margin: var(--pf-c-notification-badge--MarginTop) var(--pf-c-notification-badge--MarginRight) var(--pf-c-notification-badge--MarginBottom) var(--pf-c-notification-badge--MarginLeft);\n  background-color: var(--pf-c-notification-badge--after--BackgroundColor);\n  border-radius: var(--pf-c-notification-badge--after--BorderRadius); }\n  .pf-c-notification-badge::before {\n    position: absolute;\n    top: var(--pf-c-notification-badge--after--Top);\n    right: var(--pf-c-notification-badge--after--Right);\n    bottom: 0;\n    left: 0;\n    width: var(--pf-c-notification-badge--after--Width);\n    height: var(--pf-c-notification-badge--after--Height);\n    content: "";\n    border: var(--pf-c-notification-badge--after--BorderWidth) solid var(--pf-c-notification-badge--after--BorderColor);\n    border-radius: var(--pf-c-notification-badge--after--BorderRadius);\n    transform: translate(var(--pf-c-notification-badge--after--TranslateX), var(--pf-c-notification-badge--after--TranslateY)); }\n  .pf-c-notification-badge > i {\n    width: var(--pf-c-notification-badge__i--Width);\n    height: var(--pf-c-notification-badge__i--Height); }\n  .pf-c-notification-badge > * {\n    position: relative; }\n  .pf-c-notification-badge .pf-icon-attention-bell,\n  .pf-c-notification-badge .pf-icon-bell {\n    display: inline-block;\n    line-height: var(--pf-c-notification-badge--pf-icon-attention-bell--LineHeight); }\n    .pf-c-notification-badge .pf-icon-attention-bell::before,\n    .pf-c-notification-badge .pf-icon-bell::before {\n      vertical-align: bottom; }\n  .pf-c-notification-badge.pf-m-read {\n    --pf-c-notification-badge--after--BackgroundColor: var(--pf-c-notification-badge--m-read--after--BackgroundColor);\n    --pf-c-notification-badge--after--BorderColor: var(--pf-c-notification-badge--m-read--after--BorderColor); }\n  .pf-c-notification-badge.pf-m-unread {\n    --pf-c-notification-badge--after--BackgroundColor: var(--pf-c-notification-badge--m-unread--after--BackgroundColor);\n    color: var(--pf-c-notification-badge--m-unread--Color); }\n    .pf-c-notification-badge.pf-m-unread:hover {\n      --pf-c-notification-badge--after--BackgroundColor: var(--pf-c-notification-badge--m-unread--hover--after--BackgroundColor); }\n  .pf-c-notification-badge.pf-m-attention {\n    --pf-c-notification-badge--after--BackgroundColor: var(--pf-c-notification-badge--m-attention--after--BackgroundColor);\n    color: var(--pf-c-notification-badge--m-attention--Color); }\n    .pf-c-notification-badge.pf-m-attention:hover {\n      --pf-c-notification-badge--after--BackgroundColor: var(--pf-c-notification-badge--m-attention--hover--after--BackgroundColor); }\n\n.pf-c-notification-badge__count {\n  margin-left: var(--pf-c-notification-badge__count--MarginLeft); }\n\n.pf-c-notification-drawer {\n  --pf-c-notification-drawer--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-notification-drawer__header--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__header--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__header--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__header--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__header--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-notification-drawer__header--BoxShadow: var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-notification-drawer__header--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-notification-drawer__header-title--FontSize: var(--pf-global--FontSize--xl);\n  --pf-c-notification-drawer__header-status--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__body--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-notification-drawer__list-item--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__list-item--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__list-item--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__list-item--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__list-item--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-notification-drawer__list-item--BoxShadow: inset var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-notification-drawer__list-item--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-notification-drawer__list-item--BorderBottomColor: transparent;\n  --pf-c-notification-drawer__list-item--OutlineOffset: -0.25rem;\n  --pf-c-notification-drawer__list-item--before--Width: var(--pf-global--BorderWidth--lg);\n  --pf-c-notification-drawer__list-item--before--Top: 0;\n  --pf-c-notification-drawer__list-item--before--Bottom: calc(var(--pf-c-notification-drawer__list-item--BorderBottomWidth) * -1);\n  --pf-c-notification-drawer__list-item--m-info__list-item-header-icon--Color: var(--pf-global--info-color--100);\n  --pf-c-notification-drawer__list-item--m-info__list-item--before--BackgroundColor: var(--pf-global--info-color--100);\n  --pf-c-notification-drawer__list-item--m-warning__list-item-header-icon--Color: var(--pf-global--warning-color--100);\n  --pf-c-notification-drawer__list-item--m-warning__list-item--before--BackgroundColor: var(--pf-global--warning-color--100);\n  --pf-c-notification-drawer__list-item--m-danger__list-item-header-icon--Color: var(--pf-global--danger-color--100);\n  --pf-c-notification-drawer__list-item--m-danger__list-item--before--BackgroundColor: var(--pf-global--danger-color--100);\n  --pf-c-notification-drawer__list-item--m-success__list-item-header-icon--Color: var(--pf-global--success-color--100);\n  --pf-c-notification-drawer__list-item--m-success__list-item--before--BackgroundColor: var(--pf-global--success-color--100);\n  --pf-c-notification-drawer__list-item--m-default__list-item-header-icon--Color: var(--pf-global--default-color--200);\n  --pf-c-notification-drawer__list-item--m-default__list-item--before--BackgroundColor: var(--pf-global--default-color--200);\n  --pf-c-notification-drawer__list-item--m-read--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-notification-drawer__list-item--m-read--BorderBottomColor: var(--pf-global--BorderColor--100);\n  --pf-c-notification-drawer__list-item--m-read--before--Top: calc(var(--pf-c-notification-drawer__list-item--BorderBottomWidth) * -1);\n  --pf-c-notification-drawer__list-item--m-read--before--Bottom: 0;\n  --pf-c-notification-drawer__list-item--m-read--before--BackgroundColor: transparent;\n  --pf-c-notification-drawer__list-item--list-item--m-read--before--Top: 0;\n  --pf-c-notification-drawer__list-item--list-item--m-read--BoxShadow: inset var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-notification-drawer__list-item--m-hoverable--hover--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-notification-drawer__list-item--m-hoverable--hover--BoxShadow: var(--pf-global--BoxShadow--md-top), var(--pf-global--BoxShadow--md-bottom);\n  --pf-c-notification-drawer__list-item-header--MarginBottom: var(--pf-global--spacer--xs);\n  --pf-c-notification-drawer__list-item-header-icon--Color: inherit;\n  --pf-c-notification-drawer__list-item-header-icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-notification-drawer__list-item-header-title--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-notification-drawer__list-item-header-title--max-lines: 1;\n  --pf-c-notification-drawer__list-item--m-read__list-item-header-title--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-notification-drawer__list-item-description--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-notification-drawer__list-item-timestamp--Color: var(--pf-global--Color--200);\n  --pf-c-notification-drawer__list-item-timestamp--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-notification-drawer__group--m-expanded--group--BorderTopWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-notification-drawer__group--m-expanded--group--BorderTopColor: var(--pf-global--BorderColor--100);\n  --pf-c-notification-drawer__group--m-expanded--MinHeight: 0;\n  --pf-c-notification-drawer__group-toggle--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__group-toggle--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__group-toggle--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__group-toggle--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__group-toggle--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-notification-drawer__group-toggle--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-notification-drawer__group-toggle--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-notification-drawer__group-toggle--OutlineOffset: -0.25rem;\n  --pf-c-notification-drawer__group-toggle-title--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__group-toggle-title--max-lines: 1;\n  --pf-c-notification-drawer__group-toggle-count--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__group-toggle-icon--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-notification-drawer__group-toggle-icon--Color: var(--pf-global--Color--200);\n  --pf-c-notification-drawer__group-toggle-icon--Transition: .2s ease-in 0s;\n  --pf-c-notification-drawer__group--m-expanded__group-toggle-icon--Rotate: 90deg;\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  background-color: var(--pf-c-notification-drawer--BackgroundColor); }\n\n.pf-c-notification-drawer__header {\n  position: relative;\n  z-index: var(--pf-c-notification-drawer__header--ZIndex);\n  display: flex;\n  flex-shrink: 0;\n  align-items: baseline;\n  padding: var(--pf-c-notification-drawer__header--PaddingTop) var(--pf-c-notification-drawer__header--PaddingRight) var(--pf-c-notification-drawer__header--PaddingBottom) var(--pf-c-notification-drawer__header--PaddingLeft);\n  background-color: var(--pf-c-notification-drawer__header--BackgroundColor);\n  box-shadow: var(--pf-c-notification-drawer__header--BoxShadow); }\n\n.pf-c-notification-drawer__header-title {\n  font-size: var(--pf-c-notification-drawer__header-title--FontSize); }\n\n.pf-c-notification-drawer__header-status {\n  margin-left: var(--pf-c-notification-drawer__header-status--MarginLeft); }\n\n.pf-c-notification-drawer__header-action {\n  display: flex;\n  align-items: center;\n  margin-left: auto; }\n\n.pf-c-notification-drawer__body {\n  overflow-y: auto;\n  box-shadow: var(--pf-c-notification-drawer__body--ZIndex); }\n\n.pf-c-notification-drawer__list-item {\n  position: relative;\n  display: grid;\n  grid-template-columns: 1fr auto;\n  padding: var(--pf-c-notification-drawer__list-item--PaddingTop) var(--pf-c-notification-drawer__list-item--PaddingRight) var(--pf-c-notification-drawer__list-item--PaddingBottom) var(--pf-c-notification-drawer__list-item--PaddingLeft);\n  background-color: var(--pf-c-notification-drawer__list-item--BackgroundColor);\n  border-bottom: var(--pf-c-notification-drawer__list-item--BorderBottomWidth) solid var(--pf-c-notification-drawer__list-item--BorderBottomColor);\n  outline-offset: var(--pf-c-notification-drawer__list-item--OutlineOffset);\n  box-shadow: var(--pf-c-notification-drawer__list-item--BoxShadow); }\n  .pf-c-notification-drawer__list-item.pf-m-read, .pf-c-notification-drawer__list-item:first-child {\n    --pf-c-notification-drawer__list-item--BoxShadow: none; }\n  .pf-c-notification-drawer__list-item:not(.pf-m-read) + .pf-c-notification-drawer__list-item.pf-m-read {\n    --pf-c-notification-drawer__list-item--BoxShadow: var(--pf-c-notification-drawer__list-item--list-item--m-read--BoxShadow);\n    --pf-c-notification-drawer__list-item--before--Top: var(--pf-c-notification-drawer__list-item--list-item--m-read--before--Top); }\n  .pf-c-notification-drawer__list-item::before {\n    position: absolute;\n    top: var(--pf-c-notification-drawer__list-item--before--Top);\n    bottom: var(--pf-c-notification-drawer__list-item--before--Bottom);\n    width: var(--pf-c-notification-drawer__list-item--before--Width);\n    content: "";\n    background-color: var(--pf-c-notification-drawer__list-item--before--BackgroundColor); }\n  .pf-c-notification-drawer__list-item.pf-m-info {\n    --pf-c-notification-drawer__list-item--before--BackgroundColor: var(--pf-c-notification-drawer__list-item--m-info__list-item--before--BackgroundColor);\n    --pf-c-notification-drawer__list-item-header-icon--Color: var(--pf-c-notification-drawer__list-item--m-info__list-item-header-icon--Color); }\n  .pf-c-notification-drawer__list-item.pf-m-warning {\n    --pf-c-notification-drawer__list-item--before--BackgroundColor: var(--pf-c-notification-drawer__list-item--m-warning__list-item--before--BackgroundColor);\n    --pf-c-notification-drawer__list-item-header-icon--Color: var(--pf-c-notification-drawer__list-item--m-warning__list-item-header-icon--Color); }\n  .pf-c-notification-drawer__list-item.pf-m-danger {\n    --pf-c-notification-drawer__list-item--before--BackgroundColor: var(--pf-c-notification-drawer__list-item--m-danger__list-item--before--BackgroundColor);\n    --pf-c-notification-drawer__list-item-header-icon--Color: var(--pf-c-notification-drawer__list-item--m-danger__list-item-header-icon--Color); }\n  .pf-c-notification-drawer__list-item.pf-m-success {\n    --pf-c-notification-drawer__list-item--before--BackgroundColor: var(--pf-c-notification-drawer__list-item--m-success__list-item--before--BackgroundColor);\n    --pf-c-notification-drawer__list-item-header-icon--Color: var(--pf-c-notification-drawer__list-item--m-success__list-item-header-icon--Color); }\n  .pf-c-notification-drawer__list-item.pf-m-default {\n    --pf-c-notification-drawer__list-item--before--BackgroundColor: var(--pf-c-notification-drawer__list-item--m-default__list-item--before--BackgroundColor);\n    --pf-c-notification-drawer__list-item-header-icon--Color: var(--pf-c-notification-drawer__list-item--m-default__list-item-header-icon--Color); }\n  .pf-c-notification-drawer__list-item.pf-m-read {\n    --pf-c-notification-drawer__list-item--BorderBottomColor: var(--pf-c-notification-drawer__list-item--m-read--BorderBottomColor);\n    --pf-c-notification-drawer__list-item--BackgroundColor: var(--pf-c-notification-drawer__list-item--m-read--BackgroundColor);\n    --pf-c-notification-drawer__list-item--before--Top: var(--pf-c-notification-drawer__list-item--m-read--before--Top);\n    --pf-c-notification-drawer__list-item--before--Bottom: var(--pf-c-notification-drawer__list-item--m-read--before--Bottom);\n    --pf-c-notification-drawer__list-item--before--BackgroundColor: var(--pf-c-notification-drawer__list-item--m-read--before--BackgroundColor);\n    --pf-c-notification-drawer__list-item-header-title--FontWeight: var(--pf-c-notification-drawer__list-item--m-read__list-item-header-title--FontWeight);\n    position: relative; }\n  .pf-c-notification-drawer__list-item.pf-m-hoverable {\n    cursor: pointer; }\n    .pf-c-notification-drawer__list-item.pf-m-hoverable:hover {\n      z-index: var(--pf-c-notification-drawer__list-item--m-hoverable--hover--ZIndex);\n      box-shadow: var(--pf-c-notification-drawer__list-item--m-hoverable--hover--BoxShadow); }\n\n.pf-c-notification-drawer__list-item-header {\n  display: flex;\n  align-items: baseline;\n  grid-column: 1 / 2;\n  grid-row: 1 / 2;\n  margin-bottom: var(--pf-c-notification-drawer__list-item-header--MarginBottom); }\n\n.pf-c-notification-drawer__list-item-header-icon {\n  margin-right: var(--pf-c-notification-drawer__list-item-header-icon--MarginRight);\n  color: var(--pf-c-notification-drawer__list-item-header-icon--Color); }\n\n.pf-c-notification-drawer__list-item-header-title {\n  font-weight: var(--pf-c-notification-drawer__list-item-header-title--FontWeight);\n  word-break: break-word; }\n  .pf-c-notification-drawer__list-item-header-title.pf-m-truncate {\n    display: -webkit-box;\n    -webkit-box-orient: vertical;\n    -webkit-line-clamp: var(--pf-c-notification-drawer__list-item-header-title--max-lines);\n    overflow: hidden; }\n\n.pf-c-notification-drawer__list-item-action {\n  grid-column: 2 / 3;\n  grid-row: 1 / 3; }\n\n.pf-c-notification-drawer__list-item-description {\n  grid-row: 2 / 3;\n  grid-column: 1 / 2;\n  margin-bottom: var(--pf-c-notification-drawer__list-item-description--MarginBottom);\n  word-break: break-word; }\n\n.pf-c-notification-drawer__list-item-timestamp {\n  grid-row: 3 / 4;\n  grid-column: 1 / 2;\n  font-size: var(--pf-c-notification-drawer__list-item-timestamp--FontSize);\n  color: var(--pf-c-notification-drawer__list-item-timestamp--Color); }\n\n.pf-c-notification-drawer__group-list {\n  display: flex;\n  flex-direction: column; }\n\n.pf-c-notification-drawer__group.pf-m-expanded {\n  min-height: var(--pf-c-notification-drawer__group--m-expanded--MinHeight); }\n  .pf-c-notification-drawer__group.pf-m-expanded + .pf-c-notification-drawer__group {\n    border-top: var(--pf-c-notification-drawer__group--m-expanded--group--BorderTopWidth) solid var(--pf-c-notification-drawer__group--m-expanded--group--BorderTopColor); }\n\n.pf-c-notification-drawer__group .pf-c-notification-drawer__list-item:last-child {\n  --pf-c-notification-drawer__list-item--BorderBottomWidth: 0;\n  --pf-c-notification-drawer__list-item--before--Bottom: 0; }\n\n.pf-c-notification-drawer__group-toggle {\n  display: flex;\n  align-items: baseline;\n  width: 100%;\n  padding: var(--pf-c-notification-drawer__group-toggle--PaddingTop) var(--pf-c-notification-drawer__group-toggle--PaddingRight) var(--pf-c-notification-drawer__group-toggle--PaddingBottom) var(--pf-c-notification-drawer__group-toggle--PaddingLeft);\n  background-color: var(--pf-c-notification-drawer__group-toggle--BackgroundColor);\n  border: solid var(--pf-c-notification-drawer__group-toggle--BorderColor);\n  border-width: 0 0 var(--pf-c-notification-drawer__group-toggle--BorderBottomWidth) 0;\n  outline-offset: var(--pf-c-notification-drawer__group-toggle--OutlineOffset); }\n\n.pf-c-notification-drawer__group-toggle-title {\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: var(--pf-c-notification-drawer__group-toggle-title--max-lines);\n  overflow: hidden;\n  margin-right: var(--pf-c-notification-drawer__group-toggle-title--MarginRight);\n  text-align: left;\n  word-break: break-word; }\n\n.pf-c-notification-drawer__group-toggle-count {\n  margin-right: var(--pf-c-notification-drawer__group-toggle-count--MarginRight);\n  margin-left: auto; }\n\n.pf-c-notification-drawer__group-toggle-icon {\n  margin-right: var(--pf-c-notification-drawer__group-toggle-icon--MarginRight);\n  color: var(--pf-c-notification-drawer__group-toggle-icon--Color);\n  transition: var(--pf-c-notification-drawer__group-toggle-icon--Transition); }\n  .pf-c-notification-drawer__group.pf-m-expanded .pf-c-notification-drawer__group-toggle-icon {\n    transform: rotate(var(--pf-c-notification-drawer__group--m-expanded__group-toggle-icon--Rotate)); }\n\n.pf-c-options-menu {\n  --pf-c-options-menu__toggle--BackgroundColor: transparent;\n  --pf-c-options-menu__toggle--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-options-menu__toggle--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__toggle--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-options-menu__toggle--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__toggle--MinWidth: var(--pf-global--target-size--MinWidth);\n  --pf-c-options-menu__toggle--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-options-menu__toggle--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-options-menu__toggle--BorderTopColor: var(--pf-global--BorderColor--300);\n  --pf-c-options-menu__toggle--BorderRightColor: var(--pf-global--BorderColor--300);\n  --pf-c-options-menu__toggle--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-options-menu__toggle--BorderLeftColor: var(--pf-global--BorderColor--300);\n  --pf-c-options-menu__toggle--Color: var(--pf-global--Color--100);\n  --pf-c-options-menu__toggle--hover--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-options-menu__toggle--active--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-options-menu__toggle--active--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-options-menu__toggle--focus--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-options-menu__toggle--focus--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-options-menu__toggle--expanded--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-options-menu__toggle--expanded--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-options-menu__toggle--disabled--BackgroundColor: var(--pf-global--disabled-color--300);\n  --pf-c-options-menu__toggle--m-plain--Color: var(--pf-global--Color--200);\n  --pf-c-options-menu__toggle--m-plain--hover--Color: var(--pf-global--Color--100);\n  --pf-c-options-menu__toggle--m-plain--disabled--Color: var(--pf-global--disabled-color--200);\n  --pf-c-options-menu__toggle-icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__toggle-icon--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-options-menu--m-top--m-expanded__toggle-icon--Rotate: 180deg;\n  --pf-c-options-menu__toggle-button--BackgroundColor: transparent;\n  --pf-c-options-menu__toggle-button--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-options-menu__toggle-button--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__toggle-button--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-options-menu__toggle-button--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__menu--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-options-menu__menu--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-options-menu__menu--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__menu--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__menu--Top: calc(100% + var(--pf-global--spacer--xs));\n  --pf-c-options-menu__menu--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-options-menu--m-top__menu--Top: 0;\n  --pf-c-options-menu--m-top__menu--TranslateY: calc(-100% - var(--pf-global--spacer--xs));\n  --pf-c-options-menu__menu-item--BackgroundColor: transparent;\n  --pf-c-options-menu__menu-item--Color: var(--pf-global--Color--100);\n  --pf-c-options-menu__menu-item--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-options-menu__menu-item--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__menu-item--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-options-menu__menu-item--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__menu-item--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-options-menu__menu-item--disabled--Color: var(--pf-global--Color--dark-200);\n  --pf-c-options-menu__menu-item--hover--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-options-menu__menu-item--disabled--BackgroundColor: transparent;\n  --pf-c-options-menu__menu-item-icon--Color: var(--pf-global--active-color--100);\n  --pf-c-options-menu__menu-item-icon--FontSize: var(--pf-global--icon--FontSize--sm);\n  --pf-c-options-menu__menu-item-icon--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-options-menu__group--group--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__group-title--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-options-menu__group-title--PaddingRight: var(--pf-c-options-menu__menu-item--PaddingRight);\n  --pf-c-options-menu__group-title--PaddingBottom: var(--pf-c-options-menu__menu-item--PaddingBottom);\n  --pf-c-options-menu__group-title--PaddingLeft: var(--pf-c-options-menu__menu-item--PaddingLeft);\n  --pf-c-options-menu__group-title--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-options-menu__group-title--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-options-menu__group-title--Color: var(--pf-global--Color--dark-200);\n  --pf-c-options-menu--c-divider--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-options-menu--c-divider--MarginBottom: var(--pf-global--spacer--sm);\n  position: relative;\n  display: inline-block;\n  max-width: 100%; }\n  .pf-c-options-menu .pf-c-divider {\n    margin-top: var(--pf-c-options-menu--c-divider--MarginTop);\n    margin-bottom: var(--pf-c-options-menu--c-divider--MarginBottom); }\n    .pf-c-options-menu .pf-c-divider:last-child {\n      --pf-c-options-menu--c-divider--MarginBottom: 0; }\n\n.pf-c-options-menu__toggle:not(.pf-m-plain)::before,\n.pf-c-options-menu.pf-m-text:not(.pf-m-plain) .pf-c-options-menu__toggle-button::before {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  content: "";\n  border: var(--pf-c-options-menu__toggle--BorderWidth) solid;\n  border-color: var(--pf-c-options-menu__toggle--BorderTopColor) var(--pf-c-options-menu__toggle--BorderRightColor) var(--pf-c-options-menu__toggle--BorderBottomColor) var(--pf-c-options-menu__toggle--BorderLeftColor); }\n\n.pf-c-options-menu__toggle:not(.pf-m-plain):hover::before,\n.pf-c-options-menu.pf-m-text:not(.pf-m-plain) .pf-c-options-menu__toggle-button:hover::before {\n  --pf-c-options-menu__toggle--BorderBottomColor: var(--pf-c-options-menu__toggle--hover--BorderBottomColor); }\n\n.pf-c-options-menu__toggle:not(.pf-m-plain):active::before, .pf-c-options-menu__toggle:not(.pf-m-plain).pf-m-active::before,\n.pf-c-options-menu.pf-m-text:not(.pf-m-plain) .pf-c-options-menu__toggle-button:active::before,\n.pf-c-options-menu.pf-m-text:not(.pf-m-plain) .pf-c-options-menu__toggle-button.pf-m-active::before {\n  --pf-c-options-menu__toggle--BorderBottomColor: var(--pf-c-options-menu__toggle--active--BorderBottomColor);\n  border-bottom-width: var(--pf-c-options-menu__toggle--active--BorderBottomWidth); }\n\n.pf-c-options-menu__toggle:not(.pf-m-plain):focus::before,\n.pf-c-options-menu.pf-m-text:not(.pf-m-plain) .pf-c-options-menu__toggle-button:focus::before {\n  --pf-c-options-menu__toggle--BorderBottomColor: var(--pf-c-options-menu__toggle--focus--BorderBottomColor);\n  border-bottom-width: var(--pf-c-options-menu__toggle--focus--BorderBottomWidth); }\n\n.pf-c-options-menu__toggle {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  min-width: var(--pf-c-options-menu__toggle--MinWidth);\n  max-width: 100%;\n  padding-left: var(--pf-c-options-menu__toggle--PaddingLeft);\n  line-height: var(--pf-c-options-menu__toggle--LineHeight);\n  color: var(--pf-c-options-menu__toggle--Color);\n  background-color: var(--pf-c-options-menu__toggle--BackgroundColor);\n  border: none; }\n  .pf-c-options-menu__toggle:not(.pf-m-text) {\n    padding-top: var(--pf-c-options-menu__toggle--PaddingTop);\n    padding-right: var(--pf-c-options-menu__toggle--PaddingRight);\n    padding-bottom: var(--pf-c-options-menu__toggle--PaddingBottom); }\n  .pf-c-options-menu.pf-m-expanded > .pf-c-options-menu__toggle::before {\n    --pf-c-options-menu__toggle--BorderBottomColor: var(--pf-c-options-menu__toggle--expanded--BorderBottomColor);\n    border-bottom-width: var(--pf-c-options-menu__toggle--expanded--BorderBottomWidth); }\n  .pf-c-options-menu__toggle.pf-m-plain:not(.pf-m-text) {\n    justify-content: center;\n    color: var(--pf-c-options-menu__toggle--m-plain--Color); }\n  .pf-c-options-menu__toggle.pf-m-plain .pf-c-options-menu__toggle-button-icon {\n    line-height: var(--pf-c-options-menu__toggle--LineHeight); }\n  .pf-c-options-menu__toggle.pf-m-plain:hover, .pf-c-options-menu__toggle.pf-m-plain:active, .pf-c-options-menu__toggle.pf-m-plain.pf-m-active, .pf-c-options-menu__toggle.pf-m-plain:focus,\n  .pf-c-options-menu.pf-m-expanded > .pf-c-options-menu__toggle.pf-m-plain {\n    --pf-c-options-menu__toggle--m-plain--Color: var(--pf-c-options-menu__toggle--m-plain--hover--Color); }\n  .pf-c-options-menu__toggle.pf-m-plain.pf-m-disabled, .pf-c-options-menu__toggle.pf-m-plain:disabled {\n    --pf-c-options-menu__toggle--m-plain--Color: var(--pf-c-options-menu__toggle--m-plain--disabled--Color); }\n  .pf-c-options-menu__toggle.pf-m-disabled, .pf-c-options-menu__toggle:disabled {\n    pointer-events: none; }\n    .pf-c-options-menu__toggle.pf-m-disabled:not(.pf-m-plain), .pf-c-options-menu__toggle.pf-m-disabled.pf-m-text, .pf-c-options-menu__toggle:disabled:not(.pf-m-plain), .pf-c-options-menu__toggle:disabled.pf-m-text {\n      --pf-c-options-menu__toggle--BackgroundColor: var(--pf-c-options-menu__toggle--disabled--BackgroundColor); }\n    .pf-c-options-menu__toggle.pf-m-disabled::before, .pf-c-options-menu__toggle:disabled::before {\n      border: 0; }\n\n.pf-c-options-menu__toggle-button-icon {\n  position: relative; }\n\n.pf-c-options-menu__toggle-button {\n  padding: var(--pf-c-options-menu__toggle-button--PaddingTop) var(--pf-c-options-menu__toggle-button--PaddingRight) var(--pf-c-options-menu__toggle-button--PaddingBottom) var(--pf-c-options-menu__toggle-button--PaddingLeft);\n  background-color: var(--pf-c-options-menu__toggle-button--BackgroundColor);\n  border: 0; }\n\n.pf-c-options-menu__toggle-text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.pf-c-options-menu__toggle-icon {\n  margin-right: var(--pf-c-options-menu__toggle-icon--MarginRight);\n  margin-left: var(--pf-c-options-menu__toggle-icon--MarginLeft); }\n  .pf-c-options-menu.pf-m-top.pf-m-expanded .pf-c-options-menu__toggle-icon {\n    transform: rotate(var(--pf-c-options-menu--m-top--m-expanded__toggle-icon--Rotate)); }\n\n.pf-c-options-menu__menu {\n  position: absolute;\n  top: var(--pf-c-options-menu__menu--Top);\n  z-index: var(--pf-c-options-menu__menu--ZIndex);\n  min-width: 100%;\n  padding-top: var(--pf-c-options-menu__menu--PaddingTop);\n  padding-bottom: var(--pf-c-options-menu__menu--PaddingBottom);\n  background-color: var(--pf-c-options-menu__menu--BackgroundColor);\n  background-clip: padding-box;\n  box-shadow: var(--pf-c-options-menu__menu--BoxShadow); }\n  .pf-c-options-menu__menu.pf-m-align-right {\n    right: 0; }\n  .pf-c-options-menu.pf-m-top .pf-c-options-menu__menu {\n    --pf-c-options-menu__menu--Top: var(--pf-c-options-menu--m-top__menu--Top);\n    transform: translateY(var(--pf-c-options-menu--m-top__menu--TranslateY)); }\n\n.pf-c-options-menu__menu-item {\n  display: flex;\n  align-items: baseline;\n  width: 100%;\n  padding: var(--pf-c-options-menu__menu-item--PaddingTop) var(--pf-c-options-menu__menu-item--PaddingRight) var(--pf-c-options-menu__menu-item--PaddingBottom) var(--pf-c-options-menu__menu-item--PaddingLeft);\n  font-size: var(--pf-c-options-menu__menu-item--FontSize);\n  color: var(--pf-c-options-menu__menu-item--Color);\n  white-space: nowrap;\n  background-color: var(--pf-c-options-menu__menu-item--BackgroundColor);\n  border: none; }\n  .pf-c-options-menu__menu-item:hover, .pf-c-options-menu__menu-item:focus {\n    text-decoration: none;\n    background-color: var(--pf-c-options-menu__menu-item--hover--BackgroundColor); }\n  .pf-c-options-menu__menu-item:disabled, .pf-c-options-menu__menu-item.pf-m-disabled {\n    color: var(--pf-c-options-menu__menu-item--disabled--Color);\n    pointer-events: none;\n    background-color: var(--pf-c-options-menu__menu-item--disabled--BackgroundColor); }\n\n.pf-c-options-menu__menu-item-icon {\n  align-self: center;\n  width: auto;\n  padding-left: var(--pf-c-options-menu__menu-item-icon--PaddingLeft);\n  margin-left: auto;\n  font-size: var(--pf-c-options-menu__menu-item-icon--FontSize);\n  color: var(--pf-c-options-menu__menu-item-icon--Color); }\n\n.pf-c-options-menu__group + .pf-c-options-menu__group {\n  padding-top: var(--pf-c-options-menu__group--group--PaddingTop); }\n\n.pf-c-options-menu__group-title {\n  padding-top: var(--pf-c-options-menu__group-title--PaddingTop);\n  padding-right: var(--pf-c-options-menu__group-title--PaddingRight);\n  padding-bottom: var(--pf-c-options-menu__group-title--PaddingBottom);\n  padding-left: var(--pf-c-options-menu__group-title--PaddingLeft);\n  font-size: var(--pf-c-options-menu__group-title--FontSize);\n  font-weight: var(--pf-c-options-menu__group-title--FontWeight);\n  color: var(--pf-c-options-menu__group-title--Color); }\n\n.pf-c-overflow-menu {\n  --pf-c-overflow-menu--spacer--base: var(--pf-global--spacer--md);\n  --pf-c-overflow-menu--spacer: var(--pf-global--spacer--sm);\n  --pf-c-overflow-menu__group--spacer: var(--pf-c-overflow-menu--spacer--base);\n  --pf-c-overflow-menu__item--spacer: var(--pf-c-overflow-menu--spacer--base);\n  --pf-c-overflow-menu--c-divider--m-vertical--spacer: var(--pf-c-overflow-menu--spacer--base);\n  --pf-c-overflow-menu__group--m-button-group--spacer: var(--pf-c-overflow-menu--spacer--base);\n  --pf-c-overflow-menu__group--m-button-group--space-items: var(--pf-global--spacer--sm);\n  --pf-c-overflow-menu__group--m-icon-button-group--spacer: var(--pf-c-overflow-menu--spacer--base);\n  --pf-c-overflow-menu__group--m-icon-button-group--space-items: 0;\n  display: inline-flex;\n  align-items: center; }\n\n.pf-c-overflow-menu__content {\n  display: flex;\n  align-items: center; }\n\n.pf-c-overflow-menu__group {\n  --pf-c-overflow-menu--spacer: var(--pf-c-overflow-menu__group--spacer);\n  display: flex;\n  align-items: center; }\n  .pf-c-overflow-menu__group.pf-m-button-group {\n    --pf-c-overflow-menu--spacer: var(--pf-c-overflow-menu__group--m-button-group--spacer); }\n    .pf-c-overflow-menu__group.pf-m-button-group > * {\n      --pf-c-overflow-menu--spacer: var(--pf-c-overflow-menu__group--m-button-group--space-items); }\n  .pf-c-overflow-menu__group.pf-m-icon-button-group {\n    --pf-c-overflow-menu--spacer: var(--pf-c-overflow-menu__group--m-icon-button-group--spacer); }\n    .pf-c-overflow-menu__group.pf-m-icon-button-group > * {\n      --pf-c-overflow-menu--spacer: var(--pf-c-overflow-menu__group--m-icon-button-group--space-items); }\n\n.pf-c-overflow-menu__item {\n  --pf-c-overflow-menu--spacer: var(--pf-c-overflow-menu__item--spacer); }\n\n.pf-c-overflow-menu__content,\n.pf-c-overflow-menu__control,\n.pf-c-overflow-menu__group,\n.pf-c-overflow-menu__item {\n  margin-right: var(--pf-c-overflow-menu--spacer); }\n  .pf-c-overflow-menu__content:last-child,\n  .pf-c-overflow-menu__control:last-child,\n  .pf-c-overflow-menu__group:last-child,\n  .pf-c-overflow-menu__item:last-child {\n    --pf-c-overflow-menu--spacer: 0; }\n\n.pf-c-overflow-menu > .pf-c-divider,\n.pf-c-overflow-menu__group > .pf-c-divider {\n  --pf-c-overflow-menu--spacer: var(--pf-c-overflow-menu--c-divider--m-vertical--spacer); }\n\n.pf-c-overflow-menu > .pf-c-divider.pf-m-vertical,\n.pf-c-overflow-menu__group > .pf-c-divider.pf-m-vertical {\n  margin-right: var(--pf-c-overflow-menu--spacer); }\n  .pf-c-overflow-menu > .pf-c-divider.pf-m-vertical:last-child,\n  .pf-c-overflow-menu__group > .pf-c-divider.pf-m-vertical:last-child {\n    --pf-c-overflow-menu--spacer: 0; }\n\n.pf-c-page {\n  --pf-c-page--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-page__header--BackgroundColor: var(--pf-global--BackgroundColor--dark-100);\n  --pf-c-page__header--ZIndex: var(--pf-global--ZIndex--md);\n  --pf-c-page__header--MinHeight: 4.75rem;\n  --pf-c-page__header-brand--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-page__header-brand--xl--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-page__header-brand--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-page__header-sidebar-toggle__c-button--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-page__header-sidebar-toggle__c-button--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-page__header-sidebar-toggle__c-button--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-page__header-sidebar-toggle__c-button--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-page__header-sidebar-toggle__c-button--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-page__header-sidebar-toggle__c-button--MarginLeft: calc(var(--pf-c-page__header-sidebar-toggle__c-button--PaddingLeft) * -1);\n  --pf-c-page__header-sidebar-toggle__c-button--FontSize: var(--pf-global--FontSize--2xl);\n  --pf-c-page__header-brand-link--c-brand--MaxHeight: 3.75rem;\n  --pf-c-page__header-nav--BackgroundColor: var(--pf-global--BackgroundColor--dark-300);\n  --pf-c-page__header-nav--xl--BackgroundColor: transparent;\n  --pf-c-page__header-nav--xl--PaddingRight: var(--pf-global--spacer--xl);\n  --pf-c-page__header-nav--xl--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-page__header-tools--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-page__header-tools--xl--MarginRight: var(--pf-global--spacer--lg);\n  --pf-c-page__header-tools--c-avatar--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-page__header-tools-group--MarginLeft: var(--pf-global--spacer--xl);\n  --pf-c-page__header-tools-group--Display: flex;\n  --pf-c-page__header-tools-item--Display: block;\n  --pf-c-page__header-tools-item--c-notification-badge--hover--BackgroundColor: var(--pf-global--BackgroundColor--dark-200);\n  --pf-c-page__header-tools--c-button--notification-badge--m-unread--after--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-page__header-tools--c-button--notification-badge--m-attention--after--BackgroundColor: var(--pf-global--danger-color--200);\n  --pf-c-page__header-tools--c-button--m-selected--notification-badge--m-unread--after--BackgroundColor: var(--pf-global--primary-color--200);\n  --pf-c-page__header-tools--c-button--m-selected--notification-badge--m-attention--after--BackgroundColor: var(--pf-global--danger-color--200);\n  --pf-c-page__header-tools--c-button--m-selected--before--Width: auto;\n  --pf-c-page__header-tools--c-button--m-selected--before--Height: auto;\n  --pf-c-page__header-tools--c-button--m-selected--before--BackgroundColor: var(--pf-global--BackgroundColor--dark-200);\n  --pf-c-page__header-tools--c-button--m-selected--before--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-page__header-tools--c-button--m-selected--c-notification-badge--m-unread--after--BorderColor: transparent;\n  --pf-c-page__sidebar--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-page__sidebar--Width: 80%;\n  --pf-c-page__sidebar--Width: 18.125rem;\n  --pf-c-page__sidebar--BackgroundColor: var(--pf-global--BackgroundColor--dark-300);\n  --pf-c-page__sidebar--m-light--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-page__sidebar--BoxShadow: var(--pf-global--BoxShadow--lg-right);\n  --pf-c-page__sidebar--Transition: var(--pf-global--Transition);\n  --pf-c-page__sidebar--TranslateX: -100%;\n  --pf-c-page__sidebar--TranslateZ: 0;\n  --pf-c-page__sidebar--m-expanded--TranslateX: 0;\n  --pf-c-page__sidebar--xl--TranslateX: 0;\n  --pf-c-page__sidebar-body--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-page__sidebar-body--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-page__main--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-page__main-section--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-page__main-section--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-page__main-section--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-page__main-section--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-page__main-section--xl--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-page__main-section--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-page__main-section--xl--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-page__main-section--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-page__main-breadcrumb--main-section--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-page__main-section--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-page__main-section--m-light--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-page__main-section--m-dark-100--BackgroundColor: var(--pf-global--BackgroundColor--dark-transparent-100);\n  --pf-c-page__main-section--m-dark-200--BackgroundColor: var(--pf-global--BackgroundColor--dark-transparent-200);\n  --pf-c-page--section--m-limit-width--MaxWidth: calc(125rem - var(--pf-c-page__sidebar--Width));\n  --pf-c-page--section--m-sticky-top--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-page--section--m-sticky-top--BoxShadow: var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-page--section--m-sticky-bottom--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-page--section--m-sticky-bottom--BoxShadow: var(--pf-global--BoxShadow--sm-top);\n  --pf-c-page--section--m-shadow-bottom--BoxShadow: var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-page--section--m-shadow-bottom--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-page--section--m-shadow-top--BoxShadow: var(--pf-global--BoxShadow--sm-top);\n  --pf-c-page--section--m-shadow-top--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-page__main-nav--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-page__main-nav--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-page__main-nav--PaddingRight: 0;\n  --pf-c-page__main-nav--PaddingLeft: 0;\n  --pf-c-page__main-nav--m-sticky-top--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-page__main-nav--xl--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-page__main-nav--xl--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-page__main-breadcrumb--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-page__main-breadcrumb--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-page__main-breadcrumb--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-page__main-breadcrumb--PaddingBottom: 0;\n  --pf-c-page__main-breadcrumb--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-page__main-breadcrumb--m-sticky-top--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-page__main-breadcrumb--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-page__main-breadcrumb--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-page__main-wizard--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-page__main-wizard--BorderTopColor: var(--pf-global--BorderColor--100);\n  --pf-c-page__main-wizard--BorderTopWidth: var(--pf-global--BorderWidth--sm);\n  display: grid;\n  height: 100%;\n  grid-template-columns: 1fr;\n  grid-template-rows: max-content 1fr;\n  grid-template-areas: "header" "main";\n  background-color: var(--pf-c-page--BackgroundColor); }\n  @media (min-width: 1200px) {\n    .pf-c-page {\n      --pf-c-page__header-brand--PaddingLeft: var(--pf-c-page__header-brand--xl--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-page {\n      --pf-c-page__header-nav--BackgroundColor: var(--pf-c-page__header-nav--xl--BackgroundColor);\n      --pf-c-page__header-nav--PaddingRight: var(--pf-c-page__header-nav--xl--PaddingRight);\n      --pf-c-page__header-nav--PaddingLeft: var(--pf-c-page__header-nav--xl--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-page {\n      --pf-c-page__header-tools--MarginRight: var(--pf-c-page__header-tools--xl--MarginRight); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-page {\n      --pf-c-page__sidebar--TranslateX: var(--pf-c-page__sidebar--xl--TranslateX); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-page {\n      --pf-c-page__main-section--PaddingTop: var(--pf-c-page__main-section--xl--PaddingTop);\n      --pf-c-page__main-section--PaddingRight: var(--pf-c-page__main-section--xl--PaddingRight);\n      --pf-c-page__main-section--PaddingBottom: var(--pf-c-page__main-section--xl--PaddingBottom);\n      --pf-c-page__main-section--PaddingLeft: var(--pf-c-page__main-section--xl--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-page {\n      --pf-c-page__main-nav--PaddingRight: var(--pf-c-page__main-nav--xl--PaddingRight);\n      --pf-c-page__main-nav--PaddingLeft: var(--pf-c-page__main-nav--xl--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-page {\n      --pf-c-page__main-breadcrumb--PaddingRight: var(--pf-c-page__main-breadcrumb--xl--PaddingRight);\n      --pf-c-page__main-breadcrumb--PaddingLeft: var(--pf-c-page__main-breadcrumb--xl--PaddingLeft); } }\n  @media (min-width: 1200px) {\n    .pf-c-page {\n      grid-template-columns: max-content 1fr;\n      grid-template-areas: "header header" "nav main"; } }\n\n.pf-c-page__header {\n  color: var(--pf-global--Color--100);\n  z-index: var(--pf-c-page__header--ZIndex);\n  grid-template-columns: auto auto;\n  display: grid;\n  grid-area: header;\n  align-items: center;\n  min-width: 0;\n  min-height: var(--pf-c-page__header--MinHeight);\n  background-color: var(--pf-c-page__header--BackgroundColor); }\n  .pf-c-page__header > * {\n    display: flex;\n    align-items: center; }\n  @media screen and (min-width: 992px) {\n    .pf-c-page__header {\n      grid-template-columns: auto 1fr auto; } }\n\n.pf-c-page__header-brand {\n  grid-column: 1 / 2;\n  padding-left: var(--pf-c-page__header-brand--PaddingLeft); }\n  @media (min-width: 1200px) {\n    .pf-c-page__header-brand {\n      padding-right: var(--pf-c-page__header-brand--xl--PaddingRight); } }\n\n.pf-c-page__header-brand-link {\n  display: flex;\n  flex: 1;\n  align-items: center; }\n  .pf-c-page__header-brand-link .pf-c-brand {\n    max-height: var(--pf-c-page__header-brand-link--c-brand--MaxHeight); }\n\n.pf-c-page__header-brand-toggle .pf-c-button {\n  padding: var(--pf-c-page__header-sidebar-toggle__c-button--PaddingTop) var(--pf-c-page__header-sidebar-toggle__c-button--PaddingRight) var(--pf-c-page__header-sidebar-toggle__c-button--PaddingBottom) var(--pf-c-page__header-sidebar-toggle__c-button--PaddingLeft);\n  margin-right: var(--pf-c-page__header-sidebar-toggle__c-button--MarginRight);\n  margin-left: var(--pf-c-page__header-sidebar-toggle__c-button--MarginLeft);\n  font-size: var(--pf-c-page__header-sidebar-toggle__c-button--FontSize);\n  line-height: 1; }\n\n.pf-c-page__header-nav {\n  align-self: stretch;\n  min-width: 0;\n  padding-right: var(--pf-c-page__header-nav--PaddingRight);\n  padding-left: var(--pf-c-page__header-nav--PaddingLeft);\n  background-color: var(--pf-c-page__header-nav--BackgroundColor);\n  grid-column: 1 / -1;\n  grid-row: 2 / 3; }\n  @media screen and (min-width: 1200px) {\n    .pf-c-page__header-nav {\n      grid-column: 2 / 3;\n      grid-row: 1 / 2; } }\n  .pf-c-page__header-nav .pf-c-nav {\n    align-self: stretch; }\n\n.pf-c-page__header-tools {\n  grid-column: 2 / 3;\n  margin-right: var(--pf-c-page__header-tools--MarginRight);\n  margin-left: auto; }\n  .pf-c-page__header-tools .pf-c-avatar {\n    margin-left: var(--pf-c-page__header-tools--c-avatar--MarginLeft); }\n  @media screen and (min-width: 992px) {\n    .pf-c-page__header-tools {\n      grid-column: 3 / 4; } }\n\n.pf-c-page__header-tools-group {\n  --pf-hidden-visible--visible--Display: var(--pf-c-page__header-tools-group--Display);\n  align-items: center; }\n  .pf-c-page__header-tools-group + .pf-c-page__header-tools-group {\n    margin-left: var(--pf-c-page__header-tools-group--MarginLeft); }\n\n.pf-c-page__header-tools-item {\n  --pf-hidden-visible--visible--Display: var(--pf-c-page__header-tools-item--Display); }\n  .pf-c-page__header-tools-item .pf-c-notification-badge.pf-m-read:hover {\n    --pf-c-notification-badge--after--BackgroundColor: var(--pf-c-page__header-tools-item--c-notification-badge--hover--BackgroundColor); }\n  .pf-c-page__header-tools-item.pf-m-selected .pf-c-button {\n    background-color: var(--pf-c-page__header-tools--c-button--m-selected--before--BackgroundColor);\n    border-radius: var(--pf-c-page__header-tools--c-button--m-selected--before--BorderRadius); }\n    .pf-c-page__header-tools-item.pf-m-selected .pf-c-button::before {\n      position: absolute;\n      top: 0;\n      right: 0;\n      bottom: 0;\n      left: 0;\n      width: var(--pf-c-page__header-tools--c-button--m-selected--before--Width);\n      height: var(--pf-c-page__header-tools--c-button--m-selected--before--Height);\n      content: ""; }\n    .pf-c-page__header-tools-item.pf-m-selected .pf-c-button .pf-c-notification-badge.pf-m-unread {\n      --pf-c-notification-badge--after--BackgroundColor: var(--pf-c-page__header-tools--c-button--m-selected--notification-badge--m-unread--after--BackgroundColor); }\n      .pf-c-page__header-tools-item.pf-m-selected .pf-c-button .pf-c-notification-badge.pf-m-unread::after {\n        border-color: var(--pf-c-page__header-tools--c-button--m-selected--c-notification-badge--m-unread--after--BorderColor); }\n    .pf-c-page__header-tools-item.pf-m-selected .pf-c-button .pf-c-notification-badge.pf-m-attention {\n      --pf-c-notification-badge--after--BackgroundColor: var(--pf-global--danger-color--200); }\n  .pf-c-page__header-tools-item .pf-c-button:focus .pf-c-notification-badge.pf-m-unread {\n    --pf-c-notification-badge--after--BackgroundColor: var(--pf-c-page__header-tools--c-button--notification-badge--m-unread--after--BackgroundColor); }\n  .pf-c-page__header-tools-item .pf-c-button:focus .pf-c-notification-badge.pf-m-attention {\n    --pf-c-notification-badge--after--BackgroundColor: var(--pf-c-page__header-tools--c-button--notification-badge--m-attention--after--BackgroundColor); }\n\n.pf-c-page__sidebar {\n  grid-area: nav;\n  grid-row-start: 2;\n  grid-column-start: 1;\n  z-index: var(--pf-c-page__sidebar--ZIndex);\n  width: var(--pf-c-page__sidebar--Width);\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-overflow-scrolling: touch;\n  background-color: var(--pf-c-page__sidebar--BackgroundColor);\n  transition: var(--pf-c-page__sidebar--Transition);\n  transform: translateX(var(--pf-c-page__sidebar--TranslateX)) translateZ(var(--pf-c-page__sidebar--TranslateZ)); }\n  @media screen and (min-width: 1200px) {\n    .pf-c-page__sidebar {\n      box-shadow: var(--pf-c-page__sidebar--BoxShadow); } }\n  .pf-c-page__sidebar.pf-m-expanded {\n    --pf-c-page__sidebar--TranslateX: var(--pf-c-page__sidebar--m-expanded--TranslateX);\n    box-shadow: var(--pf-c-page__sidebar--BoxShadow); }\n  .pf-c-page__sidebar.pf-m-collapsed {\n    max-width: 0;\n    overflow: hidden; }\n  .pf-c-page__sidebar.pf-m-light {\n    color: var(--pf-global--Color--100);\n    --pf-c-page__sidebar--BackgroundColor: var(--pf-c-page__sidebar--m-light--BackgroundColor); }\n\n.pf-c-page__sidebar-body {\n  padding-top: var(--pf-c-page__sidebar-body--PaddingTop);\n  padding-bottom: var(--pf-c-page__sidebar-body--PaddingBottom); }\n\n.pf-c-page__main-nav.pf-m-limit-width,\n.pf-c-page__main-breadcrumb.pf-m-limit-width,\n.pf-c-page__main-section.pf-m-limit-width,\n.pf-c-page__main-wizard.pf-m-limit-width {\n  display: flex;\n  flex-direction: column;\n  padding: 0; }\n  .pf-c-page__main-nav.pf-m-limit-width > .pf-c-page__main-body,\n  .pf-c-page__main-breadcrumb.pf-m-limit-width > .pf-c-page__main-body,\n  .pf-c-page__main-section.pf-m-limit-width > .pf-c-page__main-body,\n  .pf-c-page__main-wizard.pf-m-limit-width > .pf-c-page__main-body {\n    flex: 1;\n    max-width: var(--pf-c-page--section--m-limit-width--MaxWidth); }\n\n.pf-c-page__main-nav,\n.pf-c-page__main-breadcrumb,\n.pf-c-page__main-section,\n.pf-c-page__main-wizard,\n.pf-c-page__main-group {\n  flex-shrink: 0; }\n  .pf-c-page__main-nav.pf-m-sticky-top,\n  .pf-c-page__main-breadcrumb.pf-m-sticky-top,\n  .pf-c-page__main-section.pf-m-sticky-top,\n  .pf-c-page__main-wizard.pf-m-sticky-top,\n  .pf-c-page__main-group.pf-m-sticky-top {\n    position: sticky;\n    top: 0;\n    z-index: var(--pf-c-page--section--m-sticky-top--ZIndex);\n    box-shadow: var(--pf-c-page--section--m-sticky-top--BoxShadow); }\n  .pf-c-page__main-nav.pf-m-sticky-bottom,\n  .pf-c-page__main-breadcrumb.pf-m-sticky-bottom,\n  .pf-c-page__main-section.pf-m-sticky-bottom,\n  .pf-c-page__main-wizard.pf-m-sticky-bottom,\n  .pf-c-page__main-group.pf-m-sticky-bottom {\n    position: sticky;\n    bottom: 0;\n    z-index: var(--pf-c-page--section--m-sticky-bottom--ZIndex);\n    box-shadow: var(--pf-c-page--section--m-sticky-bottom--BoxShadow); }\n  .pf-c-page__main-nav.pf-m-overflow-scroll,\n  .pf-c-page__main-breadcrumb.pf-m-overflow-scroll,\n  .pf-c-page__main-section.pf-m-overflow-scroll,\n  .pf-c-page__main-wizard.pf-m-overflow-scroll,\n  .pf-c-page__main-group.pf-m-overflow-scroll {\n    position: relative;\n    flex-shrink: 1;\n    overflow: auto; }\n  .pf-c-page__main-nav.pf-m-shadow-bottom,\n  .pf-c-page__main-breadcrumb.pf-m-shadow-bottom,\n  .pf-c-page__main-section.pf-m-shadow-bottom,\n  .pf-c-page__main-wizard.pf-m-shadow-bottom,\n  .pf-c-page__main-group.pf-m-shadow-bottom {\n    z-index: var(--pf-c-page--section--m-shadow-bottom--ZIndex);\n    box-shadow: var(--pf-c-page--section--m-shadow-bottom--BoxShadow); }\n  .pf-c-page__main-nav.pf-m-shadow-top,\n  .pf-c-page__main-breadcrumb.pf-m-shadow-top,\n  .pf-c-page__main-section.pf-m-shadow-top,\n  .pf-c-page__main-wizard.pf-m-shadow-top,\n  .pf-c-page__main-group.pf-m-shadow-top {\n    z-index: var(--pf-c-page--section--m-shadow-top--ZIndex);\n    box-shadow: var(--pf-c-page--section--m-shadow-top--BoxShadow); }\n\n.pf-c-page__main,\n.pf-c-page__drawer {\n  grid-area: main;\n  z-index: var(--pf-c-page__main--ZIndex);\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-overflow-scrolling: touch; }\n  .pf-c-page__main:focus,\n  .pf-c-page__drawer:focus {\n    outline: 0; }\n\n.pf-c-page__main,\n.pf-c-page__main-drawer,\n.pf-c-page__main-group {\n  display: flex;\n  flex-direction: column; }\n\n.pf-c-page__main-nav {\n  padding-top: var(--pf-c-page__main-nav--PaddingTop);\n  padding-right: var(--pf-c-page__main-nav--PaddingRight);\n  padding-left: var(--pf-c-page__main-nav--PaddingLeft);\n  background-color: var(--pf-c-page__main-nav--BackgroundColor); }\n  .pf-c-page__main-nav.pf-m-sticky-top,\n  .pf-c-page__main-group.pf-m-sticky-top .pf-c-page__main-nav:last-child {\n    padding-bottom: var(--pf-c-page__main-nav--m-sticky-top--PaddingBottom); }\n\n.pf-c-page__main-breadcrumb {\n  padding: var(--pf-c-page__main-breadcrumb--PaddingTop) var(--pf-c-page__main-breadcrumb--PaddingRight) var(--pf-c-page__main-breadcrumb--PaddingBottom) var(--pf-c-page__main-breadcrumb--PaddingLeft);\n  background-color: var(--pf-c-page__main-breadcrumb--BackgroundColor); }\n  .pf-c-page__main-breadcrumb + .pf-c-page__main-section {\n    --pf-c-page__main-section--PaddingTop: var(--pf-c-page__main-breadcrumb--main-section--PaddingTop); }\n  .pf-c-page__main-breadcrumb.pf-m-sticky-top,\n  .pf-c-page__main-group.pf-m-sticky-top .pf-c-page__main-breadcrumb:last-child {\n    --pf-c-page__main-breadcrumb--PaddingBottom: var(--pf-c-page__main-breadcrumb--m-sticky-top--PaddingBottom); }\n\n.pf-c-page__main-section:last-child, .pf-c-page__main-section:only-child, .pf-c-page__main-section.pf-m-fill,\n.pf-c-page__main-group:last-child,\n.pf-c-page__main-group:only-child,\n.pf-c-page__main-group.pf-m-fill,\n.pf-c-page__main-wizard:last-child,\n.pf-c-page__main-wizard:only-child,\n.pf-c-page__main-wizard.pf-m-fill {\n  flex-grow: 1; }\n\n.pf-c-page__main-section.pf-m-no-fill,\n.pf-c-page__main-group.pf-m-no-fill,\n.pf-c-page__main-wizard.pf-m-no-fill {\n  flex-grow: 0; }\n\n.pf-c-page__main-section {\n  padding: var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft);\n  background-color: var(--pf-c-page__main-section--BackgroundColor); }\n  .pf-c-page__main-section.pf-m-light {\n    --pf-c-page__main-section--BackgroundColor: var(--pf-c-page__main-section--m-light--BackgroundColor); }\n  .pf-c-page__main-section[class*="pf-m-dark-"] {\n    color: var(--pf-global--Color--100); }\n  .pf-c-page__main-section.pf-m-dark-100 {\n    --pf-c-page__main-section--BackgroundColor: var(--pf-c-page__main-section--m-dark-100--BackgroundColor); }\n  .pf-c-page__main-section.pf-m-dark-200 {\n    --pf-c-page__main-section--BackgroundColor: var(--pf-c-page__main-section--m-dark-200--BackgroundColor); }\n  .pf-c-page__main-section.pf-m-padding {\n    padding: var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft); }\n  .pf-c-page__main-section.pf-m-no-padding {\n    --pf-c-page__main-section--PaddingTop: 0;\n    --pf-c-page__main-section--PaddingRight: 0;\n    --pf-c-page__main-section--PaddingBottom: 0;\n    --pf-c-page__main-section--PaddingLeft: 0; }\n  @media (min-width: 576px) {\n    .pf-c-page__main-section.pf-m-padding-on-sm {\n      padding: var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft); }\n    .pf-c-page__main-section.pf-m-no-padding-on-sm {\n      --pf-c-page__main-section--PaddingTop: 0;\n      --pf-c-page__main-section--PaddingRight: 0;\n      --pf-c-page__main-section--PaddingBottom: 0;\n      --pf-c-page__main-section--PaddingLeft: 0; } }\n  @media (min-width: 768px) {\n    .pf-c-page__main-section.pf-m-padding-on-md {\n      padding: var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft); }\n    .pf-c-page__main-section.pf-m-no-padding-on-md {\n      --pf-c-page__main-section--PaddingTop: 0;\n      --pf-c-page__main-section--PaddingRight: 0;\n      --pf-c-page__main-section--PaddingBottom: 0;\n      --pf-c-page__main-section--PaddingLeft: 0; } }\n  @media (min-width: 992px) {\n    .pf-c-page__main-section.pf-m-padding-on-lg {\n      padding: var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft); }\n    .pf-c-page__main-section.pf-m-no-padding-on-lg {\n      --pf-c-page__main-section--PaddingTop: 0;\n      --pf-c-page__main-section--PaddingRight: 0;\n      --pf-c-page__main-section--PaddingBottom: 0;\n      --pf-c-page__main-section--PaddingLeft: 0; } }\n  @media (min-width: 1200px) {\n    .pf-c-page__main-section.pf-m-padding-on-xl {\n      padding: var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft); }\n    .pf-c-page__main-section.pf-m-no-padding-on-xl {\n      --pf-c-page__main-section--PaddingTop: 0;\n      --pf-c-page__main-section--PaddingRight: 0;\n      --pf-c-page__main-section--PaddingBottom: 0;\n      --pf-c-page__main-section--PaddingLeft: 0; } }\n  @media (min-width: 1450px) {\n    .pf-c-page__main-section.pf-m-padding-on-2xl {\n      padding: var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft); }\n    .pf-c-page__main-section.pf-m-no-padding-on-2xl {\n      --pf-c-page__main-section--PaddingTop: 0;\n      --pf-c-page__main-section--PaddingRight: 0;\n      --pf-c-page__main-section--PaddingBottom: 0;\n      --pf-c-page__main-section--PaddingLeft: 0; } }\n\n.pf-c-page__main-wizard {\n  flex-grow: 1;\n  background-color: var(--pf-c-page__main-wizard--BackgroundColor);\n  border-top: var(--pf-c-page__main-wizard--BorderTopWidth) solid var(--pf-c-page__main-wizard--BorderTopColor); }\n\n.pf-c-page__main-group {\n  flex-shrink: 0; }\n\n.pf-c-page__main-nav .pf-c-page__main-body {\n  padding-top: var(--pf-c-page__main-nav--PaddingTop);\n  padding-right: var(--pf-c-page__main-nav--PaddingRight);\n  padding-left: var(--pf-c-page__main-nav--PaddingLeft); }\n\n.pf-c-page__main-breadcrumb .pf-c-page__main-body {\n  padding: var(--pf-c-page__main-breadcrumb--PaddingTop) var(--pf-c-page__main-breadcrumb--PaddingRight) var(--pf-c-page__main-breadcrumb--PaddingBottom) var(--pf-c-page__main-breadcrumb--PaddingLeft); }\n\n.pf-c-page__main-section .pf-c-page__main-body {\n  padding: var(--pf-c-page__main-section--PaddingTop) var(--pf-c-page__main-section--PaddingRight) var(--pf-c-page__main-section--PaddingBottom) var(--pf-c-page__main-section--PaddingLeft); }\n\n.pf-c-page__drawer {\n  grid-area: main; }\n  .pf-c-page__drawer > .pf-c-drawer {\n    flex: 1 0 auto; }\n\n.pf-c-pagination {\n  --pf-c-pagination--child--MarginRight: var(--pf-global--spacer--lg);\n  --pf-c-pagination--m-bottom--child--MarginRight: 0;\n  --pf-c-pagination--m-bottom--child--md--MarginRight: var(--pf-global--spacer--lg);\n  --pf-c-pagination--m-compact--child--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-pagination--c-options-menu__toggle--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-pagination__nav-control--c-button--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-pagination__nav-control--c-button--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-pagination__nav-control--c-button--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-pagination--m-bottom__nav-control--c-button--OutlineOffset: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-pagination--m-bottom__nav-control--c-button--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-bottom__nav-control--c-button--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-bottom__nav-control--c-button--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-bottom__nav-control--c-button--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-pagination--m-compact__nav-control--nav-control--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-pagination__nav-page-select--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-pagination__nav-page-select--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-pagination__nav-page-select--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-pagination__nav-page-select--child--MarginRight: var(--pf-global--spacer--xs);\n  --pf-c-pagination__nav-page-select--c-form-control--width-base: 3.5ch;\n  --pf-c-pagination__nav-page-select--c-form-control--width-chars: 2;\n  --pf-c-pagination__nav-page-select--c-form-control--Width: calc(var(--pf-c-pagination__nav-page-select--c-form-control--width-base) + (var(--pf-c-pagination__nav-page-select--c-form-control--width-chars) * 1ch));\n  --pf-c-pagination--m-sticky--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-pagination--m-sticky--BoxShadow: var(--pf-global--BoxShadow--sm-bottom);\n  --pf-c-pagination--m-sticky--md--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-sticky--md--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-sticky--md--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-sticky--md--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-sticky--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-pagination--m-sticky--Top: 0;\n  --pf-c-pagination--m-bottom--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-pagination--m-bottom--BoxShadow: var(--pf-global--BoxShadow--sm-top);\n  --pf-c-pagination--m-bottom--Bottom: 0;\n  --pf-c-pagination--m-bottom--md--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-bottom--md--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-bottom--md--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-bottom--md--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-pagination--m-bottom--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-pagination--m-bottom--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-pagination--m-bottom--m-sticky--BoxShadow: var(--pf-global--BoxShadow--sm-top);\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: flex-end; }\n  @media screen and (min-width: 768px) {\n    .pf-c-pagination {\n      --pf-c-pagination--m-bottom__nav-control--c-button--PaddingTop: var(--pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingTop);\n      --pf-c-pagination--m-bottom__nav-control--c-button--PaddingRight: var(--pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingRight);\n      --pf-c-pagination--m-bottom__nav-control--c-button--PaddingBottom: var(--pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingBottom);\n      --pf-c-pagination--m-bottom__nav-control--c-button--PaddingLeft: var(--pf-c-pagination--m-bottom__nav-control--c-button--md--PaddingLeft);\n      --pf-c-pagination--m-bottom--child--MarginRight: var(--pf-c-pagination--m-bottom--child--md--MarginRight);\n      --pf-c-pagination--m-bottom__nav-control--c-button--OutlineOffset: 0;\n      --pf-c-pagination--m-bottom--BoxShadow: none; } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-pagination {\n      --pf-c-pagination--m-bottom--md--PaddingRight: var(--pf-c-pagination--m-bottom--xl--PaddingRight);\n      --pf-c-pagination--m-bottom--md--PaddingLeft: var(--pf-c-pagination--m-bottom--xl--PaddingLeft); } }\n  .pf-c-pagination > *:not(:last-child):not(.pf-c-pagination__total-items) {\n    margin-right: var(--pf-c-pagination--child--MarginRight); }\n  .pf-c-pagination:not(.pf-m-bottom) .pf-c-options-menu,\n  .pf-c-pagination:not(.pf-m-bottom) .pf-c-pagination__nav {\n    display: none;\n    visibility: hidden; }\n    @media screen and (min-width: 768px) {\n      .pf-c-pagination:not(.pf-m-bottom) .pf-c-options-menu,\n      .pf-c-pagination:not(.pf-m-bottom) .pf-c-pagination__nav {\n        display: flex;\n        visibility: visible; } }\n  .pf-c-pagination.pf-m-bottom {\n    --pf-c-pagination--child--MarginRight: var(--pf-c-pagination--m-bottom--child--MarginRight);\n    --pf-c-pagination__nav-control--c-button--PaddingRight: var(--pf-c-pagination--m-bottom__nav-control--c-button--PaddingRight);\n    --pf-c-pagination__nav-control--c-button--PaddingLeft: var(--pf-c-pagination--m-bottom__nav-control--c-button--PaddingRight);\n    --pf-c-pagination--m-sticky--BoxShadow: var(--pf-c-pagination--m-bottom--m-sticky--BoxShadow);\n    --pf-c-pagination--m-sticky--Top: auto;\n    position: sticky;\n    bottom: var(--pf-c-pagination--m-bottom--Bottom);\n    justify-content: center;\n    background-color: var(--pf-c-pagination--m-bottom--BackgroundColor);\n    box-shadow: var(--pf-c-pagination--m-bottom--BoxShadow); }\n    .pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-control .pf-c-button {\n      --pf-c-button--PaddingTop: var(--pf-c-pagination--m-bottom__nav-control--c-button--PaddingTop);\n      --pf-c-button--PaddingBottom: var(--pf-c-pagination--m-bottom__nav-control--c-button--PaddingBottom);\n      outline-offset: var(--pf-c-pagination--m-bottom__nav-control--c-button--OutlineOffset); }\n    .pf-c-pagination.pf-m-bottom.pf-m-static {\n      --pf-c-pagination--m-bottom--MarginTop: 0;\n      --pf-c-pagination--m-bottom--BorderTopWidth: 0;\n      position: relative;\n      box-shadow: none; }\n    .pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-control.pf-m-first,\n    .pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-control.pf-m-last,\n    .pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-page-select {\n      display: none;\n      visibility: hidden; }\n    .pf-c-pagination.pf-m-bottom .pf-c-options-menu {\n      position: absolute; }\n    .pf-c-pagination.pf-m-bottom .pf-c-pagination__nav {\n      display: flex;\n      flex-basis: 100%;\n      justify-content: space-between; }\n    @media screen and (min-width: 768px) {\n      .pf-c-pagination.pf-m-bottom {\n        --pf-c-pagination--m-bottom--BorderTopWidth: 0;\n        --pf-c-pagination--m-bottom--MarginTop: 0;\n        --pf-c-pagination--m-bottom--Bottom: auto;\n        position: relative;\n        justify-content: flex-end;\n        padding: var(--pf-c-pagination--m-bottom--md--PaddingTop) var(--pf-c-pagination--m-bottom--md--PaddingRight) var(--pf-c-pagination--m-bottom--md--PaddingBottom) var(--pf-c-pagination--m-bottom--md--PaddingLeft); }\n        .pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-control.pf-m-first,\n        .pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-control.pf-m-last,\n        .pf-c-pagination.pf-m-bottom .pf-c-pagination__nav-page-select {\n          display: block;\n          visibility: visible; }\n        .pf-c-pagination.pf-m-bottom .pf-c-options-menu {\n          position: relative; }\n        .pf-c-pagination.pf-m-bottom .pf-c-pagination__nav {\n          display: inline-flex;\n          flex-basis: auto; } }\n  .pf-c-pagination.pf-m-sticky {\n    --pf-c-pagination--m-bottom--Bottom: 0;\n    position: sticky;\n    top: var(--pf-c-pagination--m-sticky--Top);\n    z-index: var(--pf-c-pagination--m-sticky--ZIndex);\n    padding-top: var(--pf-c-pagination--m-sticky--PaddingTop);\n    padding-right: var(--pf-c-pagination--m-sticky--PaddingRight);\n    padding-bottom: var(--pf-c-pagination--m-sticky--PaddingBottom);\n    padding-left: var(--pf-c-pagination--m-sticky--PaddingLeft);\n    background-color: var(--pf-c-pagination--m-sticky--BackgroundColor);\n    box-shadow: var(--pf-c-pagination--m-sticky--BoxShadow); }\n    @media screen and (min-width: 768px) {\n      .pf-c-pagination.pf-m-sticky {\n        padding: var(--pf-c-pagination--m-sticky--md--PaddingTop) var(--pf-c-pagination--m-sticky--md--PaddingRight) var(--pf-c-pagination--m-sticky--md--PaddingBottom) var(--pf-c-pagination--m-sticky--md--PaddingLeft); } }\n  .pf-c-pagination .pf-c-options-menu__toggle {\n    font-size: var(--pf-c-pagination--c-options-menu__toggle--FontSize); }\n  .pf-c-pagination.pf-m-compact {\n    --pf-c-pagination--child--MarginRight: var(--pf-c-pagination--m-compact--child--MarginRight); }\n\n.pf-c-pagination__nav {\n  display: inline-flex;\n  justify-content: flex-end; }\n\n.pf-c-pagination__nav-control .pf-c-button {\n  padding-right: var(--pf-c-pagination__nav-control--c-button--PaddingRight);\n  padding-left: var(--pf-c-pagination__nav-control--c-button--PaddingLeft);\n  font-size: var(--pf-c-pagination__nav-control--c-button--FontSize); }\n\n.pf-c-pagination.pf-m-compact .pf-c-pagination__nav-control + .pf-c-pagination__nav-control {\n  margin-left: var(--pf-c-pagination--m-compact__nav-control--nav-control--MarginLeft); }\n\n.pf-c-pagination__nav-page-select {\n  display: flex;\n  align-items: center;\n  padding-right: var(--pf-c-pagination__nav-page-select--PaddingRight);\n  padding-left: var(--pf-c-pagination__nav-page-select--PaddingLeft); }\n  .pf-c-pagination__nav-page-select > * {\n    font-size: var(--pf-c-pagination__nav-page-select--FontSize);\n    white-space: nowrap; }\n    .pf-c-pagination__nav-page-select > *:not(:last-child) {\n      margin-right: var(--pf-c-pagination__nav-page-select--child--MarginRight); }\n  .pf-c-pagination__nav-page-select .pf-c-form-control {\n    width: var(--pf-c-pagination__nav-page-select--c-form-control--Width); }\n\n@media screen and (min-width: 768px) {\n  .pf-c-pagination__total-items {\n    display: none;\n    visibility: hidden; } }\n\n.pf-c-popover {\n  --pf-c-popover--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-popover--MinWidth: calc(var(--pf-c-popover__content--PaddingLeft) + var(--pf-c-popover__content--PaddingRight) + 18.75rem);\n  --pf-c-popover--MaxWidth: calc(var(--pf-c-popover__content--PaddingLeft) + var(--pf-c-popover__content--PaddingRight) + 18.75rem);\n  --pf-c-popover--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-popover__content--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-popover__content--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-popover__content--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-popover__content--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-popover__content--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-popover__arrow--Width: var(--pf-global--arrow--width-lg);\n  --pf-c-popover__arrow--Height: var(--pf-global--arrow--width-lg);\n  --pf-c-popover__arrow--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-popover__arrow--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-popover__arrow--m-top--TranslateX: -50%;\n  --pf-c-popover__arrow--m-top--TranslateY: 50%;\n  --pf-c-popover__arrow--m-top--Rotate: 45deg;\n  --pf-c-popover__arrow--m-right--TranslateX: -50%;\n  --pf-c-popover__arrow--m-right--TranslateY: -50%;\n  --pf-c-popover__arrow--m-right--Rotate: 45deg;\n  --pf-c-popover__arrow--m-bottom--TranslateX: -50%;\n  --pf-c-popover__arrow--m-bottom--TranslateY: -50%;\n  --pf-c-popover__arrow--m-bottom--Rotate: 45deg;\n  --pf-c-popover__arrow--m-left--TranslateX: 50%;\n  --pf-c-popover__arrow--m-left--TranslateY: -50%;\n  --pf-c-popover__arrow--m-left--Rotate: 45deg;\n  --pf-c-popover--c-button--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-popover--c-button--Top: calc(var(--pf-c-popover__content--PaddingTop) - var(--pf-global--spacer--form-element));\n  --pf-c-popover--c-button--Right: var(--pf-global--spacer--md);\n  --pf-c-popover--c-button--sibling--PaddingRight: var(--pf-global--spacer--2xl);\n  --pf-c-popover--c-title--MarginBottom: var(--pf-global--spacer--sm);\n  --pf-c-popover__footer--MarginTop: var(--pf-global--spacer--md);\n  position: relative;\n  min-width: var(--pf-c-popover--MinWidth);\n  max-width: var(--pf-c-popover--MaxWidth);\n  font-size: var(--pf-c-popover--FontSize);\n  box-shadow: var(--pf-c-popover--BoxShadow); }\n  .pf-c-popover.pf-m-no-padding {\n    --pf-c-popover__content--PaddingTop: 0px;\n    --pf-c-popover__content--PaddingRight: 0px;\n    --pf-c-popover__content--PaddingBottom: 0px;\n    --pf-c-popover__content--PaddingLeft: 0px; }\n  .pf-c-popover.pf-m-width-auto {\n    --pf-c-popover--MinWidth: auto;\n    --pf-c-popover--MaxWidth: none; }\n  .pf-c-popover.pf-m-top .pf-c-popover__arrow {\n    bottom: 0;\n    left: 50%;\n    transform: translateX(var(--pf-c-popover__arrow--m-top--TranslateX)) translateY(var(--pf-c-popover__arrow--m-top--TranslateY)) rotate(var(--pf-c-popover__arrow--m-top--Rotate)); }\n  .pf-c-popover.pf-m-bottom .pf-c-popover__arrow {\n    top: 0;\n    left: 50%;\n    transform: translateX(var(--pf-c-popover__arrow--m-bottom--TranslateX)) translateY(var(--pf-c-popover__arrow--m-bottom--TranslateY)) rotate(var(--pf-c-popover__arrow--m-bottom--Rotate)); }\n  .pf-c-popover.pf-m-left .pf-c-popover__arrow {\n    top: 50%;\n    right: 0;\n    transform: translateX(var(--pf-c-popover__arrow--m-left--TranslateX)) translateY(var(--pf-c-popover__arrow--m-left--TranslateY)) rotate(var(--pf-c-popover__arrow--m-left--Rotate)); }\n  .pf-c-popover.pf-m-right .pf-c-popover__arrow {\n    top: 50%;\n    left: 0;\n    transform: translateX(var(--pf-c-popover__arrow--m-right--TranslateX)) translateY(var(--pf-c-popover__arrow--m-right--TranslateY)) rotate(var(--pf-c-popover__arrow--m-right--Rotate)); }\n\n.pf-c-popover__content {\n  position: relative;\n  padding: var(--pf-c-popover__content--PaddingTop) var(--pf-c-popover__content--PaddingRight) var(--pf-c-popover__content--PaddingBottom) var(--pf-c-popover__content--PaddingLeft);\n  background-color: var(--pf-c-popover__content--BackgroundColor); }\n  .pf-c-popover__content > .pf-c-title {\n    margin-bottom: var(--pf-c-popover--c-title--MarginBottom); }\n  .pf-c-popover__content > .pf-c-button {\n    position: absolute;\n    top: var(--pf-c-popover--c-button--Top);\n    right: var(--pf-c-popover--c-button--Right); }\n    .pf-c-popover__content > .pf-c-button + * {\n      padding-right: var(--pf-c-popover--c-button--sibling--PaddingRight); }\n\n.pf-c-popover__arrow {\n  position: absolute;\n  width: var(--pf-c-popover__arrow--Width);\n  height: var(--pf-c-popover__arrow--Height);\n  pointer-events: none;\n  background-color: var(--pf-c-popover__arrow--BackgroundColor);\n  box-shadow: var(--pf-c-popover__arrow--BoxShadow); }\n\n.pf-c-popover__body {\n  word-wrap: break-word; }\n\n.pf-c-popover__footer {\n  margin-top: var(--pf-c-popover__footer--MarginTop); }\n\n.pf-c-progress {\n  --pf-c-progress--GridGap: var(--pf-global--spacer--md);\n  --pf-c-progress__bar--before--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-progress__bar--Height: var(--pf-global--spacer--md);\n  --pf-c-progress__bar--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-progress__status-icon--Color: var(--pf-global--Color--100);\n  --pf-c-progress__status-icon--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-progress__bar--before--Opacity: .2;\n  --pf-c-progress__indicator--Height: var(--pf-c-progress__bar--Height);\n  --pf-c-progress__indicator--BackgroundColor: var(--pf-c-progress__bar--before--BackgroundColor);\n  --pf-c-progress--m-success__bar--BackgroundColor: var(--pf-global--success-color--100);\n  --pf-c-progress--m-warning__bar--BackgroundColor: var(--pf-global--warning-color--100);\n  --pf-c-progress--m-danger__bar--BackgroundColor: var(--pf-global--danger-color--100);\n  --pf-c-progress--m-success__status-icon--Color: var(--pf-global--success-color--100);\n  --pf-c-progress--m-warning__status-icon--Color: var(--pf-global--warning-color--100);\n  --pf-c-progress--m-danger__status-icon--Color: var(--pf-global--danger-color--100);\n  --pf-c-progress--m-inside__indicator--MinWidth: var(--pf-global--spacer--xl);\n  --pf-c-progress--m-inside__measure--Color: var(--pf-global--Color--light-100);\n  --pf-c-progress--m-success--m-inside__measure--Color: var(--pf-global--Color--light-100);\n  --pf-c-progress--m-warning--m-inside__measure--Color: var(--pf-global--Color--dark-100);\n  --pf-c-progress--m-inside__measure--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-progress--m-outside__measure--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-progress--m-sm__bar--Height: var(--pf-global--spacer--sm);\n  --pf-c-progress--m-sm__description--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-progress--m-sm__measure--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-progress--m-lg__bar--Height: var(--pf-global--spacer--lg);\n  display: grid;\n  align-items: end;\n  grid-gap: var(--pf-c-progress--GridGap);\n  grid-template-columns: auto auto;\n  grid-template-rows: 1fr auto; }\n  .pf-c-progress.pf-m-sm {\n    --pf-c-progress__bar--Height: var(--pf-c-progress--m-sm__bar--Height); }\n    .pf-c-progress.pf-m-sm .pf-c-progress__description {\n      font-size: var(--pf-c-progress--m-sm__description--FontSize); }\n    .pf-c-progress.pf-m-sm .pf-c-progress__measure {\n      font-size: var(--pf-c-progress--m-sm__measure--FontSize); }\n  .pf-c-progress.pf-m-lg {\n    --pf-c-progress__bar--Height: var(--pf-c-progress--m-lg__bar--Height); }\n  .pf-c-progress.pf-m-inside .pf-c-progress__indicator {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    min-width: var(--pf-c-progress--m-inside__indicator--MinWidth); }\n  .pf-c-progress.pf-m-inside .pf-c-progress__measure {\n    font-size: var(--pf-c-progress--m-inside__measure--FontSize);\n    color: var(--pf-c-progress--m-inside__measure--Color);\n    text-align: center; }\n  .pf-c-progress.pf-m-outside .pf-c-progress__description {\n    grid-column: 1 / 3; }\n  .pf-c-progress.pf-m-outside .pf-c-progress__status {\n    grid-column: 2 / 3;\n    grid-row: 2 / 3;\n    align-self: center; }\n  .pf-c-progress.pf-m-outside .pf-c-progress__measure {\n    font-size: var(--pf-c-progress--m-outside__measure--FontSize); }\n  .pf-c-progress.pf-m-outside .pf-c-progress__bar,\n  .pf-c-progress.pf-m-outside .pf-c-progress__indicator {\n    grid-column: 1 / 2; }\n  .pf-c-progress.pf-m-singleline {\n    grid-template-rows: 1fr; }\n    .pf-c-progress.pf-m-singleline .pf-c-progress__description {\n      display: none;\n      visibility: hidden; }\n    .pf-c-progress.pf-m-singleline .pf-c-progress__bar {\n      grid-row: 1 / 2;\n      grid-column: 1 / 2; }\n    .pf-c-progress.pf-m-singleline .pf-c-progress__status {\n      grid-row: 1 / 2;\n      grid-column: 2 / 3; }\n  .pf-c-progress.pf-m-outside, .pf-c-progress.pf-m-singleline {\n    grid-template-columns: 1fr fit-content(50%); }\n  .pf-c-progress.pf-m-success {\n    --pf-c-progress__bar--before--BackgroundColor: var(--pf-c-progress--m-success__bar--BackgroundColor);\n    --pf-c-progress__status-icon--Color: var(--pf-c-progress--m-success__status-icon--Color);\n    --pf-c-progress--m-inside__measure--Color: var(--pf-c-progress--m-success--m-inside__measure--Color); }\n  .pf-c-progress.pf-m-warning {\n    --pf-c-progress__bar--before--BackgroundColor: var(--pf-c-progress--m-warning__bar--BackgroundColor);\n    --pf-c-progress__status-icon--Color: var(--pf-c-progress--m-warning__status-icon--Color);\n    --pf-c-progress--m-inside__measure--Color: var(--pf-c-progress--m-warning--m-inside__measure--Color); }\n  .pf-c-progress.pf-m-danger {\n    --pf-c-progress__bar--before--BackgroundColor: var(--pf-c-progress--m-danger__bar--BackgroundColor);\n    --pf-c-progress__status-icon--Color: var(--pf-c-progress--m-danger__status-icon--Color); }\n\n.pf-c-progress__description {\n  word-break: break-word;\n  grid-column: 1 / 2; }\n  .pf-c-progress__description.pf-m-truncate {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n\n.pf-c-progress__status {\n  grid-column: 2 / 3;\n  grid-row: 1 / 2;\n  text-align: right;\n  word-break: break-word; }\n\n.pf-c-progress__status-icon {\n  margin-left: var(--pf-c-progress__status-icon--MarginLeft);\n  color: var(--pf-c-progress__status-icon--Color); }\n\n.pf-c-progress__bar {\n  position: relative;\n  grid-column: 1 / 3;\n  grid-row: 2 / 3;\n  align-self: center;\n  height: var(--pf-c-progress__bar--Height);\n  background-color: var(--pf-c-progress__bar--BackgroundColor); }\n  .pf-c-progress__bar::before {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    content: "";\n    background-color: var(--pf-c-progress__bar--before--BackgroundColor);\n    opacity: var(--pf-c-progress__bar--before--Opacity); }\n\n.pf-c-progress__indicator {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: var(--pf-c-progress__indicator--Height);\n  background-color: var(--pf-c-progress__indicator--BackgroundColor); }\n\n.pf-c-radio {\n  --pf-c-radio--GridGap: var(--pf-global--spacer--xs) var(--pf-global--spacer--sm);\n  --pf-c-radio__label--disabled--Color: var(--pf-global--disabled-color--100);\n  --pf-c-radio__label--Color: var(--pf-global--Color--100);\n  --pf-c-radio__label--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-radio__label--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-radio__label--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-radio__input--MarginTop: -0.1875rem;\n  --pf-c-radio__input--first-child--MarginLeft: 0.0625rem;\n  --pf-c-radio__input--last-child--MarginRight: 0.0625rem;\n  --pf-c-radio__description--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-radio__description--Color: var(--pf-global--Color--200);\n  display: grid;\n  grid-template-columns: auto 1fr;\n  grid-gap: var(--pf-c-radio--GridGap);\n  align-items: center;\n  justify-items: start; }\n\n.pf-c-radio__label {\n  font-size: var(--pf-c-radio__label--FontSize);\n  font-weight: var(--pf-c-radio__label--FontWeight);\n  line-height: var(--pf-c-radio__label--LineHeight);\n  color: var(--pf-c-radio__label--Color); }\n\n.pf-c-radio__input {\n  margin-top: var(--pf-c-radio__input--MarginTop); }\n  .pf-c-radio__input:first-child {\n    margin-left: var(--pf-c-radio__input--first-child--MarginLeft); }\n  .pf-c-radio__input:last-child {\n    margin-right: var(--pf-c-radio__input--last-child--MarginRight); }\n\n.pf-c-radio__description {\n  grid-column: 2;\n  font-size: var(--pf-c-radio__description--FontSize);\n  color: var(--pf-c-radio__description--Color); }\n\nlabel.pf-c-radio, .pf-c-radio__label,\n.pf-c-radio__input {\n  cursor: pointer; }\n\n.pf-c-radio__label:disabled, .pf-c-radio__label.pf-m-disabled,\n.pf-c-radio__input:disabled,\n.pf-c-radio__input.pf-m-disabled {\n  --pf-c-radio__label--Color: var(--pf-c-radio__label--disabled--Color);\n  cursor: not-allowed; }\n\n.pf-c-search-input {\n  --pf-c-search-input__text--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-search-input__text--before--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-search-input__text--after--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-search-input__text--after--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-search-input--hover__text--after--BorderBottomColor: var(--pf-global--primary-color--100);\n  --pf-c-search-input__text--focus-within--after--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-search-input__text--focus-within--after--BorderBottomColor: var(--pf-global--primary-color--100);\n  --pf-c-search-input__text-input--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-search-input__text-input--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-search-input__text-input--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-search-input__text-input--PaddingLeft: var(--pf-global--spacer--xl);\n  --pf-c-search-input__text-input--MinWidth: 6ch;\n  --pf-c-search-input__icon--Left: var(--pf-global--spacer--sm);\n  --pf-c-search-input__icon--Color: var(--pf-global--Color--200);\n  --pf-c-search-input__text--hover__icon--Color: var(--pf-global--Color--100);\n  --pf-c-search-input__icon--TranslateY: -50%;\n  --pf-c-search-input__utilities--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-search-input__utilities--MarginLeft: var(--pf-global--spacer--xs);\n  --pf-c-search-input__utilities--child--MarginLeft: var(--pf-global--spacer--xs);\n  --pf-c-search-input__utilities--c-button--PaddingRight: var(--pf-global--spacer--xs);\n  --pf-c-search-input__utilities--c-button--PaddingLeft: var(--pf-global--spacer--xs);\n  position: relative;\n  display: flex;\n  padding: var(--pf-c-search-input--PaddingTop) var(--pf-c-search-input--PaddingRight) var(--pf-c-search-input--PaddingBottom) var(--pf-c-search-input--PaddingLeft); }\n  .pf-c-search-input:hover {\n    --pf-c-search-input__text--after--BorderBottomColor: var(--pf-c-search-input--hover__text--after--BorderBottomColor); }\n\n.pf-c-search-input__text {\n  flex: 1; }\n  .pf-c-search-input__text::before, .pf-c-search-input__text::after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    pointer-events: none;\n    content: ""; }\n  .pf-c-search-input__text::before {\n    border: var(--pf-c-search-input__text--before--BorderWidth) solid var(--pf-c-search-input__text--before--BorderColor); }\n  .pf-c-search-input__text::after {\n    border-bottom: var(--pf-c-search-input__text--after--BorderBottomWidth) solid var(--pf-c-search-input__text--after--BorderBottomColor); }\n  .pf-c-search-input__text:hover, .pf-c-search-input__text:focus-within {\n    --pf-c-search-input__icon--Color: var(--pf-c-search-input__text--hover__icon--Color); }\n  .pf-c-search-input__text:focus-within {\n    --pf-c-search-input__text--after--BorderBottomWidth: var(--pf-c-search-input__text--focus-within--after--BorderBottomWidth);\n    --pf-c-search-input__text--after--BorderBottomColor: var(--pf-c-search-input__text--focus-within--after--BorderBottomColor); }\n\n.pf-c-search-input__icon {\n  position: absolute;\n  top: 50%;\n  left: var(--pf-c-search-input__icon--Left);\n  color: var(--pf-c-search-input__icon--Color);\n  transform: translateY(var(--pf-c-search-input__icon--TranslateY)); }\n\n.pf-c-search-input__text-input {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  position: relative;\n  width: 100%;\n  min-width: var(--pf-c-search-input__text-input--MinWidth);\n  padding: var(--pf-c-search-input__text-input--PaddingTop) var(--pf-c-search-input__text-input--PaddingRight) var(--pf-c-search-input__text-input--PaddingBottom) var(--pf-c-search-input__text-input--PaddingLeft);\n  border: 0; }\n\n.pf-c-search-input__utilities {\n  display: flex;\n  margin-right: var(--pf-c-search-input__utilities--MarginRight);\n  margin-left: var(--pf-c-search-input__utilities--MarginLeft); }\n  .pf-c-search-input__utilities > * + * {\n    margin-left: var(--pf-c-search-input__utilities--child--MarginLeft); }\n  .pf-c-search-input__utilities .pf-c-button {\n    --pf-c-button--PaddingRight: var(--pf-c-search-input__utilities--c-button--PaddingRight);\n    --pf-c-button--PaddingLeft: var(--pf-c-search-input__utilities--c-button--PaddingLeft); }\n\n.pf-c-search-input__nav {\n  display: flex; }\n\n.pf-c-search-input__count {\n  display: flex;\n  align-items: center; }\n\n.pf-c-select {\n  color: var(--pf-global--Color--100);\n  --pf-c-select__toggle--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-select__toggle--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-select__toggle--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-select__toggle--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-select__toggle--MinWidth: var(--pf-global--target-size--MinWidth);\n  --pf-c-select__toggle--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-select__toggle--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-select__toggle--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-select__toggle--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-select__toggle--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-select__toggle--before--BorderTopColor: var(--pf-global--BorderColor--300);\n  --pf-c-select__toggle--before--BorderRightColor: var(--pf-global--BorderColor--300);\n  --pf-c-select__toggle--before--BorderBottomColor: var(--pf-global--BorderColor--200);\n  --pf-c-select__toggle--before--BorderLeftColor: var(--pf-global--BorderColor--300);\n  --pf-c-select__toggle--Color: var(--pf-global--Color--100);\n  --pf-c-select__toggle--hover--before--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-select__toggle--focus--before--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-select__toggle--active--before--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-select__toggle--m-expanded--before--BorderBottomColor: var(--pf-global--active-color--100);\n  --pf-c-select__toggle--focus--before--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-select__toggle--active--before--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-select__toggle--m-expanded--before--BorderBottomWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-select__toggle--disabled--BackgroundColor: var(--pf-global--disabled-color--300);\n  --pf-c-select__toggle--m-plain--before--BorderColor: transparent;\n  --pf-c-select__toggle-wrapper--not-last-child--MarginRight: var(--pf-global--spacer--xs);\n  --pf-c-select__toggle-wrapper--MaxWidth: calc(100% - var(--pf-global--spacer--lg));\n  --pf-c-select__toggle-wrapper--c-chip-group--MarginTop: 0.3125rem;\n  --pf-c-select__toggle-wrapper--c-chip-group--MarginBottom: 0.3125rem;\n  --pf-c-select__toggle-typeahead--FlexBasis: 10em;\n  --pf-c-select__toggle-typeahead--BackgroundColor: transparent;\n  --pf-c-select__toggle-typeahead--BorderTop: none;\n  --pf-c-select__toggle-typeahead--BorderRight: none;\n  --pf-c-select__toggle-typeahead--BorderLeft: none;\n  --pf-c-select__toggle-typeahead--MinWidth: 7.5rem;\n  --pf-c-select__toggle-typeahead--focus--PaddingBottom: calc(var(--pf-global--spacer--form-element) - var(--pf-global--BorderWidth--sm));\n  --pf-c-select__toggle-icon--toggle-text--MarginLeft: var(--pf-global--spacer--xs);\n  --pf-c-select__toggle-badge--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-select__toggle-arrow--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-select__toggle-arrow--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-select__toggle-arrow--with-clear--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-select__toggle-arrow--m-top--m-expanded__toggle-arrow--Rotate: 180deg;\n  --pf-c-select__toggle-clear--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-select__toggle-clear--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-select__toggle-clear--toggle-button--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-select__toggle-button--Color: var(--pf-global--Color--100);\n  --pf-c-select__menu--BackgroundColor: var(--pf-global--BackgroundColor--light-100);\n  --pf-c-select__menu--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-select__menu--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-select__menu--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-select__menu--Top: calc(100% + var(--pf-global--spacer--xs));\n  --pf-c-select__menu--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-select__menu--m-top--TranslateY: calc(-100% - var(--pf-global--spacer--xs));\n  --pf-c-select__menu-item--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-select__menu-item--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-select__menu-item--m-selected--PaddingRight: var(--pf-global--spacer--2xl);\n  --pf-c-select__menu-item--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-select__menu-item--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-select__menu-item--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-select__menu-item--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-select__menu-item--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-select__menu-item--Color: var(--pf-global--Color--dark-100);\n  --pf-c-select__menu-item--Width: 100%;\n  --pf-c-select__menu-item--disabled--Color: var(--pf-global--Color--dark-200);\n  --pf-c-select__menu-item--hover--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-select__menu-item--focus--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-select__menu-item--disabled--BackgroundColor: transparent;\n  --pf-c-select__menu-item--m-link--Width: auto;\n  --pf-c-select__menu-item--m-link--hover--BackgroundColor: transparent;\n  --pf-c-select__menu-item--m-link--focus--BackgroundColor: transparent;\n  --pf-c-select__menu-item--m-action--Color: var(--pf-global--disabled-color--200);\n  --pf-c-select__menu-item--m-action--Width: auto;\n  --pf-c-select__menu-item--m-action--FontSize: var(--pf-global--icon--FontSize--sm);\n  --pf-c-select__menu-item--m-action--hover--BackgroundColor: transparent;\n  --pf-c-select__menu-item--m-action--focus--BackgroundColor: transparent;\n  --pf-c-select__menu-item--hover__menu-item--m-action--Color: var(--pf-global--Color--200);\n  --pf-c-select__menu-item--m-action--hover--Color: var(--pf-global--Color--100);\n  --pf-c-select__menu-item--m-action--focus--Color: var(--pf-global--Color--100);\n  --pf-c-select__menu-wrapper--m-favorite__menu-item--m-favorite-action--Color: var(--pf-global--palette--gold-400);\n  --pf-c-select__menu-item-icon--Color: var(--pf-global--active-color--100);\n  --pf-c-select__menu-item-icon--FontSize: var(--pf-global--icon--FontSize--sm);\n  --pf-c-select__menu-item-icon--Right: var(--pf-global--spacer--md);\n  --pf-c-select__menu-item-icon--Top: 50%;\n  --pf-c-select__menu-item-icon--TranslateY: -50%;\n  --pf-c-select__menu-item-action-icon--MinHeight: calc(var(--pf-c-select__menu-item--FontSize) * var(--pf-c-select__menu-item--LineHeight));\n  --pf-c-select__menu-item--match--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-select__menu-search--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-select__menu-search--PaddingRight: var(--pf-c-select__menu-item--PaddingRight);\n  --pf-c-select__menu-search--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-select__menu-search--PaddingLeft: var(--pf-c-select__menu-item--PaddingLeft);\n  --pf-c-select__menu-group--menu-group--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-select__menu-group-title--PaddingTop: var(--pf-c-select__menu-item--PaddingTop);\n  --pf-c-select__menu-group-title--PaddingRight: var(--pf-c-select__menu-item--PaddingRight);\n  --pf-c-select__menu-group-title--PaddingBottom: var(--pf-c-select__menu-item--PaddingBottom);\n  --pf-c-select__menu-group-title--PaddingLeft: var(--pf-c-select__menu-item--PaddingLeft);\n  --pf-c-select__menu-group-title--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-select__menu-group-title--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-select__menu-group-title--Color: var(--pf-global--Color--dark-200);\n  --pf-c-select__menu-item-description--FontSize: var(--pf-global--FontSize--xs);\n  --pf-c-select__menu-item-description--Color: var(--pf-global--Color--200);\n  --pf-c-select__menu-item-description--PaddingRight: var(--pf-c-select__menu-item--PaddingRight);\n  --pf-c-select__menu-item-main--PaddingRight: var(--pf-c-select__menu-item--PaddingRight);\n  --pf-c-select__menu-item--m-selected__menu-item-main--PaddingRight: var(--pf-c-select__menu-item--m-selected--PaddingRight);\n  --pf-c-select-menu--c-divider--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-select-menu--c-divider--MarginBottom: var(--pf-global--spacer--sm);\n  position: relative;\n  display: inline-block;\n  width: 100%; }\n  .pf-c-select .pf-c-divider {\n    margin-top: var(--pf-c-select-menu--c-divider--MarginTop);\n    margin-bottom: var(--pf-c-select-menu--c-divider--MarginBottom); }\n    .pf-c-select .pf-c-divider:last-child {\n      --pf-c-select-menu--c-divider--MarginBottom: 0; }\n\n.pf-c-select__menu-search + .pf-c-divider {\n  --pf-c-select-menu--c-divider--MarginTop: 0; }\n\n.pf-c-select__toggle {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  width: 100%;\n  min-width: var(--pf-c-select__toggle--MinWidth);\n  padding: var(--pf-c-select__toggle--PaddingTop) var(--pf-c-select__toggle--PaddingRight) var(--pf-c-select__toggle--PaddingBottom) var(--pf-c-select__toggle--PaddingLeft);\n  font-size: var(--pf-c-select__toggle--FontSize);\n  font-weight: var(--pf-c-select__toggle--FontWeight);\n  line-height: var(--pf-c-select__toggle--LineHeight);\n  color: var(--pf-c-select__toggle--Color);\n  white-space: nowrap;\n  cursor: pointer;\n  background-color: var(--pf-c-select__toggle--BackgroundColor);\n  border: none; }\n  .pf-c-select__toggle.pf-m-disabled, .pf-c-select__toggle:disabled {\n    --pf-c-select__toggle--BackgroundColor: var(--pf-c-select__toggle--disabled--BackgroundColor);\n    pointer-events: none; }\n    .pf-c-select__toggle.pf-m-disabled::before, .pf-c-select__toggle:disabled::before {\n      border: 0; }\n  .pf-c-select__toggle::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    content: "";\n    border: var(--pf-c-select__toggle--before--BorderWidth) solid;\n    border-color: var(--pf-c-select__toggle--before--BorderTopColor) var(--pf-c-select__toggle--before--BorderRightColor) var(--pf-c-select__toggle--before--BorderBottomColor) var(--pf-c-select__toggle--before--BorderLeftColor); }\n  .pf-c-select__toggle:hover::before {\n    --pf-c-select__toggle--before--BorderBottomColor: var(--pf-c-select__toggle--hover--before--BorderBottomColor); }\n  .pf-c-select__toggle:focus::before, .pf-c-select__toggle:focus-within::before {\n    --pf-c-select__toggle--before--BorderBottomColor: var(--pf-c-select__toggle--focus--before--BorderBottomColor);\n    border-bottom-width: var(--pf-c-select__toggle--focus--before--BorderBottomWidth); }\n  .pf-c-select__toggle:active::before, .pf-c-select__toggle.pf-m-active::before {\n    --pf-c-select__toggle--before--BorderBottomColor: var(--pf-c-select__toggle--active--before--BorderBottomColor);\n    border-bottom-width: var(--pf-c-select__toggle--active--before--BorderBottomWidth); }\n  .pf-m-expanded > .pf-c-select__toggle::before {\n    --pf-c-select__toggle--before--BorderBottomColor: var(--pf-c-select__toggle--m-expanded--before--BorderBottomColor);\n    border-bottom-width: var(--pf-c-select__toggle--m-expanded--before--BorderBottomWidth); }\n  .pf-c-select__toggle.pf-m-plain::before {\n    border-color: var(--pf-c-select__toggle--m-plain--before--BorderColor); }\n  .pf-c-select__toggle.pf-m-typeahead {\n    --pf-c-select__toggle--PaddingTop: 0;\n    --pf-c-select__toggle--PaddingRight: 0;\n    --pf-c-select__toggle--PaddingBottom: 0; }\n    .pf-c-select__toggle.pf-m-typeahead .pf-c-form-control {\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n      position: relative;\n      height: auto; }\n  .pf-c-select__toggle .pf-c-select__toggle-clear {\n    padding-right: var(--pf-c-select__toggle-clear--PaddingRight);\n    padding-left: var(--pf-c-select__toggle-clear--PaddingLeft);\n    margin-left: auto; }\n  .pf-c-select__toggle .pf-c-select__toggle-button {\n    color: var(--pf-c-select__toggle-button--Color); }\n  .pf-c-select__toggle .pf-c-select__toggle-clear + .pf-c-select__toggle-button {\n    padding-left: var(--pf-c-select__toggle-clear--toggle-button--PaddingLeft); }\n\n* + .pf-c-select__toggle-arrow {\n  margin-right: var(--pf-c-select__toggle-arrow--MarginRight);\n  margin-left: var(--pf-c-select__toggle-arrow--MarginLeft); }\n\n.pf-c-select.pf-m-top.pf-m-expanded .pf-c-select__toggle-arrow {\n  transform: rotate(var(--pf-c-select__toggle-arrow--m-top--m-expanded__toggle-arrow--Rotate)); }\n\n.pf-c-select__toggle-text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.pf-c-select__toggle-wrapper {\n  display: flex;\n  flex: 1;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: flex-start;\n  min-width: 0;\n  max-width: var(--pf-c-select__toggle-wrapper--MaxWidth);\n  white-space: normal; }\n  .pf-c-select__toggle-wrapper > :not(:last-child) {\n    margin-right: var(--pf-c-select__toggle-wrapper--not-last-child--MarginRight); }\n  .pf-c-select__toggle-wrapper > .pf-c-form-control {\n    margin-top: calc(-1 * var(--pf-c-select__toggle-wrapper--m-typeahead--PaddingTop)); }\n  .pf-c-select__toggle-wrapper .pf-c-chip-group {\n    margin-top: var(--pf-c-select__toggle-wrapper--c-chip-group--MarginTop);\n    margin-bottom: var(--pf-c-select__toggle-wrapper--c-chip-group--MarginBottom); }\n  .pf-c-select__toggle-wrapper > .pf-c-select__toggle-typeahead:first-child {\n    margin-left: calc(-1 * var(--pf-c-select__toggle--PaddingLeft)); }\n\n.pf-c-select__toggle-icon + .pf-c-select__toggle-text {\n  margin-left: var(--pf-c-select__toggle-icon--toggle-text--MarginLeft); }\n\n.pf-c-select__toggle-badge {\n  display: flex;\n  padding-left: var(--pf-c-select__toggle-badge--PaddingLeft); }\n\n.pf-c-select__toggle-typeahead {\n  flex-basis: var(--pf-c-select__toggle-typeahead--FlexBasis);\n  flex-grow: 1;\n  min-width: var(--pf-c-select__toggle-typeahead--MinWidth);\n  background-color: var(--pf-c-select__toggle-typeahead--BackgroundColor);\n  border-top: var(--pf-c-select__toggle-typeahead--BorderTop);\n  border-right: var(--pf-c-select__toggle-typeahead--BorderRight);\n  border-bottom-color: inherit;\n  border-bottom-style: inherit;\n  border-bottom-width: inherit;\n  border-left: var(--pf-c-select__toggle-typeahead--BorderLeft);\n  flex-shrink: 0; }\n  .pf-c-select__toggle-typeahead:focus {\n    padding-bottom: var(--pf-c-select__toggle-typeahead--focus--PaddingBottom); }\n\n.pf-c-select__menu {\n  position: absolute;\n  top: var(--pf-c-select__menu--Top);\n  z-index: var(--pf-c-select__menu--ZIndex);\n  min-width: 100%;\n  padding-top: var(--pf-c-select__menu--PaddingTop);\n  padding-bottom: var(--pf-c-select__menu--PaddingBottom);\n  background-color: var(--pf-c-select__menu--BackgroundColor);\n  background-clip: padding-box;\n  box-shadow: var(--pf-c-select__menu--BoxShadow); }\n  .pf-c-select__menu.pf-m-align-right {\n    right: 0; }\n  .pf-c-select.pf-m-top .pf-c-select__menu {\n    top: 0;\n    transform: translateY(var(--pf-c-select__menu--m-top--TranslateY)); }\n\n.pf-c-select__menu-fieldset {\n  border: 0; }\n\n.pf-c-select__menu-wrapper {\n  display: flex; }\n  .pf-c-select__menu-wrapper.pf-m-favorite .pf-c-select__menu-item.pf-m-favorite-action {\n    --pf-c-select__menu-item--Color: var(--pf-c-select__menu-wrapper--m-favorite__menu-item--m-favorite-action--Color); }\n\n.pf-c-select__menu-item {\n  position: relative;\n  width: var(--pf-c-select__menu-item--Width);\n  padding: var(--pf-c-select__menu-item--PaddingTop) var(--pf-c-select__menu-item--PaddingRight) var(--pf-c-select__menu-item--PaddingBottom) var(--pf-c-select__menu-item--PaddingLeft);\n  font-size: var(--pf-c-select__menu-item--FontSize);\n  font-weight: var(--pf-c-select__menu-item--FontWeight);\n  line-height: var(--pf-c-select__menu-item--LineHeight);\n  color: var(--pf-c-select__menu-item--Color);\n  text-align: left;\n  white-space: nowrap;\n  background-color: transparent;\n  border: none; }\n  .pf-c-select__menu-item:hover, .pf-c-select__menu-item:focus, .pf-c-select__menu-item.pf-m-focus {\n    --pf-c-select__menu-item--m-action--Color: var(--pf-c-select__menu-item--hover__menu-item--m-action--Color);\n    text-decoration: none; }\n  .pf-c-select__menu-wrapper:hover, .pf-c-select__menu-item:hover {\n    background-color: var(--pf-c-select__menu-item--hover--BackgroundColor); }\n  .pf-c-select__menu-wrapper:focus-within,\n  .pf-c-select__menu-wrapper.pf-m-focus, .pf-c-select__menu-item:focus, .pf-c-select__menu-item.pf-m-focus {\n    position: relative;\n    background-color: var(--pf-c-select__menu-item--focus--BackgroundColor); }\n  .pf-c-select__menu-item.pf-m-link {\n    --pf-c-select__menu-item--PaddingRight: 0;\n    --pf-c-select__menu-item-main--PaddingRight: 0;\n    --pf-c-select__menu-item-description--PaddingRight: 0;\n    --pf-c-select__menu-item--Width: var(--pf-c-select__menu-item--m-link--Width);\n    --pf-c-select__menu-item--hover--BackgroundColor: var(--pf-c-select__menu-item--m-link--hover--BackgroundColor);\n    --pf-c-select__menu-item--focus--BackgroundColor: var(--pf-c-select__menu-item--m-link--focus--BackgroundColor);\n    flex-grow: 1; }\n  .pf-c-select__menu-item.pf-m-action {\n    --pf-c-select__menu-item--Color: var(--pf-c-select__menu-item--m-action--Color);\n    --pf-c-select__menu-item--Width: var(--pf-c-select__menu-item--m-action--Width);\n    --pf-c-select__menu-item--hover--BackgroundColor: var(--pf-c-select__menu-item--m-action--hover--BackgroundColor);\n    --pf-c-select__menu-item--focus--BackgroundColor: var(--pf-c-select__menu-item--m-action--focus--BackgroundColor);\n    display: flex;\n    align-items: flex-start;\n    font-size: var(--pf-c-select__menu-item--m-action--FontSize); }\n    .pf-c-select__menu-item.pf-m-action:hover {\n      --pf-c-select__menu-item--m-action--Color: var(--pf-c-select__menu-item--m-action--hover--Color); }\n    .pf-c-select__menu-item.pf-m-action:focus {\n      --pf-c-select__menu-item--m-action--Color: var(--pf-c-select__menu-item--m-action--focus--Color); }\n  .pf-c-select__menu-item.pf-m-selected {\n    --pf-c-select__menu-item--PaddingRight: var(--pf-c-select__menu-item--m-selected--PaddingRight);\n    --pf-c-select__menu-item-main--PaddingRight: var(--pf-c-select__menu-item--m-selected__menu-item-main--PaddingRight); }\n  .pf-c-select__menu-item.pf-m-description {\n    white-space: normal; }\n    .pf-c-select__menu-item.pf-m-description:not(.pf-c-check) {\n      --pf-c-select__menu-item--PaddingRight: 0; }\n    .pf-c-select__menu-item.pf-m-description .pf-c-check__label {\n      white-space: nowrap; }\n  .pf-c-select__menu-wrapper.pf-m-disabled, .pf-c-select__menu-item:disabled, .pf-c-select__menu-item.pf-m-disabled {\n    color: var(--pf-c-select__menu-item--disabled--Color);\n    pointer-events: none;\n    background-color: var(--pf-c-select__menu-item--disabled--BackgroundColor); }\n\n.pf-c-select__menu-item-main {\n  position: relative;\n  display: block;\n  padding-right: var(--pf-c-select__menu-item-main--PaddingRight);\n  white-space: nowrap; }\n\n.pf-c-select__menu-item-description {\n  display: block;\n  padding-right: var(--pf-c-select__menu-item-description--PaddingRight);\n  font-size: var(--pf-c-select__menu-item-description--FontSize);\n  color: var(--pf-c-select__menu-item-description--Color); }\n\n.pf-c-select__menu-item-icon {\n  position: absolute;\n  top: var(--pf-c-select__menu-item-icon--Top);\n  right: var(--pf-c-select__menu-item-icon--Right);\n  font-size: var(--pf-c-select__menu-item-icon--FontSize);\n  color: var(--pf-c-select__menu-item-icon--Color);\n  transform: translateY(var(--pf-c-select__menu-item-icon--TranslateY)); }\n\n.pf-c-select__menu-item-action-icon {\n  display: flex;\n  align-items: center;\n  min-height: var(--pf-c-select__menu-item-action-icon--MinHeight); }\n\n.pf-c-select__menu-item--match {\n  font-weight: var(--pf-c-select__menu-item--match--FontWeight);\n  background-color: inherit; }\n\n.pf-c-select__menu-group + .pf-c-select__menu-group {\n  padding-top: var(--pf-c-select__menu-group--menu-group--PaddingTop); }\n\n.pf-c-select__menu-search {\n  padding: var(--pf-c-select__menu-search--PaddingTop) var(--pf-c-select__menu-search--PaddingRight) var(--pf-c-select__menu-search--PaddingBottom) var(--pf-c-select__menu-search--PaddingLeft); }\n\n.pf-c-select__menu-group-title {\n  padding-top: var(--pf-c-select__menu-group-title--PaddingTop);\n  padding-right: var(--pf-c-select__menu-group-title--PaddingRight);\n  padding-bottom: var(--pf-c-select__menu-group-title--PaddingBottom);\n  padding-left: var(--pf-c-select__menu-group-title--PaddingLeft);\n  font-size: var(--pf-c-select__menu-group-title--FontSize);\n  font-weight: var(--pf-c-select__menu-group-title--FontWeight);\n  color: var(--pf-c-select__menu-group-title--Color); }\n\n.pf-c-simple-list {\n  --pf-c-simple-list__item-link--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-simple-list__item-link--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-simple-list__item-link--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-simple-list__item-link--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-simple-list__item-link--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-simple-list__item-link--Color: var(--pf-global--Color--100);\n  --pf-c-simple-list__item-link--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-simple-list__item-link--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-simple-list__item-link--m-current--Color: var(--pf-global--link--Color);\n  --pf-c-simple-list__item-link--m-current--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-simple-list__item-link--m-current--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-simple-list__item-link--hover--Color: var(--pf-global--link--Color);\n  --pf-c-simple-list__item-link--hover--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-simple-list__item-link--focus--Color: var(--pf-global--link--Color);\n  --pf-c-simple-list__item-link--focus--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-simple-list__item-link--focus--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-simple-list__item-link--active--Color: var(--pf-global--link--Color);\n  --pf-c-simple-list__item-link--active--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-simple-list__item-link--active--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-simple-list__title--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-simple-list__title--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-simple-list__title--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-simple-list__title--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-simple-list__title--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-simple-list__title--Color: var(--pf-global--Color--dark-200);\n  --pf-c-simple-list__title--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-simple-list__section--section--MarginTop: var(--pf-global--spacer--sm); }\n\n.pf-c-simple-list__item-link {\n  display: block;\n  width: 100%;\n  padding: var(--pf-c-simple-list__item-link--PaddingTop) var(--pf-c-simple-list__item-link--PaddingRight) var(--pf-c-simple-list__item-link--PaddingBottom) var(--pf-c-simple-list__item-link--PaddingLeft);\n  font-size: var(--pf-c-simple-list__item-link--FontSize);\n  font-weight: var(--pf-c-simple-list__item-link--FontWeight);\n  color: var(--pf-c-simple-list__item-link--Color);\n  text-align: left;\n  background-color: var(--pf-c-simple-list__item-link--BackgroundColor);\n  border: none; }\n  .pf-c-simple-list__item-link.pf-m-current {\n    --pf-c-simple-list__item-link--FontWeight: var(--pf-c-simple-list__item-link--m-current--FontWeight);\n    --pf-c-simple-list__item-link--BackgroundColor: var(--pf-c-simple-list__item-link--m-current--BackgroundColor);\n    --pf-c-simple-list__item-link--Color: var(--pf-c-simple-list__item-link--m-current--Color); }\n  .pf-c-simple-list__item-link:hover {\n    text-decoration: none;\n    --pf-c-simple-list__item-link--BackgroundColor: var(--pf-c-simple-list__item-link--hover--BackgroundColor);\n    --pf-c-simple-list__item-link--Color: var(--pf-c-simple-list__item-link--hover--Color); }\n  .pf-c-simple-list__item-link:focus {\n    --pf-c-simple-list__item-link--FontWeight: var(--pf-c-simple-list__item-link--focus--FontWeight);\n    --pf-c-simple-list__item-link--BackgroundColor: var(--pf-c-simple-list__item-link--focus--BackgroundColor);\n    --pf-c-simple-list__item-link--Color: var(--pf-c-simple-list__item-link--focus--Color); }\n  .pf-c-simple-list__item-link:active {\n    --pf-c-simple-list__item-link--FontWeight: var(--pf-c-simple-list__item-link--active--FontWeight);\n    --pf-c-simple-list__item-link--BackgroundColor: var(--pf-c-simple-list__item-link--active--BackgroundColor);\n    --pf-c-simple-list__item-link--Color: var(--pf-c-simple-list__item-link--active--Color); }\n\n.pf-c-simple-list__title {\n  padding: var(--pf-c-simple-list__title--PaddingTop) var(--pf-c-simple-list__title--PaddingRight) var(--pf-c-simple-list__title--PaddingBottom) var(--pf-c-simple-list__title--PaddingLeft);\n  font-size: var(--pf-c-simple-list__title--FontSize);\n  font-weight: var(--pf-c-simple-list__title--FontWeight);\n  color: var(--pf-c-simple-list__title--Color); }\n\n.pf-c-simple-list__section + .pf-c-simple-list__section {\n  margin-top: var(--pf-c-simple-list__section--section--MarginTop); }\n\n.pf-c-skeleton {\n  --pf-c-skeleton--BackgroundColor: var(--pf-global--palette--black-150);\n  --pf-c-skeleton--Width: auto;\n  --pf-c-skeleton--Height: auto;\n  --pf-c-skeleton--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-skeleton--before--PaddingBottom: 0;\n  --pf-c-skeleton--before--Height: auto;\n  --pf-c-skeleton--before--Content: "\\00a0";\n  --pf-c-skeleton--after--LinearGradientAngle: 90deg;\n  --pf-c-skeleton--after--LinearGradientColorStop1: rgba(237, 237, 237, 0);\n  --pf-c-skeleton--after--LinearGradientColorStop2: #ededed;\n  --pf-c-skeleton--after--LinearGradientColorStop3: rgba(237, 237, 237, 0);\n  --pf-c-skeleton--after--TranslateX: -100%;\n  --pf-c-skeleton--after--AnimationName: pf-c-skeleton-loading;\n  --pf-c-skeleton--after--AnimationDuration: 2s;\n  --pf-c-skeleton--after--AnimationIterationCount: infinite;\n  --pf-c-skeleton--after--AnimationTimingFunction: linear;\n  --pf-c-skeleton--after--AnimationDelay: .5s;\n  --pf-c-skeleton--m-circle--BorderRadius: var(--pf-global--BorderRadius--lg);\n  --pf-c-skeleton--m-circle--before--PaddingBottom: 100%;\n  --pf-c-skeleton--m-text-4xl--Height: calc(var(--pf-global--FontSize--4xl) * var(--pf-global--LineHeight--sm));\n  --pf-c-skeleton--m-text-3xl--Height: calc(var(--pf-global--FontSize--3xl) * var(--pf-global--LineHeight--sm));\n  --pf-c-skeleton--m-text-2xl--Height: calc(var(--pf-global--FontSize--2xl) * var(--pf-global--LineHeight--sm));\n  --pf-c-skeleton--m-text-xl--Height: calc(var(--pf-global--FontSize--xl) * var(--pf-global--LineHeight--sm));\n  --pf-c-skeleton--m-text-lg--Height: calc(var(--pf-global--FontSize--lg) * var(--pf-global--LineHeight--md));\n  --pf-c-skeleton--m-text-md--Height: calc(var(--pf-global--FontSize--md) * var(--pf-global--LineHeight--md));\n  --pf-c-skeleton--m-text-sm--Height: calc(var(--pf-global--FontSize--sm) * var(--pf-global--LineHeight--md));\n  --pf-c-skeleton--m-width-sm--Width: 6.25rem;\n  --pf-c-skeleton--m-width-md--Width: 12.5rem;\n  --pf-c-skeleton--m-width-lg--Width: 18.75rem;\n  --pf-c-skeleton--m-width-25--Width: 25%;\n  --pf-c-skeleton--m-width-33--Width: calc(100% / 3);\n  --pf-c-skeleton--m-width-50--Width: 50%;\n  --pf-c-skeleton--m-width-66--Width: calc(100% / 3 * 2);\n  --pf-c-skeleton--m-width-75--Width: 75%;\n  --pf-c-skeleton--m-height-sm--Height: 6.25rem;\n  --pf-c-skeleton--m-height-md--Height: 12.5rem;\n  --pf-c-skeleton--m-height-lg--Height: 18.75rem;\n  --pf-c-skeleton--m-height-25--Height: 25%;\n  --pf-c-skeleton--m-height-33--Height: calc(100% / 3);\n  --pf-c-skeleton--m-height-50--Height: 50%;\n  --pf-c-skeleton--m-height-66--Height: calc(100% / 3 * 2);\n  --pf-c-skeleton--m-height-75--Height: 75%;\n  --pf-c-skeleton--m-height-100--Height: 100%;\n  position: relative;\n  width: var(--pf-c-skeleton--Width);\n  height: var(--pf-c-skeleton--Height);\n  overflow: hidden;\n  background-color: var(--pf-c-skeleton--BackgroundColor);\n  border-radius: var(--pf-c-skeleton--BorderRadius);\n  transform: translate(0); }\n  .pf-c-skeleton::before {\n    display: block;\n    height: var(--pf-c-skeleton--before--Height);\n    padding-bottom: var(--pf-c-skeleton--before--PaddingBottom);\n    content: var(--pf-c-skeleton--before--Content); }\n  .pf-c-skeleton::after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    display: block;\n    content: "";\n    background: linear-gradient(var(--pf-c-skeleton--after--LinearGradientAngle), var(--pf-c-skeleton--after--LinearGradientColorStop1), var(--pf-c-skeleton--after--LinearGradientColorStop2), var(--pf-c-skeleton--after--LinearGradientColorStop3));\n    transform: translateX(var(--pf-c-skeleton--after--TranslateX));\n    animation: var(--pf-c-skeleton--after--AnimationName) var(--pf-c-skeleton--after--AnimationDuration) var(--pf-c-skeleton--after--AnimationTimingFunction) var(--pf-c-skeleton--after--AnimationDelay) var(--pf-c-skeleton--after--AnimationIterationCount); }\n  .pf-c-skeleton.pf-m-circle {\n    --pf-c-skeleton--BorderRadius: var(--pf-c-skeleton--m-circle--BorderRadius); }\n  .pf-c-skeleton.pf-m-square, .pf-c-skeleton.pf-m-circle {\n    --pf-c-skeleton--before--Height: 0;\n    --pf-c-skeleton--before--PaddingBottom: var(--pf-c-skeleton--m-circle--before--PaddingBottom); }\n  .pf-c-skeleton.pf-m-width-sm {\n    --pf-c-skeleton--Width: var(--pf-c-skeleton--m-width-sm--Width); }\n  .pf-c-skeleton.pf-m-width-md {\n    --pf-c-skeleton--Width: var(--pf-c-skeleton--m-width-md--Width); }\n  .pf-c-skeleton.pf-m-width-lg {\n    --pf-c-skeleton--Width: var(--pf-c-skeleton--m-width-lg--Width); }\n  .pf-c-skeleton.pf-m-width-25 {\n    --pf-c-skeleton--Width: var(--pf-c-skeleton--m-width-25--Width); }\n  .pf-c-skeleton.pf-m-width-33 {\n    --pf-c-skeleton--Width: var(--pf-c-skeleton--m-width-33--Width); }\n  .pf-c-skeleton.pf-m-width-50 {\n    --pf-c-skeleton--Width: var(--pf-c-skeleton--m-width-50--Width); }\n  .pf-c-skeleton.pf-m-width-66 {\n    --pf-c-skeleton--Width: var(--pf-c-skeleton--m-width-66--Width); }\n  .pf-c-skeleton.pf-m-width-75 {\n    --pf-c-skeleton--Width: var(--pf-c-skeleton--m-width-75--Width); }\n  .pf-c-skeleton.pf-m-height-sm {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-height-sm--Height); }\n  .pf-c-skeleton.pf-m-height-md {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-height-md--Height); }\n  .pf-c-skeleton.pf-m-height-lg {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-height-lg--Height); }\n  .pf-c-skeleton.pf-m-height-25 {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-height-25--Height); }\n  .pf-c-skeleton.pf-m-height-33 {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-height-33--Height); }\n  .pf-c-skeleton.pf-m-height-50 {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-height-50--Height); }\n  .pf-c-skeleton.pf-m-height-66 {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-height-66--Height); }\n  .pf-c-skeleton.pf-m-height-75 {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-height-75--Height); }\n  .pf-c-skeleton.pf-m-height-100 {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-height-100--Height); }\n  .pf-c-skeleton.pf-m-text-4xl {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-text-4xl--Height); }\n  .pf-c-skeleton.pf-m-text-3xl {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-text-3xl--Height); }\n  .pf-c-skeleton.pf-m-text-2xl {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-text-2xl--Height); }\n  .pf-c-skeleton.pf-m-text-xl {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-text-xl--Height); }\n  .pf-c-skeleton.pf-m-text-lg {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-text-lg--Height); }\n  .pf-c-skeleton.pf-m-text-md {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-text-md--Height); }\n  .pf-c-skeleton.pf-m-text-sm {\n    --pf-c-skeleton--Height: var(--pf-c-skeleton--m-text-sm--Height); }\n\n@keyframes pf-c-skeleton-loading {\n  0% {\n    transform: translateX(-100%); }\n  60% {\n    transform: translateX(100%); }\n  100% {\n    transform: translateX(100%); } }\n\n.pf-c-skip-to-content {\n  --pf-c-skip-to-content--Top: var(--pf-global--spacer--md);\n  --pf-c-skip-to-content--ZIndex: var(--pf-global--ZIndex--2xl);\n  --pf-c-skip-to-content--focus--Left: var(--pf-global--spacer--md);\n  position: absolute;\n  top: var(--pf-c-skip-to-content--Top);\n  left: -300%;\n  z-index: var(--pf-c-skip-to-content--ZIndex); }\n  .pf-c-skip-to-content:focus {\n    left: var(--pf-c-skip-to-content--focus--Left); }\n\n.pf-c-spinner {\n  --pf-c-spinner--AnimationDuration: 1.5s;\n  --pf-c-spinner--AnimationTimingFunction: cubic-bezier(.77, .005, .315, 1);\n  --pf-c-spinner--diameter: var(--pf-global--icon--FontSize--xl);\n  --pf-c-spinner--stroke-width-multiplier: .1;\n  --pf-c-spinner--stroke-width: calc(var(--pf-c-spinner--diameter) * var(--pf-c-spinner--stroke-width-multiplier));\n  --pf-c-spinner--Width: var(--pf-c-spinner--diameter);\n  --pf-c-spinner--Height: var(--pf-c-spinner--diameter);\n  --pf-c-spinner--Color: var(--pf-global--primary-color--100);\n  --pf-c-spinner--m-sm--diameter: var(--pf-global--icon--FontSize--sm);\n  --pf-c-spinner--m-md--diameter: var(--pf-global--icon--FontSize--md);\n  --pf-c-spinner--m-lg--diameter: var(--pf-global--icon--FontSize--lg);\n  --pf-c-spinner--m-xl--diameter: var(--pf-global--icon--FontSize--xl);\n  --pf-c-spinner__clipper--Width: var(--pf-c-spinner--diameter);\n  --pf-c-spinner__clipper--Height: var(--pf-c-spinner--diameter);\n  --pf-c-spinner__clipper--after--BoxShadowColor: var(--pf-c-spinner--Color);\n  --pf-c-spinner__clipper--after--Width: var(--pf-c-spinner--diameter);\n  --pf-c-spinner__clipper--after--Height: var(--pf-c-spinner--diameter);\n  --pf-c-spinner__clipper--after--BoxShadowSpreadRadius: var(--pf-c-spinner--stroke-width);\n  --pf-c-spinner__lead-ball--after--BackgroundColor: var(--pf-c-spinner--Color);\n  --pf-c-spinner__ball--after--Width: var(--pf-c-spinner--stroke-width);\n  --pf-c-spinner__ball--after--Height: var(--pf-c-spinner--stroke-width);\n  --pf-c-spinner__tail-ball--after--BackgroundColor: var(--pf-c-spinner--Color);\n  position: relative;\n  display: inline-block;\n  width: var(--pf-c-spinner--Width);\n  height: var(--pf-c-spinner--Height);\n  text-align: left;\n  animation: pf-animation-spinner-parent calc(var(--pf-c-spinner--AnimationDuration) * 2) var(--pf-c-spinner--AnimationTimingFunction) infinite; }\n  .pf-c-spinner.pf-m-sm {\n    --pf-c-spinner--diameter: var(--pf-c-spinner--m-sm--diameter); }\n  .pf-c-spinner.pf-m-md {\n    --pf-c-spinner--diameter: var(--pf-c-spinner--m-md--diameter); }\n  .pf-c-spinner.pf-m-lg {\n    --pf-c-spinner--diameter: var(--pf-c-spinner--m-lg--diameter); }\n  .pf-c-spinner.pf-m-xl {\n    --pf-c-spinner--diameter: var(--pf-c-spinner--m-xl--diameter); }\n\n@keyframes pf-animation-spinner-parent {\n  0% {\n    transform: rotate(0deg); }\n  50% {\n    transform: rotate(-540deg); }\n  100% {\n    transform: rotate(-1080deg); } }\n\n.pf-c-spinner__clipper {\n  position: absolute;\n  width: var(--pf-c-spinner__clipper--Width);\n  height: var(--pf-c-spinner__clipper--Height);\n  clip-path: inset(0 0 50% 50%);\n  animation: pf-animation-spinner__clipper var(--pf-c-spinner--AnimationDuration) linear infinite; }\n\n@keyframes pf-animation-spinner__clipper {\n  0% {\n    transform: rotate(0deg); }\n  100% {\n    transform: rotate(-270deg); } }\n\n.pf-c-spinner__clipper::after {\n  position: absolute;\n  width: var(--pf-c-spinner__clipper--after--Width);\n  height: var(--pf-c-spinner__clipper--after--Height);\n  clip-path: inset(0 0 0 50%);\n  content: "";\n  border-radius: 50%;\n  box-shadow: inset 0 0 0 var(--pf-c-spinner__clipper--after--BoxShadowSpreadRadius) var(--pf-c-spinner__clipper--after--BoxShadowColor);\n  animation: pf-animation-spinner__clipper-after var(--pf-c-spinner--AnimationDuration) linear infinite; }\n\n@keyframes pf-animation-spinner__clipper-after {\n  0% {\n    transform: rotate(90deg); }\n  100% {\n    transform: rotate(-180deg); } }\n\n.pf-c-spinner__lead-ball {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  animation: pf-animation-spinner__lead-ball var(--pf-c-spinner--AnimationDuration) linear infinite; }\n  .pf-c-spinner__lead-ball::after {\n    position: absolute;\n    top: calc(50% - (var(--pf-c-spinner__ball--after--Height) / 2));\n    right: 0;\n    width: var(--pf-c-spinner__ball--after--Width);\n    height: var(--pf-c-spinner__ball--after--Height);\n    content: "";\n    background-color: var(--pf-c-spinner__lead-ball--after--BackgroundColor);\n    border-radius: 50%;\n    transform-origin: top right; }\n\n@keyframes pf-animation-spinner__lead-ball {\n  0% {\n    transform: rotate(0deg); }\n  34% {\n    transform: rotate(-180deg); }\n  100% {\n    transform: rotate(-360deg); } }\n\n.pf-c-spinner__tail-ball {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  animation: pf-animation-spinner__tail-ball var(--pf-c-spinner--AnimationDuration) linear infinite; }\n  .pf-c-spinner__tail-ball::after {\n    position: absolute;\n    top: calc(50% - (var(--pf-c-spinner__ball--after--Height) / 2));\n    right: 0;\n    width: var(--pf-c-spinner__ball--after--Width);\n    height: var(--pf-c-spinner__ball--after--Height);\n    content: "";\n    background-color: var(--pf-c-spinner__tail-ball--after--BackgroundColor);\n    border-radius: 50%;\n    transform-origin: top right; }\n\n@keyframes pf-animation-spinner__tail-ball {\n  0% {\n    transform: rotate(0deg); }\n  67.5% {\n    transform: rotate(-180deg); }\n  100% {\n    transform: rotate(-360deg); } }\n\n.pf-c-switch {\n  --pf-c-switch--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-switch__toggle-icon--FontSize: calc(var(--pf-c-switch--FontSize) * .625);\n  --pf-c-switch__toggle-icon--Color: var(--pf-global--Color--light-100);\n  --pf-c-switch__toggle-icon--Left: calc(var(--pf-c-switch--FontSize) * .4);\n  --pf-c-switch__toggle-icon--Offset: 0.125rem;\n  --pf-c-switch--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-switch--Height: calc(var(--pf-c-switch--FontSize) * var(--pf-c-switch--LineHeight));\n  --pf-c-switch__input--checked__toggle--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-switch__input--checked__toggle--before--TranslateX: calc(100% + var(--pf-c-switch__toggle-icon--Offset));\n  --pf-c-switch__input--checked__label--Color: var(--pf-global--Color--dark-100);\n  --pf-c-switch__input--not-checked__label--Color: var(--pf-global--disabled-color--100);\n  --pf-c-switch__input--disabled__label--Color: var(--pf-global--disabled-color--100);\n  --pf-c-switch__input--disabled__toggle--BackgroundColor: var(--pf-global--Color--dark-200);\n  --pf-c-switch__input--disabled__toggle--before--BackgroundColor: var(--pf-global--disabled-color--200);\n  --pf-c-switch__input--focus__toggle--OutlineWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-switch__input--focus__toggle--OutlineOffset: var(--pf-global--spacer--sm);\n  --pf-c-switch__input--focus__toggle--OutlineColor: var(--pf-global--primary-color--100);\n  --pf-c-switch__toggle--Height: calc(var(--pf-c-switch--FontSize) * var(--pf-c-switch--LineHeight));\n  --pf-c-switch__toggle--BackgroundColor: var(--pf-global--disabled-color--200);\n  --pf-c-switch__toggle--BorderRadius: var(--pf-c-switch--Height);\n  --pf-c-switch__toggle--before--Width: calc(var(--pf-c-switch--FontSize) - var(--pf-c-switch__toggle-icon--Offset));\n  --pf-c-switch__toggle--before--Height: var(--pf-c-switch__toggle--before--Width);\n  --pf-c-switch__toggle--before--Top: calc((var(--pf-c-switch--Height) - var(--pf-c-switch__toggle--before--Height)) / 2);\n  --pf-c-switch__toggle--before--Left: var(--pf-c-switch__toggle--before--Top);\n  --pf-c-switch__toggle--before--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-switch__toggle--before--BorderRadius: var(--pf-global--BorderRadius--lg);\n  --pf-c-switch__toggle--before--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-switch__toggle--before--Transition: transform .25s ease 0s;\n  --pf-c-switch__toggle--Width: calc(var(--pf-c-switch--Height) + var(--pf-c-switch__toggle-icon--Offset) + var(--pf-c-switch__toggle--before--Width));\n  --pf-c-switch__label--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-switch__label--Color: var(--pf-global--Color--dark-100);\n  position: relative;\n  display: inline-block;\n  height: var(--pf-c-switch--Height);\n  font-size: var(--pf-c-switch--FontSize);\n  line-height: var(--pf-c-switch--LineHeight);\n  vertical-align: middle;\n  cursor: pointer; }\n\n.pf-c-switch__input {\n  position: absolute;\n  cursor: pointer;\n  opacity: 0; }\n  .pf-c-switch__input:focus ~ .pf-c-switch__toggle {\n    outline: var(--pf-c-switch__input--focus__toggle--OutlineWidth) solid var(--pf-c-switch__input--focus__toggle--OutlineColor);\n    outline-offset: var(--pf-c-switch__input--focus__toggle--OutlineOffset); }\n  .pf-c-switch__input:checked ~ .pf-c-switch__label {\n    color: var(--pf-c-switch__input--checked__label--Color); }\n  .pf-c-switch__input:checked ~ .pf-c-switch__toggle {\n    background-color: var(--pf-c-switch__input--checked__toggle--BackgroundColor); }\n    .pf-c-switch__input:checked ~ .pf-c-switch__toggle::before {\n      transform: translateX(var(--pf-c-switch__input--checked__toggle--before--TranslateX)); }\n  .pf-c-switch__input:checked ~ .pf-m-off {\n    display: none; }\n  .pf-c-switch__input:not(:checked) ~ .pf-c-switch__label {\n    color: var(--pf-c-switch__input--not-checked__label--Color); }\n  .pf-c-switch__input:not(:checked) ~ .pf-c-switch__toggle .pf-c-switch__toggle-icon {\n    display: none;\n    visibility: hidden; }\n  .pf-c-switch__input:not(:checked) ~ .pf-m-on {\n    display: none; }\n  .pf-c-switch__input:disabled {\n    cursor: not-allowed; }\n    .pf-c-switch__input:disabled ~ .pf-c-switch__label {\n      color: var(--pf-c-switch__input--disabled__label--Color);\n      cursor: not-allowed; }\n    .pf-c-switch__input:disabled ~ .pf-c-switch__toggle {\n      cursor: not-allowed;\n      background-color: var(--pf-c-switch__input--disabled__toggle--BackgroundColor); }\n      .pf-c-switch__input:disabled ~ .pf-c-switch__toggle::before {\n        background-color: var(--pf-c-switch__input--disabled__toggle--before--BackgroundColor); }\n\n.pf-c-switch__toggle {\n  position: relative;\n  display: inline-block;\n  width: var(--pf-c-switch__toggle--Width);\n  height: var(--pf-c-switch__toggle--Height);\n  background-color: var(--pf-c-switch__toggle--BackgroundColor);\n  border-radius: var(--pf-c-switch__toggle--BorderRadius); }\n  .pf-c-switch__toggle::before {\n    position: absolute;\n    top: var(--pf-c-switch__toggle--before--Top);\n    left: var(--pf-c-switch__toggle--before--Left);\n    display: block;\n    width: var(--pf-c-switch__toggle--before--Width);\n    height: var(--pf-c-switch__toggle--before--Height);\n    content: "";\n    background-color: var(--pf-c-switch__toggle--before--BackgroundColor);\n    border-radius: var(--pf-c-switch__toggle--before--BorderRadius);\n    box-shadow: var(--pf-c-switch__toggle--before--BoxShadow);\n    transition: var(--pf-c-switch__toggle--before--Transition); }\n\n.pf-c-switch__toggle-icon {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: var(--pf-c-switch__toggle-icon--Left);\n  display: flex;\n  align-items: center;\n  font-size: var(--pf-c-switch__toggle-icon--FontSize);\n  color: var(--pf-c-switch__toggle-icon--Color); }\n\n.pf-c-switch__label {\n  display: inline-block;\n  padding-left: var(--pf-c-switch__label--PaddingLeft);\n  color: var(--pf-c-switch__label--Color);\n  vertical-align: top; }\n\n.pf-c-tab-content {\n  --pf-c-tab-content--m-light-300: var(--pf-global--BackgroundColor--light-300); }\n  .pf-c-tab-content.pf-m-light-300 {\n    background-color: var(--pf-c-tab-content--m-light-300); }\n\n.pf-c-table[class*="pf-m-grid"] {\n  --pf-c-table--responsive--BorderColor: var(--pf-global--BorderColor--300);\n  --pf-c-table--tbody--responsive--border-width--base: var(--pf-global--spacer--sm);\n  --pf-c-table--tbody--after--border-width--base: var(--pf-global--BorderWidth--lg);\n  --pf-c-table--tbody--after--BorderLeftWidth: 0;\n  --pf-c-table--tbody--after--BorderColor: var(--pf-global--active-color--100);\n  --pf-c-table-tr--responsive--border-width--base: var(--pf-global--spacer--sm);\n  --pf-c-table-tr--responsive--last-child--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-table-tr--responsive--GridColumnGap: var(--pf-global--spacer--md);\n  --pf-c-table-tr--responsive--MarginTop: var(--pf-global--spacer--sm);\n  --pf-c-table-tr--responsive--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-table-tr--responsive--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-table-tr--responsive--xl--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-table-tr--responsive--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-table-tr--responsive--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-table-tr--responsive--xl--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-table-tr--responsive--nested-table--PaddingTop: var(--pf-global--spacer--xl);\n  --pf-c-table-tr--responsive--nested-table--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-table-tr--responsive--nested-table--PaddingBottom: var(--pf-global--spacer--xl);\n  --pf-c-table-tr--responsive--nested-table--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-table--m-grid--cell--hidden-visible--Display: grid;\n  --pf-c-table--m-grid--cell--PaddingTop: 0;\n  --pf-c-table--m-grid--cell--PaddingRight: 0;\n  --pf-c-table--m-grid--cell--PaddingBottom: 0;\n  --pf-c-table--m-grid--cell--PaddingLeft: 0;\n  --pf-c-table-td--responsive--GridColumnGap: var(--pf-global--spacer--md);\n  --pf-c-table--cell--responsive--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-table--cell--responsive--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-table--cell--first-child--responsive--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-table--cell--responsive--PaddingRight: 0;\n  --pf-c-table--cell--responsive--PaddingLeft: 0;\n  --pf-c-table--m-compact-tr--responsive--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-table--m-compact-tr--responsive--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-table--m-compact-tr-td--responsive--PaddingTop: var(--pf-global--spacer--xs);\n  --pf-c-table--m-compact-tr-td--responsive--PaddingBottom: var(--pf-global--spacer--xs);\n  --pf-c-table--m-compact__action--responsive--MarginTop: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-table--m-compact__action--responsive--MarginBottom: calc(var(--pf-global--spacer--xs) * -1);\n  --pf-c-table--m-compact__toggle--c-button--responsive--MarginBottom: calc(0.375rem * -1);\n  --pf-c-table__expandable-row-content--responsive--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-table__expandable-row-content--responsive--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-table__expandable-row-content--responsive--xl--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-table__expandable-row-content--responsive--xl--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-table__expandable-row-content--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-table__check--responsive--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-table__check--responsive--MarginTop: 0.875rem;\n  --pf-c-table--m-grid__favorite--MarginTop: 0.5rem;\n  --pf-c-table--m-grid__check--favorite--MarginLeft: var(--pf-global--spacer--xl);\n  --pf-c-table--m-grid__action--MarginTop: 0.375rem;\n  --pf-c-table__action--responsive--MarginLeft: var(--pf-global--spacer--xl);\n  --pf-c-table--m-grid__favorite--action--MarginLeft: var(--pf-global--spacer--2xl);\n  --pf-c-table--m-grid__check--favorite--action--MarginLeft: calc(var(--pf-c-table--m-grid__check--favorite--MarginLeft) + var(--pf-c-table--m-grid__favorite--action--MarginLeft));\n  --pf-c-table__toggle__icon--Transition: .2s ease-in 0s;\n  --pf-c-table__toggle--m-expanded__icon--Rotate: 180deg; }\n  @media screen and (max-width: 1200px) {\n    .pf-c-table[class*="pf-m-grid"] {\n      --pf-c-table-tr--responsive--PaddingRight: var(--pf-c-table-tr--responsive--xl--PaddingRight);\n      --pf-c-table-tr--responsive--PaddingLeft: var(--pf-c-table-tr--responsive--xl--PaddingLeft); } }\n  @media screen and (max-width: 1200px) {\n    .pf-c-table[class*="pf-m-grid"] {\n      --pf-c-table__expandable-row-content--responsive--PaddingRight: var(--pf-c-table__expandable-row-content--responsive--xl--PaddingRight);\n      --pf-c-table__expandable-row-content--responsive--PaddingLeft: var(--pf-c-table__expandable-row-content--responsive--xl--PaddingLeft); } }\n\n.pf-m-grid.pf-c-table {\n  --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n  --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n  --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n  --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft);\n  --pf-c-table__favorite--c-button--MarginTop: auto;\n  --pf-c-table__favorite--c-button--MarginRight: auto;\n  --pf-c-table__favorite--c-button--MarginBottom: auto;\n  --pf-c-table__favorite--c-button--MarginLeft: auto;\n  display: grid;\n  border: none; }\n  .pf-m-grid.pf-c-table tr > * {\n    width: auto;\n    min-width: 0;\n    max-width: none;\n    overflow: visible;\n    text-overflow: clip;\n    white-space: normal; }\n  .pf-m-grid.pf-c-table .pf-c-table__text {\n    position: relative;\n    width: auto;\n    min-width: 0;\n    max-width: none;\n    overflow: var(--pf-c-table--cell--Overflow);\n    text-overflow: var(--pf-c-table--cell--TextOverflow);\n    white-space: var(--pf-c-table--cell--WhiteSpace); }\n  .pf-m-grid.pf-c-table thead {\n    display: none;\n    visibility: hidden; }\n  .pf-m-grid.pf-c-table tbody {\n    display: block; }\n    .pf-m-grid.pf-c-table tbody:first-of-type {\n      border-top: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n  .pf-m-grid.pf-c-table table.pf-m-compact > tbody {\n    border-top: 0; }\n  .pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) {\n    border-bottom: var(--pf-c-table-tr--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n  .pf-m-grid.pf-c-table tr:last-child,\n  .pf-m-grid.pf-c-table tbody:last-of-type:not(:only-of-type) > tr {\n    border-bottom-width: var(--pf-c-table-tr--responsive--last-child--BorderBottomWidth); }\n  .pf-m-grid.pf-c-table tbody.pf-m-expanded {\n    border-bottom: var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor); }\n    .pf-m-grid.pf-c-table tbody.pf-m-expanded tr:not(.pf-c-table__expandable-row) {\n      border-bottom: 0; }\n    .pf-m-grid.pf-c-table tbody.pf-m-expanded:not(:last-of-type) {\n      border-bottom: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n  .pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) {\n    display: grid;\n    grid-template-columns: 1fr;\n    height: auto;\n    grid-auto-columns: max-content;\n    grid-column-gap: var(--pf-c-table-tr--responsive--GridColumnGap);\n    padding: var(--pf-c-table-tr--responsive--PaddingTop) var(--pf-c-table-tr--responsive--PaddingRight) var(--pf-c-table-tr--responsive--PaddingBottom) var(--pf-c-table-tr--responsive--PaddingLeft); }\n    .pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) > * {\n      padding: var(--pf-c-table--cell--responsive--PaddingTop) var(--pf-c-table--cell--responsive--PaddingRight) var(--pf-c-table--cell--responsive--PaddingBottom) var(--pf-c-table--cell--responsive--PaddingLeft); }\n      .pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) > *:first-child {\n        --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--cell--first-child--responsive--PaddingTop); }\n  .pf-m-grid.pf-c-table.pf-m-compact {\n    --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table--m-compact-tr--responsive--PaddingTop);\n    --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr--responsive--PaddingBottom);\n    --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--m-compact-tr-td--responsive--PaddingTop);\n    --pf-c-table--cell--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr-td--responsive--PaddingBottom);\n    --pf-c-table__check--input--MarginTop: 0; }\n    .pf-m-grid.pf-c-table.pf-m-compact .pf-c-table__action {\n      margin-top: var(--pf-c-table--m-compact__action--responsive--MarginTop);\n      margin-bottom: var(--pf-c-table--m-compact__action--responsive--MarginTop); }\n    .pf-m-grid.pf-c-table.pf-m-compact .pf-c-table__toggle .pf-c-button {\n      margin-bottom: var(--pf-c-table--m-compact__toggle--c-button--responsive--MarginBottom); }\n  .pf-m-grid.pf-c-table .pf-c-table__icon > * {\n    text-align: left; }\n  .pf-m-grid.pf-c-table [data-label] {\n    --pf-c-table--cell--hidden-visible--Display: var(--pf-c-table--m-grid--cell--hidden-visible--Display);\n    grid-column: 1;\n    grid-column-gap: var(--pf-c-table-td--responsive--GridColumnGap);\n    grid-template-columns: 1fr minmax(0, 1.5fr);\n    align-items: start; }\n    .pf-m-grid.pf-c-table [data-label] > * {\n      grid-column: 2; }\n    .pf-m-grid.pf-c-table [data-label]::before {\n      font-weight: bold;\n      text-align: left;\n      content: attr(data-label); }\n  .pf-m-grid.pf-c-table tr > *:first-child {\n    --pf-c-table--cell--PaddingLeft: 0; }\n  .pf-m-grid.pf-c-table tr > *:last-child {\n    --pf-c-table--cell--PaddingRight: 0; }\n  .pf-m-grid.pf-c-table .pf-c-table {\n    --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table-tr--responsive--nested-table--PaddingTop);\n    --pf-c-table-tr--responsive--PaddingRight: var(--pf-c-table-tr--responsive--nested-table--PaddingRight);\n    --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table-tr--responsive--nested-table--PaddingBottom);\n    --pf-c-table-tr--responsive--PaddingLeft: var(--pf-c-table-tr--responsive--nested-table--PaddingLeft);\n    border: 0; }\n    .pf-m-grid.pf-c-table .pf-c-table tr:not(.pf-c-table__expandable-row) + tr:not(.pf-c-table__expandable-row) {\n      --pf-c-table-tr--responsive--PaddingTop: 0; }\n  .pf-m-grid.pf-c-table .pf-c-table__compound-expansion-toggle {\n    --pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth: 0;\n    --pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth: 0;\n    --pf-c-table__compound-expansion-toggle__button--after--Top: 100%; }\n  .pf-m-grid.pf-c-table tbody {\n    position: relative; }\n    .pf-m-grid.pf-c-table tbody::after {\n      position: absolute;\n      top: 0;\n      bottom: 0;\n      left: 0;\n      content: "";\n      border: 0;\n      border-left: var(--pf-c-table--tbody--after--BorderLeftWidth) solid var(--pf-c-table--tbody--after--BorderColor); }\n    .pf-m-grid.pf-c-table tbody.pf-m-expanded {\n      --pf-c-table--tbody--after--BorderLeftWidth: var(--pf-c-table--tbody--after--border-width--base); }\n      .pf-m-grid.pf-c-table tbody.pf-m-expanded tbody {\n        --pf-c-table--tbody--after--BorderLeftWidth: 0; }\n    .pf-m-grid.pf-c-table tbody > tr > :first-child:not(.pf-c-table__check)::after {\n      --pf-c-table__expandable-row--after--BorderLeftWidth: 0;\n      position: static;\n      width: auto;\n      background-color: transparent; }\n  .pf-m-grid.pf-c-table .pf-c-table__expandable-row {\n    --pf-c-table--cell--responsive--PaddingTop: 0;\n    --pf-c-table--cell--responsive--PaddingRight: 0;\n    --pf-c-table--cell--responsive--PaddingBottom: 0;\n    --pf-c-table--cell--responsive--PaddingLeft: 0;\n    --pf-c-table--cell--PaddingRight: 0;\n    --pf-c-table--cell--PaddingLeft: 0;\n    display: block;\n    max-height: var(--pf-c-table__expandable-row--MaxHeight);\n    overflow-y: auto;\n    border-bottom: none;\n    box-shadow: none; }\n    .pf-m-grid.pf-c-table .pf-c-table__expandable-row > * {\n      position: static;\n      display: block; }\n    .pf-m-grid.pf-c-table .pf-c-table__expandable-row.pf-m-expanded {\n      border-top-color: var(--pf-c-table--BorderColor); }\n    .pf-m-grid.pf-c-table .pf-c-table__expandable-row > :first-child:not(.pf-c-table__check)::after {\n      content: none; }\n    .pf-m-grid.pf-c-table .pf-c-table__expandable-row td.pf-m-no-padding .pf-c-table__expandable-row-content, .pf-m-grid.pf-c-table .pf-c-table__expandable-row th.pf-m-no-padding .pf-c-table__expandable-row-content {\n      padding: 0; }\n    .pf-m-grid.pf-c-table .pf-c-table__expandable-row:not(.pf-m-expanded) {\n      display: none;\n      visibility: hidden; }\n    .pf-m-grid.pf-c-table .pf-c-table__expandable-row .pf-c-table__expandable-row-content {\n      padding-right: var(--pf-c-table__expandable-row-content--responsive--PaddingRight);\n      padding-left: var(--pf-c-table__expandable-row-content--responsive--PaddingLeft); }\n  .pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__toggle,\n  .pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__check,\n  .pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__favorite,\n  .pf-m-grid.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__action {\n    width: auto;\n    padding: 0; }\n  .pf-m-grid.pf-c-table .pf-c-table__toggle {\n    grid-row-start: 20;\n    grid-column: -1;\n    justify-self: end;\n    padding-right: 0; }\n    .pf-m-grid.pf-c-table .pf-c-table__toggle::after {\n      content: none; }\n  .pf-m-grid.pf-c-table .pf-c-table__button {\n    --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n    --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n    --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n    --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft); }\n  .pf-m-grid.pf-c-table .pf-c-table__check,\n  .pf-m-grid.pf-c-table .pf-c-table__favorite,\n  .pf-m-grid.pf-c-table .pf-c-table__action {\n    grid-row-start: 1;\n    grid-column-start: 2; }\n  .pf-m-grid.pf-c-table .pf-c-table__check {\n    margin-top: var(--pf-c-table__check--responsive--MarginTop);\n    margin-left: var(--pf-c-table__check--responsive--MarginLeft); }\n    .pf-m-grid.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite {\n      margin-left: var(--pf-c-table--m-grid__check--favorite--MarginLeft); }\n      .pf-m-grid.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite ~ .pf-c-table__action {\n        margin-left: var(--pf-c-table--m-grid__check--favorite--action--MarginLeft); }\n    .pf-m-grid.pf-c-table .pf-c-table__check ~ .pf-c-table__action {\n      margin-left: var(--pf-c-table__action--responsive--MarginLeft); }\n  .pf-m-grid.pf-c-table .pf-c-table__favorite {\n    margin-top: var(--pf-c-table--m-grid__favorite--MarginTop); }\n    .pf-m-grid.pf-c-table .pf-c-table__favorite ~ .pf-c-table__action {\n      margin-left: var(--pf-c-table--m-grid__favorite--action--MarginLeft); }\n  .pf-m-grid.pf-c-table .pf-c-table__action {\n    margin-top: var(--pf-c-table--m-grid__action--MarginTop);\n    text-align: right; }\n    @media screen and (max-width: 576px) {\n      .pf-m-grid.pf-c-table .pf-c-table__action {\n        grid-row-start: 1;\n        grid-column-start: 2;\n        margin-left: 0; } }\n  .pf-m-grid.pf-c-table .pf-c-table__inline-edit-action {\n    grid-column: 2;\n    grid-row: 2; }\n  .pf-m-grid.pf-c-table .pf-c-table__toggle-icon {\n    transition: var(--pf-c-table__toggle__icon--Transition); }\n    .pf-c-button.pf-m-expanded > .pf-m-grid.pf-c-table .pf-c-table__toggle-icon {\n      transform: rotate(var(--pf-c-table__toggle--m-expanded__icon--Rotate)); }\n  .pf-m-grid.pf-c-table .pf-m-nowrap {\n    --pf-c-table--cell--Overflow: auto; }\n  .pf-m-grid.pf-c-table .pf-m-fit-content {\n    width: auto;\n    white-space: normal; }\n  .pf-m-grid.pf-c-table .pf-m-truncate {\n    --pf-c-table--cell--MaxWidth: 100%; }\n  .pf-m-grid.pf-c-table [class*="pf-m-width"] {\n    --pf-c-table--cell--Width: auto; }\n\n@media screen and (max-width: 768px) {\n  .pf-m-grid-md.pf-c-table {\n    --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n    --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n    --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n    --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft);\n    --pf-c-table__favorite--c-button--MarginTop: auto;\n    --pf-c-table__favorite--c-button--MarginRight: auto;\n    --pf-c-table__favorite--c-button--MarginBottom: auto;\n    --pf-c-table__favorite--c-button--MarginLeft: auto;\n    display: grid;\n    border: none; }\n    .pf-m-grid-md.pf-c-table tr > * {\n      width: auto;\n      min-width: 0;\n      max-width: none;\n      overflow: visible;\n      text-overflow: clip;\n      white-space: normal; }\n    .pf-m-grid-md.pf-c-table .pf-c-table__text {\n      position: relative;\n      width: auto;\n      min-width: 0;\n      max-width: none;\n      overflow: var(--pf-c-table--cell--Overflow);\n      text-overflow: var(--pf-c-table--cell--TextOverflow);\n      white-space: var(--pf-c-table--cell--WhiteSpace); }\n    .pf-m-grid-md.pf-c-table thead {\n      display: none;\n      visibility: hidden; }\n    .pf-m-grid-md.pf-c-table tbody {\n      display: block; }\n      .pf-m-grid-md.pf-c-table tbody:first-of-type {\n        border-top: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-md.pf-c-table table.pf-m-compact > tbody {\n      border-top: 0; }\n    .pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) {\n      border-bottom: var(--pf-c-table-tr--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-md.pf-c-table tr:last-child,\n    .pf-m-grid-md.pf-c-table tbody:last-of-type:not(:only-of-type) > tr {\n      border-bottom-width: var(--pf-c-table-tr--responsive--last-child--BorderBottomWidth); }\n    .pf-m-grid-md.pf-c-table tbody.pf-m-expanded {\n      border-bottom: var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor); }\n      .pf-m-grid-md.pf-c-table tbody.pf-m-expanded tr:not(.pf-c-table__expandable-row) {\n        border-bottom: 0; }\n      .pf-m-grid-md.pf-c-table tbody.pf-m-expanded:not(:last-of-type) {\n        border-bottom: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) {\n      display: grid;\n      grid-template-columns: 1fr;\n      height: auto;\n      grid-auto-columns: max-content;\n      grid-column-gap: var(--pf-c-table-tr--responsive--GridColumnGap);\n      padding: var(--pf-c-table-tr--responsive--PaddingTop) var(--pf-c-table-tr--responsive--PaddingRight) var(--pf-c-table-tr--responsive--PaddingBottom) var(--pf-c-table-tr--responsive--PaddingLeft); }\n      .pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) > * {\n        padding: var(--pf-c-table--cell--responsive--PaddingTop) var(--pf-c-table--cell--responsive--PaddingRight) var(--pf-c-table--cell--responsive--PaddingBottom) var(--pf-c-table--cell--responsive--PaddingLeft); }\n        .pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) > *:first-child {\n          --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--cell--first-child--responsive--PaddingTop); }\n    .pf-m-grid-md.pf-c-table.pf-m-compact {\n      --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table--m-compact-tr--responsive--PaddingTop);\n      --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr--responsive--PaddingBottom);\n      --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--m-compact-tr-td--responsive--PaddingTop);\n      --pf-c-table--cell--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr-td--responsive--PaddingBottom);\n      --pf-c-table__check--input--MarginTop: 0; }\n      .pf-m-grid-md.pf-c-table.pf-m-compact .pf-c-table__action {\n        margin-top: var(--pf-c-table--m-compact__action--responsive--MarginTop);\n        margin-bottom: var(--pf-c-table--m-compact__action--responsive--MarginTop); }\n      .pf-m-grid-md.pf-c-table.pf-m-compact .pf-c-table__toggle .pf-c-button {\n        margin-bottom: var(--pf-c-table--m-compact__toggle--c-button--responsive--MarginBottom); }\n    .pf-m-grid-md.pf-c-table .pf-c-table__icon > * {\n      text-align: left; }\n    .pf-m-grid-md.pf-c-table [data-label] {\n      --pf-c-table--cell--hidden-visible--Display: var(--pf-c-table--m-grid--cell--hidden-visible--Display);\n      grid-column: 1;\n      grid-column-gap: var(--pf-c-table-td--responsive--GridColumnGap);\n      grid-template-columns: 1fr minmax(0, 1.5fr);\n      align-items: start; }\n      .pf-m-grid-md.pf-c-table [data-label] > * {\n        grid-column: 2; }\n      .pf-m-grid-md.pf-c-table [data-label]::before {\n        font-weight: bold;\n        text-align: left;\n        content: attr(data-label); }\n    .pf-m-grid-md.pf-c-table tr > *:first-child {\n      --pf-c-table--cell--PaddingLeft: 0; }\n    .pf-m-grid-md.pf-c-table tr > *:last-child {\n      --pf-c-table--cell--PaddingRight: 0; }\n    .pf-m-grid-md.pf-c-table .pf-c-table {\n      --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table-tr--responsive--nested-table--PaddingTop);\n      --pf-c-table-tr--responsive--PaddingRight: var(--pf-c-table-tr--responsive--nested-table--PaddingRight);\n      --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table-tr--responsive--nested-table--PaddingBottom);\n      --pf-c-table-tr--responsive--PaddingLeft: var(--pf-c-table-tr--responsive--nested-table--PaddingLeft);\n      border: 0; }\n      .pf-m-grid-md.pf-c-table .pf-c-table tr:not(.pf-c-table__expandable-row) + tr:not(.pf-c-table__expandable-row) {\n        --pf-c-table-tr--responsive--PaddingTop: 0; }\n    .pf-m-grid-md.pf-c-table .pf-c-table__compound-expansion-toggle {\n      --pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth: 0;\n      --pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth: 0;\n      --pf-c-table__compound-expansion-toggle__button--after--Top: 100%; }\n    .pf-m-grid-md.pf-c-table tbody {\n      position: relative; }\n      .pf-m-grid-md.pf-c-table tbody::after {\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        content: "";\n        border: 0;\n        border-left: var(--pf-c-table--tbody--after--BorderLeftWidth) solid var(--pf-c-table--tbody--after--BorderColor); }\n      .pf-m-grid-md.pf-c-table tbody.pf-m-expanded {\n        --pf-c-table--tbody--after--BorderLeftWidth: var(--pf-c-table--tbody--after--border-width--base); }\n        .pf-m-grid-md.pf-c-table tbody.pf-m-expanded tbody {\n          --pf-c-table--tbody--after--BorderLeftWidth: 0; }\n      .pf-m-grid-md.pf-c-table tbody > tr > :first-child:not(.pf-c-table__check)::after {\n        --pf-c-table__expandable-row--after--BorderLeftWidth: 0;\n        position: static;\n        width: auto;\n        background-color: transparent; }\n    .pf-m-grid-md.pf-c-table .pf-c-table__expandable-row {\n      --pf-c-table--cell--responsive--PaddingTop: 0;\n      --pf-c-table--cell--responsive--PaddingRight: 0;\n      --pf-c-table--cell--responsive--PaddingBottom: 0;\n      --pf-c-table--cell--responsive--PaddingLeft: 0;\n      --pf-c-table--cell--PaddingRight: 0;\n      --pf-c-table--cell--PaddingLeft: 0;\n      display: block;\n      max-height: var(--pf-c-table__expandable-row--MaxHeight);\n      overflow-y: auto;\n      border-bottom: none;\n      box-shadow: none; }\n      .pf-m-grid-md.pf-c-table .pf-c-table__expandable-row > * {\n        position: static;\n        display: block; }\n      .pf-m-grid-md.pf-c-table .pf-c-table__expandable-row.pf-m-expanded {\n        border-top-color: var(--pf-c-table--BorderColor); }\n      .pf-m-grid-md.pf-c-table .pf-c-table__expandable-row > :first-child:not(.pf-c-table__check)::after {\n        content: none; }\n      .pf-m-grid-md.pf-c-table .pf-c-table__expandable-row td.pf-m-no-padding .pf-c-table__expandable-row-content, .pf-m-grid-md.pf-c-table .pf-c-table__expandable-row th.pf-m-no-padding .pf-c-table__expandable-row-content {\n        padding: 0; }\n      .pf-m-grid-md.pf-c-table .pf-c-table__expandable-row:not(.pf-m-expanded) {\n        display: none;\n        visibility: hidden; }\n      .pf-m-grid-md.pf-c-table .pf-c-table__expandable-row .pf-c-table__expandable-row-content {\n        padding-right: var(--pf-c-table__expandable-row-content--responsive--PaddingRight);\n        padding-left: var(--pf-c-table__expandable-row-content--responsive--PaddingLeft); }\n    .pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__toggle,\n    .pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__check,\n    .pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__favorite,\n    .pf-m-grid-md.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__action {\n      width: auto;\n      padding: 0; }\n    .pf-m-grid-md.pf-c-table .pf-c-table__toggle {\n      grid-row-start: 20;\n      grid-column: -1;\n      justify-self: end;\n      padding-right: 0; }\n      .pf-m-grid-md.pf-c-table .pf-c-table__toggle::after {\n        content: none; }\n    .pf-m-grid-md.pf-c-table .pf-c-table__button {\n      --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n      --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n      --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n      --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft); }\n    .pf-m-grid-md.pf-c-table .pf-c-table__check,\n    .pf-m-grid-md.pf-c-table .pf-c-table__favorite,\n    .pf-m-grid-md.pf-c-table .pf-c-table__action {\n      grid-row-start: 1;\n      grid-column-start: 2; }\n    .pf-m-grid-md.pf-c-table .pf-c-table__check {\n      margin-top: var(--pf-c-table__check--responsive--MarginTop);\n      margin-left: var(--pf-c-table__check--responsive--MarginLeft); }\n      .pf-m-grid-md.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite {\n        margin-left: var(--pf-c-table--m-grid__check--favorite--MarginLeft); }\n        .pf-m-grid-md.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite ~ .pf-c-table__action {\n          margin-left: var(--pf-c-table--m-grid__check--favorite--action--MarginLeft); }\n      .pf-m-grid-md.pf-c-table .pf-c-table__check ~ .pf-c-table__action {\n        margin-left: var(--pf-c-table__action--responsive--MarginLeft); }\n    .pf-m-grid-md.pf-c-table .pf-c-table__favorite {\n      margin-top: var(--pf-c-table--m-grid__favorite--MarginTop); }\n      .pf-m-grid-md.pf-c-table .pf-c-table__favorite ~ .pf-c-table__action {\n        margin-left: var(--pf-c-table--m-grid__favorite--action--MarginLeft); }\n    .pf-m-grid-md.pf-c-table .pf-c-table__action {\n      margin-top: var(--pf-c-table--m-grid__action--MarginTop);\n      text-align: right; } }\n    @media screen and (max-width: 768px) and (max-width: 576px) {\n      .pf-m-grid-md.pf-c-table .pf-c-table__action {\n        grid-row-start: 1;\n        grid-column-start: 2;\n        margin-left: 0; } }\n\n@media screen and (max-width: 768px) {\n    .pf-m-grid-md.pf-c-table .pf-c-table__inline-edit-action {\n      grid-column: 2;\n      grid-row: 2; }\n    .pf-m-grid-md.pf-c-table .pf-c-table__toggle-icon {\n      transition: var(--pf-c-table__toggle__icon--Transition); }\n      .pf-c-button.pf-m-expanded > .pf-m-grid-md.pf-c-table .pf-c-table__toggle-icon {\n        transform: rotate(var(--pf-c-table__toggle--m-expanded__icon--Rotate)); }\n    .pf-m-grid-md.pf-c-table .pf-m-nowrap {\n      --pf-c-table--cell--Overflow: auto; }\n    .pf-m-grid-md.pf-c-table .pf-m-fit-content {\n      width: auto;\n      white-space: normal; }\n    .pf-m-grid-md.pf-c-table .pf-m-truncate {\n      --pf-c-table--cell--MaxWidth: 100%; }\n    .pf-m-grid-md.pf-c-table [class*="pf-m-width"] {\n      --pf-c-table--cell--Width: auto; } }\n\n@media screen and (max-width: 992px) {\n  .pf-m-grid-lg.pf-c-table {\n    --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n    --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n    --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n    --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft);\n    --pf-c-table__favorite--c-button--MarginTop: auto;\n    --pf-c-table__favorite--c-button--MarginRight: auto;\n    --pf-c-table__favorite--c-button--MarginBottom: auto;\n    --pf-c-table__favorite--c-button--MarginLeft: auto;\n    display: grid;\n    border: none; }\n    .pf-m-grid-lg.pf-c-table tr > * {\n      width: auto;\n      min-width: 0;\n      max-width: none;\n      overflow: visible;\n      text-overflow: clip;\n      white-space: normal; }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__text {\n      position: relative;\n      width: auto;\n      min-width: 0;\n      max-width: none;\n      overflow: var(--pf-c-table--cell--Overflow);\n      text-overflow: var(--pf-c-table--cell--TextOverflow);\n      white-space: var(--pf-c-table--cell--WhiteSpace); }\n    .pf-m-grid-lg.pf-c-table thead {\n      display: none;\n      visibility: hidden; }\n    .pf-m-grid-lg.pf-c-table tbody {\n      display: block; }\n      .pf-m-grid-lg.pf-c-table tbody:first-of-type {\n        border-top: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-lg.pf-c-table table.pf-m-compact > tbody {\n      border-top: 0; }\n    .pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) {\n      border-bottom: var(--pf-c-table-tr--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-lg.pf-c-table tr:last-child,\n    .pf-m-grid-lg.pf-c-table tbody:last-of-type:not(:only-of-type) > tr {\n      border-bottom-width: var(--pf-c-table-tr--responsive--last-child--BorderBottomWidth); }\n    .pf-m-grid-lg.pf-c-table tbody.pf-m-expanded {\n      border-bottom: var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor); }\n      .pf-m-grid-lg.pf-c-table tbody.pf-m-expanded tr:not(.pf-c-table__expandable-row) {\n        border-bottom: 0; }\n      .pf-m-grid-lg.pf-c-table tbody.pf-m-expanded:not(:last-of-type) {\n        border-bottom: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) {\n      display: grid;\n      grid-template-columns: 1fr;\n      height: auto;\n      grid-auto-columns: max-content;\n      grid-column-gap: var(--pf-c-table-tr--responsive--GridColumnGap);\n      padding: var(--pf-c-table-tr--responsive--PaddingTop) var(--pf-c-table-tr--responsive--PaddingRight) var(--pf-c-table-tr--responsive--PaddingBottom) var(--pf-c-table-tr--responsive--PaddingLeft); }\n      .pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) > * {\n        padding: var(--pf-c-table--cell--responsive--PaddingTop) var(--pf-c-table--cell--responsive--PaddingRight) var(--pf-c-table--cell--responsive--PaddingBottom) var(--pf-c-table--cell--responsive--PaddingLeft); }\n        .pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) > *:first-child {\n          --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--cell--first-child--responsive--PaddingTop); }\n    .pf-m-grid-lg.pf-c-table.pf-m-compact {\n      --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table--m-compact-tr--responsive--PaddingTop);\n      --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr--responsive--PaddingBottom);\n      --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--m-compact-tr-td--responsive--PaddingTop);\n      --pf-c-table--cell--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr-td--responsive--PaddingBottom);\n      --pf-c-table__check--input--MarginTop: 0; }\n      .pf-m-grid-lg.pf-c-table.pf-m-compact .pf-c-table__action {\n        margin-top: var(--pf-c-table--m-compact__action--responsive--MarginTop);\n        margin-bottom: var(--pf-c-table--m-compact__action--responsive--MarginTop); }\n      .pf-m-grid-lg.pf-c-table.pf-m-compact .pf-c-table__toggle .pf-c-button {\n        margin-bottom: var(--pf-c-table--m-compact__toggle--c-button--responsive--MarginBottom); }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__icon > * {\n      text-align: left; }\n    .pf-m-grid-lg.pf-c-table [data-label] {\n      --pf-c-table--cell--hidden-visible--Display: var(--pf-c-table--m-grid--cell--hidden-visible--Display);\n      grid-column: 1;\n      grid-column-gap: var(--pf-c-table-td--responsive--GridColumnGap);\n      grid-template-columns: 1fr minmax(0, 1.5fr);\n      align-items: start; }\n      .pf-m-grid-lg.pf-c-table [data-label] > * {\n        grid-column: 2; }\n      .pf-m-grid-lg.pf-c-table [data-label]::before {\n        font-weight: bold;\n        text-align: left;\n        content: attr(data-label); }\n    .pf-m-grid-lg.pf-c-table tr > *:first-child {\n      --pf-c-table--cell--PaddingLeft: 0; }\n    .pf-m-grid-lg.pf-c-table tr > *:last-child {\n      --pf-c-table--cell--PaddingRight: 0; }\n    .pf-m-grid-lg.pf-c-table .pf-c-table {\n      --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table-tr--responsive--nested-table--PaddingTop);\n      --pf-c-table-tr--responsive--PaddingRight: var(--pf-c-table-tr--responsive--nested-table--PaddingRight);\n      --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table-tr--responsive--nested-table--PaddingBottom);\n      --pf-c-table-tr--responsive--PaddingLeft: var(--pf-c-table-tr--responsive--nested-table--PaddingLeft);\n      border: 0; }\n      .pf-m-grid-lg.pf-c-table .pf-c-table tr:not(.pf-c-table__expandable-row) + tr:not(.pf-c-table__expandable-row) {\n        --pf-c-table-tr--responsive--PaddingTop: 0; }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__compound-expansion-toggle {\n      --pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth: 0;\n      --pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth: 0;\n      --pf-c-table__compound-expansion-toggle__button--after--Top: 100%; }\n    .pf-m-grid-lg.pf-c-table tbody {\n      position: relative; }\n      .pf-m-grid-lg.pf-c-table tbody::after {\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        content: "";\n        border: 0;\n        border-left: var(--pf-c-table--tbody--after--BorderLeftWidth) solid var(--pf-c-table--tbody--after--BorderColor); }\n      .pf-m-grid-lg.pf-c-table tbody.pf-m-expanded {\n        --pf-c-table--tbody--after--BorderLeftWidth: var(--pf-c-table--tbody--after--border-width--base); }\n        .pf-m-grid-lg.pf-c-table tbody.pf-m-expanded tbody {\n          --pf-c-table--tbody--after--BorderLeftWidth: 0; }\n      .pf-m-grid-lg.pf-c-table tbody > tr > :first-child:not(.pf-c-table__check)::after {\n        --pf-c-table__expandable-row--after--BorderLeftWidth: 0;\n        position: static;\n        width: auto;\n        background-color: transparent; }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row {\n      --pf-c-table--cell--responsive--PaddingTop: 0;\n      --pf-c-table--cell--responsive--PaddingRight: 0;\n      --pf-c-table--cell--responsive--PaddingBottom: 0;\n      --pf-c-table--cell--responsive--PaddingLeft: 0;\n      --pf-c-table--cell--PaddingRight: 0;\n      --pf-c-table--cell--PaddingLeft: 0;\n      display: block;\n      max-height: var(--pf-c-table__expandable-row--MaxHeight);\n      overflow-y: auto;\n      border-bottom: none;\n      box-shadow: none; }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row > * {\n        position: static;\n        display: block; }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row.pf-m-expanded {\n        border-top-color: var(--pf-c-table--BorderColor); }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row > :first-child:not(.pf-c-table__check)::after {\n        content: none; }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row td.pf-m-no-padding .pf-c-table__expandable-row-content, .pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row th.pf-m-no-padding .pf-c-table__expandable-row-content {\n        padding: 0; }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row:not(.pf-m-expanded) {\n        display: none;\n        visibility: hidden; }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__expandable-row .pf-c-table__expandable-row-content {\n        padding-right: var(--pf-c-table__expandable-row-content--responsive--PaddingRight);\n        padding-left: var(--pf-c-table__expandable-row-content--responsive--PaddingLeft); }\n    .pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__toggle,\n    .pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__check,\n    .pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__favorite,\n    .pf-m-grid-lg.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__action {\n      width: auto;\n      padding: 0; }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__toggle {\n      grid-row-start: 20;\n      grid-column: -1;\n      justify-self: end;\n      padding-right: 0; }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__toggle::after {\n        content: none; }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__button {\n      --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n      --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n      --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n      --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft); }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__check,\n    .pf-m-grid-lg.pf-c-table .pf-c-table__favorite,\n    .pf-m-grid-lg.pf-c-table .pf-c-table__action {\n      grid-row-start: 1;\n      grid-column-start: 2; }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__check {\n      margin-top: var(--pf-c-table__check--responsive--MarginTop);\n      margin-left: var(--pf-c-table__check--responsive--MarginLeft); }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite {\n        margin-left: var(--pf-c-table--m-grid__check--favorite--MarginLeft); }\n        .pf-m-grid-lg.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite ~ .pf-c-table__action {\n          margin-left: var(--pf-c-table--m-grid__check--favorite--action--MarginLeft); }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__check ~ .pf-c-table__action {\n        margin-left: var(--pf-c-table__action--responsive--MarginLeft); }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__favorite {\n      margin-top: var(--pf-c-table--m-grid__favorite--MarginTop); }\n      .pf-m-grid-lg.pf-c-table .pf-c-table__favorite ~ .pf-c-table__action {\n        margin-left: var(--pf-c-table--m-grid__favorite--action--MarginLeft); }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__action {\n      margin-top: var(--pf-c-table--m-grid__action--MarginTop);\n      text-align: right; } }\n    @media screen and (max-width: 992px) and (max-width: 576px) {\n      .pf-m-grid-lg.pf-c-table .pf-c-table__action {\n        grid-row-start: 1;\n        grid-column-start: 2;\n        margin-left: 0; } }\n\n@media screen and (max-width: 992px) {\n    .pf-m-grid-lg.pf-c-table .pf-c-table__inline-edit-action {\n      grid-column: 2;\n      grid-row: 2; }\n    .pf-m-grid-lg.pf-c-table .pf-c-table__toggle-icon {\n      transition: var(--pf-c-table__toggle__icon--Transition); }\n      .pf-c-button.pf-m-expanded > .pf-m-grid-lg.pf-c-table .pf-c-table__toggle-icon {\n        transform: rotate(var(--pf-c-table__toggle--m-expanded__icon--Rotate)); }\n    .pf-m-grid-lg.pf-c-table .pf-m-nowrap {\n      --pf-c-table--cell--Overflow: auto; }\n    .pf-m-grid-lg.pf-c-table .pf-m-fit-content {\n      width: auto;\n      white-space: normal; }\n    .pf-m-grid-lg.pf-c-table .pf-m-truncate {\n      --pf-c-table--cell--MaxWidth: 100%; }\n    .pf-m-grid-lg.pf-c-table [class*="pf-m-width"] {\n      --pf-c-table--cell--Width: auto; } }\n\n@media screen and (max-width: 1200px) {\n  .pf-m-grid-xl.pf-c-table {\n    --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n    --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n    --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n    --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft);\n    --pf-c-table__favorite--c-button--MarginTop: auto;\n    --pf-c-table__favorite--c-button--MarginRight: auto;\n    --pf-c-table__favorite--c-button--MarginBottom: auto;\n    --pf-c-table__favorite--c-button--MarginLeft: auto;\n    display: grid;\n    border: none; }\n    .pf-m-grid-xl.pf-c-table tr > * {\n      width: auto;\n      min-width: 0;\n      max-width: none;\n      overflow: visible;\n      text-overflow: clip;\n      white-space: normal; }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__text {\n      position: relative;\n      width: auto;\n      min-width: 0;\n      max-width: none;\n      overflow: var(--pf-c-table--cell--Overflow);\n      text-overflow: var(--pf-c-table--cell--TextOverflow);\n      white-space: var(--pf-c-table--cell--WhiteSpace); }\n    .pf-m-grid-xl.pf-c-table thead {\n      display: none;\n      visibility: hidden; }\n    .pf-m-grid-xl.pf-c-table tbody {\n      display: block; }\n      .pf-m-grid-xl.pf-c-table tbody:first-of-type {\n        border-top: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-xl.pf-c-table table.pf-m-compact > tbody {\n      border-top: 0; }\n    .pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) {\n      border-bottom: var(--pf-c-table-tr--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-xl.pf-c-table tr:last-child,\n    .pf-m-grid-xl.pf-c-table tbody:last-of-type:not(:only-of-type) > tr {\n      border-bottom-width: var(--pf-c-table-tr--responsive--last-child--BorderBottomWidth); }\n    .pf-m-grid-xl.pf-c-table tbody.pf-m-expanded {\n      border-bottom: var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor); }\n      .pf-m-grid-xl.pf-c-table tbody.pf-m-expanded tr:not(.pf-c-table__expandable-row) {\n        border-bottom: 0; }\n      .pf-m-grid-xl.pf-c-table tbody.pf-m-expanded:not(:last-of-type) {\n        border-bottom: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) {\n      display: grid;\n      grid-template-columns: 1fr;\n      height: auto;\n      grid-auto-columns: max-content;\n      grid-column-gap: var(--pf-c-table-tr--responsive--GridColumnGap);\n      padding: var(--pf-c-table-tr--responsive--PaddingTop) var(--pf-c-table-tr--responsive--PaddingRight) var(--pf-c-table-tr--responsive--PaddingBottom) var(--pf-c-table-tr--responsive--PaddingLeft); }\n      .pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) > * {\n        padding: var(--pf-c-table--cell--responsive--PaddingTop) var(--pf-c-table--cell--responsive--PaddingRight) var(--pf-c-table--cell--responsive--PaddingBottom) var(--pf-c-table--cell--responsive--PaddingLeft); }\n        .pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) > *:first-child {\n          --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--cell--first-child--responsive--PaddingTop); }\n    .pf-m-grid-xl.pf-c-table.pf-m-compact {\n      --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table--m-compact-tr--responsive--PaddingTop);\n      --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr--responsive--PaddingBottom);\n      --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--m-compact-tr-td--responsive--PaddingTop);\n      --pf-c-table--cell--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr-td--responsive--PaddingBottom);\n      --pf-c-table__check--input--MarginTop: 0; }\n      .pf-m-grid-xl.pf-c-table.pf-m-compact .pf-c-table__action {\n        margin-top: var(--pf-c-table--m-compact__action--responsive--MarginTop);\n        margin-bottom: var(--pf-c-table--m-compact__action--responsive--MarginTop); }\n      .pf-m-grid-xl.pf-c-table.pf-m-compact .pf-c-table__toggle .pf-c-button {\n        margin-bottom: var(--pf-c-table--m-compact__toggle--c-button--responsive--MarginBottom); }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__icon > * {\n      text-align: left; }\n    .pf-m-grid-xl.pf-c-table [data-label] {\n      --pf-c-table--cell--hidden-visible--Display: var(--pf-c-table--m-grid--cell--hidden-visible--Display);\n      grid-column: 1;\n      grid-column-gap: var(--pf-c-table-td--responsive--GridColumnGap);\n      grid-template-columns: 1fr minmax(0, 1.5fr);\n      align-items: start; }\n      .pf-m-grid-xl.pf-c-table [data-label] > * {\n        grid-column: 2; }\n      .pf-m-grid-xl.pf-c-table [data-label]::before {\n        font-weight: bold;\n        text-align: left;\n        content: attr(data-label); }\n    .pf-m-grid-xl.pf-c-table tr > *:first-child {\n      --pf-c-table--cell--PaddingLeft: 0; }\n    .pf-m-grid-xl.pf-c-table tr > *:last-child {\n      --pf-c-table--cell--PaddingRight: 0; }\n    .pf-m-grid-xl.pf-c-table .pf-c-table {\n      --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table-tr--responsive--nested-table--PaddingTop);\n      --pf-c-table-tr--responsive--PaddingRight: var(--pf-c-table-tr--responsive--nested-table--PaddingRight);\n      --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table-tr--responsive--nested-table--PaddingBottom);\n      --pf-c-table-tr--responsive--PaddingLeft: var(--pf-c-table-tr--responsive--nested-table--PaddingLeft);\n      border: 0; }\n      .pf-m-grid-xl.pf-c-table .pf-c-table tr:not(.pf-c-table__expandable-row) + tr:not(.pf-c-table__expandable-row) {\n        --pf-c-table-tr--responsive--PaddingTop: 0; }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__compound-expansion-toggle {\n      --pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth: 0;\n      --pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth: 0;\n      --pf-c-table__compound-expansion-toggle__button--after--Top: 100%; }\n    .pf-m-grid-xl.pf-c-table tbody {\n      position: relative; }\n      .pf-m-grid-xl.pf-c-table tbody::after {\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        content: "";\n        border: 0;\n        border-left: var(--pf-c-table--tbody--after--BorderLeftWidth) solid var(--pf-c-table--tbody--after--BorderColor); }\n      .pf-m-grid-xl.pf-c-table tbody.pf-m-expanded {\n        --pf-c-table--tbody--after--BorderLeftWidth: var(--pf-c-table--tbody--after--border-width--base); }\n        .pf-m-grid-xl.pf-c-table tbody.pf-m-expanded tbody {\n          --pf-c-table--tbody--after--BorderLeftWidth: 0; }\n      .pf-m-grid-xl.pf-c-table tbody > tr > :first-child:not(.pf-c-table__check)::after {\n        --pf-c-table__expandable-row--after--BorderLeftWidth: 0;\n        position: static;\n        width: auto;\n        background-color: transparent; }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row {\n      --pf-c-table--cell--responsive--PaddingTop: 0;\n      --pf-c-table--cell--responsive--PaddingRight: 0;\n      --pf-c-table--cell--responsive--PaddingBottom: 0;\n      --pf-c-table--cell--responsive--PaddingLeft: 0;\n      --pf-c-table--cell--PaddingRight: 0;\n      --pf-c-table--cell--PaddingLeft: 0;\n      display: block;\n      max-height: var(--pf-c-table__expandable-row--MaxHeight);\n      overflow-y: auto;\n      border-bottom: none;\n      box-shadow: none; }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row > * {\n        position: static;\n        display: block; }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row.pf-m-expanded {\n        border-top-color: var(--pf-c-table--BorderColor); }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row > :first-child:not(.pf-c-table__check)::after {\n        content: none; }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row td.pf-m-no-padding .pf-c-table__expandable-row-content, .pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row th.pf-m-no-padding .pf-c-table__expandable-row-content {\n        padding: 0; }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row:not(.pf-m-expanded) {\n        display: none;\n        visibility: hidden; }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__expandable-row .pf-c-table__expandable-row-content {\n        padding-right: var(--pf-c-table__expandable-row-content--responsive--PaddingRight);\n        padding-left: var(--pf-c-table__expandable-row-content--responsive--PaddingLeft); }\n    .pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__toggle,\n    .pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__check,\n    .pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__favorite,\n    .pf-m-grid-xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__action {\n      width: auto;\n      padding: 0; }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__toggle {\n      grid-row-start: 20;\n      grid-column: -1;\n      justify-self: end;\n      padding-right: 0; }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__toggle::after {\n        content: none; }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__button {\n      --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n      --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n      --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n      --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft); }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__check,\n    .pf-m-grid-xl.pf-c-table .pf-c-table__favorite,\n    .pf-m-grid-xl.pf-c-table .pf-c-table__action {\n      grid-row-start: 1;\n      grid-column-start: 2; }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__check {\n      margin-top: var(--pf-c-table__check--responsive--MarginTop);\n      margin-left: var(--pf-c-table__check--responsive--MarginLeft); }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite {\n        margin-left: var(--pf-c-table--m-grid__check--favorite--MarginLeft); }\n        .pf-m-grid-xl.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite ~ .pf-c-table__action {\n          margin-left: var(--pf-c-table--m-grid__check--favorite--action--MarginLeft); }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__check ~ .pf-c-table__action {\n        margin-left: var(--pf-c-table__action--responsive--MarginLeft); }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__favorite {\n      margin-top: var(--pf-c-table--m-grid__favorite--MarginTop); }\n      .pf-m-grid-xl.pf-c-table .pf-c-table__favorite ~ .pf-c-table__action {\n        margin-left: var(--pf-c-table--m-grid__favorite--action--MarginLeft); }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__action {\n      margin-top: var(--pf-c-table--m-grid__action--MarginTop);\n      text-align: right; } }\n    @media screen and (max-width: 1200px) and (max-width: 576px) {\n      .pf-m-grid-xl.pf-c-table .pf-c-table__action {\n        grid-row-start: 1;\n        grid-column-start: 2;\n        margin-left: 0; } }\n\n@media screen and (max-width: 1200px) {\n    .pf-m-grid-xl.pf-c-table .pf-c-table__inline-edit-action {\n      grid-column: 2;\n      grid-row: 2; }\n    .pf-m-grid-xl.pf-c-table .pf-c-table__toggle-icon {\n      transition: var(--pf-c-table__toggle__icon--Transition); }\n      .pf-c-button.pf-m-expanded > .pf-m-grid-xl.pf-c-table .pf-c-table__toggle-icon {\n        transform: rotate(var(--pf-c-table__toggle--m-expanded__icon--Rotate)); }\n    .pf-m-grid-xl.pf-c-table .pf-m-nowrap {\n      --pf-c-table--cell--Overflow: auto; }\n    .pf-m-grid-xl.pf-c-table .pf-m-fit-content {\n      width: auto;\n      white-space: normal; }\n    .pf-m-grid-xl.pf-c-table .pf-m-truncate {\n      --pf-c-table--cell--MaxWidth: 100%; }\n    .pf-m-grid-xl.pf-c-table [class*="pf-m-width"] {\n      --pf-c-table--cell--Width: auto; } }\n\n@media screen and (max-width: 1450px) {\n  .pf-m-grid-2xl.pf-c-table {\n    --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n    --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n    --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n    --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft);\n    --pf-c-table__favorite--c-button--MarginTop: auto;\n    --pf-c-table__favorite--c-button--MarginRight: auto;\n    --pf-c-table__favorite--c-button--MarginBottom: auto;\n    --pf-c-table__favorite--c-button--MarginLeft: auto;\n    display: grid;\n    border: none; }\n    .pf-m-grid-2xl.pf-c-table tr > * {\n      width: auto;\n      min-width: 0;\n      max-width: none;\n      overflow: visible;\n      text-overflow: clip;\n      white-space: normal; }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__text {\n      position: relative;\n      width: auto;\n      min-width: 0;\n      max-width: none;\n      overflow: var(--pf-c-table--cell--Overflow);\n      text-overflow: var(--pf-c-table--cell--TextOverflow);\n      white-space: var(--pf-c-table--cell--WhiteSpace); }\n    .pf-m-grid-2xl.pf-c-table thead {\n      display: none;\n      visibility: hidden; }\n    .pf-m-grid-2xl.pf-c-table tbody {\n      display: block; }\n      .pf-m-grid-2xl.pf-c-table tbody:first-of-type {\n        border-top: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-2xl.pf-c-table table.pf-m-compact > tbody {\n      border-top: 0; }\n    .pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) {\n      border-bottom: var(--pf-c-table-tr--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-2xl.pf-c-table tr:last-child,\n    .pf-m-grid-2xl.pf-c-table tbody:last-of-type:not(:only-of-type) > tr {\n      border-bottom-width: var(--pf-c-table-tr--responsive--last-child--BorderBottomWidth); }\n    .pf-m-grid-2xl.pf-c-table tbody.pf-m-expanded {\n      border-bottom: var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor); }\n      .pf-m-grid-2xl.pf-c-table tbody.pf-m-expanded tr:not(.pf-c-table__expandable-row) {\n        border-bottom: 0; }\n      .pf-m-grid-2xl.pf-c-table tbody.pf-m-expanded:not(:last-of-type) {\n        border-bottom: var(--pf-c-table--tbody--responsive--border-width--base) solid var(--pf-c-table--responsive--BorderColor); }\n    .pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) {\n      display: grid;\n      grid-template-columns: 1fr;\n      height: auto;\n      grid-auto-columns: max-content;\n      grid-column-gap: var(--pf-c-table-tr--responsive--GridColumnGap);\n      padding: var(--pf-c-table-tr--responsive--PaddingTop) var(--pf-c-table-tr--responsive--PaddingRight) var(--pf-c-table-tr--responsive--PaddingBottom) var(--pf-c-table-tr--responsive--PaddingLeft); }\n      .pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) > * {\n        padding: var(--pf-c-table--cell--responsive--PaddingTop) var(--pf-c-table--cell--responsive--PaddingRight) var(--pf-c-table--cell--responsive--PaddingBottom) var(--pf-c-table--cell--responsive--PaddingLeft); }\n        .pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) > *:first-child {\n          --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--cell--first-child--responsive--PaddingTop); }\n    .pf-m-grid-2xl.pf-c-table.pf-m-compact {\n      --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table--m-compact-tr--responsive--PaddingTop);\n      --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr--responsive--PaddingBottom);\n      --pf-c-table--cell--responsive--PaddingTop: var(--pf-c-table--m-compact-tr-td--responsive--PaddingTop);\n      --pf-c-table--cell--responsive--PaddingBottom: var(--pf-c-table--m-compact-tr-td--responsive--PaddingBottom);\n      --pf-c-table__check--input--MarginTop: 0; }\n      .pf-m-grid-2xl.pf-c-table.pf-m-compact .pf-c-table__action {\n        margin-top: var(--pf-c-table--m-compact__action--responsive--MarginTop);\n        margin-bottom: var(--pf-c-table--m-compact__action--responsive--MarginTop); }\n      .pf-m-grid-2xl.pf-c-table.pf-m-compact .pf-c-table__toggle .pf-c-button {\n        margin-bottom: var(--pf-c-table--m-compact__toggle--c-button--responsive--MarginBottom); }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__icon > * {\n      text-align: left; }\n    .pf-m-grid-2xl.pf-c-table [data-label] {\n      --pf-c-table--cell--hidden-visible--Display: var(--pf-c-table--m-grid--cell--hidden-visible--Display);\n      grid-column: 1;\n      grid-column-gap: var(--pf-c-table-td--responsive--GridColumnGap);\n      grid-template-columns: 1fr minmax(0, 1.5fr);\n      align-items: start; }\n      .pf-m-grid-2xl.pf-c-table [data-label] > * {\n        grid-column: 2; }\n      .pf-m-grid-2xl.pf-c-table [data-label]::before {\n        font-weight: bold;\n        text-align: left;\n        content: attr(data-label); }\n    .pf-m-grid-2xl.pf-c-table tr > *:first-child {\n      --pf-c-table--cell--PaddingLeft: 0; }\n    .pf-m-grid-2xl.pf-c-table tr > *:last-child {\n      --pf-c-table--cell--PaddingRight: 0; }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table {\n      --pf-c-table-tr--responsive--PaddingTop: var(--pf-c-table-tr--responsive--nested-table--PaddingTop);\n      --pf-c-table-tr--responsive--PaddingRight: var(--pf-c-table-tr--responsive--nested-table--PaddingRight);\n      --pf-c-table-tr--responsive--PaddingBottom: var(--pf-c-table-tr--responsive--nested-table--PaddingBottom);\n      --pf-c-table-tr--responsive--PaddingLeft: var(--pf-c-table-tr--responsive--nested-table--PaddingLeft);\n      border: 0; }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table tr:not(.pf-c-table__expandable-row) + tr:not(.pf-c-table__expandable-row) {\n        --pf-c-table-tr--responsive--PaddingTop: 0; }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__compound-expansion-toggle {\n      --pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth: 0;\n      --pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth: 0;\n      --pf-c-table__compound-expansion-toggle__button--after--Top: 100%; }\n    .pf-m-grid-2xl.pf-c-table tbody {\n      position: relative; }\n      .pf-m-grid-2xl.pf-c-table tbody::after {\n        position: absolute;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        content: "";\n        border: 0;\n        border-left: var(--pf-c-table--tbody--after--BorderLeftWidth) solid var(--pf-c-table--tbody--after--BorderColor); }\n      .pf-m-grid-2xl.pf-c-table tbody.pf-m-expanded {\n        --pf-c-table--tbody--after--BorderLeftWidth: var(--pf-c-table--tbody--after--border-width--base); }\n        .pf-m-grid-2xl.pf-c-table tbody.pf-m-expanded tbody {\n          --pf-c-table--tbody--after--BorderLeftWidth: 0; }\n      .pf-m-grid-2xl.pf-c-table tbody > tr > :first-child:not(.pf-c-table__check)::after {\n        --pf-c-table__expandable-row--after--BorderLeftWidth: 0;\n        position: static;\n        width: auto;\n        background-color: transparent; }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row {\n      --pf-c-table--cell--responsive--PaddingTop: 0;\n      --pf-c-table--cell--responsive--PaddingRight: 0;\n      --pf-c-table--cell--responsive--PaddingBottom: 0;\n      --pf-c-table--cell--responsive--PaddingLeft: 0;\n      --pf-c-table--cell--PaddingRight: 0;\n      --pf-c-table--cell--PaddingLeft: 0;\n      display: block;\n      max-height: var(--pf-c-table__expandable-row--MaxHeight);\n      overflow-y: auto;\n      border-bottom: none;\n      box-shadow: none; }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row > * {\n        position: static;\n        display: block; }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row.pf-m-expanded {\n        border-top-color: var(--pf-c-table--BorderColor); }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row > :first-child:not(.pf-c-table__check)::after {\n        content: none; }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row td.pf-m-no-padding .pf-c-table__expandable-row-content, .pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row th.pf-m-no-padding .pf-c-table__expandable-row-content {\n        padding: 0; }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row:not(.pf-m-expanded) {\n        display: none;\n        visibility: hidden; }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__expandable-row .pf-c-table__expandable-row-content {\n        padding-right: var(--pf-c-table__expandable-row-content--responsive--PaddingRight);\n        padding-left: var(--pf-c-table__expandable-row-content--responsive--PaddingLeft); }\n    .pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__toggle,\n    .pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__check,\n    .pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__favorite,\n    .pf-m-grid-2xl.pf-c-table tr:not(.pf-c-table__expandable-row) .pf-c-table__action {\n      width: auto;\n      padding: 0; }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__toggle {\n      grid-row-start: 20;\n      grid-column: -1;\n      justify-self: end;\n      padding-right: 0; }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__toggle::after {\n        content: none; }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__button {\n      --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-grid--cell--PaddingTop);\n      --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-grid--cell--PaddingRight);\n      --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-grid--cell--PaddingBottom);\n      --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-grid--cell--PaddingLeft); }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__check,\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__favorite,\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__action {\n      grid-row-start: 1;\n      grid-column-start: 2; }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__check {\n      margin-top: var(--pf-c-table__check--responsive--MarginTop);\n      margin-left: var(--pf-c-table__check--responsive--MarginLeft); }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite {\n        margin-left: var(--pf-c-table--m-grid__check--favorite--MarginLeft); }\n        .pf-m-grid-2xl.pf-c-table .pf-c-table__check ~ .pf-c-table__favorite ~ .pf-c-table__action {\n          margin-left: var(--pf-c-table--m-grid__check--favorite--action--MarginLeft); }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__check ~ .pf-c-table__action {\n        margin-left: var(--pf-c-table__action--responsive--MarginLeft); }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__favorite {\n      margin-top: var(--pf-c-table--m-grid__favorite--MarginTop); }\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__favorite ~ .pf-c-table__action {\n        margin-left: var(--pf-c-table--m-grid__favorite--action--MarginLeft); }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__action {\n      margin-top: var(--pf-c-table--m-grid__action--MarginTop);\n      text-align: right; } }\n    @media screen and (max-width: 1450px) and (max-width: 576px) {\n      .pf-m-grid-2xl.pf-c-table .pf-c-table__action {\n        grid-row-start: 1;\n        grid-column-start: 2;\n        margin-left: 0; } }\n\n@media screen and (max-width: 1450px) {\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__inline-edit-action {\n      grid-column: 2;\n      grid-row: 2; }\n    .pf-m-grid-2xl.pf-c-table .pf-c-table__toggle-icon {\n      transition: var(--pf-c-table__toggle__icon--Transition); }\n      .pf-c-button.pf-m-expanded > .pf-m-grid-2xl.pf-c-table .pf-c-table__toggle-icon {\n        transform: rotate(var(--pf-c-table__toggle--m-expanded__icon--Rotate)); }\n    .pf-m-grid-2xl.pf-c-table .pf-m-nowrap {\n      --pf-c-table--cell--Overflow: auto; }\n    .pf-m-grid-2xl.pf-c-table .pf-m-fit-content {\n      width: auto;\n      white-space: normal; }\n    .pf-m-grid-2xl.pf-c-table .pf-m-truncate {\n      --pf-c-table--cell--MaxWidth: 100%; }\n    .pf-m-grid-2xl.pf-c-table [class*="pf-m-width"] {\n      --pf-c-table--cell--Width: auto; } }\n\n.pf-c-table {\n  --pf-c-table--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-table--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-table--border-width--base: var(--pf-global--BorderWidth--sm);\n  --pf-c-table-caption--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-table-caption--Color: var(--pf-global--Color--200);\n  --pf-c-table-caption--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-table-caption--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-table-caption--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-table-caption--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-table-caption--xl--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-table-caption--xl--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-table--thead--cell--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-table--thead--cell--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-table--tbody--cell--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-table--tbody--cell--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-table--cell--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-table--cell--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-table--cell--Color: var(--pf-global--Color--100);\n  --pf-c-table--cell--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-table--cell--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-table--cell--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-table--cell--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-table--cell--first-last-child--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-table--cell--first-last-child--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-table--cell--first-last-child--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-table--cell--first-last-child--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-table--cell--MinWidth: 0;\n  --pf-c-table--cell--MaxWidth: none;\n  --pf-c-table--cell--Width: auto;\n  --pf-c-table--cell--Overflow: visible;\n  --pf-c-table--cell--TextOverflow: clip;\n  --pf-c-table--cell--WhiteSpace: normal;\n  --pf-c-table--cell--WordBreak: normal;\n  --pf-c-table--cell--m-help--MinWidth: 11ch;\n  --pf-c-table--m-truncate--cell--MaxWidth: 1px;\n  --pf-c-table--m-truncate--cell--MinWidth: calc(5ch + var(--pf-c-table--cell--PaddingRight) + var(--pf-c-table--cell--PaddingLeft));\n  --pf-c-table--cell--hidden-visible--Display: table-cell;\n  --pf-c-table__toggle--c-button--MarginTop: calc(0.375rem * -1);\n  --pf-c-table__toggle--c-button__toggle-icon--Rotate: 270deg;\n  --pf-c-table__toggle--c-button__toggle-icon--Transition: .2s ease-in 0s;\n  --pf-c-table__toggle--c-button--m-expanded__toggle-icon--Rotate: 360deg;\n  --pf-c-table__button--BackgroundColor: transparent;\n  --pf-c-table__button--Color: var(--pf-global--Color--100);\n  --pf-c-table__button--hover--Color: var(--pf-global--Color--100);\n  --pf-c-table__button--focus--Color: var(--pf-global--Color--100);\n  --pf-c-table__button--active--Color: var(--pf-global--Color--100);\n  --pf-c-table__button--OutlineOffset: calc(var(--pf-global--BorderWidth--lg) * -1);\n  --pf-c-table--m-compact__toggle--PaddingTop: 0;\n  --pf-c-table--m-compact__toggle--PaddingBottom: 0;\n  --pf-c-table__check--input--MarginTop: 0.25rem;\n  --pf-c-table__check--input--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-table--cell--m-favorite--Color: var(--pf-global--Color--light-300);\n  --pf-c-table__favorite--c-button--Color: var(--pf-global--Color--light-300);\n  --pf-c-table__favorite--c-button--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-table__favorite--c-button--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-table__favorite--c-button--MarginRight: calc(var(--pf-global--spacer--md) * -1);\n  --pf-c-table__favorite--c-button--MarginBottom: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-table__favorite--c-button--MarginLeft: calc(var(--pf-global--spacer--md) * -1);\n  --pf-c-table__favorite--m-favorited--c-button--Color: var(--pf-global--palette--gold-400);\n  --pf-c-table__action--PaddingTop: 0;\n  --pf-c-table__action--PaddingRight: 0;\n  --pf-c-table__action--PaddingBottom: 0;\n  --pf-c-table__action--PaddingLeft: 0;\n  --pf-c-table__inline-edit-action--PaddingTop: 0;\n  --pf-c-table__inline-edit-action--PaddingRight: 0;\n  --pf-c-table__inline-edit-action--PaddingBottom: 0;\n  --pf-c-table__inline-edit-action--PaddingLeft: 0;\n  --pf-c-table__expandable-row--Transition: var(--pf-global--Transition);\n  --pf-c-table__expandable-row--MaxHeight: 28.125rem;\n  --pf-c-table__expandable-row-content--Transition: var(--pf-global--Transition);\n  --pf-c-table__expandable-row-content--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-table__expandable-row-content--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-table__expandable-row--after--Top: calc(var(--pf-c-table--border-width--base) * -1);\n  --pf-c-table__expandable-row--after--Bottom: calc(var(--pf-c-table--border-width--base) * -1);\n  --pf-c-table__expandable-row--after--border-width--base: var(--pf-global--BorderWidth--lg);\n  --pf-c-table__expandable-row--after--BorderLeftWidth: 0;\n  --pf-c-table__expandable-row--after--BorderColor: var(--pf-global--active-color--100);\n  --pf-c-table__icon-inline--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-table__sort--MinWidth: calc(6ch + var(--pf-c-table--cell--PaddingRight) + var(--pf-c-table--cell--PaddingLeft) + var(--pf-c-table__sort-indicator--MarginLeft));\n  --pf-c-table__sort__button--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-table__sort__button--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-table__sort__button--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-table__sort__button--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-table__sort__button--MarginTop: calc(var(--pf-c-table__sort__button--PaddingTop) * -1);\n  --pf-c-table__sort__button--MarginBottom: calc(var(--pf-c-table__sort__button--PaddingBottom) * -1);\n  --pf-c-table__sort__button--MarginLeft: calc(var(--pf-c-table__sort__button--PaddingLeft) * -1);\n  --pf-c-table__sort__button--Color: var(--pf-global--Color--100);\n  --pf-c-table__sort--m-selected__button--Color: var(--pf-global--active-color--100);\n  --pf-c-table__sort--m-help--MinWidth: 15ch;\n  --pf-c-table__sort-indicator--Color: var(--pf-global--disabled-color--200);\n  --pf-c-table__sort-indicator--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-table__sort--m-selected__sort-indicator--Color: var(--pf-global--active-color--100);\n  --pf-c-table__sort__button--hover__sort-indicator--Color: var(--pf-global--Color--100);\n  --pf-c-table__sort__button--active__sort-indicator--Color: var(--pf-global--Color--100);\n  --pf-c-table__sort__button--focus__sort-indicator--Color: var(--pf-global--Color--100);\n  --pf-c-table--th--m-help--MinWidth: 11ch;\n  --pf-c-table__column-help--MarginLeft: var(--pf-global--spacer--xs);\n  --pf-c-table__column-help--TranslateY: 0.125rem;\n  --pf-c-table__column-help--c-button--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-table__column-help--c-button--MarginBottom: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-table__column-help--c-button--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-table__column-help--c-button--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-table__compound-expansion-toggle__button--Color: var(--pf-global--active-color--100);\n  --pf-c-table__compound-expansion-toggle__button--hover--Color: var(--pf-global--link--Color--hover);\n  --pf-c-table__compound-expansion-toggle__button--focus--Color: var(--pf-global--link--Color--hover);\n  --pf-c-table__compound-expansion-toggle__button--active--Color: var(--pf-global--link--Color--hover);\n  --pf-c-table__compound-expansion-toggle__button--before--border-width--base: var(--pf-global--BorderWidth--sm);\n  --pf-c-table__compound-expansion-toggle__button--before--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth: 0;\n  --pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth: 0;\n  --pf-c-table__compound-expansion-toggle__button--before--Bottom: calc(var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base) * -1);\n  --pf-c-table__compound-expansion-toggle__button--before--Left: calc(var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base) * -1);\n  --pf-c-table__compound-expansion-toggle__button--after--border-width--base: var(--pf-global--BorderWidth--lg);\n  --pf-c-table__compound-expansion-toggle__button--after--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-table__compound-expansion-toggle__button--after--BorderTopWidth: 0;\n  --pf-c-table__compound-expansion-toggle__button--after--Top: calc(var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base) * -1);\n  --pf-c-table__compound-expansion-toggle__button--after--Left: calc(var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base) * -1);\n  --pf-c-table--m-compact-th--PaddingTop: calc(var(--pf-global--spacer--sm) + var(--pf-global--spacer--xs));\n  --pf-c-table--m-compact-th--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-table--m-compact--cell--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-table--m-compact--cell--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-table--m-compact--cell--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-table--m-compact--cell--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-table--m-compact--cell--first-last-child--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-table--m-compact--cell--first-last-child--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-table--m-compact--cell--first-last-child--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-table--m-compact--cell--first-last-child--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-table--m-compact--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-table--m-compact__expandable-row-content--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-table--m-compact__expandable-row-content--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-table--m-compact__expandable-row-content--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-table--m-compact__expandable-row-content--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-table--nested--first-last-child--PaddingRight: var(--pf-global--spacer--3xl);\n  --pf-c-table--nested--first-last-child--PaddingLeft: var(--pf-global--spacer--3xl);\n  --pf-c-table__expandable-row--m-expanded--BorderBottomColor: var(--pf-global--BorderColor--100);\n  color: var(--pf-global--Color--100);\n  width: 100%;\n  background-color: var(--pf-c-table--BackgroundColor); }\n  @media screen and (max-width: 1200px) {\n    .pf-c-table {\n      --pf-c-table-caption--PaddingRight: var(--pf-c-table-caption--xl--PaddingRight);\n      --pf-c-table-caption--PaddingLeft: var(--pf-c-table-caption--xl--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-table {\n      --pf-c-table--cell--first-last-child--PaddingRight: var(--pf-c-table--cell--first-last-child--xl--PaddingRight);\n      --pf-c-table--cell--first-last-child--PaddingLeft: var(--pf-c-table--cell--first-last-child--xl--PaddingLeft);\n      --pf-c-table--m-compact--cell--first-last-child--PaddingLeft: var(--pf-c-table--m-compact--cell--first-last-child--xl--PaddingLeft);\n      --pf-c-table--m-compact--cell--first-last-child--PaddingRight: var(--pf-c-table--m-compact--cell--first-last-child--xl--PaddingRight); } }\n  .pf-c-table.pf-m-fixed {\n    table-layout: fixed; }\n  .pf-c-table.pf-m-sticky-header {\n    position: relative; }\n    .pf-c-table.pf-m-sticky-header > thead > tr {\n      border-bottom: 0; }\n      .pf-c-table.pf-m-sticky-header > thead > tr > * {\n        position: sticky;\n        top: 0;\n        z-index: var(--pf-global--ZIndex--xs);\n        background: var(--pf-c-table--BackgroundColor); }\n        .pf-c-table.pf-m-sticky-header > thead > tr > *::after {\n          position: absolute;\n          right: 0;\n          bottom: 0;\n          left: 0;\n          content: "";\n          border-bottom: var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor); }\n  .pf-c-table tr:not(.pf-c-table__expandable-row) {\n    border-bottom: var(--pf-c-table--border-width--base) solid var(--pf-c-table--BorderColor); }\n  .pf-c-table tr > * {\n    --pf-hidden-visible--visible--Display: var(--pf-c-table--cell--hidden-visible--Display);\n    position: relative;\n    width: var(--pf-c-table--cell--Width);\n    min-width: var(--pf-c-table--cell--MinWidth);\n    max-width: var(--pf-c-table--cell--MaxWidth);\n    padding: var(--pf-c-table--cell--PaddingTop) var(--pf-c-table--cell--PaddingRight) var(--pf-c-table--cell--PaddingBottom) var(--pf-c-table--cell--PaddingLeft);\n    overflow: var(--pf-c-table--cell--Overflow);\n    font-size: var(--pf-c-table--cell--FontSize);\n    font-weight: var(--pf-c-table--cell--FontWeight);\n    color: var(--pf-c-table--cell--Color);\n    text-overflow: var(--pf-c-table--cell--TextOverflow);\n    word-break: var(--pf-c-table--cell--WordBreak);\n    white-space: var(--pf-c-table--cell--WhiteSpace); }\n    .pf-c-table tr > *:first-child {\n      --pf-c-table--cell--PaddingLeft: var(--pf-c-table--cell--first-last-child--PaddingLeft); }\n    .pf-c-table tr > *:last-child {\n      --pf-c-table--cell--PaddingRight: var(--pf-c-table--cell--first-last-child--PaddingRight); }\n    .pf-c-table tr > *.pf-m-center {\n      text-align: center; }\n    .pf-c-table tr > *:empty {\n      width: auto;\n      min-width: 0;\n      padding: 0; }\n    .pf-c-table tr > *.pf-m-help {\n      --pf-c-table--cell--MinWidth: var(--pf-c-table--cell--m-help--MinWidth); }\n    .pf-c-table tr > *.pf-m-favorite {\n      --pf-c-table__button--Color: var(--pf-c-table--cell--m-favorite--Color);\n      --pf-c-table__sort--MinWidth: fit-content;\n      --pf-c-table--cell--MaxWidth: fit-content;\n      --pf-c-table--cell--Overflow: visible; }\n  .pf-c-table caption {\n    padding-top: var(--pf-c-table-caption--PaddingTop);\n    padding-bottom: var(--pf-c-table-caption--PaddingBottom);\n    padding-left: var(--pf-c-table-caption--PaddingLeft);\n    font-size: var(--pf-c-table-caption--FontSize);\n    color: var(--pf-c-table-caption--Color);\n    text-align: left;\n    background-color: var(--pf-c-table--BackgroundColor); }\n  .pf-c-table thead {\n    --pf-c-table--cell--FontSize: var(--pf-c-table--thead--cell--FontSize);\n    --pf-c-table--cell--FontWeight: var(--pf-c-table--thead--cell--FontWeight);\n    vertical-align: bottom; }\n  .pf-c-table tbody {\n    --pf-c-table--cell--PaddingTop: var(--pf-c-table--tbody--cell--PaddingTop);\n    --pf-c-table--cell--PaddingBottom: var(--pf-c-table--tbody--cell--PaddingBottom); }\n    .pf-c-table tbody > tr > * {\n      overflow-wrap: break-word;\n      vertical-align: baseline; }\n    .pf-c-table tbody > tr > :first-child::after {\n      position: absolute;\n      top: var(--pf-c-table__expandable-row--after--Top);\n      bottom: var(--pf-c-table__expandable-row--after--Bottom);\n      left: 0;\n      content: "";\n      background-color: transparent;\n      border-left: var(--pf-c-table__expandable-row--after--BorderLeftWidth) solid var(--pf-c-table__expandable-row--after--BorderColor); }\n    .pf-c-table tbody .pf-c-table__check > input {\n      margin-top: var(--pf-c-table__check--input--MarginTop);\n      vertical-align: top; }\n  .pf-c-table .pf-c-table__compound-expansion-toggle, .pf-c-table .pf-c-table__compound-expansion-toggle:first-child, .pf-c-table .pf-c-table__compound-expansion-toggle:last-child {\n    padding: 0; }\n  .pf-c-table .pf-c-table__sort {\n    min-width: var(--pf-c-table__sort--MinWidth); }\n  .pf-c-table .pf-m-help {\n    min-width: var(--pf-c-table--th--m-help--MinWidth); }\n  .pf-c-table thead,\n  .pf-c-table .pf-m-truncate {\n    --pf-c-table--cell--MinWidth: var(--pf-c-table--m-truncate--cell--MinWidth);\n    --pf-c-table--cell--MaxWidth: var(--pf-c-table--m-truncate--cell--MaxWidth);\n    --pf-c-table--cell--Overflow: hidden;\n    --pf-c-table--cell--TextOverflow: ellipsis;\n    --pf-c-table--cell--WhiteSpace: nowrap; }\n  .pf-c-table .pf-m-wrap {\n    --pf-c-table--cell--MinWidth: 0;\n    --pf-c-table--cell--MaxWidth: none;\n    --pf-c-table--cell--Overflow: visible;\n    --pf-c-table--cell--TextOverflow: clip;\n    --pf-c-table--cell--WhiteSpace: normal; }\n  .pf-c-table .pf-m-nowrap {\n    --pf-c-table--cell--MinWidth: 0;\n    --pf-c-table--cell--MaxWidth: none;\n    --pf-c-table--cell--Overflow: visible;\n    --pf-c-table--cell--TextOverflow: clip;\n    --pf-c-table--cell--WhiteSpace: nowrap; }\n  .pf-c-table .pf-c-table__icon,\n  .pf-c-table .pf-m-fit-content {\n    --pf-c-table--cell--MinWidth: fit-content;\n    --pf-c-table--cell--MaxWidth: fit-content;\n    --pf-c-table--cell--Width: 1%;\n    --pf-c-table--cell--Overflow: visible;\n    --pf-c-table--cell--TextOverflow: clip;\n    --pf-c-table--cell--WhiteSpace: nowrap; }\n  .pf-c-table .pf-m-break-word {\n    --pf-c-table--cell--WordBreak: break-word;\n    --pf-c-table--cell--WhiteSpace: normal; }\n\n.pf-c-table__text {\n  --pf-c-table--cell--MaxWidth: 100%;\n  position: relative;\n  display: block;\n  width: var(--pf-c-table--cell--Width);\n  min-width: var(--pf-c-table--cell--MinWidth);\n  max-width: var(--pf-c-table--cell--MaxWidth);\n  overflow: var(--pf-c-table--cell--Overflow);\n  text-overflow: var(--pf-c-table--cell--TextOverflow);\n  word-break: var(--pf-c-table--cell--WordBreak);\n  white-space: var(--pf-c-table--cell--WhiteSpace); }\n  .pf-c-table__text.pf-m-truncate {\n    --pf-c-table--cell--MinWidth: 100%; }\n    .pf-c-table__text.pf-m-truncate > * {\n      overflow: var(--pf-c-table--cell--Overflow);\n      text-overflow: var(--pf-c-table--cell--TextOverflow);\n      white-space: var(--pf-c-table--cell--WhiteSpace); }\n\n.pf-c-table__button {\n  position: static;\n  width: 100%;\n  padding: var(--pf-c-table--cell--PaddingTop) var(--pf-c-table--cell--PaddingRight) var(--pf-c-table--cell--PaddingBottom) var(--pf-c-table--cell--PaddingLeft);\n  font-size: inherit;\n  font-weight: inherit;\n  color: var(--pf-c-table__button--Color);\n  text-align: left;\n  white-space: inherit;\n  user-select: text;\n  background-color: var(--pf-c-table__button--BackgroundColor);\n  border: 0; }\n  .pf-c-table__button::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    cursor: pointer;\n    content: ""; }\n  .pf-c-table__button:hover {\n    color: var(--pf-c-table__button--hover--Color); }\n  .pf-c-table__button:focus {\n    color: var(--pf-c-table__button--focus--Color); }\n  .pf-c-table__button:active {\n    color: var(--pf-c-table__button--active--Color); }\n\n.pf-c-table__sort .pf-c-table__text,\n.pf-c-table__compound-expansion-toggle .pf-c-table__text {\n  display: block;\n  width: auto;\n  overflow: var(--pf-c-table--cell--Overflow);\n  text-overflow: var(--pf-c-table--cell--TextOverflow);\n  white-space: var(--pf-c-table--cell--WhiteSpace); }\n\n.pf-c-table__sort .pf-c-table__text {\n  --pf-c-table--cell--MinWidth: 0; }\n\n.pf-c-table__button-content,\n.pf-c-table__column-help {\n  display: inline-grid;\n  align-items: end;\n  justify-content: start;\n  grid-template-columns: auto max-content; }\n  .pf-c-table__button-content .pf-c-table__text,\n  .pf-c-table__column-help .pf-c-table__text {\n    min-width: auto; }\n  .pf-c-table thead.pf-m-nowrap .pf-c-table__button-content,\n  .pf-c-table tr.pf-m-nowrap .pf-c-table__button-content,\n  .pf-c-table th.pf-m-nowrap .pf-c-table__button-content, .pf-c-table thead.pf-m-nowrap\n  .pf-c-table__column-help,\n  .pf-c-table tr.pf-m-nowrap\n  .pf-c-table__column-help,\n  .pf-c-table th.pf-m-nowrap\n  .pf-c-table__column-help {\n    grid-template-columns: min-content max-content; }\n  .pf-c-table thead.pf-m-fit-content .pf-c-table__button-content,\n  .pf-c-table tr.pf-m-fit-content .pf-c-table__button-content,\n  .pf-c-table th.pf-m-fit-content .pf-c-table__button-content, .pf-c-table thead.pf-m-fit-content\n  .pf-c-table__column-help,\n  .pf-c-table tr.pf-m-fit-content\n  .pf-c-table__column-help,\n  .pf-c-table th.pf-m-fit-content\n  .pf-c-table__column-help {\n    grid-template-columns: fit-content max-content; }\n  .pf-c-table thead.pf-m-wrap .pf-c-table__button-content,\n  .pf-c-table tr.pf-m-wrap .pf-c-table__button-content,\n  .pf-c-table th.pf-m-wrap .pf-c-table__button-content,\n  .pf-c-table thead.pf-m-truncate .pf-c-table__button-content,\n  .pf-c-table tr.pf-m-truncate .pf-c-table__button-content,\n  .pf-c-table th.pf-m-truncate .pf-c-table__button-content, .pf-c-table thead.pf-m-wrap\n  .pf-c-table__column-help,\n  .pf-c-table tr.pf-m-wrap\n  .pf-c-table__column-help,\n  .pf-c-table th.pf-m-wrap\n  .pf-c-table__column-help,\n  .pf-c-table thead.pf-m-truncate\n  .pf-c-table__column-help,\n  .pf-c-table tr.pf-m-truncate\n  .pf-c-table__column-help,\n  .pf-c-table th.pf-m-truncate\n  .pf-c-table__column-help {\n    grid-template-columns: auto max-content; }\n\n.pf-c-table .pf-c-table__toggle,\n.pf-c-table .pf-c-table__action,\n.pf-c-table .pf-c-table__inline-edit-action {\n  --pf-c-table--cell--PaddingBottom: 0; }\n\n.pf-c-table .pf-c-table__check,\n.pf-c-table .pf-c-table__toggle,\n.pf-c-table .pf-c-table__action,\n.pf-c-table .pf-c-table__favorite,\n.pf-c-table th.pf-m-favorite,\n.pf-c-table .pf-c-table__inline-edit-action {\n  --pf-c-table--cell--MinWidth: 0;\n  --pf-c-table--cell--Width: 1%; }\n\n.pf-c-table__toggle {\n  --pf-c-table--cell--PaddingRight: 0;\n  --pf-c-table--cell--PaddingLeft: 0;\n  vertical-align: top; }\n  .pf-c-table__toggle .pf-c-button {\n    margin-top: var(--pf-c-table__toggle--c-button--MarginTop); }\n    .pf-c-table__toggle .pf-c-button.pf-m-expanded .pf-c-table__toggle-icon {\n      transform: rotate(var(--pf-c-table__toggle--c-button--m-expanded__toggle-icon--Rotate)); }\n  .pf-c-table__toggle .pf-c-table__toggle-icon {\n    transition: var(--pf-c-table__toggle--c-button__toggle-icon--Transition);\n    transform: rotate(var(--pf-c-table__toggle--c-button__toggle-icon--Rotate)); }\n  .pf-c-table__toggle svg {\n    pointer-events: none; }\n\n.pf-c-table__check {\n  --pf-c-table--cell--FontSize: var(--pf-c-table__check--input--FontSize); }\n\n.pf-c-table__favorite .pf-c-button {\n  --pf-c-button--m-plain--Color: var(--pf-c-table__favorite--c-button--Color);\n  --pf-c-button--FontSize: var(--pf-c-table__favorite--c-button--FontSize);\n  margin: var(--pf-c-table__favorite--c-button--MarginTop) var(--pf-c-table__favorite--c-button--MarginRight) var(--pf-c-table__favorite--c-button--MarginBottom) var(--pf-c-table__favorite--c-button--MarginLeft); }\n  .pf-m-favorited.pf-c-table__favorite .pf-c-button {\n    --pf-c-button--m-plain--Color: var(--pf-c-table__favorite--m-favorited--c-button--Color); }\n\n.pf-c-table__action,\n.pf-c-table__inline-edit-action {\n  --pf-c-table--cell--PaddingTop: 0;\n  --pf-c-table--cell--PaddingRight: var(--pf-c-table__action--PaddingRight);\n  --pf-c-table--cell--PaddingBottom: 0;\n  --pf-c-table--cell--PaddingLeft: var(--pf-c-table__action--PaddingLeft);\n  padding-top: 0;\n  padding-bottom: 0;\n  vertical-align: middle; }\n\n.pf-c-table__inline-edit-action {\n  --pf-c-table--cell--PaddingLeft: 0;\n  --pf-c-table--cell--PaddingRight: 0;\n  text-align: right; }\n\n.pf-c-table__compound-expansion-toggle {\n  --pf-c-table__button--Color: var(--pf-c-table__compound-expansion-toggle__button--Color);\n  --pf-c-table__button--hover--Color: var(--pf-c-table__compound-expansion-toggle__button--hover--Color);\n  --pf-c-table__button--focus--Color: var(--pf-c-table__compound-expansion-toggle__button--focus--Color);\n  --pf-c-table__button--active--Color: var(--pf-c-table__compound-expansion-toggle__button--active--Color);\n  position: relative; }\n  .pf-c-table__compound-expansion-toggle.pf-m-truncate {\n    overflow: visible; }\n  .pf-c-table__compound-expansion-toggle .pf-c-table__button {\n    min-width: 100%;\n    overflow: hidden; }\n    .pf-c-table__compound-expansion-toggle .pf-c-table__button:hover, .pf-c-table__compound-expansion-toggle .pf-c-table__button:focus, .pf-c-table__compound-expansion-toggle .pf-c-table__button:active {\n      outline: 0; }\n  .pf-c-table__compound-expansion-toggle .pf-c-table__button::before,\n  .pf-c-table__compound-expansion-toggle .pf-c-table__button::after {\n    position: absolute;\n    right: 0;\n    content: "";\n    border-style: solid;\n    border-width: 0; }\n  .pf-c-table__compound-expansion-toggle .pf-c-table__button::before {\n    top: 0;\n    bottom: var(--pf-c-table__compound-expansion-toggle__button--before--Bottom);\n    left: var(--pf-c-table__compound-expansion-toggle__button--before--Left);\n    border-color: var(--pf-c-table__compound-expansion-toggle__button--before--BorderColor);\n    border-right-width: var(--pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth);\n    border-left-width: var(--pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth); }\n  .pf-c-table__compound-expansion-toggle .pf-c-table__button::after {\n    top: var(--pf-c-table__compound-expansion-toggle__button--after--Top);\n    left: var(--pf-c-table__compound-expansion-toggle__button--after--Left);\n    pointer-events: none;\n    border-color: var(--pf-c-table__compound-expansion-toggle__button--after--BorderColor);\n    border-top-width: var(--pf-c-table__compound-expansion-toggle__button--after--BorderTopWidth); }\n  .pf-c-table__compound-expansion-toggle:hover, .pf-c-table__compound-expansion-toggle:focus-within, .pf-c-table__compound-expansion-toggle.pf-m-expanded {\n    --pf-c-table__compound-expansion-toggle__button--before--BorderRightWidth: var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base);\n    --pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth: var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base);\n    --pf-c-table__compound-expansion-toggle__button--after--BorderTopWidth: var(--pf-c-table__compound-expansion-toggle__button--after--border-width--base); }\n  .pf-c-table__compound-expansion-toggle:first-child {\n    --pf-c-table__compound-expansion-toggle__button--before--Left: 0;\n    --pf-c-table__compound-expansion-toggle__button--after--Left: 0; }\n  .pf-c-table__compound-expansion-toggle.pf-m-expanded .pf-c-table__button::before {\n    border-bottom: var(--pf-c-table--BackgroundColor) solid var(--pf-c-table__compound-expansion-toggle__button--before--border-width--base); }\n  .pf-c-table__compound-expansion-toggle.pf-m-expanded:first-child {\n    --pf-c-table__compound-expansion-toggle__button--before--BorderLeftWidth: 0; }\n  .pf-c-table__compound-expansion-toggle:focus-within {\n    outline-offset: var(--pf-c-table__button--OutlineOffset); }\n    @media (-webkit-min-device-pixel-ratio: 0) {\n      .pf-c-table__compound-expansion-toggle:focus-within {\n        outline-style: auto;\n        outline-color: -webkit-focus-ring-color; } }\n\n.pf-c-table__column-help-action {\n  margin-left: var(--pf-c-table__column-help--MarginLeft);\n  transform: translateY(var(--pf-c-table__column-help--TranslateY)); }\n  .pf-c-table__column-help-action .pf-c-button {\n    --pf-c-button--PaddingRight: var(--pf-c-table__column-help--c-button--PaddingRight);\n    --pf-c-button--PaddingLeft: var(--pf-c-table__column-help--c-button--PaddingLeft);\n    margin-top: var(--pf-c-table__column-help--c-button--MarginTop);\n    margin-bottom: var(--pf-c-table__column-help--c-button--MarginBottom);\n    font-size: inherit;\n    line-height: 1; }\n\n.pf-c-table__sort .pf-c-table__button {\n  --pf-c-table--cell--PaddingTop: var(--pf-c-table__sort__button--PaddingTop);\n  --pf-c-table--cell--PaddingRight: var(--pf-c-table__sort__button--PaddingRight);\n  --pf-c-table--cell--PaddingBottom: var(--pf-c-table__sort__button--PaddingBottom);\n  --pf-c-table--cell--PaddingLeft: var(--pf-c-table__sort__button--PaddingLeft);\n  display: flex;\n  width: auto;\n  margin-top: var(--pf-c-table__sort__button--MarginTop);\n  margin-bottom: var(--pf-c-table__sort__button--MarginBottom);\n  margin-left: var(--pf-c-table__sort__button--MarginLeft); }\n  .pf-c-table__sort .pf-c-table__button:hover {\n    --pf-c-table__sort-indicator--Color: var(--pf-c-table__sort__button--hover__sort-indicator--Color); }\n  .pf-c-table__sort .pf-c-table__button:focus {\n    --pf-c-table__sort-indicator--Color: var(--pf-c-table__sort__button--focus__sort-indicator--Color); }\n  .pf-c-table__sort .pf-c-table__button:active {\n    --pf-c-table__sort-indicator--Color: var(--pf-c-table__sort__button--active__sort-indicator--Color); }\n\n.pf-c-table__sort.pf-m-selected .pf-c-table__button {\n  --pf-c-table__sort-indicator--Color: var(--pf-c-table__sort--m-selected__sort-indicator--Color);\n  color: var(--pf-c-table__sort--m-selected__button--Color); }\n\n.pf-c-table__sort.pf-m-help {\n  --pf-c-table--th--m-help--MinWidth: var(--pf-c-table__sort--m-help--MinWidth); }\n\n.pf-c-table__sort-indicator {\n  grid-column: 2;\n  margin-left: var(--pf-c-table__sort-indicator--MarginLeft);\n  color: var(--pf-c-table__sort-indicator--Color);\n  pointer-events: none; }\n\n.pf-c-table__expandable-row {\n  --pf-c-table--cell--PaddingTop: 0;\n  --pf-c-table--cell--PaddingBottom: 0;\n  position: relative;\n  border-bottom: 0 solid transparent;\n  box-shadow: 0 0 0 0 transparent; }\n  .pf-c-table__expandable-row,\n  .pf-c-table__expandable-row td:first-child::after {\n    transition: var(--pf-c-table__expandable-row--Transition); }\n  .pf-c-table__expandable-row td.pf-m-no-padding,\n  .pf-c-table__expandable-row th.pf-m-no-padding {\n    padding: 0 0 0 var(--pf-c-table__expandable-row--after--border-width--base); }\n    .pf-c-table__expandable-row td.pf-m-no-padding .pf-c-table__expandable-row-content,\n    .pf-c-table__expandable-row th.pf-m-no-padding .pf-c-table__expandable-row-content {\n      padding: 0; }\n  .pf-c-table__expandable-row .pf-c-table__expandable-row-content {\n    padding-top: var(--pf-c-table__expandable-row-content--PaddingTop);\n    padding-bottom: var(--pf-c-table__expandable-row-content--PaddingBottom); }\n  .pf-c-table__expandable-row.pf-m-expanded {\n    border-bottom-color: var(--pf-c-table__expandable-row--m-expanded--BorderBottomColor);\n    border-bottom-width: var(--pf-c-table--border-width--base);\n    box-shadow: var(--pf-c-table__expandable-row--m-expanded--BoxShadow); }\n  .pf-c-table__expandable-row:not(.pf-m-expanded) {\n    display: none;\n    visibility: hidden; }\n\n.pf-c-table__compound-expansion-toggle.pf-m-expanded:first-child,\n.pf-c-table__expandable-row.pf-m-expanded > :first-child,\n.pf-c-table tbody.pf-m-expanded > tr > :not(.pf-c-table__compound-expansion-toggle) {\n  --pf-c-table__expandable-row--after--BorderLeftWidth: var(--pf-c-table__expandable-row--after--border-width--base); }\n\n.pf-c-table .pf-c-table tr > *:first-child {\n  --pf-c-table--cell--PaddingLeft: var(--pf-c-table--nested--first-last-child--PaddingLeft); }\n\n.pf-c-table .pf-c-table tr > *:last-child {\n  --pf-c-table--cell--PaddingRight: var(--pf-c-table--nested--first-last-child--PaddingRight); }\n\n.pf-c-table.pf-m-compact {\n  --pf-c-table--cell--FontSize: var(--pf-c-table--m-compact--FontSize);\n  --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-compact--cell--PaddingTop);\n  --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-compact--cell--PaddingRight);\n  --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-compact--cell--PaddingBottom);\n  --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-compact--cell--PaddingLeft); }\n  .pf-c-table.pf-m-compact.pf-m-no-border-rows:not(.pf-m-expandable) tbody {\n    --pf-c-table--border-width--base: 0;\n    --pf-c-table--BorderColor: transparent; }\n  .pf-c-table.pf-m-compact tr {\n    --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-compact--cell--PaddingLeft);\n    --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-compact--cell--PaddingRight); }\n    .pf-c-table.pf-m-compact tr:not(.pf-c-table__expandable-row) {\n      --pf-c-table--cell--FontSize: var(--pf-c-table--m-compact--FontSize);\n      --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-compact--cell--PaddingTop);\n      --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-compact--cell--PaddingBottom); }\n      .pf-c-table.pf-m-compact tr:not(.pf-c-table__expandable-row) > *:first-child {\n        --pf-c-table--cell--PaddingLeft: var(--pf-c-table--m-compact--cell--first-last-child--PaddingLeft); }\n      .pf-c-table.pf-m-compact tr:not(.pf-c-table__expandable-row) > *:last-child {\n        --pf-c-table--cell--PaddingRight: var(--pf-c-table--m-compact--cell--first-last-child--PaddingRight); }\n  .pf-c-table.pf-m-compact thead th {\n    --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-compact-th--PaddingTop);\n    --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-compact-th--PaddingBottom); }\n  .pf-c-table.pf-m-compact .pf-c-table__action {\n    --pf-c-table--cell--PaddingTop: var(--pf-c-table__action--PaddingTop);\n    --pf-c-table--cell--PaddingBottom: var(--pf-c-table__action--PaddingBottom);\n    --pf-c-table--cell--PaddingLeft: var(--pf-c-table__action--PaddingLeft); }\n  .pf-c-table.pf-m-compact .pf-c-table__toggle {\n    --pf-c-table--cell--PaddingTop: var(--pf-c-table--m-compact__toggle--PaddingTop);\n    --pf-c-table--cell--PaddingBottom: var(--pf-c-table--m-compact__toggle--PaddingBottom); }\n  .pf-c-table.pf-m-compact .pf-c-table__icon {\n    width: auto;\n    min-width: 0;\n    text-align: center; }\n  .pf-c-table .pf-c-table.pf-m-compact tr > *:first-child {\n    --pf-c-table--cell--PaddingLeft: var(--pf-c-table--nested--first-last-child--PaddingLeft); }\n  .pf-c-table .pf-c-table.pf-m-compact tr > *:last-child {\n    --pf-c-table--cell--PaddingRight: var(--pf-c-table--nested--first-last-child--PaddingRight); }\n  .pf-c-table.pf-m-compact .pf-c-table__expandable-row-content {\n    --pf-c-table__expandable-row-content--PaddingTop: var(--pf-c-table--m-compact__expandable-row-content--PaddingTop);\n    --pf-c-table__expandable-row-content--PaddingBottom: var(--pf-c-table--m-compact__expandable-row-content--PaddingBottom); }\n\n.pf-c-table__icon-inline {\n  display: flex;\n  align-items: center; }\n  .pf-c-table__icon-inline > :not(:last-child) {\n    margin-right: var(--pf-c-table__icon-inline--MarginRight); }\n\n.pf-c-table .pf-m-width-10 {\n  --pf-c-table--cell--Width: 10%; }\n\n.pf-c-table .pf-m-width-15 {\n  --pf-c-table--cell--Width: 15%; }\n\n.pf-c-table .pf-m-width-20 {\n  --pf-c-table--cell--Width: 20%; }\n\n.pf-c-table .pf-m-width-25 {\n  --pf-c-table--cell--Width: 25%; }\n\n.pf-c-table .pf-m-width-30 {\n  --pf-c-table--cell--Width: 30%; }\n\n.pf-c-table .pf-m-width-35 {\n  --pf-c-table--cell--Width: 35%; }\n\n.pf-c-table .pf-m-width-40 {\n  --pf-c-table--cell--Width: 40%; }\n\n.pf-c-table .pf-m-width-45 {\n  --pf-c-table--cell--Width: 45%; }\n\n.pf-c-table .pf-m-width-50 {\n  --pf-c-table--cell--Width: 50%; }\n\n.pf-c-table .pf-m-width-60 {\n  --pf-c-table--cell--Width: 60%; }\n\n.pf-c-table .pf-m-width-70 {\n  --pf-c-table--cell--Width: 70%; }\n\n.pf-c-table .pf-m-width-80 {\n  --pf-c-table--cell--Width: 80%; }\n\n.pf-c-table .pf-m-width-90 {\n  --pf-c-table--cell--Width: 90%; }\n\n.pf-c-table .pf-m-width-100 {\n  --pf-c-table--cell--Width: 100%; }\n\n.pf-c-tabs {\n  --pf-c-tabs--inset: 0;\n  --pf-c-tabs--before--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-tabs--before--border-width--base: var(--pf-global--BorderWidth--sm);\n  --pf-c-tabs--before--BorderTopWidth: 0;\n  --pf-c-tabs--before--BorderRightWidth: 0;\n  --pf-c-tabs--before--BorderBottomWidth: var(--pf-c-tabs--before--border-width--base);\n  --pf-c-tabs--before--BorderLeftWidth: 0;\n  --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--lg);\n  --pf-c-tabs--m-vertical--MaxWidth: 15.625rem;\n  --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--xl);\n  --pf-c-tabs--m-box__item--m-current--first-child__link--before--BorderLeftWidth: var(--pf-c-tabs__link--before--border-width--base);\n  --pf-c-tabs--m-box__item--m-current--last-child__link--before--BorderRightWidth: var(--pf-c-tabs--before--border-width--base);\n  --pf-c-tabs--m-color-scheme--light-300__link--BackgroundColor: transparent;\n  --pf-c-tabs--m-color-scheme--light-300__item--m-current__link--BackgroundColor: var(--pf-global--BackgroundColor--light-300);\n  --pf-c-tabs__link--Color: var(--pf-global--Color--200);\n  --pf-c-tabs__link--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-tabs__link--BackgroundColor: transparent;\n  --pf-c-tabs__link--OutlineOffset: calc(-1 * 0.375rem);\n  --pf-c-tabs__link--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-tabs__link--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-tabs__link--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-tabs__link--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-tabs__item--m-current__link--Color: var(--pf-global--Color--100);\n  --pf-c-tabs__item--m-current__link--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-tabs--m-vertical__link--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-tabs--m-vertical__link--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-tabs--m-box__link--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-tabs--m-secondary__link--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-tabs__link--before--border-color--base: var(--pf-global--BorderColor--100);\n  --pf-c-tabs__link--before--BorderRightColor: var(--pf-c-tabs__link--before--border-color--base);\n  --pf-c-tabs__link--before--BorderBottomColor: var(--pf-c-tabs__link--before--border-color--base);\n  --pf-c-tabs__link--before--border-width--base: var(--pf-global--BorderWidth--sm);\n  --pf-c-tabs__link--before--BorderTopWidth: 0;\n  --pf-c-tabs__link--before--BorderRightWidth: 0;\n  --pf-c-tabs__link--before--BorderBottomWidth: 0;\n  --pf-c-tabs__link--before--BorderLeftWidth: 0;\n  --pf-c-tabs__link--before--Left: calc(var(--pf-c-tabs__link--before--border-width--base) * -1);\n  --pf-c-tabs__link--after--Top: auto;\n  --pf-c-tabs__link--after--Right: 0;\n  --pf-c-tabs__link--after--Bottom: 0;\n  --pf-c-tabs__link--after--BorderColor: var(--pf-global--BorderColor--light-100);\n  --pf-c-tabs__link--after--BorderWidth: 0;\n  --pf-c-tabs__link--after--BorderTopWidth: 0;\n  --pf-c-tabs__link--after--BorderRightWidth: 0;\n  --pf-c-tabs__link--after--BorderLeftWidth: 0;\n  --pf-c-tabs__link--hover--after--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-tabs__link--focus--after--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-tabs__link--active--after--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-tabs__item--m-current__link--after--BorderColor: var(--pf-global--active-color--100);\n  --pf-c-tabs__item--m-current__link--after--BorderWidth: var(--pf-global--BorderWidth--lg);\n  --pf-c-tabs__link--child--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-tabs__scroll-button--Color: var(--pf-global--Color--100);\n  --pf-c-tabs__scroll-button--hover--Color: var(--pf-global--active-color--100);\n  --pf-c-tabs__scroll-button--disabled--Color: var(--pf-global--disabled-color--200);\n  --pf-c-tabs__scroll-button--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-tabs__scroll-button--Width: var(--pf-global--spacer--2xl);\n  --pf-c-tabs__scroll-button--xl--Width: var(--pf-global--spacer--3xl);\n  --pf-c-tabs__scroll-button--OutlineOffset: calc(-1 * var(--pf-global--spacer--xs));\n  --pf-c-tabs__scroll-button--TransitionDuration--margin: .125s;\n  --pf-c-tabs__scroll-button--TransitionDuration--transform: .125s;\n  --pf-c-tabs__scroll-button--TransitionDuration--opacity: .125s;\n  --pf-c-tabs__scroll-button--before--BorderColor: var(--pf-c-tabs--before--BorderColor);\n  --pf-c-tabs__scroll-button--before--border-width--base: var(--pf-global--BorderWidth--sm);\n  --pf-c-tabs__scroll-button--before--BorderRightWidth: 0;\n  --pf-c-tabs__scroll-button--before--BorderBottomWidth: var(--pf-c-tabs__scroll-button--before--border-width--base);\n  --pf-c-tabs__scroll-button--before--BorderLeftWidth: 0;\n  position: relative;\n  display: flex;\n  padding-right: var(--pf-c-tabs--inset);\n  padding-left: var(--pf-c-tabs--inset);\n  overflow: hidden; }\n  @media screen and (min-width: 1200px) {\n    .pf-c-tabs {\n      --pf-c-tabs__scroll-button--Width: var(--pf-c-tabs__scroll-button--xl--Width); } }\n  .pf-c-tabs::before {\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    border: solid var(--pf-c-tabs--before--BorderColor);\n    border-width: var(--pf-c-tabs--before--BorderTopWidth) var(--pf-c-tabs--before--BorderRightWidth) var(--pf-c-tabs--before--BorderBottomWidth) var(--pf-c-tabs--before--BorderLeftWidth); }\n  .pf-c-tabs.pf-m-fill .pf-c-tabs__list {\n    flex-basis: 100%; }\n  .pf-c-tabs.pf-m-fill .pf-c-tabs__item {\n    flex-grow: 1; }\n    .pf-c-tabs.pf-m-fill .pf-c-tabs__item:first-child {\n      --pf-c-tabs--m-box__item--m-current--first-child__link--before--BorderLeftWidth: 0; }\n    .pf-c-tabs.pf-m-fill .pf-c-tabs__item:last-child {\n      --pf-c-tabs--m-box__item--m-current--last-child__link--before--BorderRightWidth: 0; }\n  .pf-c-tabs.pf-m-fill .pf-c-tabs__link {\n    flex-basis: 100%;\n    justify-content: center; }\n  .pf-c-tabs.pf-m-scrollable .pf-c-tabs__scroll-button {\n    opacity: 1; }\n  .pf-c-tabs.pf-m-scrollable .pf-c-tabs__scroll-button:nth-of-type(1) {\n    margin-right: 0;\n    transform: translateX(0); }\n  .pf-c-tabs.pf-m-scrollable .pf-c-tabs__scroll-button:nth-of-type(2) {\n    margin-left: 0;\n    transform: translateX(0); }\n  .pf-c-tabs.pf-m-secondary, .pf-c-tabs.pf-m-no-border-bottom {\n    --pf-c-tabs--before--BorderBottomWidth: 0; }\n  .pf-c-tabs.pf-m-box .pf-c-tabs__link, .pf-c-tabs.pf-m-vertical .pf-c-tabs__link {\n    --pf-c-tabs__link--after--BorderBottomWidth: 0; }\n  .pf-c-tabs.pf-m-box {\n    --pf-c-tabs__link--BackgroundColor: var(--pf-c-tabs--m-box__link--BackgroundColor);\n    --pf-c-tabs__link--before--BorderBottomWidth: var(--pf-c-tabs__link--before--border-width--base);\n    --pf-c-tabs__link--before--BorderRightWidth: var(--pf-c-tabs__link--before--border-width--base);\n    --pf-c-tabs__link--after--Top: 0;\n    --pf-c-tabs__link--after--Bottom: auto; }\n    .pf-c-tabs.pf-m-box .pf-c-tabs__link {\n      --pf-c-tabs__link--after--BorderTopWidth: var(--pf-c-tabs__link--after--BorderWidth); }\n    .pf-c-tabs.pf-m-box .pf-c-tabs__item:last-child {\n      --pf-c-tabs__link--before--BorderRightWidth: 0; }\n    .pf-c-tabs.pf-m-box .pf-c-tabs__item.pf-m-current {\n      --pf-c-tabs__link--BackgroundColor: var(--pf-c-tabs__item--m-current__link--BackgroundColor);\n      --pf-c-tabs__link--before--BorderBottomColor: var(--pf-c-tabs__link--BackgroundColor); }\n    .pf-c-tabs.pf-m-box .pf-c-tabs__item.pf-m-current:first-child .pf-c-tabs__link::before {\n      border-left-width: var(--pf-c-tabs--m-box__item--m-current--first-child__link--before--BorderLeftWidth); }\n    .pf-c-tabs.pf-m-box .pf-c-tabs__item.pf-m-current:last-child .pf-c-tabs__link::before {\n      border-right-width: var(--pf-c-tabs--m-box__item--m-current--last-child__link--before--BorderRightWidth); }\n    .pf-c-tabs.pf-m-box.pf-m-scrollable .pf-c-tabs__item.pf-m-current:first-child .pf-c-tabs__link::before {\n      left: calc(var(--pf-c-tabs__link--before--border-width--base) * -1); }\n    .pf-c-tabs.pf-m-box.pf-m-scrollable .pf-c-tabs__scroll-button:nth-of-type(2)::before {\n      left: calc(var(--pf-c-tabs__link--before--border-width--base) * -1); }\n    .pf-c-tabs.pf-m-box .pf-c-tabs__item.pf-m-current + .pf-c-tabs__item {\n      --pf-c-tabs__link--before--Left: 0; }\n    .pf-c-tabs.pf-m-box.pf-m-color-scheme--light-300 {\n      --pf-c-tabs__link--BackgroundColor: var(--pf-c-tabs--m-color-scheme--light-300__link--BackgroundColor);\n      --pf-c-tabs__item--m-current__link--BackgroundColor: var(--pf-c-tabs--m-color-scheme--light-300__item--m-current__link--BackgroundColor); }\n  .pf-c-tabs.pf-m-vertical {\n    --pf-c-tabs--inset: var(--pf-c-tabs--m-vertical--inset);\n    --pf-c-tabs--before--BorderBottomWidth: 0;\n    --pf-c-tabs--before--BorderLeftWidth: var(--pf-c-tabs--before--border-width--base);\n    --pf-c-tabs__link--PaddingTop: var(--pf-c-tabs--m-vertical__link--PaddingTop);\n    --pf-c-tabs__link--PaddingBottom: var(--pf-c-tabs--m-vertical__link--PaddingBottom);\n    --pf-c-tabs__link--before--Left: 0;\n    --pf-c-tabs__link--after--Top: 0;\n    --pf-c-tabs__link--after--Bottom: 0;\n    --pf-c-tabs__link--after--Right: auto;\n    display: inline-flex;\n    flex-direction: column;\n    height: 100%;\n    padding: 0; }\n    .pf-c-tabs.pf-m-vertical::before {\n      top: 0;\n      right: auto; }\n    .pf-c-tabs.pf-m-vertical .pf-c-tabs__list {\n      flex-direction: column;\n      max-width: var(--pf-c-tabs--m-vertical--MaxWidth); }\n    .pf-c-tabs.pf-m-vertical .pf-c-tabs__item:first-child {\n      margin-top: var(--pf-c-tabs--inset); }\n    .pf-c-tabs.pf-m-vertical .pf-c-tabs__item:last-child {\n      margin-bottom: var(--pf-c-tabs--inset); }\n    .pf-c-tabs.pf-m-vertical .pf-c-tabs__link {\n      --pf-c-tabs__link--after--BorderTopWidth: 0;\n      --pf-c-tabs__link--after--BorderLeftWidth: var(--pf-c-tabs__link--after--BorderWidth);\n      max-width: 100%;\n      text-align: left; }\n    .pf-c-tabs.pf-m-vertical .pf-c-tabs__item-text {\n      max-width: 100%;\n      overflow-wrap: break-word; }\n  .pf-c-tabs.pf-m-box.pf-m-vertical {\n    --pf-c-tabs--inset: var(--pf-c-tabs--m-vertical--m-box--inset);\n    --pf-c-tabs--before--BorderLeftWidth: 0;\n    --pf-c-tabs--before--BorderRightWidth: var(--pf-c-tabs--before--border-width--base); }\n    .pf-c-tabs.pf-m-box.pf-m-vertical::before {\n      right: 0;\n      left: auto; }\n    .pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__item:last-child {\n      --pf-c-tabs__link--before--BorderBottomWidth: 0;\n      --pf-c-tabs__link--before--BorderRightWidth: var(--pf-c-tabs__link--before--border-width--base); }\n    .pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__item.pf-m-current {\n      --pf-c-tabs__link--before--BorderRightColor: var(--pf-c-tabs__item--m-current__link--BackgroundColor);\n      --pf-c-tabs__link--before--BorderBottomColor: var(--pf-c-tabs__link--before--border-color--base);\n      --pf-c-tabs__link--before--BorderBottomWidth: var(--pf-c-tabs__link--before--border-width--base); }\n      .pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__item.pf-m-current:first-child {\n        --pf-c-tabs__link--before--BorderTopWidth: var(--pf-c-tabs__link--before--border-width--base); }\n    .pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__item:first-child.pf-m-current {\n      --pf-c-tabs__link--before--BorderTopWidth: var(--pf-c-tabs__link--before--border-width--base); }\n    .pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__link::after {\n      top: calc(var(--pf-c-tabs__link--before--border-width--base) * -1); }\n    .pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__item:first-child .pf-c-tabs__link::after,\n    .pf-c-tabs.pf-m-box.pf-m-vertical .pf-c-tabs__item.pf-m-current + .pf-c-tabs__item .pf-c-tabs__link::after {\n      top: 0; }\n  .pf-c-tabs.pf-m-secondary {\n    --pf-c-tabs__link--FontSize: var(--pf-c-tabs--m-secondary__link--FontSize); }\n\n.pf-c-tabs__list {\n  scrollbar-width: none;\n  -ms-overflow-style: -ms-autohiding-scrollbar;\n  position: relative;\n  display: flex;\n  max-width: 100%;\n  overflow-x: auto;\n  scroll-behavior: smooth;\n  -webkit-overflow-scrolling: touch; }\n  .pf-c-tabs__list::-webkit-scrollbar {\n    display: none; }\n\n.pf-c-tabs__item {\n  display: flex;\n  flex: none; }\n  .pf-c-tabs__item.pf-m-current {\n    --pf-c-tabs__link--Color: var(--pf-c-tabs__item--m-current__link--Color);\n    --pf-c-tabs__link--after--BorderColor: var(--pf-c-tabs__item--m-current__link--after--BorderColor);\n    --pf-c-tabs__link--after--BorderWidth: var(--pf-c-tabs__item--m-current__link--after--BorderWidth); }\n\n.pf-c-tabs__link,\n.pf-c-tabs__scroll-button {\n  border: 0; }\n\n.pf-c-tabs::before,\n.pf-c-tabs__link::before,\n.pf-c-tabs__link::after,\n.pf-c-tabs__scroll-button::before {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  content: "";\n  border-style: solid; }\n\n.pf-c-tabs__link::before,\n.pf-c-tabs__link::after,\n.pf-c-tabs__scroll-button::before {\n  top: 0; }\n\n.pf-c-tabs__link {\n  --pf-c-tabs__link--after--BorderBottomWidth: var(--pf-c-tabs__link--after--BorderWidth);\n  position: relative;\n  display: flex;\n  flex: 1;\n  padding: var(--pf-c-tabs__link--PaddingTop) var(--pf-c-tabs__link--PaddingRight) var(--pf-c-tabs__link--PaddingBottom) var(--pf-c-tabs__link--PaddingLeft);\n  font-size: var(--pf-c-tabs__link--FontSize);\n  color: var(--pf-c-tabs__link--Color);\n  text-decoration: none;\n  background-color: var(--pf-c-tabs__link--BackgroundColor);\n  outline-offset: var(--pf-c-tabs__link--OutlineOffset); }\n  .pf-c-tabs__link::before {\n    pointer-events: none;\n    border-color: var(--pf-c-tabs__link--before--border-color--base);\n    border-width: var(--pf-c-tabs__link--before--BorderTopWidth) var(--pf-c-tabs__link--before--BorderRightWidth) var(--pf-c-tabs__link--before--BorderBottomWidth) var(--pf-c-tabs__link--before--BorderLeftWidth);\n    border-right-color: var(--pf-c-tabs__link--before--BorderRightColor);\n    border-bottom-color: var(--pf-c-tabs__link--before--BorderBottomColor); }\n  .pf-c-tabs__link::after {\n    top: var(--pf-c-tabs__link--after--Top);\n    right: var(--pf-c-tabs__link--after--Right);\n    bottom: var(--pf-c-tabs__link--after--Bottom);\n    left: var(--pf-c-tabs__link--before--Left);\n    border-color: var(--pf-c-tabs__link--after--BorderColor);\n    border-width: var(--pf-c-tabs__link--after--BorderTopWidth) var(--pf-c-tabs__link--after--BorderRightWidth) var(--pf-c-tabs__link--after--BorderBottomWidth) var(--pf-c-tabs__link--after--BorderLeftWidth); }\n  .pf-c-tabs__link:hover {\n    --pf-c-tabs__link--after--BorderWidth: var(--pf-c-tabs__link--hover--after--BorderWidth); }\n  .pf-c-tabs__link:focus {\n    --pf-c-tabs__link--after--BorderWidth: var(--pf-c-tabs__link--focus--after--BorderWidth); }\n  .pf-c-tabs__link:active {\n    --pf-c-tabs__link--after--BorderWidth: var(--pf-c-tabs__link--active--after--BorderWidth); }\n  .pf-c-tabs__link .pf-c-tabs__item-icon,\n  .pf-c-tabs__link .pf-c-tabs__item-text {\n    margin-right: var(--pf-c-tabs__link--child--MarginRight); }\n    .pf-c-tabs__link .pf-c-tabs__item-icon:last-child,\n    .pf-c-tabs__link .pf-c-tabs__item-text:last-child {\n      --pf-c-tabs__link--child--MarginRight: 0; }\n\n.pf-c-tabs__scroll-button {\n  flex: none;\n  width: var(--pf-c-tabs__scroll-button--Width);\n  line-height: 1;\n  color: var(--pf-c-tabs__scroll-button--Color);\n  background-color: var(--pf-c-tabs__scroll-button--BackgroundColor);\n  outline-offset: var(--pf-c-tabs__scroll-button--OutlineOffset);\n  opacity: 0;\n  transition: margin var(--pf-c-tabs__scroll-button--TransitionDuration--margin), transform var(--pf-c-tabs__scroll-button--TransitionDuration--transform), opacity var(--pf-c-tabs__scroll-button--TransitionDuration--opacity); }\n  .pf-c-tabs__scroll-button:hover, .pf-c-tabs__scroll-button:active, .pf-c-tabs__scroll-button:focus {\n    --pf-c-tabs__scroll-button--Color: var(--pf-c-tabs__scroll-button--hover--Color); }\n  .pf-c-tabs__scroll-button::before {\n    border-color: var(--pf-c-tabs__scroll-button--before--BorderColor);\n    border-width: 0 var(--pf-c-tabs__scroll-button--before--BorderRightWidth) var(--pf-c-tabs__scroll-button--before--BorderBottomWidth) var(--pf-c-tabs__scroll-button--before--BorderLeftWidth); }\n  .pf-c-tabs__scroll-button:nth-of-type(1) {\n    --pf-c-tabs__scroll-button--before--BorderRightWidth: var(--pf-c-tabs__scroll-button--before--border-width--base);\n    margin-right: calc(var(--pf-c-tabs__scroll-button--Width) * -1);\n    transform: translateX(-100%); }\n  .pf-c-tabs__scroll-button:nth-of-type(2) {\n    --pf-c-tabs__scroll-button--before--BorderLeftWidth: var(--pf-c-tabs__scroll-button--before--border-width--base);\n    margin-left: calc(var(--pf-c-tabs__scroll-button--Width) * -1);\n    transform: translateX(100%); }\n  .pf-c-tabs__scroll-button:disabled {\n    --pf-c-tabs__scroll-button--Color: var(--pf-c-tabs__scroll-button--disabled--Color);\n    pointer-events: none; }\n\n.pf-c-tabs.pf-m-inset-none {\n  --pf-c-tabs--inset: 0;\n  --pf-c-tabs--m-vertical--inset: 0;\n  --pf-c-tabs--m-vertical--m-box--inset: 0; }\n\n.pf-c-tabs.pf-m-inset-sm {\n  --pf-c-tabs--inset: var(--pf-global--spacer--sm);\n  --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--sm);\n  --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--sm); }\n\n.pf-c-tabs.pf-m-inset-md {\n  --pf-c-tabs--inset: var(--pf-global--spacer--md);\n  --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--md);\n  --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--md); }\n\n.pf-c-tabs.pf-m-inset-lg {\n  --pf-c-tabs--inset: var(--pf-global--spacer--lg);\n  --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--lg);\n  --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--lg); }\n\n.pf-c-tabs.pf-m-inset-xl {\n  --pf-c-tabs--inset: var(--pf-global--spacer--xl);\n  --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--xl);\n  --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--xl); }\n\n.pf-c-tabs.pf-m-inset-2xl {\n  --pf-c-tabs--inset: var(--pf-global--spacer--2xl);\n  --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--2xl);\n  --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--2xl); }\n\n@media (min-width: 576px) {\n  .pf-c-tabs.pf-m-inset-none-on-sm {\n    --pf-c-tabs--inset: 0;\n    --pf-c-tabs--m-vertical--inset: 0;\n    --pf-c-tabs--m-vertical--m-box--inset: 0; }\n  .pf-c-tabs.pf-m-inset-sm-on-sm {\n    --pf-c-tabs--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--sm); }\n  .pf-c-tabs.pf-m-inset-md-on-sm {\n    --pf-c-tabs--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--md); }\n  .pf-c-tabs.pf-m-inset-lg-on-sm {\n    --pf-c-tabs--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--lg); }\n  .pf-c-tabs.pf-m-inset-xl-on-sm {\n    --pf-c-tabs--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--xl); }\n  .pf-c-tabs.pf-m-inset-2xl-on-sm {\n    --pf-c-tabs--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--2xl); } }\n\n@media (min-width: 768px) {\n  .pf-c-tabs.pf-m-inset-none-on-md {\n    --pf-c-tabs--inset: 0;\n    --pf-c-tabs--m-vertical--inset: 0;\n    --pf-c-tabs--m-vertical--m-box--inset: 0; }\n  .pf-c-tabs.pf-m-inset-sm-on-md {\n    --pf-c-tabs--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--sm); }\n  .pf-c-tabs.pf-m-inset-md-on-md {\n    --pf-c-tabs--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--md); }\n  .pf-c-tabs.pf-m-inset-lg-on-md {\n    --pf-c-tabs--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--lg); }\n  .pf-c-tabs.pf-m-inset-xl-on-md {\n    --pf-c-tabs--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--xl); }\n  .pf-c-tabs.pf-m-inset-2xl-on-md {\n    --pf-c-tabs--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--2xl); } }\n\n@media (min-width: 992px) {\n  .pf-c-tabs.pf-m-inset-none-on-lg {\n    --pf-c-tabs--inset: 0;\n    --pf-c-tabs--m-vertical--inset: 0;\n    --pf-c-tabs--m-vertical--m-box--inset: 0; }\n  .pf-c-tabs.pf-m-inset-sm-on-lg {\n    --pf-c-tabs--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--sm); }\n  .pf-c-tabs.pf-m-inset-md-on-lg {\n    --pf-c-tabs--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--md); }\n  .pf-c-tabs.pf-m-inset-lg-on-lg {\n    --pf-c-tabs--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--lg); }\n  .pf-c-tabs.pf-m-inset-xl-on-lg {\n    --pf-c-tabs--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--xl); }\n  .pf-c-tabs.pf-m-inset-2xl-on-lg {\n    --pf-c-tabs--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--2xl); } }\n\n@media (min-width: 1200px) {\n  .pf-c-tabs.pf-m-inset-none-on-xl {\n    --pf-c-tabs--inset: 0;\n    --pf-c-tabs--m-vertical--inset: 0;\n    --pf-c-tabs--m-vertical--m-box--inset: 0; }\n  .pf-c-tabs.pf-m-inset-sm-on-xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--sm); }\n  .pf-c-tabs.pf-m-inset-md-on-xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--md); }\n  .pf-c-tabs.pf-m-inset-lg-on-xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--lg); }\n  .pf-c-tabs.pf-m-inset-xl-on-xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--xl); }\n  .pf-c-tabs.pf-m-inset-2xl-on-xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--2xl); } }\n\n@media (min-width: 1450px) {\n  .pf-c-tabs.pf-m-inset-none-on-2xl {\n    --pf-c-tabs--inset: 0;\n    --pf-c-tabs--m-vertical--inset: 0;\n    --pf-c-tabs--m-vertical--m-box--inset: 0; }\n  .pf-c-tabs.pf-m-inset-sm-on-2xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--sm);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--sm); }\n  .pf-c-tabs.pf-m-inset-md-on-2xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--md);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--md); }\n  .pf-c-tabs.pf-m-inset-lg-on-2xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--lg);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--lg); }\n  .pf-c-tabs.pf-m-inset-xl-on-2xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--xl); }\n  .pf-c-tabs.pf-m-inset-2xl-on-2xl {\n    --pf-c-tabs--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--2xl);\n    --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--2xl); } }\n\n.pf-c-tile {\n  --pf-c-tile--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-tile--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-tile--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-tile--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-tile--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-tile--before--BorderColor: var(--pf-global--BorderColor--100);\n  --pf-c-tile--before--BorderWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-tile--before--BorderRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-tile--hover--before--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-tile--m-selected--before--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-tile--m-selected--before--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-tile--focus--before--BorderWidth: var(--pf-global--BorderWidth--md);\n  --pf-c-tile--focus--before--BorderColor: var(--pf-global--primary-color--100);\n  --pf-c-tile--m-disabled--BackgroundColor: var(--pf-global--disabled-color--300);\n  --pf-c-tile__title--Color: var(--pf-global--Color--100);\n  --pf-c-tile--hover__title--Color: var(--pf-global--primary-color--100);\n  --pf-c-tile--m-selected__title--Color: var(--pf-global--primary-color--100);\n  --pf-c-tile--focus__title--Color: var(--pf-global--primary-color--100);\n  --pf-c-tile--m-disabled__title--Color: var(--pf-global--disabled-color--100);\n  --pf-c-tile__icon--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-tile__icon--FontSize: var(--pf-global--icon--FontSize--md);\n  --pf-c-tile__icon--Color: var(--pf-global--Color--100);\n  --pf-c-tile--hover__icon--Color: var(--pf-global--primary-color--100);\n  --pf-c-tile--m-selected__icon--Color: var(--pf-global--primary-color--100);\n  --pf-c-tile--m-disabled__icon--Color: var(--pf-global--disabled-color--100);\n  --pf-c-tile--focus__icon--Color: var(--pf-global--primary-color--100);\n  --pf-c-tile__header--m-stacked__icon--MarginBottom: var(--pf-global--spacer--xs);\n  --pf-c-tile__header--m-stacked__icon--FontSize: var(--pf-global--icon--FontSize--lg);\n  --pf-c-tile--m-display-lg__header--m-stacked__icon--FontSize: var(--pf-global--icon--FontSize--xl);\n  --pf-c-tile__body--Color: var(--pf-global--Color--100);\n  --pf-c-tile__body--FontSize: var(--pf-global--FontSize--xs);\n  --pf-c-tile--m-disabled__body--Color: var(--pf-global--disabled-color--100);\n  position: relative;\n  display: inline-grid;\n  padding: var(--pf-c-tile--PaddingTop) var(--pf-c-tile--PaddingRight) var(--pf-c-tile--PaddingBottom) var(--pf-c-tile--PaddingLeft);\n  text-align: center;\n  cursor: pointer;\n  background-color: var(--pf-c-tile--BackgroundColor);\n  grid-template-rows: min-content; }\n  .pf-c-tile::before {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    pointer-events: none;\n    content: "";\n    border: var(--pf-c-tile--before--BorderWidth) solid var(--pf-c-tile--before--BorderColor);\n    border-radius: var(--pf-c-tile--before--BorderRadius); }\n  .pf-c-tile:hover {\n    --pf-c-tile__title--Color: var(--pf-c-tile--hover__title--Color);\n    --pf-c-tile__icon--Color: var(--pf-c-tile--hover__icon--Color);\n    --pf-c-tile--before--BorderColor: var(--pf-c-tile--hover--before--BorderColor); }\n  .pf-c-tile.pf-m-selected {\n    --pf-c-tile__title--Color: var(--pf-c-tile--m-selected__title--Color);\n    --pf-c-tile__icon--Color: var(--pf-c-tile--m-selected__icon--Color);\n    --pf-c-tile--before--BorderWidth: var(--pf-c-tile--m-selected--before--BorderWidth);\n    --pf-c-tile--before--BorderColor: var(--pf-c-tile--m-selected--before--BorderColor); }\n  .pf-c-tile:focus {\n    --pf-c-tile__title--Color: var(--pf-c-tile--focus__title--Color);\n    --pf-c-tile__icon--Color: var(--pf-c-tile--focus__icon--Color);\n    --pf-c-tile--before--BorderWidth: var(--pf-c-tile--focus--before--BorderWidth);\n    --pf-c-tile--before--BorderColor: var(--pf-c-tile--focus--before--BorderColor); }\n  .pf-c-tile.pf-m-disabled {\n    --pf-c-tile--BackgroundColor: var(--pf-c-tile--m-disabled--BackgroundColor);\n    --pf-c-tile__title--Color: var(--pf-c-tile--m-disabled__title--Color);\n    --pf-c-tile__body--Color: var(--pf-c-tile--m-disabled__body--Color);\n    --pf-c-tile--before--BorderWidth: 0;\n    --pf-c-tile__icon--Color: var(--pf-c-tile--m-disabled__icon--Color);\n    pointer-events: none; }\n  .pf-c-tile.pf-m-display-lg .pf-c-tile__header.pf-m-stacked {\n    --pf-c-tile__icon--FontSize: var(--pf-c-tile--m-display-lg__header--m-stacked__icon--FontSize); }\n\n.pf-c-tile__header {\n  display: flex;\n  align-items: center;\n  justify-content: center; }\n  .pf-c-tile__header.pf-m-stacked {\n    --pf-c-tile__icon--MarginRight: 0;\n    --pf-c-tile__icon--FontSize: var(--pf-c-tile__header--m-stacked__icon--FontSize);\n    flex-direction: column;\n    justify-content: initial; }\n    .pf-c-tile__header.pf-m-stacked .pf-c-tile__icon {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      margin-bottom: var(--pf-c-tile__header--m-stacked__icon--MarginBottom); }\n\n.pf-c-tile__title {\n  color: var(--pf-c-tile__title--Color); }\n\n.pf-c-tile__body {\n  font-size: var(--pf-c-tile__body--FontSize);\n  color: var(--pf-c-tile__body--Color); }\n\n.pf-c-tile__icon {\n  margin-right: var(--pf-c-tile__icon--MarginRight);\n  font-size: var(--pf-c-tile__icon--FontSize);\n  color: var(--pf-c-tile__icon--Color); }\n\n.pf-c-title {\n  --pf-c-title--FontFamily: var(--pf-global--FontFamily--heading--sans-serif);\n  --pf-c-title--m-4xl--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-title--m-4xl--FontSize: var(--pf-global--FontSize--4xl);\n  --pf-c-title--m-4xl--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-title--m-3xl--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-title--m-3xl--FontSize: var(--pf-global--FontSize--3xl);\n  --pf-c-title--m-3xl--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-title--m-2xl--LineHeight: var(--pf-global--LineHeight--sm);\n  --pf-c-title--m-2xl--FontSize: var(--pf-global--FontSize--2xl);\n  --pf-c-title--m-2xl--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-title--m-xl--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-title--m-xl--FontSize: var(--pf-global--FontSize--xl);\n  --pf-c-title--m-xl--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-title--m-lg--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-title--m-lg--FontSize: var(--pf-global--FontSize--lg);\n  --pf-c-title--m-lg--FontWeight: var(--pf-global--FontWeight--normal);\n  --pf-c-title--m-md--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-title--m-md--FontSize: var(--pf-global--FontSize--md);\n  --pf-c-title--m-md--FontWeight: var(--pf-global--FontWeight--normal);\n  font-family: var(--pf-c-title--FontFamily);\n  word-break: break-word; }\n  .pf-c-title.pf-m-4xl {\n    font-size: var(--pf-c-title--m-4xl--FontSize);\n    font-weight: var(--pf-c-title--m-4xl--FontWeight);\n    line-height: var(--pf-c-title--m-4xl--LineHeight); }\n  .pf-c-title.pf-m-3xl {\n    font-size: var(--pf-c-title--m-3xl--FontSize);\n    font-weight: var(--pf-c-title--m-3xl--FontWeight);\n    line-height: var(--pf-c-title--m-3xl--LineHeight); }\n  .pf-c-title.pf-m-2xl {\n    font-size: var(--pf-c-title--m-2xl--FontSize);\n    font-weight: var(--pf-c-title--m-2xl--FontWeight);\n    line-height: var(--pf-c-title--m-2xl--LineHeight); }\n  .pf-c-title.pf-m-xl {\n    font-size: var(--pf-c-title--m-xl--FontSize);\n    font-weight: var(--pf-c-title--m-xl--FontWeight);\n    line-height: var(--pf-c-title--m-xl--LineHeight); }\n  .pf-c-title.pf-m-lg {\n    font-size: var(--pf-c-title--m-lg--FontSize);\n    font-weight: var(--pf-c-title--m-lg--FontWeight);\n    line-height: var(--pf-c-title--m-lg--LineHeight); }\n  .pf-c-title.pf-m-md {\n    font-size: var(--pf-c-title--m-md--FontSize);\n    font-weight: var(--pf-c-title--m-md--FontWeight);\n    line-height: var(--pf-c-title--m-md--LineHeight); }\n\n.pf-m-overpass-font .pf-c-title {\n  --pf-c-title--m-md--FontWeight: var(--pf-global--FontWeight--semi-bold);\n  --pf-c-title--m-lg--FontWeight: var(--pf-global--FontWeight--semi-bold); }\n\n.pf-c-toggle-group {\n  --pf-c-toggle-group__button--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-toggle-group__button--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-toggle-group__button--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-toggle-group__button--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-toggle-group__button--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-toggle-group__button--LineHeight: calc(var(--pf-global--FontSize--md) * var(--pf-global--LineHeight--md));\n  --pf-c-toggle-group__button--Color: var(--pf-global--Color--100);\n  --pf-c-toggle-group__button--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-toggle-group__button--hover--BackgroundColor: var(--pf-global--disabled-color--200);\n  --pf-c-toggle-group__button--focus--BackgroundColor: var(--pf-global--disabled-color--200);\n  --pf-c-toggle-group__button--disabled--BackgroundColor: var(--pf-global--disabled-color--200);\n  --pf-c-toggle-group__button--disabled--Color: var(--pf-global--disabled-color--100);\n  --pf-c-toggle-group__item--first-child__button--BorderTopLeftRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-toggle-group__item--first-child__button--BorderBottomLeftRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-toggle-group__item--last-child__button--BorderTopRightRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-toggle-group__item--last-child__button--BorderBottomRightRadius: var(--pf-global--BorderRadius--sm);\n  --pf-c-toggle-group__icon--text--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-toggle-group__button--m-light--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-toggle-group__button--m-selected--BackgroundColor: var(--pf-global--primary-color--100);\n  --pf-c-toggle-group__button--m-selected--Color: var(--pf-global--Color--light-100);\n  display: flex; }\n\n.pf-c-toggle-group__item:first-child .pf-c-toggle-group__button {\n  border-top-left-radius: var(--pf-c-toggle-group__item--first-child__button--BorderTopLeftRadius);\n  border-bottom-left-radius: var(--pf-c-toggle-group__item--first-child__button--BorderBottomLeftRadius); }\n\n.pf-c-toggle-group__item:last-child .pf-c-toggle-group__button {\n  border-top-right-radius: var(--pf-c-toggle-group__item--last-child__button--BorderTopRightRadius);\n  border-bottom-right-radius: var(--pf-c-toggle-group__item--last-child__button--BorderBottomRightRadius); }\n\n.pf-c-toggle-group__button {\n  display: inline-flex;\n  padding: var(--pf-c-toggle-group__button--PaddingTop) var(--pf-c-toggle-group__button--PaddingRight) var(--pf-c-toggle-group__button--PaddingBottom) var(--pf-c-toggle-group__button--PaddingLeft);\n  font-size: var(--pf-c-toggle-group__button--FontSize);\n  line-height: var(--pf-c-toggle-group__button--LineHeight);\n  color: var(--pf-c-toggle-group__button--Color);\n  background-color: var(--pf-c-toggle-group__button--BackgroundColor);\n  border: 0; }\n  .pf-c-toggle-group__button.pf-m-light {\n    --pf-c-toggle-group__button--BackgroundColor: var(--pf-c-toggle-group__button--m-light--BackgroundColor); }\n  .pf-c-toggle-group__button:hover {\n    --pf-c-toggle-group__button--BackgroundColor: var(--pf-c-toggle-group__button--hover--BackgroundColor);\n    text-decoration: none; }\n  .pf-c-toggle-group__button:focus {\n    --pf-c-toggle-group__button--BackgroundColor: var(--pf-c-toggle-group__button--focus--BackgroundColor); }\n  .pf-c-toggle-group__button.pf-m-selected {\n    --pf-c-toggle-group__button--BackgroundColor: var(--pf-c-toggle-group__button--m-selected--BackgroundColor);\n    --pf-c-toggle-group__button--Color: var(--pf-c-toggle-group__button--m-selected--Color); }\n  .pf-c-toggle-group__button:disabled, .pf-c-toggle-group__button.pf-m-disabled {\n    --pf-c-toggle-group__button--BackgroundColor: var(--pf-c-toggle-group__button--disabled--BackgroundColor);\n    --pf-c-toggle-group__button--Color: var(--pf-c-toggle-group__button--disabled--Color);\n    pointer-events: none; }\n\n.pf-c-toggle-group__icon + .pf-c-toggle-group__text,\n.pf-c-toggle-group__text + .pf-c-toggle-group__icon {\n  margin-left: var(--pf-c-toggle-group__icon--text--MarginLeft); }\n\n.pf-c-tooltip {\n  --pf-c-tooltip--MaxWidth: 18.75rem;\n  --pf-c-tooltip--BoxShadow: var(--pf-global--BoxShadow--md);\n  --pf-c-tooltip__content--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-tooltip__content--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-tooltip__content--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-tooltip__content--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-tooltip__content--Color: var(--pf-global--Color--light-100);\n  --pf-c-tooltip__content--BackgroundColor: var(--pf-global--BackgroundColor--dark-100);\n  --pf-c-tooltip__content--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-tooltip__arrow--Width: var(--pf-global--arrow--width);\n  --pf-c-tooltip__arrow--Height: var(--pf-global--arrow--width);\n  --pf-c-tooltip__arrow--m-top--TranslateX: -50%;\n  --pf-c-tooltip__arrow--m-top--TranslateY: 50%;\n  --pf-c-tooltip__arrow--m-top--Rotate: 45deg;\n  --pf-c-tooltip__arrow--m-right--TranslateX: -50%;\n  --pf-c-tooltip__arrow--m-right--TranslateY: -50%;\n  --pf-c-tooltip__arrow--m-right--Rotate: 45deg;\n  --pf-c-tooltip__arrow--m-bottom--TranslateX: -50%;\n  --pf-c-tooltip__arrow--m-bottom--TranslateY: -50%;\n  --pf-c-tooltip__arrow--m-bottom--Rotate: 45deg;\n  --pf-c-tooltip__arrow--m-left--TranslateX: 50%;\n  --pf-c-tooltip__arrow--m-left--TranslateY: -50%;\n  --pf-c-tooltip__arrow--m-left--Rotate: 45deg;\n  position: relative;\n  max-width: var(--pf-c-tooltip--MaxWidth);\n  box-shadow: var(--pf-c-tooltip--BoxShadow); }\n  .pf-c-tooltip.pf-m-top .pf-c-tooltip__arrow {\n    bottom: 0;\n    left: 50%;\n    transform: translateX(var(--pf-c-tooltip__arrow--m-top--TranslateX)) translateY(var(--pf-c-tooltip__arrow--m-top--TranslateY)) rotate(var(--pf-c-tooltip__arrow--m-top--Rotate)); }\n  .pf-c-tooltip.pf-m-bottom .pf-c-tooltip__arrow {\n    top: 0;\n    left: 50%;\n    transform: translateX(var(--pf-c-tooltip__arrow--m-bottom--TranslateX)) translateY(var(--pf-c-tooltip__arrow--m-bottom--TranslateY)) rotate(var(--pf-c-tooltip__arrow--m-bottom--Rotate)); }\n  .pf-c-tooltip.pf-m-left .pf-c-tooltip__arrow {\n    top: 50%;\n    right: 0;\n    transform: translateX(var(--pf-c-tooltip__arrow--m-left--TranslateX)) translateY(var(--pf-c-tooltip__arrow--m-left--TranslateY)) rotate(var(--pf-c-tooltip__arrow--m-left--Rotate)); }\n  .pf-c-tooltip.pf-m-right .pf-c-tooltip__arrow {\n    top: 50%;\n    left: 0;\n    transform: translateX(var(--pf-c-tooltip__arrow--m-right--TranslateX)) translateY(var(--pf-c-tooltip__arrow--m-right--TranslateY)) rotate(var(--pf-c-tooltip__arrow--m-right--Rotate)); }\n\n.pf-c-tooltip__content {\n  position: relative;\n  padding: var(--pf-c-tooltip__content--PaddingTop) var(--pf-c-tooltip__content--PaddingRight) var(--pf-c-tooltip__content--PaddingBottom) var(--pf-c-tooltip__content--PaddingLeft);\n  font-size: var(--pf-c-tooltip__content--FontSize);\n  color: var(--pf-c-tooltip__content--Color);\n  text-align: center;\n  word-break: break-word;\n  background-color: var(--pf-c-tooltip__content--BackgroundColor); }\n  .pf-c-tooltip__content.pf-m-text-align-left {\n    text-align: left; }\n\n.pf-c-tooltip__arrow {\n  position: absolute;\n  width: var(--pf-c-tooltip__arrow--Width);\n  height: var(--pf-c-tooltip__arrow--Height);\n  pointer-events: none;\n  background-color: var(--pf-c-tooltip__content--BackgroundColor); }\n\n.pf-c-touchspin {\n  --pf-c-touchspin__unit--c-input-group--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-touchspin__icon--FontSize: var(--pf-global--FontSize--xs);\n  --pf-c-touchspin--c-form-control--width-base: calc(var(--pf-global--spacer--sm) * 2);\n  --pf-c-touchspin--c-form-control--width-chars: 4;\n  --pf-c-touchspin--c-form-control--Width: calc(var(--pf-c-touchspin--c-form-control--width-base) + var(--pf-c-touchspin--c-form-control--width-chars) * 1ch);\n  display: inline-flex;\n  align-items: center; }\n  .pf-c-touchspin .pf-c-form-control {\n    display: inline-flex;\n    width: var(--pf-c-touchspin--c-form-control--Width);\n    text-align: right; }\n\n.pf-c-input-group + .pf-c-touchspin__unit,\n.pf-c-touchspin__unit + .pf-c-input-group {\n  margin-left: var(--pf-c-touchspin__unit--c-input-group--MarginLeft); }\n\n.pf-c-touchspin__icon {\n  font-size: var(--pf-c-touchspin__icon--FontSize); }\n\n.pf-c-tree-view {\n  --pf-c-tree-view--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-tree-view--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__node--indent--base: calc(var(--pf-global--spacer--lg) + var(--pf-global--spacer--md));\n  --pf-c-tree-view__node--nested-indent--base: var(--pf-global--spacer--lg);\n  --pf-c-tree-view__node--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__node--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__node--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__node--PaddingLeft: 0;\n  --pf-c-tree-view__node--Color: var(--pf-global--Color--100);\n  --pf-c-tree-view__node--m-current--Color: var(--pf-global--link--Color);\n  --pf-c-tree-view__node--m-current--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-tree-view__node--hover--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-tree-view__node--focus--BackgroundColor: var(--pf-global--palette--black-200);\n  --pf-c-tree-view__list-item__list-item__node-toggle--Top: var(--pf-c-tree-view__node--PaddingTop);\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft);\n  --pf-c-tree-view__list-item__list-item__node-toggle--TranslateX: -100%;\n  --pf-c-tree-view__node-toggle--Transition: var(--pf-global--Transition);\n  --pf-c-tree-view__node-toggle-button--PaddingTop: var(--pf-global--spacer--form-element);\n  --pf-c-tree-view__node-toggle-button--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-tree-view__node-toggle-button--PaddingBottom: var(--pf-global--spacer--form-element);\n  --pf-c-tree-view__node-toggle-button--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-tree-view__node-toggle-button--MarginTop: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-tree-view__node-toggle-button--MarginBottom: calc(var(--pf-global--spacer--form-element) * -1);\n  --pf-c-tree-view__node-check--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__node-count--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__node-count--c-badge--m-read--BackgroundColor: var(--pf-global--disabled-color--200);\n  --pf-c-tree-view__search--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__search--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__search--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__search--PaddingLeft: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__node-icon--PaddingRight: var(--pf-global--spacer--sm);\n  --pf-c-tree-view__node-icon--Color: var(--pf-global--icon--Color--light);\n  --pf-c-tree-view__node-text--max-lines: 1;\n  --pf-c-tree-view__action--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-tree-view__action--focus--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-tree-view__action--Color: var(--pf-global--icon--Color--light);\n  --pf-c-tree-view__action--hover--Color: var(--pf-global--icon--Color--dark);\n  --pf-c-tree-view__action--focus--Color: var(--pf-global--icon--Color--dark);\n  padding-top: var(--pf-c-tree-view--PaddingTop);\n  padding-bottom: var(--pf-c-tree-view--PaddingBottom); }\n\n.pf-c-tree-view__list-item.pf-m-expanded > .pf-c-tree-view__content > .pf-c-tree-view__node > .pf-c-tree-view__node-toggle > .pf-c-tree-view__node-toggle-icon {\n  transform: rotate(90deg); }\n\n.pf-c-tree-view__node {\n  position: relative;\n  display: flex;\n  flex: 1 1;\n  align-items: center;\n  min-width: 0;\n  padding: var(--pf-c-tree-view__node--PaddingTop) var(--pf-c-tree-view__node--PaddingRight) var(--pf-c-tree-view__node--PaddingBottom) var(--pf-c-tree-view__node--PaddingLeft);\n  color: var(--pf-c-tree-view__node--Color);\n  text-align: left;\n  cursor: pointer;\n  border: 0; }\n  .pf-c-tree-view__node.pf-m-current {\n    --pf-c-tree-view__node--Color: var(--pf-c-tree-view__node--m-current--Color);\n    font-weight: var(--pf-c-tree-view__node--m-current--FontWeight); }\n  .pf-c-tree-view__node:focus {\n    background-color: var(--pf-c-tree-view__node--focus--BackgroundColor); }\n  .pf-c-tree-view__node .pf-c-tree-view__node-count {\n    margin-left: var(--pf-c-tree-view__node-count--MarginLeft); }\n    .pf-c-tree-view__node .pf-c-tree-view__node-count .pf-c-badge.pf-m-read {\n      --pf-c-badge--m-read--BackgroundColor: var(--pf-c-tree-view__node-count--c-badge--m-read--BackgroundColor); }\n\n.pf-c-tree-view__node-toggle-icon {\n  transition: var(--pf-c-tree-view__node-toggle--Transition); }\n\n.pf-c-tree-view__node-check {\n  margin-right: var(--pf-c-tree-view__node-check--MarginRight); }\n\n.pf-c-tree-view__node-toggle {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  padding: var(--pf-c-tree-view__node-toggle-button--PaddingTop) var(--pf-c-tree-view__node-toggle-button--PaddingRight) var(--pf-c-tree-view__node-toggle-button--PaddingBottom) var(--pf-c-tree-view__node-toggle-button--PaddingLeft);\n  margin-top: var(--pf-c-tree-view__node-toggle-button--MarginTop);\n  margin-bottom: var(--pf-c-tree-view__node-toggle-button--MarginBottom);\n  border: 0; }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__node-toggle {\n  position: absolute;\n  top: var(--pf-c-tree-view__list-item__list-item__node-toggle--Top);\n  left: var(--pf-c-tree-view__list-item__list-item__node-toggle--Left);\n  transform: translateX(var(--pf-c-tree-view__list-item__list-item__node-toggle--TranslateX)); }\n\n.pf-c-tree-view__node-text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.pf-c-tree-view__search {\n  padding: var(--pf-c-tree-view__search--PaddingTop) var(--pf-c-tree-view__search--PaddingRight) var(--pf-c-tree-view__search--PaddingBottom) var(--pf-c-tree-view__search--PaddingLeft); }\n\n.pf-c-tree-view__node-icon {\n  padding-right: var(--pf-c-tree-view__node-icon--PaddingRight);\n  color: var(--pf-c-tree-view__node-icon--Color); }\n\n.pf-c-tree-view__content {\n  display: flex;\n  align-items: center; }\n\n.pf-c-tree-view__content:hover,\n.pf-c-tree-view__content:focus-within {\n  background-color: var(--pf-c-tree-view__node--hover--BackgroundColor); }\n\n.pf-c-tree-view__action {\n  margin-left: var(--pf-c-tree-view__action--MarginLeft);\n  color: var(--pf-c-tree-view__action--Color);\n  border: 0; }\n  .pf-c-tree-view__action:hover {\n    --pf-c-tree-view__action--Color: var(--pf-c-tree-view__action--hover--Color); }\n  .pf-c-tree-view__action:focus {\n    --pf-c-tree-view__action--Color: var(--pf-c-tree-view__action--focus--Color);\n    background-color: var(--pf-c-tree-view__action--focus--BackgroundColor); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 1));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 2));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 3));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 4));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 5));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 6));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 7));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 8));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 9));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item .pf-c-tree-view__list-item {\n  --pf-c-tree-view__node--PaddingLeft: calc(var(--pf-c-tree-view__node--indent--base) + (var(--pf-c-tree-view__node--nested-indent--base) * 10));\n  --pf-c-tree-view__list-item__list-item__node-toggle--Left: var(--pf-c-tree-view__node--PaddingLeft); }\n\n.pf-c-wizard {\n  --pf-c-wizard--Height: 100%;\n  --pf-c-modal-box--c-wizard--FlexBasis: 47.625rem;\n  --pf-c-wizard__header--BackgroundColor: var(--pf-global--BackgroundColor--dark-100);\n  --pf-c-wizard__header--ZIndex: var(--pf-global--ZIndex--md);\n  --pf-c-wizard__header--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-wizard__header--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-wizard__header--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-wizard__header--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-wizard__header--lg--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-wizard__header--lg--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-wizard__header--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-wizard__header--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-wizard__close--Top: calc(var(--pf-global--spacer--lg) - var(--pf-global--spacer--form-element));\n  --pf-c-wizard__close--Right: 0;\n  --pf-c-wizard__close--xl--Right: var(--pf-global--spacer--lg);\n  --pf-c-wizard__close--FontSize: var(--pf-global--FontSize--xl);\n  --pf-c-wizard__title--PaddingRight: var(--pf-global--spacer--2xl);\n  --pf-c-wizard__description--PaddingTop: var(--pf-global--spacer--sm);\n  --pf-c-wizard__description--Color: var(--pf-global--Color--light-200);\n  --pf-c-wizard__nav-link--Color: var(--pf-global--Color--100);\n  --pf-c-wizard__nav-link--TextDecoration: var(--pf-global--link--TextDecoration);\n  --pf-c-wizard__nav-link--hover--Color: var(--pf-global--link--Color);\n  --pf-c-wizard__nav-link--focus--Color: var(--pf-global--link--Color);\n  --pf-c-wizard__nav-link--m-current--Color: var(--pf-global--link--Color);\n  --pf-c-wizard__nav-link--m-current--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-wizard__nav-link--m-disabled--Color: var(--pf-global--Color--dark-200);\n  --pf-c-wizard__nav-list__nav-list__nav-link--m-current--FontWeight: var(--pf-global--FontWeight--bold);\n  --pf-c-wizard__nav-link--before--Width: 1.5rem;\n  --pf-c-wizard__nav-link--before--Height: 1.5rem;\n  --pf-c-wizard__nav-link--before--Top: 0;\n  --pf-c-wizard__nav-link--before--BackgroundColor: var(--pf-global--BackgroundColor--200);\n  --pf-c-wizard__nav-link--before--BorderRadius: var(--pf-global--BorderRadius--lg);\n  --pf-c-wizard__nav-link--before--Color: var(--pf-global--Color--100);\n  --pf-c-wizard__nav-link--before--FontSize: var(--pf-global--FontSize--sm);\n  --pf-c-wizard__nav-link--before--TranslateX: calc(-100% - var(--pf-global--spacer--sm));\n  --pf-c-wizard__nav-link--m-current--before--BackgroundColor: var(--pf-global--active-color--100);\n  --pf-c-wizard__nav-link--m-current--before--Color: var(--pf-global--Color--light-100);\n  --pf-c-wizard__nav-link--m-disabled--before--BackgroundColor: transparent;\n  --pf-c-wizard__nav-link--m-disabled--before--Color: var(--pf-global--Color--dark-200);\n  --pf-c-wizard__toggle--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-wizard__toggle--ZIndex: var(--pf-global--ZIndex--md);\n  --pf-c-wizard__toggle--BoxShadow: var(--pf-global--BoxShadow--md-bottom);\n  --pf-c-wizard__toggle--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-wizard__toggle--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-wizard__toggle--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-wizard__toggle--PaddingLeft: calc(var(--pf-global--spacer--md) + var(--pf-c-wizard__nav-link--before--Width) + var(--pf-global--spacer--sm));\n  --pf-c-wizard__toggle--m-expanded--BorderBottomWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-wizard__toggle--m-expanded--BorderBottomColor: var(--pf-global--BorderColor--100);\n  --pf-c-wizard--m-in-page__toggle--xl--PaddingLeft: calc(var(--pf-global--spacer--xl) + var(--pf-c-wizard__nav-link--before--Width) + var(--pf-global--spacer--sm));\n  --pf-c-wizard__toggle-num--before--Top: 0;\n  --pf-c-wizard__toggle-list-item--not-last-child--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-wizard__toggle-list-item--MarginBottom: var(--pf-global--spacer--xs);\n  --pf-c-wizard__toggle-list--MarginRight: var(--pf-global--spacer--sm);\n  --pf-c-wizard__toggle-list--MarginBottom: calc(var(--pf-c-wizard__toggle-list-item--MarginBottom) * -1);\n  --pf-c-wizard__toggle-separator--MarginLeft: var(--pf-global--spacer--sm);\n  --pf-c-wizard__toggle-separator--Color: var(--pf-global--BorderColor--200);\n  --pf-c-wizard__toggle-icon--LineHeight: var(--pf-global--LineHeight--md);\n  --pf-c-wizard__toggle--m-expanded__toggle-icon--Rotate: 180deg;\n  --pf-c-wizard__nav--ZIndex: var(--pf-global--ZIndex--sm);\n  --pf-c-wizard__nav--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-wizard__nav--BoxShadow: var(--pf-global--BoxShadow--md-bottom);\n  --pf-c-wizard__nav--Width: 100%;\n  --pf-c-wizard__nav--lg--Width: 15.625rem;\n  --pf-c-wizard__nav--lg--BorderRightWidth: var(--pf-global--BorderWidth--sm);\n  --pf-c-wizard__nav--lg--BorderRightColor: var(--pf-global--BorderColor--100);\n  --pf-c-wizard__nav-list--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-wizard__nav-list--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-wizard__nav-list--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-wizard__nav-list--PaddingLeft: calc(var(--pf-global--spacer--md) + var(--pf-c-wizard__nav-link--before--Width) + var(--pf-global--spacer--sm));\n  --pf-c-wizard__nav-list--lg--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-wizard__nav-list--lg--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-wizard__nav-list--lg--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-wizard__nav-list--xl--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-wizard__nav-list--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-wizard__nav-list--xl--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-wizard__nav-list--xl--PaddingLeft: calc(var(--pf-global--spacer--lg) + var(--pf-c-wizard__nav-link--before--Width) + var(--pf-global--spacer--sm));\n  --pf-c-wizard__nav-list--nested--MarginLeft: var(--pf-global--spacer--md);\n  --pf-c-wizard__nav-list--nested--MarginTop: var(--pf-global--spacer--md);\n  --pf-c-wizard__nav-item--MarginTop: var(--pf-global--spacer--md);\n  --pf-c-wizard__outer-wrap--BackgroundColor: var(--pf-global--BackgroundColor--100);\n  --pf-c-wizard__outer-wrap--lg--PaddingLeft: var(--pf-c-wizard__nav--Width);\n  --pf-c-wizard__main--ZIndex: var(--pf-global--ZIndex--xs);\n  --pf-c-wizard__main-body--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-wizard__main-body--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-wizard__main-body--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-wizard__main-body--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-wizard__main-body--xl--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-wizard__main-body--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-wizard__main-body--xl--PaddingBottom: var(--pf-global--spacer--lg);\n  --pf-c-wizard__main-body--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-wizard__footer--PaddingTop: var(--pf-global--spacer--md);\n  --pf-c-wizard__footer--PaddingRight: var(--pf-global--spacer--md);\n  --pf-c-wizard__footer--PaddingBottom: var(--pf-global--spacer--sm);\n  --pf-c-wizard__footer--PaddingLeft: var(--pf-global--spacer--md);\n  --pf-c-wizard__footer--xl--PaddingTop: var(--pf-global--spacer--lg);\n  --pf-c-wizard__footer--xl--PaddingRight: var(--pf-global--spacer--lg);\n  --pf-c-wizard__footer--xl--PaddingBottom: var(--pf-global--spacer--md);\n  --pf-c-wizard__footer--xl--PaddingLeft: var(--pf-global--spacer--lg);\n  --pf-c-wizard__footer--child--MarginRight: var(--pf-global--spacer--md);\n  --pf-c-wizard__footer--child--MarginBottom: var(--pf-global--spacer--sm);\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  height: var(--pf-c-wizard--Height); }\n  @media screen and (min-width: 992px) {\n    .pf-c-wizard {\n      --pf-c-wizard__header--PaddingRight: var(--pf-c-wizard__header--lg--PaddingRight);\n      --pf-c-wizard__header--PaddingLeft: var(--pf-c-wizard__header--lg--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-wizard {\n      --pf-c-wizard__header--PaddingRight: var(--pf-c-wizard__header--xl--PaddingRight);\n      --pf-c-wizard__header--PaddingLeft: var(--pf-c-wizard__header--xl--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-wizard {\n      --pf-c-wizard__close--Right: var(--pf-c-wizard__close--xl--Right); } }\n  @media screen and (min-width: 992px) {\n    .pf-c-wizard {\n      --pf-c-wizard__nav--Width: var(--pf-c-wizard__nav--lg--Width);\n      --pf-c-wizard__nav--BoxShadow: none; } }\n  @media screen and (min-width: 992px) {\n    .pf-c-wizard {\n      --pf-c-wizard__nav-list--PaddingTop: var(--pf-c-wizard__nav-list--lg--PaddingTop);\n      --pf-c-wizard__nav-list--PaddingRight: var(--pf-c-wizard__nav-list--lg--PaddingRight);\n      --pf-c-wizard__nav-list--PaddingBottom: var(--pf-c-wizard__nav-list--lg--PaddingBottom); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-wizard {\n      --pf-c-wizard__nav-list--PaddingTop: var(--pf-c-wizard__nav-list--xl--PaddingTop);\n      --pf-c-wizard__nav-list--PaddingRight: var(--pf-c-wizard__nav-list--xl--PaddingRight);\n      --pf-c-wizard__nav-list--PaddingBottom: var(--pf-c-wizard__nav-list--xl--PaddingBottom);\n      --pf-c-wizard__nav-list--PaddingLeft: var(--pf-c-wizard__nav-list--xl--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-wizard {\n      --pf-c-wizard__main-body--PaddingTop: var(--pf-c-wizard__main-body--xl--PaddingTop);\n      --pf-c-wizard__main-body--PaddingRight: var(--pf-c-wizard__main-body--xl--PaddingRight);\n      --pf-c-wizard__main-body--PaddingBottom: var(--pf-c-wizard__main-body--xl--PaddingBottom);\n      --pf-c-wizard__main-body--PaddingLeft: var(--pf-c-wizard__main-body--xl--PaddingLeft); } }\n  @media screen and (min-width: 1200px) {\n    .pf-c-wizard {\n      --pf-c-wizard__footer--PaddingTop: var(--pf-c-wizard__footer--xl--PaddingTop);\n      --pf-c-wizard__footer--PaddingRight: var(--pf-c-wizard__footer--xl--PaddingRight);\n      --pf-c-wizard__footer--PaddingBottom: var(--pf-c-wizard__footer--xl--PaddingBottom);\n      --pf-c-wizard__footer--PaddingLeft: var(--pf-c-wizard__footer--xl--PaddingLeft); } }\n  .pf-c-modal-box .pf-c-wizard {\n    flex: 1 1 var(--pf-c-modal-box--c-wizard--FlexBasis);\n    min-height: 0; }\n  .pf-c-wizard > *:not(.pf-c-wizard__outer-wrap) {\n    flex-shrink: 0; }\n  .pf-c-wizard.pf-m-finished {\n    --pf-c-wizard__outer-wrap--lg--PaddingLeft: 0; }\n    .pf-c-wizard.pf-m-finished .pf-c-wizard__nav,\n    .pf-c-wizard.pf-m-finished .pf-c-wizard__footer,\n    .pf-c-wizard.pf-m-finished .pf-c-wizard__toggle {\n      display: none;\n      visibility: hidden; }\n\n.pf-c-wizard__header {\n  color: var(--pf-global--Color--100);\n  position: relative;\n  z-index: var(--pf-c-wizard__header--ZIndex);\n  padding: var(--pf-c-wizard__header--PaddingTop) var(--pf-c-wizard__header--PaddingRight) var(--pf-c-wizard__header--PaddingBottom) var(--pf-c-wizard__header--PaddingLeft);\n  background-color: var(--pf-c-wizard__header--BackgroundColor); }\n  .pf-c-wizard__header .pf-c-wizard__close {\n    position: absolute;\n    top: var(--pf-c-wizard__close--Top);\n    right: var(--pf-c-wizard__close--Right);\n    font-size: var(--pf-c-wizard__close--FontSize); }\n\n.pf-c-wizard__title {\n  padding-right: var(--pf-c-wizard__title--PaddingRight);\n  word-wrap: break-word; }\n\n.pf-c-wizard__description {\n  display: none;\n  padding-top: var(--pf-c-wizard__description--PaddingTop);\n  color: var(--pf-c-wizard__description--Color);\n  visibility: hidden; }\n  @media screen and (min-width: 992px) {\n    .pf-c-wizard__description {\n      display: block;\n      visibility: visible; } }\n\n.pf-c-wizard__toggle {\n  position: relative;\n  z-index: var(--pf-c-wizard__toggle--ZIndex);\n  display: flex;\n  justify-content: space-between;\n  width: 100%;\n  padding: var(--pf-c-wizard__toggle--PaddingTop) var(--pf-c-wizard__toggle--PaddingRight) var(--pf-c-wizard__toggle--PaddingBottom) var(--pf-c-wizard__toggle--PaddingLeft);\n  background-color: var(--pf-c-wizard__toggle--BackgroundColor);\n  border: 0;\n  box-shadow: var(--pf-c-wizard__toggle--BoxShadow); }\n  @media screen and (min-width: 992px) {\n    .pf-c-wizard__toggle {\n      display: none;\n      visibility: hidden; } }\n  .pf-c-wizard__toggle.pf-m-expanded {\n    --pf-c-wizard__toggle--BoxShadow: none;\n    border-bottom: var(--pf-c-wizard__toggle--m-expanded--BorderBottomWidth) solid var(--pf-c-wizard__toggle--m-expanded--BorderBottomColor); }\n    .pf-c-wizard__toggle.pf-m-expanded .pf-c-wizard__toggle-icon {\n      transform: rotate(var(--pf-c-wizard__toggle--m-expanded__toggle-icon--Rotate)); }\n\n.pf-c-wizard__toggle-list {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\n  margin-right: var(--pf-c-wizard__toggle-list--MarginRight);\n  margin-bottom: var(--pf-c-wizard__toggle-list--MarginBottom);\n  list-style: none; }\n\n.pf-c-wizard__toggle-list-item {\n  margin-bottom: var(--pf-c-wizard__toggle-list-item--MarginBottom);\n  text-align: left;\n  word-break: break-word; }\n  .pf-c-wizard__toggle-list-item:not(:last-child) {\n    margin-right: var(--pf-c-wizard__toggle-list-item--not-last-child--MarginRight); }\n\n.pf-c-wizard__toggle-num {\n  --pf-c-wizard__nav-link--before--Top: var(--pf-c-wizard__toggle-num--before--Top); }\n\n.pf-c-wizard__toggle-separator {\n  margin-left: var(--pf-c-wizard__toggle-separator--MarginLeft);\n  color: var(--pf-c-wizard__toggle-separator--Color); }\n\n.pf-c-wizard__toggle-icon {\n  line-height: var(--pf-c-wizard__toggle-icon--LineHeight); }\n\n.pf-c-wizard__outer-wrap {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  min-height: 0;\n  background-color: var(--pf-c-wizard__outer-wrap--BackgroundColor); }\n  @media screen and (min-width: 992px) {\n    .pf-c-wizard__outer-wrap {\n      padding-left: var(--pf-c-wizard__outer-wrap--lg--PaddingLeft); } }\n\n.pf-c-wizard__inner-wrap {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  min-height: 0; }\n  @media screen and (min-width: 992px) {\n    .pf-c-wizard__inner-wrap {\n      position: static; } }\n\n.pf-c-wizard__nav {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: var(--pf-c-wizard__nav--ZIndex);\n  display: none;\n  width: var(--pf-c-wizard__nav--Width);\n  max-height: 100%;\n  overflow-y: auto;\n  -webkit-overflow-scrolling: touch;\n  visibility: hidden;\n  background-color: var(--pf-c-wizard__nav--BackgroundColor);\n  box-shadow: var(--pf-c-wizard__nav--BoxShadow); }\n  .pf-c-wizard__nav.pf-m-expanded {\n    display: block;\n    visibility: visible; }\n  @media screen and (min-width: 992px) {\n    .pf-c-wizard__nav {\n      display: block;\n      height: 100%;\n      visibility: visible;\n      border-right: var(--pf-c-wizard__nav--lg--BorderRightWidth) solid var(--pf-c-wizard__nav--lg--BorderRightColor); } }\n\n.pf-c-wizard__nav-list {\n  padding-top: var(--pf-c-wizard__nav-list--PaddingTop);\n  padding-right: var(--pf-c-wizard__nav-list--PaddingRight);\n  padding-bottom: var(--pf-c-wizard__nav-list--PaddingBottom);\n  padding-left: var(--pf-c-wizard__nav-list--PaddingLeft);\n  list-style: none;\n  counter-reset: wizard-nav-count; }\n  .pf-c-wizard__nav-list .pf-c-wizard__nav-list {\n    padding: 0;\n    margin-top: var(--pf-c-wizard__nav-list--nested--MarginTop);\n    margin-left: var(--pf-c-wizard__nav-list--nested--MarginLeft); }\n    .pf-c-wizard__nav-list .pf-c-wizard__nav-list .pf-c-wizard__nav-link::before {\n      content: none; }\n    .pf-c-wizard__nav-list .pf-c-wizard__nav-list .pf-c-wizard__nav-link.pf-m-current {\n      font-weight: var(--pf-c-wizard__nav-list__nav-list__nav-link--m-current--FontWeight); }\n\n.pf-c-wizard__nav-item + .pf-c-wizard__nav-item {\n  margin-top: var(--pf-c-wizard__nav-item--MarginTop); }\n\n.pf-c-wizard__nav-link {\n  position: relative;\n  display: inline-block;\n  color: var(--pf-c-wizard__nav-link--Color);\n  text-align: left;\n  text-decoration: var(--pf-c-wizard__nav-link--TextDecoration);\n  word-break: break-word;\n  border: 0; }\n  .pf-c-wizard__toggle-num, .pf-c-wizard__nav-link::before {\n    position: absolute;\n    top: var(--pf-c-wizard__nav-link--before--Top);\n    left: 0;\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: var(--pf-c-wizard__nav-link--before--Width);\n    height: var(--pf-c-wizard__nav-link--before--Height);\n    font-size: var(--pf-c-wizard__nav-link--before--FontSize);\n    line-height: 1;\n    color: var(--pf-c-wizard__nav-link--before--Color);\n    background-color: var(--pf-c-wizard__nav-link--before--BackgroundColor);\n    border-radius: var(--pf-c-wizard__nav-link--before--BorderRadius);\n    transform: translateX(var(--pf-c-wizard__nav-link--before--TranslateX)); }\n  .pf-c-wizard__nav-link::before {\n    top: 0;\n    content: counter(wizard-nav-count);\n    counter-increment: wizard-nav-count; }\n  .pf-c-wizard__nav-link:hover {\n    --pf-c-wizard__nav-link--Color: var(--pf-c-wizard__nav-link--hover--Color); }\n  .pf-c-wizard__nav-link:focus {\n    --pf-c-wizard__nav-link--Color: var(--pf-c-wizard__nav-link--focus--Color); }\n  .pf-c-wizard__nav-link.pf-m-current {\n    --pf-c-wizard__nav-link--Color: var(--pf-c-wizard__nav-link--m-current--Color);\n    font-weight: var(--pf-c-wizard__nav-link--m-current--FontWeight); }\n    .pf-c-wizard__toggle-num, .pf-c-wizard__nav-link.pf-m-current::before {\n      --pf-c-wizard__nav-link--before--BackgroundColor: var(--pf-c-wizard__nav-link--m-current--before--BackgroundColor);\n      --pf-c-wizard__nav-link--before--Color: var(--pf-c-wizard__nav-link--m-current--before--Color); }\n  .pf-c-wizard__nav-link:disabled, .pf-c-wizard__nav-link.pf-m-disabled {\n    --pf-c-wizard__nav-link--Color: var(--pf-c-wizard__nav-link--m-disabled--Color);\n    pointer-events: none; }\n    .pf-c-wizard__nav-link:disabled::before, .pf-c-wizard__nav-link.pf-m-disabled::before {\n      --pf-c-wizard__nav-link--before--BackgroundColor: var(--pf-c-wizard__nav-link--m-disabled--before--BackgroundColor);\n      --pf-c-wizard__nav-link--before--Color: var(--pf-c-wizard__nav-link--m-disabled--before--Color); }\n\n.pf-c-wizard__main {\n  z-index: var(--pf-c-wizard__main--ZIndex);\n  flex: 1 1 auto;\n  overflow-x: hidden;\n  overflow-y: auto;\n  word-break: break-word; }\n\n.pf-c-wizard__main-body {\n  padding: var(--pf-c-wizard__main-body--PaddingTop) var(--pf-c-wizard__main-body--PaddingRight) var(--pf-c-wizard__main-body--PaddingBottom) var(--pf-c-wizard__main-body--PaddingLeft); }\n  .pf-c-wizard__main-body.pf-m-no-padding {\n    padding: 0; }\n\n.pf-c-wizard__footer {\n  display: flex;\n  flex-wrap: wrap;\n  flex-shrink: 0;\n  padding: var(--pf-c-wizard__footer--PaddingTop) var(--pf-c-wizard__footer--PaddingRight) var(--pf-c-wizard__footer--PaddingBottom) var(--pf-c-wizard__footer--PaddingLeft); }\n  .pf-c-wizard__footer > * {\n    margin-bottom: var(--pf-c-wizard__footer--child--MarginBottom); }\n    .pf-c-wizard__footer > *:not(:last-child) {\n      margin-right: var(--pf-c-wizard__footer--child--MarginRight); }\n\n.pf-l-bullseye {\n  --pf-l-bullseye--Padding: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  height: 100%;\n  padding: var(--pf-l-bullseye--Padding);\n  margin: 0; }\n\n.pf-l-flex {\n  --pf-l-flex--Display: flex;\n  --pf-l-flex--FlexWrap: wrap;\n  --pf-l-flex--AlignItems: baseline;\n  --pf-l-flex--m-row--AlignItems: baseline;\n  --pf-l-flex--m-row-reverse--AlignItems: baseline;\n  --pf-l-flex--item--Order: 0;\n  --pf-l-flex--spacer-base: var(--pf-global--spacer--md);\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer-base);\n  --pf-l-flex--spacer--none: 0;\n  --pf-l-flex--spacer--xs: var(--pf-global--spacer--xs);\n  --pf-l-flex--spacer--sm: var(--pf-global--spacer--sm);\n  --pf-l-flex--spacer--md: var(--pf-global--spacer--md);\n  --pf-l-flex--spacer--lg: var(--pf-global--spacer--lg);\n  --pf-l-flex--spacer--xl: var(--pf-global--spacer--xl);\n  --pf-l-flex--spacer--2xl: var(--pf-global--spacer--2xl);\n  --pf-l-flex--spacer--3xl: var(--pf-global--spacer--3xl);\n  --pf-l-flex--spacer--4xl: var(--pf-global--spacer--4xl);\n  display: var(--pf-l-flex--Display);\n  flex-wrap: var(--pf-l-flex--FlexWrap);\n  align-items: var(--pf-l-flex--AlignItems); }\n  .pf-l-flex:last-child {\n    --pf-l-flex--spacer: 0; }\n\n.pf-l-flex > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer-base);\n  order: var(--pf-l-flex--item--Order);\n  max-width: 100%;\n  margin-right: var(--pf-l-flex--spacer); }\n  @media screen and (min-width: 576px) {\n    .pf-l-flex > * {\n      order: var(--pf-l-flex--item--Order-on-sm, var(--pf-l-flex--item--Order)); } }\n  @media screen and (min-width: 768px) {\n    .pf-l-flex > * {\n      order: var(--pf-l-flex--item--Order-on-md, var(--pf-l-flex--item--Order-on-sm, var(--pf-l-flex--item--Order))); } }\n  @media screen and (min-width: 992px) {\n    .pf-l-flex > * {\n      order: var(--pf-l-flex--item--Order-on-lg, var(--pf-l-flex--item--Order-on-md, var(--pf-l-flex--item--Order-on-sm, var(--pf-l-flex--item--Order)))); } }\n  @media screen and (min-width: 1200px) {\n    .pf-l-flex > * {\n      order: var(--pf-l-flex--item--Order-on-xl, var(--pf-l-flex--item--Order-on-lg, var(--pf-l-flex--item--Order-on-md, var(--pf-l-flex--item--Order-on-sm, var(--pf-l-flex--item--Order))))); } }\n  @media screen and (min-width: 1450px) {\n    .pf-l-flex > * {\n      order: var(--pf-l-flex--item--Order-on-2xl, var(--pf-l-flex--item--Order-on-xl, var(--pf-l-flex--item--Order-on-lg, var(--pf-l-flex--item--Order-on-md, var(--pf-l-flex--item--Order-on-sm, var(--pf-l-flex--item--Order)))))); } }\n  .pf-l-flex > *:last-child {\n    --pf-l-flex--spacer: 0; }\n\n.pf-l-flex.pf-m-flex {\n  display: var(--pf-l-flex--Display); }\n\n.pf-l-flex.pf-m-inline-flex {\n  --pf-l-flex--Display: inline-flex; }\n\n.pf-l-flex.pf-m-column {\n  flex-direction: column;\n  align-items: normal; }\n  .pf-l-flex.pf-m-column > * {\n    margin: 0 0 var(--pf-l-flex--spacer) 0; }\n\n.pf-l-flex.pf-m-column-reverse {\n  flex-direction: column-reverse;\n  align-items: normal; }\n  .pf-l-flex.pf-m-column-reverse > * {\n    margin: var(--pf-l-flex--spacer) 0 0 0; }\n\n.pf-l-flex.pf-m-row {\n  flex-direction: row;\n  align-items: var(--pf-l-flex--m-row--AlignItems); }\n  .pf-l-flex.pf-m-row > * {\n    margin: 0 var(--pf-l-flex--spacer) 0 0; }\n\n.pf-l-flex.pf-m-row-reverse {\n  flex-direction: row-reverse;\n  align-items: var(--pf-l-flex--m-row-reverse--AlignItems); }\n  .pf-l-flex.pf-m-row-reverse > * {\n    margin: 0 0 0 var(--pf-l-flex--spacer); }\n\n.pf-l-flex.pf-m-wrap {\n  flex-wrap: wrap; }\n\n.pf-l-flex.pf-m-wrap-reverse {\n  flex-wrap: wrap-reverse; }\n\n.pf-l-flex.pf-m-nowrap {\n  flex-wrap: nowrap; }\n\n.pf-l-flex.pf-m-justify-content-flex-start {\n  justify-content: flex-start; }\n\n.pf-l-flex.pf-m-justify-content-flex-end {\n  justify-content: flex-end; }\n\n.pf-l-flex.pf-m-justify-content-center {\n  justify-content: center; }\n\n.pf-l-flex.pf-m-justify-content-space-between {\n  justify-content: space-between; }\n\n.pf-l-flex.pf-m-justify-content-space-around {\n  justify-content: space-around; }\n\n.pf-l-flex.pf-m-justify-content-space-evenly {\n  justify-content: space-evenly; }\n\n.pf-l-flex.pf-m-align-items-flex-start {\n  align-items: flex-start; }\n\n.pf-l-flex.pf-m-align-items-flex-end {\n  align-items: flex-end; }\n\n.pf-l-flex.pf-m-align-items-center {\n  align-items: center; }\n\n.pf-l-flex.pf-m-align-items-stretch {\n  align-items: stretch; }\n\n.pf-l-flex.pf-m-align-items-baseline {\n  align-items: baseline; }\n\n.pf-l-flex.pf-m-align-content-flex-start {\n  align-content: flex-start; }\n\n.pf-l-flex.pf-m-align-content-flex-end {\n  align-content: flex-end; }\n\n.pf-l-flex.pf-m-align-content-center {\n  align-content: center; }\n\n.pf-l-flex.pf-m-align-content-stretch {\n  align-content: stretch; }\n\n.pf-l-flex.pf-m-align-content-space-between {\n  align-content: space-between; }\n\n.pf-l-flex.pf-m-align-content-space-around {\n  align-content: space-around; }\n\n.pf-l-flex > .pf-m-align-right {\n  margin-left: auto; }\n\n.pf-l-flex > .pf-m-align-left {\n  margin-left: 0; }\n\n.pf-l-flex > .pf-m-grow {\n  flex-grow: 1; }\n\n.pf-l-flex > .pf-m-shrink {\n  flex-shrink: 1; }\n\n.pf-l-flex > .pf-m-full-width {\n  width: 100%;\n  margin-right: 0; }\n\n.pf-l-flex > .pf-m-flex-1 {\n  flex: 1 0 0; }\n\n.pf-l-flex > .pf-m-flex-2 {\n  flex: 2 0 0; }\n\n.pf-l-flex > .pf-m-flex-3 {\n  flex: 3 0 0; }\n\n.pf-l-flex > .pf-m-flex-4 {\n  flex: 4 0 0; }\n\n.pf-l-flex > .pf-m-flex-default {\n  flex: 0 1 auto; }\n\n.pf-l-flex > .pf-m-flex-none {\n  flex: none; }\n\n.pf-l-flex > .pf-m-align-self-flex-start {\n  align-self: flex-start; }\n\n.pf-l-flex > .pf-m-align-self-flex-end {\n  align-self: flex-end; }\n\n.pf-l-flex > .pf-m-align-self-center {\n  align-self: center; }\n\n.pf-l-flex > .pf-m-align-self-baseline {\n  align-self: baseline; }\n\n.pf-l-flex > .pf-m-align-self-stretch {\n  align-self: stretch; }\n\n@media (min-width: 576px) {\n  .pf-l-flex.pf-m-flex-on-sm {\n    display: var(--pf-l-flex--Display); }\n  .pf-l-flex.pf-m-inline-flex-on-sm {\n    --pf-l-flex--Display: inline-flex; }\n  .pf-l-flex.pf-m-column-on-sm {\n    flex-direction: column;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-on-sm > * {\n      margin: 0 0 var(--pf-l-flex--spacer) 0; }\n  .pf-l-flex.pf-m-column-reverse-on-sm {\n    flex-direction: column-reverse;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-reverse-on-sm > * {\n      margin: var(--pf-l-flex--spacer) 0 0 0; }\n  .pf-l-flex.pf-m-row-on-sm {\n    flex-direction: row;\n    align-items: var(--pf-l-flex--m-row--AlignItems); }\n    .pf-l-flex.pf-m-row-on-sm > * {\n      margin: 0 var(--pf-l-flex--spacer) 0 0; }\n  .pf-l-flex.pf-m-row-reverse-on-sm {\n    flex-direction: row-reverse;\n    align-items: var(--pf-l-flex--m-row-reverse--AlignItems); }\n    .pf-l-flex.pf-m-row-reverse-on-sm > * {\n      margin: 0 0 0 var(--pf-l-flex--spacer); }\n  .pf-l-flex.pf-m-wrap-on-sm {\n    flex-wrap: wrap; }\n  .pf-l-flex.pf-m-wrap-reverse-on-sm {\n    flex-wrap: wrap-reverse; }\n  .pf-l-flex.pf-m-nowrap-on-sm {\n    flex-wrap: nowrap; }\n  .pf-l-flex.pf-m-justify-content-flex-start-on-sm {\n    justify-content: flex-start; }\n  .pf-l-flex.pf-m-justify-content-flex-end-on-sm {\n    justify-content: flex-end; }\n  .pf-l-flex.pf-m-justify-content-center-on-sm {\n    justify-content: center; }\n  .pf-l-flex.pf-m-justify-content-space-between-on-sm {\n    justify-content: space-between; }\n  .pf-l-flex.pf-m-justify-content-space-around-on-sm {\n    justify-content: space-around; }\n  .pf-l-flex.pf-m-justify-content-space-evenly-on-sm {\n    justify-content: space-evenly; }\n  .pf-l-flex.pf-m-align-items-flex-start-on-sm {\n    align-items: flex-start; }\n  .pf-l-flex.pf-m-align-items-flex-end-on-sm {\n    align-items: flex-end; }\n  .pf-l-flex.pf-m-align-items-center-on-sm {\n    align-items: center; }\n  .pf-l-flex.pf-m-align-items-stretch-on-sm {\n    align-items: stretch; }\n  .pf-l-flex.pf-m-align-items-baseline-on-sm {\n    align-items: baseline; }\n  .pf-l-flex.pf-m-align-content-flex-start-on-sm {\n    align-content: flex-start; }\n  .pf-l-flex.pf-m-align-content-flex-end-on-sm {\n    align-content: flex-end; }\n  .pf-l-flex.pf-m-align-content-center-on-sm {\n    align-content: center; }\n  .pf-l-flex.pf-m-align-content-stretch-on-sm {\n    align-content: stretch; }\n  .pf-l-flex.pf-m-align-content-space-between-on-sm {\n    align-content: space-between; }\n  .pf-l-flex.pf-m-align-content-space-around-on-sm {\n    align-content: space-around; }\n  .pf-l-flex > .pf-m-align-right-on-sm {\n    margin-left: auto; }\n  .pf-l-flex > .pf-m-align-left-on-sm {\n    margin-left: 0; }\n  .pf-l-flex > .pf-m-grow-on-sm {\n    flex-grow: 1; }\n  .pf-l-flex > .pf-m-shrink-on-sm {\n    flex-shrink: 1; }\n  .pf-l-flex > .pf-m-full-width-on-sm {\n    width: 100%;\n    margin-right: 0; }\n  .pf-l-flex > .pf-m-flex-1-on-sm {\n    flex: 1 0 0; }\n  .pf-l-flex > .pf-m-flex-2-on-sm {\n    flex: 2 0 0; }\n  .pf-l-flex > .pf-m-flex-3-on-sm {\n    flex: 3 0 0; }\n  .pf-l-flex > .pf-m-flex-4-on-sm {\n    flex: 4 0 0; }\n  .pf-l-flex > .pf-m-flex-default-on-sm {\n    flex: 0 1 auto; }\n  .pf-l-flex > .pf-m-flex-none-on-sm {\n    flex: none; }\n  .pf-l-flex > .pf-m-align-self-flex-start-on-sm {\n    align-self: flex-start; }\n  .pf-l-flex > .pf-m-align-self-flex-end-on-sm {\n    align-self: flex-end; }\n  .pf-l-flex > .pf-m-align-self-center-on-sm {\n    align-self: center; }\n  .pf-l-flex > .pf-m-align-self-baseline-on-sm {\n    align-self: baseline; }\n  .pf-l-flex > .pf-m-align-self-stretch-on-sm {\n    align-self: stretch; } }\n\n@media (min-width: 768px) {\n  .pf-l-flex.pf-m-flex-on-md {\n    display: var(--pf-l-flex--Display); }\n  .pf-l-flex.pf-m-inline-flex-on-md {\n    --pf-l-flex--Display: inline-flex; }\n  .pf-l-flex.pf-m-column-on-md {\n    flex-direction: column;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-on-md > * {\n      margin: 0 0 var(--pf-l-flex--spacer) 0; }\n  .pf-l-flex.pf-m-column-reverse-on-md {\n    flex-direction: column-reverse;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-reverse-on-md > * {\n      margin: var(--pf-l-flex--spacer) 0 0 0; }\n  .pf-l-flex.pf-m-row-on-md {\n    flex-direction: row;\n    align-items: var(--pf-l-flex--m-row--AlignItems); }\n    .pf-l-flex.pf-m-row-on-md > * {\n      margin: 0 var(--pf-l-flex--spacer) 0 0; }\n  .pf-l-flex.pf-m-row-reverse-on-md {\n    flex-direction: row-reverse;\n    align-items: var(--pf-l-flex--m-row-reverse--AlignItems); }\n    .pf-l-flex.pf-m-row-reverse-on-md > * {\n      margin: 0 0 0 var(--pf-l-flex--spacer); }\n  .pf-l-flex.pf-m-wrap-on-md {\n    flex-wrap: wrap; }\n  .pf-l-flex.pf-m-wrap-reverse-on-md {\n    flex-wrap: wrap-reverse; }\n  .pf-l-flex.pf-m-nowrap-on-md {\n    flex-wrap: nowrap; }\n  .pf-l-flex.pf-m-justify-content-flex-start-on-md {\n    justify-content: flex-start; }\n  .pf-l-flex.pf-m-justify-content-flex-end-on-md {\n    justify-content: flex-end; }\n  .pf-l-flex.pf-m-justify-content-center-on-md {\n    justify-content: center; }\n  .pf-l-flex.pf-m-justify-content-space-between-on-md {\n    justify-content: space-between; }\n  .pf-l-flex.pf-m-justify-content-space-around-on-md {\n    justify-content: space-around; }\n  .pf-l-flex.pf-m-justify-content-space-evenly-on-md {\n    justify-content: space-evenly; }\n  .pf-l-flex.pf-m-align-items-flex-start-on-md {\n    align-items: flex-start; }\n  .pf-l-flex.pf-m-align-items-flex-end-on-md {\n    align-items: flex-end; }\n  .pf-l-flex.pf-m-align-items-center-on-md {\n    align-items: center; }\n  .pf-l-flex.pf-m-align-items-stretch-on-md {\n    align-items: stretch; }\n  .pf-l-flex.pf-m-align-items-baseline-on-md {\n    align-items: baseline; }\n  .pf-l-flex.pf-m-align-content-flex-start-on-md {\n    align-content: flex-start; }\n  .pf-l-flex.pf-m-align-content-flex-end-on-md {\n    align-content: flex-end; }\n  .pf-l-flex.pf-m-align-content-center-on-md {\n    align-content: center; }\n  .pf-l-flex.pf-m-align-content-stretch-on-md {\n    align-content: stretch; }\n  .pf-l-flex.pf-m-align-content-space-between-on-md {\n    align-content: space-between; }\n  .pf-l-flex.pf-m-align-content-space-around-on-md {\n    align-content: space-around; }\n  .pf-l-flex > .pf-m-align-right-on-md {\n    margin-left: auto; }\n  .pf-l-flex > .pf-m-align-left-on-md {\n    margin-left: 0; }\n  .pf-l-flex > .pf-m-grow-on-md {\n    flex-grow: 1; }\n  .pf-l-flex > .pf-m-shrink-on-md {\n    flex-shrink: 1; }\n  .pf-l-flex > .pf-m-full-width-on-md {\n    width: 100%;\n    margin-right: 0; }\n  .pf-l-flex > .pf-m-flex-1-on-md {\n    flex: 1 0 0; }\n  .pf-l-flex > .pf-m-flex-2-on-md {\n    flex: 2 0 0; }\n  .pf-l-flex > .pf-m-flex-3-on-md {\n    flex: 3 0 0; }\n  .pf-l-flex > .pf-m-flex-4-on-md {\n    flex: 4 0 0; }\n  .pf-l-flex > .pf-m-flex-default-on-md {\n    flex: 0 1 auto; }\n  .pf-l-flex > .pf-m-flex-none-on-md {\n    flex: none; }\n  .pf-l-flex > .pf-m-align-self-flex-start-on-md {\n    align-self: flex-start; }\n  .pf-l-flex > .pf-m-align-self-flex-end-on-md {\n    align-self: flex-end; }\n  .pf-l-flex > .pf-m-align-self-center-on-md {\n    align-self: center; }\n  .pf-l-flex > .pf-m-align-self-baseline-on-md {\n    align-self: baseline; }\n  .pf-l-flex > .pf-m-align-self-stretch-on-md {\n    align-self: stretch; } }\n\n@media (min-width: 992px) {\n  .pf-l-flex.pf-m-flex-on-lg {\n    display: var(--pf-l-flex--Display); }\n  .pf-l-flex.pf-m-inline-flex-on-lg {\n    --pf-l-flex--Display: inline-flex; }\n  .pf-l-flex.pf-m-column-on-lg {\n    flex-direction: column;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-on-lg > * {\n      margin: 0 0 var(--pf-l-flex--spacer) 0; }\n  .pf-l-flex.pf-m-column-reverse-on-lg {\n    flex-direction: column-reverse;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-reverse-on-lg > * {\n      margin: var(--pf-l-flex--spacer) 0 0 0; }\n  .pf-l-flex.pf-m-row-on-lg {\n    flex-direction: row;\n    align-items: var(--pf-l-flex--m-row--AlignItems); }\n    .pf-l-flex.pf-m-row-on-lg > * {\n      margin: 0 var(--pf-l-flex--spacer) 0 0; }\n  .pf-l-flex.pf-m-row-reverse-on-lg {\n    flex-direction: row-reverse;\n    align-items: var(--pf-l-flex--m-row-reverse--AlignItems); }\n    .pf-l-flex.pf-m-row-reverse-on-lg > * {\n      margin: 0 0 0 var(--pf-l-flex--spacer); }\n  .pf-l-flex.pf-m-wrap-on-lg {\n    flex-wrap: wrap; }\n  .pf-l-flex.pf-m-wrap-reverse-on-lg {\n    flex-wrap: wrap-reverse; }\n  .pf-l-flex.pf-m-nowrap-on-lg {\n    flex-wrap: nowrap; }\n  .pf-l-flex.pf-m-justify-content-flex-start-on-lg {\n    justify-content: flex-start; }\n  .pf-l-flex.pf-m-justify-content-flex-end-on-lg {\n    justify-content: flex-end; }\n  .pf-l-flex.pf-m-justify-content-center-on-lg {\n    justify-content: center; }\n  .pf-l-flex.pf-m-justify-content-space-between-on-lg {\n    justify-content: space-between; }\n  .pf-l-flex.pf-m-justify-content-space-around-on-lg {\n    justify-content: space-around; }\n  .pf-l-flex.pf-m-justify-content-space-evenly-on-lg {\n    justify-content: space-evenly; }\n  .pf-l-flex.pf-m-align-items-flex-start-on-lg {\n    align-items: flex-start; }\n  .pf-l-flex.pf-m-align-items-flex-end-on-lg {\n    align-items: flex-end; }\n  .pf-l-flex.pf-m-align-items-center-on-lg {\n    align-items: center; }\n  .pf-l-flex.pf-m-align-items-stretch-on-lg {\n    align-items: stretch; }\n  .pf-l-flex.pf-m-align-items-baseline-on-lg {\n    align-items: baseline; }\n  .pf-l-flex.pf-m-align-content-flex-start-on-lg {\n    align-content: flex-start; }\n  .pf-l-flex.pf-m-align-content-flex-end-on-lg {\n    align-content: flex-end; }\n  .pf-l-flex.pf-m-align-content-center-on-lg {\n    align-content: center; }\n  .pf-l-flex.pf-m-align-content-stretch-on-lg {\n    align-content: stretch; }\n  .pf-l-flex.pf-m-align-content-space-between-on-lg {\n    align-content: space-between; }\n  .pf-l-flex.pf-m-align-content-space-around-on-lg {\n    align-content: space-around; }\n  .pf-l-flex > .pf-m-align-right-on-lg {\n    margin-left: auto; }\n  .pf-l-flex > .pf-m-align-left-on-lg {\n    margin-left: 0; }\n  .pf-l-flex > .pf-m-grow-on-lg {\n    flex-grow: 1; }\n  .pf-l-flex > .pf-m-shrink-on-lg {\n    flex-shrink: 1; }\n  .pf-l-flex > .pf-m-full-width-on-lg {\n    width: 100%;\n    margin-right: 0; }\n  .pf-l-flex > .pf-m-flex-1-on-lg {\n    flex: 1 0 0; }\n  .pf-l-flex > .pf-m-flex-2-on-lg {\n    flex: 2 0 0; }\n  .pf-l-flex > .pf-m-flex-3-on-lg {\n    flex: 3 0 0; }\n  .pf-l-flex > .pf-m-flex-4-on-lg {\n    flex: 4 0 0; }\n  .pf-l-flex > .pf-m-flex-default-on-lg {\n    flex: 0 1 auto; }\n  .pf-l-flex > .pf-m-flex-none-on-lg {\n    flex: none; }\n  .pf-l-flex > .pf-m-align-self-flex-start-on-lg {\n    align-self: flex-start; }\n  .pf-l-flex > .pf-m-align-self-flex-end-on-lg {\n    align-self: flex-end; }\n  .pf-l-flex > .pf-m-align-self-center-on-lg {\n    align-self: center; }\n  .pf-l-flex > .pf-m-align-self-baseline-on-lg {\n    align-self: baseline; }\n  .pf-l-flex > .pf-m-align-self-stretch-on-lg {\n    align-self: stretch; } }\n\n@media (min-width: 1200px) {\n  .pf-l-flex.pf-m-flex-on-xl {\n    display: var(--pf-l-flex--Display); }\n  .pf-l-flex.pf-m-inline-flex-on-xl {\n    --pf-l-flex--Display: inline-flex; }\n  .pf-l-flex.pf-m-column-on-xl {\n    flex-direction: column;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-on-xl > * {\n      margin: 0 0 var(--pf-l-flex--spacer) 0; }\n  .pf-l-flex.pf-m-column-reverse-on-xl {\n    flex-direction: column-reverse;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-reverse-on-xl > * {\n      margin: var(--pf-l-flex--spacer) 0 0 0; }\n  .pf-l-flex.pf-m-row-on-xl {\n    flex-direction: row;\n    align-items: var(--pf-l-flex--m-row--AlignItems); }\n    .pf-l-flex.pf-m-row-on-xl > * {\n      margin: 0 var(--pf-l-flex--spacer) 0 0; }\n  .pf-l-flex.pf-m-row-reverse-on-xl {\n    flex-direction: row-reverse;\n    align-items: var(--pf-l-flex--m-row-reverse--AlignItems); }\n    .pf-l-flex.pf-m-row-reverse-on-xl > * {\n      margin: 0 0 0 var(--pf-l-flex--spacer); }\n  .pf-l-flex.pf-m-wrap-on-xl {\n    flex-wrap: wrap; }\n  .pf-l-flex.pf-m-wrap-reverse-on-xl {\n    flex-wrap: wrap-reverse; }\n  .pf-l-flex.pf-m-nowrap-on-xl {\n    flex-wrap: nowrap; }\n  .pf-l-flex.pf-m-justify-content-flex-start-on-xl {\n    justify-content: flex-start; }\n  .pf-l-flex.pf-m-justify-content-flex-end-on-xl {\n    justify-content: flex-end; }\n  .pf-l-flex.pf-m-justify-content-center-on-xl {\n    justify-content: center; }\n  .pf-l-flex.pf-m-justify-content-space-between-on-xl {\n    justify-content: space-between; }\n  .pf-l-flex.pf-m-justify-content-space-around-on-xl {\n    justify-content: space-around; }\n  .pf-l-flex.pf-m-justify-content-space-evenly-on-xl {\n    justify-content: space-evenly; }\n  .pf-l-flex.pf-m-align-items-flex-start-on-xl {\n    align-items: flex-start; }\n  .pf-l-flex.pf-m-align-items-flex-end-on-xl {\n    align-items: flex-end; }\n  .pf-l-flex.pf-m-align-items-center-on-xl {\n    align-items: center; }\n  .pf-l-flex.pf-m-align-items-stretch-on-xl {\n    align-items: stretch; }\n  .pf-l-flex.pf-m-align-items-baseline-on-xl {\n    align-items: baseline; }\n  .pf-l-flex.pf-m-align-content-flex-start-on-xl {\n    align-content: flex-start; }\n  .pf-l-flex.pf-m-align-content-flex-end-on-xl {\n    align-content: flex-end; }\n  .pf-l-flex.pf-m-align-content-center-on-xl {\n    align-content: center; }\n  .pf-l-flex.pf-m-align-content-stretch-on-xl {\n    align-content: stretch; }\n  .pf-l-flex.pf-m-align-content-space-between-on-xl {\n    align-content: space-between; }\n  .pf-l-flex.pf-m-align-content-space-around-on-xl {\n    align-content: space-around; }\n  .pf-l-flex > .pf-m-align-right-on-xl {\n    margin-left: auto; }\n  .pf-l-flex > .pf-m-align-left-on-xl {\n    margin-left: 0; }\n  .pf-l-flex > .pf-m-grow-on-xl {\n    flex-grow: 1; }\n  .pf-l-flex > .pf-m-shrink-on-xl {\n    flex-shrink: 1; }\n  .pf-l-flex > .pf-m-full-width-on-xl {\n    width: 100%;\n    margin-right: 0; }\n  .pf-l-flex > .pf-m-flex-1-on-xl {\n    flex: 1 0 0; }\n  .pf-l-flex > .pf-m-flex-2-on-xl {\n    flex: 2 0 0; }\n  .pf-l-flex > .pf-m-flex-3-on-xl {\n    flex: 3 0 0; }\n  .pf-l-flex > .pf-m-flex-4-on-xl {\n    flex: 4 0 0; }\n  .pf-l-flex > .pf-m-flex-default-on-xl {\n    flex: 0 1 auto; }\n  .pf-l-flex > .pf-m-flex-none-on-xl {\n    flex: none; }\n  .pf-l-flex > .pf-m-align-self-flex-start-on-xl {\n    align-self: flex-start; }\n  .pf-l-flex > .pf-m-align-self-flex-end-on-xl {\n    align-self: flex-end; }\n  .pf-l-flex > .pf-m-align-self-center-on-xl {\n    align-self: center; }\n  .pf-l-flex > .pf-m-align-self-baseline-on-xl {\n    align-self: baseline; }\n  .pf-l-flex > .pf-m-align-self-stretch-on-xl {\n    align-self: stretch; } }\n\n@media (min-width: 1450px) {\n  .pf-l-flex.pf-m-flex-on-2xl {\n    display: var(--pf-l-flex--Display); }\n  .pf-l-flex.pf-m-inline-flex-on-2xl {\n    --pf-l-flex--Display: inline-flex; }\n  .pf-l-flex.pf-m-column-on-2xl {\n    flex-direction: column;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-on-2xl > * {\n      margin: 0 0 var(--pf-l-flex--spacer) 0; }\n  .pf-l-flex.pf-m-column-reverse-on-2xl {\n    flex-direction: column-reverse;\n    align-items: normal; }\n    .pf-l-flex.pf-m-column-reverse-on-2xl > * {\n      margin: var(--pf-l-flex--spacer) 0 0 0; }\n  .pf-l-flex.pf-m-row-on-2xl {\n    flex-direction: row;\n    align-items: var(--pf-l-flex--m-row--AlignItems); }\n    .pf-l-flex.pf-m-row-on-2xl > * {\n      margin: 0 var(--pf-l-flex--spacer) 0 0; }\n  .pf-l-flex.pf-m-row-reverse-on-2xl {\n    flex-direction: row-reverse;\n    align-items: var(--pf-l-flex--m-row-reverse--AlignItems); }\n    .pf-l-flex.pf-m-row-reverse-on-2xl > * {\n      margin: 0 0 0 var(--pf-l-flex--spacer); }\n  .pf-l-flex.pf-m-wrap-on-2xl {\n    flex-wrap: wrap; }\n  .pf-l-flex.pf-m-wrap-reverse-on-2xl {\n    flex-wrap: wrap-reverse; }\n  .pf-l-flex.pf-m-nowrap-on-2xl {\n    flex-wrap: nowrap; }\n  .pf-l-flex.pf-m-justify-content-flex-start-on-2xl {\n    justify-content: flex-start; }\n  .pf-l-flex.pf-m-justify-content-flex-end-on-2xl {\n    justify-content: flex-end; }\n  .pf-l-flex.pf-m-justify-content-center-on-2xl {\n    justify-content: center; }\n  .pf-l-flex.pf-m-justify-content-space-between-on-2xl {\n    justify-content: space-between; }\n  .pf-l-flex.pf-m-justify-content-space-around-on-2xl {\n    justify-content: space-around; }\n  .pf-l-flex.pf-m-justify-content-space-evenly-on-2xl {\n    justify-content: space-evenly; }\n  .pf-l-flex.pf-m-align-items-flex-start-on-2xl {\n    align-items: flex-start; }\n  .pf-l-flex.pf-m-align-items-flex-end-on-2xl {\n    align-items: flex-end; }\n  .pf-l-flex.pf-m-align-items-center-on-2xl {\n    align-items: center; }\n  .pf-l-flex.pf-m-align-items-stretch-on-2xl {\n    align-items: stretch; }\n  .pf-l-flex.pf-m-align-items-baseline-on-2xl {\n    align-items: baseline; }\n  .pf-l-flex.pf-m-align-content-flex-start-on-2xl {\n    align-content: flex-start; }\n  .pf-l-flex.pf-m-align-content-flex-end-on-2xl {\n    align-content: flex-end; }\n  .pf-l-flex.pf-m-align-content-center-on-2xl {\n    align-content: center; }\n  .pf-l-flex.pf-m-align-content-stretch-on-2xl {\n    align-content: stretch; }\n  .pf-l-flex.pf-m-align-content-space-between-on-2xl {\n    align-content: space-between; }\n  .pf-l-flex.pf-m-align-content-space-around-on-2xl {\n    align-content: space-around; }\n  .pf-l-flex > .pf-m-align-right-on-2xl {\n    margin-left: auto; }\n  .pf-l-flex > .pf-m-align-left-on-2xl {\n    margin-left: 0; }\n  .pf-l-flex > .pf-m-grow-on-2xl {\n    flex-grow: 1; }\n  .pf-l-flex > .pf-m-shrink-on-2xl {\n    flex-shrink: 1; }\n  .pf-l-flex > .pf-m-full-width-on-2xl {\n    width: 100%;\n    margin-right: 0; }\n  .pf-l-flex > .pf-m-flex-1-on-2xl {\n    flex: 1 0 0; }\n  .pf-l-flex > .pf-m-flex-2-on-2xl {\n    flex: 2 0 0; }\n  .pf-l-flex > .pf-m-flex-3-on-2xl {\n    flex: 3 0 0; }\n  .pf-l-flex > .pf-m-flex-4-on-2xl {\n    flex: 4 0 0; }\n  .pf-l-flex > .pf-m-flex-default-on-2xl {\n    flex: 0 1 auto; }\n  .pf-l-flex > .pf-m-flex-none-on-2xl {\n    flex: none; }\n  .pf-l-flex > .pf-m-align-self-flex-start-on-2xl {\n    align-self: flex-start; }\n  .pf-l-flex > .pf-m-align-self-flex-end-on-2xl {\n    align-self: flex-end; }\n  .pf-l-flex > .pf-m-align-self-center-on-2xl {\n    align-self: center; }\n  .pf-l-flex > .pf-m-align-self-baseline-on-2xl {\n    align-self: baseline; }\n  .pf-l-flex > .pf-m-align-self-stretch-on-2xl {\n    align-self: stretch; } }\n\n.pf-l-flex.pf-m-space-items-none > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n\n.pf-l-flex.pf-m-space-items-none > :last-child {\n  --pf-l-flex--spacer: 0; }\n\n.pf-l-flex.pf-m-space-items-xs > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n\n.pf-l-flex.pf-m-space-items-xs > :last-child {\n  --pf-l-flex--spacer: 0; }\n\n.pf-l-flex.pf-m-space-items-sm > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n\n.pf-l-flex.pf-m-space-items-sm > :last-child {\n  --pf-l-flex--spacer: 0; }\n\n.pf-l-flex.pf-m-space-items-md > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n\n.pf-l-flex.pf-m-space-items-md > :last-child {\n  --pf-l-flex--spacer: 0; }\n\n.pf-l-flex.pf-m-space-items-lg > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n\n.pf-l-flex.pf-m-space-items-lg > :last-child {\n  --pf-l-flex--spacer: 0; }\n\n.pf-l-flex.pf-m-space-items-xl > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n\n.pf-l-flex.pf-m-space-items-xl > :last-child {\n  --pf-l-flex--spacer: 0; }\n\n.pf-l-flex.pf-m-space-items-2xl > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n\n.pf-l-flex.pf-m-space-items-2xl > :last-child {\n  --pf-l-flex--spacer: 0; }\n\n.pf-l-flex.pf-m-space-items-3xl > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n\n.pf-l-flex.pf-m-space-items-3xl > :last-child {\n  --pf-l-flex--spacer: 0; }\n\n.pf-l-flex.pf-m-space-items-4xl > * {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n\n.pf-l-flex.pf-m-space-items-4xl > :last-child {\n  --pf-l-flex--spacer: 0; }\n\n@media (min-width: 576px) {\n  .pf-l-flex.pf-m-space-items-none-on-sm > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex.pf-m-space-items-none-on-sm > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xs-on-sm > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex.pf-m-space-items-xs-on-sm > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-sm-on-sm > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex.pf-m-space-items-sm-on-sm > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-md-on-sm > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex.pf-m-space-items-md-on-sm > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-lg-on-sm > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex.pf-m-space-items-lg-on-sm > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xl-on-sm > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex.pf-m-space-items-xl-on-sm > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-2xl-on-sm > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex.pf-m-space-items-2xl-on-sm > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-3xl-on-sm > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex.pf-m-space-items-3xl-on-sm > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-4xl-on-sm > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n  .pf-l-flex.pf-m-space-items-4xl-on-sm > :last-child {\n    --pf-l-flex--spacer: 0; } }\n\n@media (min-width: 768px) {\n  .pf-l-flex.pf-m-space-items-none-on-md > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex.pf-m-space-items-none-on-md > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xs-on-md > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex.pf-m-space-items-xs-on-md > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-sm-on-md > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex.pf-m-space-items-sm-on-md > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-md-on-md > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex.pf-m-space-items-md-on-md > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-lg-on-md > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex.pf-m-space-items-lg-on-md > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xl-on-md > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex.pf-m-space-items-xl-on-md > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-2xl-on-md > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex.pf-m-space-items-2xl-on-md > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-3xl-on-md > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex.pf-m-space-items-3xl-on-md > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-4xl-on-md > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n  .pf-l-flex.pf-m-space-items-4xl-on-md > :last-child {\n    --pf-l-flex--spacer: 0; } }\n\n@media (min-width: 992px) {\n  .pf-l-flex.pf-m-space-items-none-on-lg > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex.pf-m-space-items-none-on-lg > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xs-on-lg > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex.pf-m-space-items-xs-on-lg > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-sm-on-lg > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex.pf-m-space-items-sm-on-lg > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-md-on-lg > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex.pf-m-space-items-md-on-lg > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-lg-on-lg > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex.pf-m-space-items-lg-on-lg > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xl-on-lg > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex.pf-m-space-items-xl-on-lg > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-2xl-on-lg > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex.pf-m-space-items-2xl-on-lg > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-3xl-on-lg > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex.pf-m-space-items-3xl-on-lg > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-4xl-on-lg > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n  .pf-l-flex.pf-m-space-items-4xl-on-lg > :last-child {\n    --pf-l-flex--spacer: 0; } }\n\n@media (min-width: 1200px) {\n  .pf-l-flex.pf-m-space-items-none-on-xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex.pf-m-space-items-none-on-xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xs-on-xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex.pf-m-space-items-xs-on-xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-sm-on-xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex.pf-m-space-items-sm-on-xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-md-on-xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex.pf-m-space-items-md-on-xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-lg-on-xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex.pf-m-space-items-lg-on-xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xl-on-xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex.pf-m-space-items-xl-on-xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-2xl-on-xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex.pf-m-space-items-2xl-on-xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-3xl-on-xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex.pf-m-space-items-3xl-on-xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-4xl-on-xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n  .pf-l-flex.pf-m-space-items-4xl-on-xl > :last-child {\n    --pf-l-flex--spacer: 0; } }\n\n@media (min-width: 1450px) {\n  .pf-l-flex.pf-m-space-items-none-on-2xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex.pf-m-space-items-none-on-2xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xs-on-2xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex.pf-m-space-items-xs-on-2xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-sm-on-2xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex.pf-m-space-items-sm-on-2xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-md-on-2xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex.pf-m-space-items-md-on-2xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-lg-on-2xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex.pf-m-space-items-lg-on-2xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-xl-on-2xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex.pf-m-space-items-xl-on-2xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-2xl-on-2xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex.pf-m-space-items-2xl-on-2xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-3xl-on-2xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex.pf-m-space-items-3xl-on-2xl > :last-child {\n    --pf-l-flex--spacer: 0; }\n  .pf-l-flex.pf-m-space-items-4xl-on-2xl > * {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n  .pf-l-flex.pf-m-space-items-4xl-on-2xl > :last-child {\n    --pf-l-flex--spacer: 0; } }\n\n.pf-l-flex .pf-m-spacer-none {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex .pf-m-spacer-none:last-child {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n\n.pf-l-flex .pf-m-spacer-xs {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex .pf-m-spacer-xs:last-child {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n\n.pf-l-flex .pf-m-spacer-sm {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex .pf-m-spacer-sm:last-child {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n\n.pf-l-flex .pf-m-spacer-md {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex .pf-m-spacer-md:last-child {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n\n.pf-l-flex .pf-m-spacer-lg {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex .pf-m-spacer-lg:last-child {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n\n.pf-l-flex .pf-m-spacer-xl {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex .pf-m-spacer-xl:last-child {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n\n.pf-l-flex .pf-m-spacer-2xl {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex .pf-m-spacer-2xl:last-child {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n\n.pf-l-flex .pf-m-spacer-3xl {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex .pf-m-spacer-3xl:last-child {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n\n.pf-l-flex .pf-m-spacer-4xl {\n  --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n  .pf-l-flex .pf-m-spacer-4xl:last-child {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n\n@media (min-width: 576px) {\n  .pf-l-flex .pf-m-spacer-none-on-sm {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n    .pf-l-flex .pf-m-spacer-none-on-sm:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex .pf-m-spacer-xs-on-sm {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n    .pf-l-flex .pf-m-spacer-xs-on-sm:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex .pf-m-spacer-sm-on-sm {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n    .pf-l-flex .pf-m-spacer-sm-on-sm:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex .pf-m-spacer-md-on-sm {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n    .pf-l-flex .pf-m-spacer-md-on-sm:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex .pf-m-spacer-lg-on-sm {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n    .pf-l-flex .pf-m-spacer-lg-on-sm:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex .pf-m-spacer-xl-on-sm {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n    .pf-l-flex .pf-m-spacer-xl-on-sm:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex .pf-m-spacer-2xl-on-sm {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n    .pf-l-flex .pf-m-spacer-2xl-on-sm:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex .pf-m-spacer-3xl-on-sm {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n    .pf-l-flex .pf-m-spacer-3xl-on-sm:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex .pf-m-spacer-4xl-on-sm {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n    .pf-l-flex .pf-m-spacer-4xl-on-sm:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); } }\n\n@media (min-width: 768px) {\n  .pf-l-flex .pf-m-spacer-none-on-md {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n    .pf-l-flex .pf-m-spacer-none-on-md:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex .pf-m-spacer-xs-on-md {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n    .pf-l-flex .pf-m-spacer-xs-on-md:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex .pf-m-spacer-sm-on-md {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n    .pf-l-flex .pf-m-spacer-sm-on-md:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex .pf-m-spacer-md-on-md {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n    .pf-l-flex .pf-m-spacer-md-on-md:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex .pf-m-spacer-lg-on-md {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n    .pf-l-flex .pf-m-spacer-lg-on-md:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex .pf-m-spacer-xl-on-md {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n    .pf-l-flex .pf-m-spacer-xl-on-md:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex .pf-m-spacer-2xl-on-md {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n    .pf-l-flex .pf-m-spacer-2xl-on-md:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex .pf-m-spacer-3xl-on-md {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n    .pf-l-flex .pf-m-spacer-3xl-on-md:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex .pf-m-spacer-4xl-on-md {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n    .pf-l-flex .pf-m-spacer-4xl-on-md:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); } }\n\n@media (min-width: 992px) {\n  .pf-l-flex .pf-m-spacer-none-on-lg {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n    .pf-l-flex .pf-m-spacer-none-on-lg:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex .pf-m-spacer-xs-on-lg {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n    .pf-l-flex .pf-m-spacer-xs-on-lg:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex .pf-m-spacer-sm-on-lg {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n    .pf-l-flex .pf-m-spacer-sm-on-lg:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex .pf-m-spacer-md-on-lg {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n    .pf-l-flex .pf-m-spacer-md-on-lg:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex .pf-m-spacer-lg-on-lg {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n    .pf-l-flex .pf-m-spacer-lg-on-lg:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex .pf-m-spacer-xl-on-lg {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n    .pf-l-flex .pf-m-spacer-xl-on-lg:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex .pf-m-spacer-2xl-on-lg {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n    .pf-l-flex .pf-m-spacer-2xl-on-lg:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex .pf-m-spacer-3xl-on-lg {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n    .pf-l-flex .pf-m-spacer-3xl-on-lg:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex .pf-m-spacer-4xl-on-lg {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n    .pf-l-flex .pf-m-spacer-4xl-on-lg:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); } }\n\n@media (min-width: 1200px) {\n  .pf-l-flex .pf-m-spacer-none-on-xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n    .pf-l-flex .pf-m-spacer-none-on-xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex .pf-m-spacer-xs-on-xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n    .pf-l-flex .pf-m-spacer-xs-on-xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex .pf-m-spacer-sm-on-xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n    .pf-l-flex .pf-m-spacer-sm-on-xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex .pf-m-spacer-md-on-xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n    .pf-l-flex .pf-m-spacer-md-on-xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex .pf-m-spacer-lg-on-xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n    .pf-l-flex .pf-m-spacer-lg-on-xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex .pf-m-spacer-xl-on-xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n    .pf-l-flex .pf-m-spacer-xl-on-xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex .pf-m-spacer-2xl-on-xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n    .pf-l-flex .pf-m-spacer-2xl-on-xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex .pf-m-spacer-3xl-on-xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n    .pf-l-flex .pf-m-spacer-3xl-on-xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex .pf-m-spacer-4xl-on-xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n    .pf-l-flex .pf-m-spacer-4xl-on-xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); } }\n\n@media (min-width: 1450px) {\n  .pf-l-flex .pf-m-spacer-none-on-2xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n    .pf-l-flex .pf-m-spacer-none-on-2xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--none); }\n  .pf-l-flex .pf-m-spacer-xs-on-2xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n    .pf-l-flex .pf-m-spacer-xs-on-2xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xs); }\n  .pf-l-flex .pf-m-spacer-sm-on-2xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n    .pf-l-flex .pf-m-spacer-sm-on-2xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--sm); }\n  .pf-l-flex .pf-m-spacer-md-on-2xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n    .pf-l-flex .pf-m-spacer-md-on-2xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--md); }\n  .pf-l-flex .pf-m-spacer-lg-on-2xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n    .pf-l-flex .pf-m-spacer-lg-on-2xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--lg); }\n  .pf-l-flex .pf-m-spacer-xl-on-2xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n    .pf-l-flex .pf-m-spacer-xl-on-2xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--xl); }\n  .pf-l-flex .pf-m-spacer-2xl-on-2xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n    .pf-l-flex .pf-m-spacer-2xl-on-2xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--2xl); }\n  .pf-l-flex .pf-m-spacer-3xl-on-2xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n    .pf-l-flex .pf-m-spacer-3xl-on-2xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--3xl); }\n  .pf-l-flex .pf-m-spacer-4xl-on-2xl {\n    --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); }\n    .pf-l-flex .pf-m-spacer-4xl-on-2xl:last-child {\n      --pf-l-flex--spacer: var(--pf-l-flex--spacer--4xl); } }\n\n.pf-l-gallery {\n  --pf-l-gallery--m-gutter--GridGap: var(--pf-global--gutter);\n  --pf-l-gallery--GridTemplateColumns--min: 250px;\n  --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min);\n  --pf-l-gallery--GridTemplateColumns: repeat(auto-fill, minmax(var(--pf-l-gallery--GridTemplateColumns--minmax--min), 1fr));\n  --pf-l-gallery--GridTemplateRows: auto;\n  display: grid;\n  grid-template-columns: var(--pf-l-gallery--GridTemplateColumns);\n  grid-template-rows: var(--pf-l-gallery--GridTemplateRows);\n  --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min); }\n  .pf-l-gallery.pf-m-gutter {\n    grid-gap: var(--pf-l-gallery--m-gutter--GridGap); }\n  @media (min-width: 576px) {\n    .pf-l-gallery {\n      --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min)); } }\n  @media (min-width: 768px) {\n    .pf-l-gallery {\n      --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-md, var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min))); } }\n  @media (min-width: 992px) {\n    .pf-l-gallery {\n      --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-lg, var(--pf-l-gallery--GridTemplateColumns--min-on-md, var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min)))); } }\n  @media (min-width: 1200px) {\n    .pf-l-gallery {\n      --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-xl, var(--pf-l-gallery--GridTemplateColumns--min-on-lg, var(--pf-l-gallery--GridTemplateColumns--min-on-md, var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min))))); } }\n  @media (min-width: 1450px) {\n    .pf-l-gallery {\n      --pf-l-gallery--GridTemplateColumns--minmax--min: var(--pf-l-gallery--GridTemplateColumns--min-on-2xl, var(--pf-l-gallery--GridTemplateColumns--min-on-xl, var(--pf-l-gallery--GridTemplateColumns--min-on-lg, var(--pf-l-gallery--GridTemplateColumns--min-on-md, var(--pf-l-gallery--GridTemplateColumns--min-on-sm, var(--pf-l-gallery--GridTemplateColumns--min)))))); } }\n\n.pf-l-grid {\n  --pf-l-grid--m-gutter--GridGap: var(--pf-global--gutter);\n  --pf-l-grid__item--GridColumnStart: auto;\n  --pf-l-grid__item--GridColumnEnd: span 12;\n  --pf-l-grid--item--Order: 0;\n  display: grid;\n  grid-template-columns: repeat(12, [col-start] 1fr); }\n  .pf-l-grid > *,\n  .pf-l-grid .pf-l-grid__item {\n    min-width: 0;\n    min-height: 0;\n    grid-column-start: var(--pf-l-grid__item--GridColumnStart);\n    grid-column-end: var(--pf-l-grid__item--GridColumnEnd);\n    order: var(--pf-l-grid--item--Order); }\n    @media (min-width: 576px) {\n      .pf-l-grid > *,\n      .pf-l-grid .pf-l-grid__item {\n        order: var(--pf-l-grid--item--Order-on-sm, var(--pf-l-grid--item--Order)); } }\n    @media (min-width: 768px) {\n      .pf-l-grid > *,\n      .pf-l-grid .pf-l-grid__item {\n        order: var(--pf-l-grid--item--Order-on-md, var(--pf-l-grid--item--Order-on-sm, var(--pf-l-grid--item--Order))); } }\n    @media (min-width: 992px) {\n      .pf-l-grid > *,\n      .pf-l-grid .pf-l-grid__item {\n        order: var(--pf-l-grid--item--Order-on-lg, var(--pf-l-grid--item--Order-on-md, var(--pf-l-grid--item--Order-on-sm, var(--pf-l-grid--item--Order)))); } }\n    @media (min-width: 1200px) {\n      .pf-l-grid > *,\n      .pf-l-grid .pf-l-grid__item {\n        order: var(--pf-l-grid--item--Order-on-xl, var(--pf-l-grid--item--Order-on-lg, var(--pf-l-grid--item--Order-on-md, var(--pf-l-grid--item--Order-on-sm, var(--pf-l-grid--item--Order))))); } }\n    @media (min-width: 1450px) {\n      .pf-l-grid > *,\n      .pf-l-grid .pf-l-grid__item {\n        order: var(--pf-l-grid--item--Order-on-2xl, var(--pf-l-grid--item--Order-on-xl, var(--pf-l-grid--item--Order-on-lg, var(--pf-l-grid--item--Order-on-md, var(--pf-l-grid--item--Order-on-sm, var(--pf-l-grid--item--Order)))))); } }\n  .pf-l-grid.pf-m-all-1-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 1; }\n  .pf-l-grid.pf-m-all-2-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 2; }\n  .pf-l-grid.pf-m-all-3-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 3; }\n  .pf-l-grid.pf-m-all-4-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 4; }\n  .pf-l-grid.pf-m-all-5-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 5; }\n  .pf-l-grid.pf-m-all-6-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 6; }\n  .pf-l-grid.pf-m-all-7-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 7; }\n  .pf-l-grid.pf-m-all-8-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 8; }\n  .pf-l-grid.pf-m-all-9-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 9; }\n  .pf-l-grid.pf-m-all-10-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 10; }\n  .pf-l-grid.pf-m-all-11-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 11; }\n  .pf-l-grid.pf-m-all-12-col > * {\n    --pf-l-grid__item--GridColumnEnd: span 12; }\n  @media screen and (min-width: 576px) {\n    .pf-l-grid.pf-m-all-1-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid.pf-m-all-2-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid.pf-m-all-3-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid.pf-m-all-4-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid.pf-m-all-5-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid.pf-m-all-6-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid.pf-m-all-7-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid.pf-m-all-8-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid.pf-m-all-9-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid.pf-m-all-10-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid.pf-m-all-11-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid.pf-m-all-12-col-on-sm > * {\n      --pf-l-grid__item--GridColumnEnd: span 12; } }\n  @media screen and (min-width: 768px) {\n    .pf-l-grid.pf-m-all-1-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid.pf-m-all-2-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid.pf-m-all-3-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid.pf-m-all-4-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid.pf-m-all-5-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid.pf-m-all-6-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid.pf-m-all-7-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid.pf-m-all-8-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid.pf-m-all-9-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid.pf-m-all-10-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid.pf-m-all-11-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid.pf-m-all-12-col-on-md > * {\n      --pf-l-grid__item--GridColumnEnd: span 12; } }\n  @media screen and (min-width: 992px) {\n    .pf-l-grid.pf-m-all-1-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid.pf-m-all-2-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid.pf-m-all-3-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid.pf-m-all-4-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid.pf-m-all-5-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid.pf-m-all-6-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid.pf-m-all-7-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid.pf-m-all-8-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid.pf-m-all-9-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid.pf-m-all-10-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid.pf-m-all-11-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid.pf-m-all-12-col-on-lg > * {\n      --pf-l-grid__item--GridColumnEnd: span 12; } }\n  @media screen and (min-width: 1200px) {\n    .pf-l-grid.pf-m-all-1-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid.pf-m-all-2-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid.pf-m-all-3-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid.pf-m-all-4-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid.pf-m-all-5-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid.pf-m-all-6-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid.pf-m-all-7-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid.pf-m-all-8-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid.pf-m-all-9-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid.pf-m-all-10-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid.pf-m-all-11-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid.pf-m-all-12-col-on-xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 12; } }\n  @media screen and (min-width: 1450px) {\n    .pf-l-grid.pf-m-all-1-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid.pf-m-all-2-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid.pf-m-all-3-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid.pf-m-all-4-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid.pf-m-all-5-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid.pf-m-all-6-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid.pf-m-all-7-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid.pf-m-all-8-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid.pf-m-all-9-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid.pf-m-all-10-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid.pf-m-all-11-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid.pf-m-all-12-col-on-2xl > * {\n      --pf-l-grid__item--GridColumnEnd: span 12; } }\n  .pf-l-grid > .pf-m-1-col {\n    --pf-l-grid__item--GridColumnEnd: span 1; }\n  .pf-l-grid > .pf-m-2-col {\n    --pf-l-grid__item--GridColumnEnd: span 2; }\n  .pf-l-grid > .pf-m-3-col {\n    --pf-l-grid__item--GridColumnEnd: span 3; }\n  .pf-l-grid > .pf-m-4-col {\n    --pf-l-grid__item--GridColumnEnd: span 4; }\n  .pf-l-grid > .pf-m-5-col {\n    --pf-l-grid__item--GridColumnEnd: span 5; }\n  .pf-l-grid > .pf-m-6-col {\n    --pf-l-grid__item--GridColumnEnd: span 6; }\n  .pf-l-grid > .pf-m-7-col {\n    --pf-l-grid__item--GridColumnEnd: span 7; }\n  .pf-l-grid > .pf-m-8-col {\n    --pf-l-grid__item--GridColumnEnd: span 8; }\n  .pf-l-grid > .pf-m-9-col {\n    --pf-l-grid__item--GridColumnEnd: span 9; }\n  .pf-l-grid > .pf-m-10-col {\n    --pf-l-grid__item--GridColumnEnd: span 10; }\n  .pf-l-grid > .pf-m-11-col {\n    --pf-l-grid__item--GridColumnEnd: span 11; }\n  .pf-l-grid > .pf-m-12-col {\n    --pf-l-grid__item--GridColumnEnd: span 12; }\n  .pf-l-grid > .pf-m-offset-1-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(1 + 1); }\n  .pf-l-grid > .pf-m-offset-2-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(2 + 1); }\n  .pf-l-grid > .pf-m-offset-3-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(3 + 1); }\n  .pf-l-grid > .pf-m-offset-4-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(4 + 1); }\n  .pf-l-grid > .pf-m-offset-5-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(5 + 1); }\n  .pf-l-grid > .pf-m-offset-6-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(6 + 1); }\n  .pf-l-grid > .pf-m-offset-7-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(7 + 1); }\n  .pf-l-grid > .pf-m-offset-8-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(8 + 1); }\n  .pf-l-grid > .pf-m-offset-9-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(9 + 1); }\n  .pf-l-grid > .pf-m-offset-10-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(10 + 1); }\n  .pf-l-grid > .pf-m-offset-11-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(11 + 1); }\n  .pf-l-grid > .pf-m-offset-12-col {\n    --pf-l-grid__item--GridColumnStart: col-start calc(12 + 1); }\n  .pf-l-grid > .pf-m-1-row {\n    grid-row: span 1; }\n  .pf-l-grid > .pf-m-2-row {\n    grid-row: span 2; }\n  .pf-l-grid > .pf-m-3-row {\n    grid-row: span 3; }\n  .pf-l-grid > .pf-m-4-row {\n    grid-row: span 4; }\n  .pf-l-grid > .pf-m-5-row {\n    grid-row: span 5; }\n  .pf-l-grid > .pf-m-6-row {\n    grid-row: span 6; }\n  .pf-l-grid > .pf-m-7-row {\n    grid-row: span 7; }\n  .pf-l-grid > .pf-m-8-row {\n    grid-row: span 8; }\n  .pf-l-grid > .pf-m-9-row {\n    grid-row: span 9; }\n  .pf-l-grid > .pf-m-10-row {\n    grid-row: span 10; }\n  .pf-l-grid > .pf-m-11-row {\n    grid-row: span 11; }\n  .pf-l-grid > .pf-m-12-row {\n    grid-row: span 12; }\n  @media screen and (min-width: 576px) {\n    .pf-l-grid > .pf-m-1-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid > .pf-m-2-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid > .pf-m-3-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid > .pf-m-4-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid > .pf-m-5-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid > .pf-m-6-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid > .pf-m-7-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid > .pf-m-8-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid > .pf-m-9-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid > .pf-m-10-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid > .pf-m-11-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid > .pf-m-12-col-on-sm {\n      --pf-l-grid__item--GridColumnEnd: span 12; }\n    .pf-l-grid > .pf-m-offset-1-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(1 + 1); }\n    .pf-l-grid > .pf-m-offset-2-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(2 + 1); }\n    .pf-l-grid > .pf-m-offset-3-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(3 + 1); }\n    .pf-l-grid > .pf-m-offset-4-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(4 + 1); }\n    .pf-l-grid > .pf-m-offset-5-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(5 + 1); }\n    .pf-l-grid > .pf-m-offset-6-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(6 + 1); }\n    .pf-l-grid > .pf-m-offset-7-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(7 + 1); }\n    .pf-l-grid > .pf-m-offset-8-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(8 + 1); }\n    .pf-l-grid > .pf-m-offset-9-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(9 + 1); }\n    .pf-l-grid > .pf-m-offset-10-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(10 + 1); }\n    .pf-l-grid > .pf-m-offset-11-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(11 + 1); }\n    .pf-l-grid > .pf-m-offset-12-col-on-sm {\n      --pf-l-grid__item--GridColumnStart: col-start calc(12 + 1); }\n    .pf-l-grid > .pf-m-1-row-on-sm {\n      grid-row: span 1; }\n    .pf-l-grid > .pf-m-2-row-on-sm {\n      grid-row: span 2; }\n    .pf-l-grid > .pf-m-3-row-on-sm {\n      grid-row: span 3; }\n    .pf-l-grid > .pf-m-4-row-on-sm {\n      grid-row: span 4; }\n    .pf-l-grid > .pf-m-5-row-on-sm {\n      grid-row: span 5; }\n    .pf-l-grid > .pf-m-6-row-on-sm {\n      grid-row: span 6; }\n    .pf-l-grid > .pf-m-7-row-on-sm {\n      grid-row: span 7; }\n    .pf-l-grid > .pf-m-8-row-on-sm {\n      grid-row: span 8; }\n    .pf-l-grid > .pf-m-9-row-on-sm {\n      grid-row: span 9; }\n    .pf-l-grid > .pf-m-10-row-on-sm {\n      grid-row: span 10; }\n    .pf-l-grid > .pf-m-11-row-on-sm {\n      grid-row: span 11; }\n    .pf-l-grid > .pf-m-12-row-on-sm {\n      grid-row: span 12; } }\n  @media screen and (min-width: 768px) {\n    .pf-l-grid > .pf-m-1-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid > .pf-m-2-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid > .pf-m-3-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid > .pf-m-4-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid > .pf-m-5-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid > .pf-m-6-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid > .pf-m-7-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid > .pf-m-8-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid > .pf-m-9-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid > .pf-m-10-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid > .pf-m-11-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid > .pf-m-12-col-on-md {\n      --pf-l-grid__item--GridColumnEnd: span 12; }\n    .pf-l-grid > .pf-m-offset-1-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(1 + 1); }\n    .pf-l-grid > .pf-m-offset-2-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(2 + 1); }\n    .pf-l-grid > .pf-m-offset-3-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(3 + 1); }\n    .pf-l-grid > .pf-m-offset-4-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(4 + 1); }\n    .pf-l-grid > .pf-m-offset-5-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(5 + 1); }\n    .pf-l-grid > .pf-m-offset-6-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(6 + 1); }\n    .pf-l-grid > .pf-m-offset-7-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(7 + 1); }\n    .pf-l-grid > .pf-m-offset-8-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(8 + 1); }\n    .pf-l-grid > .pf-m-offset-9-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(9 + 1); }\n    .pf-l-grid > .pf-m-offset-10-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(10 + 1); }\n    .pf-l-grid > .pf-m-offset-11-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(11 + 1); }\n    .pf-l-grid > .pf-m-offset-12-col-on-md {\n      --pf-l-grid__item--GridColumnStart: col-start calc(12 + 1); }\n    .pf-l-grid > .pf-m-1-row-on-md {\n      grid-row: span 1; }\n    .pf-l-grid > .pf-m-2-row-on-md {\n      grid-row: span 2; }\n    .pf-l-grid > .pf-m-3-row-on-md {\n      grid-row: span 3; }\n    .pf-l-grid > .pf-m-4-row-on-md {\n      grid-row: span 4; }\n    .pf-l-grid > .pf-m-5-row-on-md {\n      grid-row: span 5; }\n    .pf-l-grid > .pf-m-6-row-on-md {\n      grid-row: span 6; }\n    .pf-l-grid > .pf-m-7-row-on-md {\n      grid-row: span 7; }\n    .pf-l-grid > .pf-m-8-row-on-md {\n      grid-row: span 8; }\n    .pf-l-grid > .pf-m-9-row-on-md {\n      grid-row: span 9; }\n    .pf-l-grid > .pf-m-10-row-on-md {\n      grid-row: span 10; }\n    .pf-l-grid > .pf-m-11-row-on-md {\n      grid-row: span 11; }\n    .pf-l-grid > .pf-m-12-row-on-md {\n      grid-row: span 12; } }\n  @media screen and (min-width: 992px) {\n    .pf-l-grid > .pf-m-1-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid > .pf-m-2-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid > .pf-m-3-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid > .pf-m-4-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid > .pf-m-5-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid > .pf-m-6-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid > .pf-m-7-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid > .pf-m-8-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid > .pf-m-9-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid > .pf-m-10-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid > .pf-m-11-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid > .pf-m-12-col-on-lg {\n      --pf-l-grid__item--GridColumnEnd: span 12; }\n    .pf-l-grid > .pf-m-offset-1-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(1 + 1); }\n    .pf-l-grid > .pf-m-offset-2-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(2 + 1); }\n    .pf-l-grid > .pf-m-offset-3-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(3 + 1); }\n    .pf-l-grid > .pf-m-offset-4-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(4 + 1); }\n    .pf-l-grid > .pf-m-offset-5-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(5 + 1); }\n    .pf-l-grid > .pf-m-offset-6-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(6 + 1); }\n    .pf-l-grid > .pf-m-offset-7-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(7 + 1); }\n    .pf-l-grid > .pf-m-offset-8-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(8 + 1); }\n    .pf-l-grid > .pf-m-offset-9-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(9 + 1); }\n    .pf-l-grid > .pf-m-offset-10-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(10 + 1); }\n    .pf-l-grid > .pf-m-offset-11-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(11 + 1); }\n    .pf-l-grid > .pf-m-offset-12-col-on-lg {\n      --pf-l-grid__item--GridColumnStart: col-start calc(12 + 1); }\n    .pf-l-grid > .pf-m-1-row-on-lg {\n      grid-row: span 1; }\n    .pf-l-grid > .pf-m-2-row-on-lg {\n      grid-row: span 2; }\n    .pf-l-grid > .pf-m-3-row-on-lg {\n      grid-row: span 3; }\n    .pf-l-grid > .pf-m-4-row-on-lg {\n      grid-row: span 4; }\n    .pf-l-grid > .pf-m-5-row-on-lg {\n      grid-row: span 5; }\n    .pf-l-grid > .pf-m-6-row-on-lg {\n      grid-row: span 6; }\n    .pf-l-grid > .pf-m-7-row-on-lg {\n      grid-row: span 7; }\n    .pf-l-grid > .pf-m-8-row-on-lg {\n      grid-row: span 8; }\n    .pf-l-grid > .pf-m-9-row-on-lg {\n      grid-row: span 9; }\n    .pf-l-grid > .pf-m-10-row-on-lg {\n      grid-row: span 10; }\n    .pf-l-grid > .pf-m-11-row-on-lg {\n      grid-row: span 11; }\n    .pf-l-grid > .pf-m-12-row-on-lg {\n      grid-row: span 12; } }\n  @media screen and (min-width: 1200px) {\n    .pf-l-grid > .pf-m-1-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid > .pf-m-2-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid > .pf-m-3-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid > .pf-m-4-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid > .pf-m-5-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid > .pf-m-6-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid > .pf-m-7-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid > .pf-m-8-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid > .pf-m-9-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid > .pf-m-10-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid > .pf-m-11-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid > .pf-m-12-col-on-xl {\n      --pf-l-grid__item--GridColumnEnd: span 12; }\n    .pf-l-grid > .pf-m-offset-1-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(1 + 1); }\n    .pf-l-grid > .pf-m-offset-2-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(2 + 1); }\n    .pf-l-grid > .pf-m-offset-3-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(3 + 1); }\n    .pf-l-grid > .pf-m-offset-4-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(4 + 1); }\n    .pf-l-grid > .pf-m-offset-5-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(5 + 1); }\n    .pf-l-grid > .pf-m-offset-6-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(6 + 1); }\n    .pf-l-grid > .pf-m-offset-7-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(7 + 1); }\n    .pf-l-grid > .pf-m-offset-8-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(8 + 1); }\n    .pf-l-grid > .pf-m-offset-9-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(9 + 1); }\n    .pf-l-grid > .pf-m-offset-10-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(10 + 1); }\n    .pf-l-grid > .pf-m-offset-11-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(11 + 1); }\n    .pf-l-grid > .pf-m-offset-12-col-on-xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(12 + 1); }\n    .pf-l-grid > .pf-m-1-row-on-xl {\n      grid-row: span 1; }\n    .pf-l-grid > .pf-m-2-row-on-xl {\n      grid-row: span 2; }\n    .pf-l-grid > .pf-m-3-row-on-xl {\n      grid-row: span 3; }\n    .pf-l-grid > .pf-m-4-row-on-xl {\n      grid-row: span 4; }\n    .pf-l-grid > .pf-m-5-row-on-xl {\n      grid-row: span 5; }\n    .pf-l-grid > .pf-m-6-row-on-xl {\n      grid-row: span 6; }\n    .pf-l-grid > .pf-m-7-row-on-xl {\n      grid-row: span 7; }\n    .pf-l-grid > .pf-m-8-row-on-xl {\n      grid-row: span 8; }\n    .pf-l-grid > .pf-m-9-row-on-xl {\n      grid-row: span 9; }\n    .pf-l-grid > .pf-m-10-row-on-xl {\n      grid-row: span 10; }\n    .pf-l-grid > .pf-m-11-row-on-xl {\n      grid-row: span 11; }\n    .pf-l-grid > .pf-m-12-row-on-xl {\n      grid-row: span 12; } }\n  @media screen and (min-width: 1450px) {\n    .pf-l-grid > .pf-m-1-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 1; }\n    .pf-l-grid > .pf-m-2-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 2; }\n    .pf-l-grid > .pf-m-3-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 3; }\n    .pf-l-grid > .pf-m-4-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 4; }\n    .pf-l-grid > .pf-m-5-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 5; }\n    .pf-l-grid > .pf-m-6-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 6; }\n    .pf-l-grid > .pf-m-7-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 7; }\n    .pf-l-grid > .pf-m-8-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 8; }\n    .pf-l-grid > .pf-m-9-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 9; }\n    .pf-l-grid > .pf-m-10-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 10; }\n    .pf-l-grid > .pf-m-11-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 11; }\n    .pf-l-grid > .pf-m-12-col-on-2xl {\n      --pf-l-grid__item--GridColumnEnd: span 12; }\n    .pf-l-grid > .pf-m-offset-1-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(1 + 1); }\n    .pf-l-grid > .pf-m-offset-2-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(2 + 1); }\n    .pf-l-grid > .pf-m-offset-3-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(3 + 1); }\n    .pf-l-grid > .pf-m-offset-4-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(4 + 1); }\n    .pf-l-grid > .pf-m-offset-5-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(5 + 1); }\n    .pf-l-grid > .pf-m-offset-6-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(6 + 1); }\n    .pf-l-grid > .pf-m-offset-7-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(7 + 1); }\n    .pf-l-grid > .pf-m-offset-8-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(8 + 1); }\n    .pf-l-grid > .pf-m-offset-9-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(9 + 1); }\n    .pf-l-grid > .pf-m-offset-10-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(10 + 1); }\n    .pf-l-grid > .pf-m-offset-11-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(11 + 1); }\n    .pf-l-grid > .pf-m-offset-12-col-on-2xl {\n      --pf-l-grid__item--GridColumnStart: col-start calc(12 + 1); }\n    .pf-l-grid > .pf-m-1-row-on-2xl {\n      grid-row: span 1; }\n    .pf-l-grid > .pf-m-2-row-on-2xl {\n      grid-row: span 2; }\n    .pf-l-grid > .pf-m-3-row-on-2xl {\n      grid-row: span 3; }\n    .pf-l-grid > .pf-m-4-row-on-2xl {\n      grid-row: span 4; }\n    .pf-l-grid > .pf-m-5-row-on-2xl {\n      grid-row: span 5; }\n    .pf-l-grid > .pf-m-6-row-on-2xl {\n      grid-row: span 6; }\n    .pf-l-grid > .pf-m-7-row-on-2xl {\n      grid-row: span 7; }\n    .pf-l-grid > .pf-m-8-row-on-2xl {\n      grid-row: span 8; }\n    .pf-l-grid > .pf-m-9-row-on-2xl {\n      grid-row: span 9; }\n    .pf-l-grid > .pf-m-10-row-on-2xl {\n      grid-row: span 10; }\n    .pf-l-grid > .pf-m-11-row-on-2xl {\n      grid-row: span 11; }\n    .pf-l-grid > .pf-m-12-row-on-2xl {\n      grid-row: span 12; } }\n  .pf-l-grid.pf-m-gutter {\n    grid-gap: var(--pf-l-grid--m-gutter--GridGap); }\n\n.pf-l-level {\n  --pf-l-level--m-gutter--MarginRight: var(--pf-global--gutter);\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between; }\n  .pf-l-level.pf-m-gutter > *:not(:last-child) {\n    margin-right: var(--pf-l-level--m-gutter--MarginRight); }\n\n.pf-l-split {\n  --pf-l-split--m-gutter--MarginRight: var(--pf-global--gutter);\n  display: flex;\n  flex-wrap: nowrap;\n  padding: 0;\n  margin: 0; }\n\n.pf-l-split__item.pf-m-fill {\n  flex-grow: 1; }\n\n.pf-l-split.pf-m-gutter > *:not(:last-child) {\n  margin-right: var(--pf-l-split--m-gutter--MarginRight); }\n\n.pf-l-stack {\n  --pf-l-stack--m-gutter--MarginBottom: var(--pf-global--gutter);\n  display: flex;\n  flex-direction: column;\n  height: 100%; }\n\n.pf-l-stack__item.pf-m-fill {\n  flex-grow: 1; }\n\n.pf-l-stack.pf-m-gutter > *:not(:last-child) {\n  margin-bottom: var(--pf-l-stack--m-gutter--MarginBottom); }\n');const Dn=new CSSStyleSheet;Dn.replaceSync(".pf-u-screen-reader {\n  position: fixed;\n  top: 0;\n  left: 0;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border: 0; }\n\n.pf-u-visible {\n  position: static;\n  overflow: visible;\n  clip: auto;\n  white-space: normal;\n  border: inherit; }\n\n.pf-u-hidden {\n  display: none !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-screen-reader-on-sm {\n    position: fixed;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    clip: rect(0, 0, 0, 0);\n    white-space: nowrap;\n    border: 0; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-visible-on-sm {\n    position: static;\n    overflow: visible;\n    clip: auto;\n    white-space: normal;\n    border: inherit; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-hidden-on-sm {\n    display: none !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-screen-reader-on-md {\n    position: fixed;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    clip: rect(0, 0, 0, 0);\n    white-space: nowrap;\n    border: 0; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-visible-on-md {\n    position: static;\n    overflow: visible;\n    clip: auto;\n    white-space: normal;\n    border: inherit; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-hidden-on-md {\n    display: none !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-screen-reader-on-lg {\n    position: fixed;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    clip: rect(0, 0, 0, 0);\n    white-space: nowrap;\n    border: 0; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-visible-on-lg {\n    position: static;\n    overflow: visible;\n    clip: auto;\n    white-space: normal;\n    border: inherit; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-hidden-on-lg {\n    display: none !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-screen-reader-on-xl {\n    position: fixed;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    clip: rect(0, 0, 0, 0);\n    white-space: nowrap;\n    border: 0; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-visible-on-xl {\n    position: static;\n    overflow: visible;\n    clip: auto;\n    white-space: normal;\n    border: inherit; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-hidden-on-xl {\n    display: none !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-screen-reader-on-2xl {\n    position: fixed;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    clip: rect(0, 0, 0, 0);\n    white-space: nowrap;\n    border: 0; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-visible-on-2xl {\n    position: static;\n    overflow: visible;\n    clip: auto;\n    white-space: normal;\n    border: inherit; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-hidden-on-2xl {\n    display: none !important; } }\n\n.pf-u-text-align-left {\n  text-align: left !important; }\n\n.pf-u-text-align-center {\n  text-align: center !important; }\n\n.pf-u-text-align-right {\n  text-align: right !important; }\n\n.pf-u-text-align-justify {\n  text-align: justify !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-text-align-left-on-sm {\n    text-align: left !important; }\n  .pf-u-text-align-center-on-sm {\n    text-align: center !important; }\n  .pf-u-text-align-right-on-sm {\n    text-align: right !important; }\n  .pf-u-text-align-justify-on-sm {\n    text-align: justify !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-text-align-left-on-md {\n    text-align: left !important; }\n  .pf-u-text-align-center-on-md {\n    text-align: center !important; }\n  .pf-u-text-align-right-on-md {\n    text-align: right !important; }\n  .pf-u-text-align-justify-on-md {\n    text-align: justify !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-text-align-left-on-lg {\n    text-align: left !important; }\n  .pf-u-text-align-center-on-lg {\n    text-align: center !important; }\n  .pf-u-text-align-right-on-lg {\n    text-align: right !important; }\n  .pf-u-text-align-justify-on-lg {\n    text-align: justify !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-text-align-left-on-xl {\n    text-align: left !important; }\n  .pf-u-text-align-center-on-xl {\n    text-align: center !important; }\n  .pf-u-text-align-right-on-xl {\n    text-align: right !important; }\n  .pf-u-text-align-justify-on-xl {\n    text-align: justify !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-text-align-left-on-2xl {\n    text-align: left !important; }\n  .pf-u-text-align-center-on-2xl {\n    text-align: center !important; }\n  .pf-u-text-align-right-on-2xl {\n    text-align: right !important; }\n  .pf-u-text-align-justify-on-2xl {\n    text-align: justify !important; } }\n\n.pf-u-background-color-100 {\n  background-color: var(--pf-global--BackgroundColor--100) !important; }\n\n.pf-u-background-color-200 {\n  background-color: var(--pf-global--BackgroundColor--200) !important; }\n\n.pf-u-background-color-dark-100 {\n  background-color: var(--pf-global--BackgroundColor--dark-100) !important; }\n\n.pf-u-background-color-dark-200 {\n  background-color: var(--pf-global--BackgroundColor--dark-200) !important; }\n\n.pf-u-background-color-dark-300 {\n  background-color: var(--pf-global--BackgroundColor--dark-300) !important; }\n\n.pf-u-background-color-dark-400 {\n  background-color: var(--pf-global--BackgroundColor--dark-400) !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-background-color-100-on-sm {\n    background-color: var(--pf-global--BackgroundColor--100) !important; }\n  .pf-u-background-color-200-on-sm {\n    background-color: var(--pf-global--BackgroundColor--200) !important; }\n  .pf-u-background-color-dark-100-on-sm {\n    background-color: var(--pf-global--BackgroundColor--dark-100) !important; }\n  .pf-u-background-color-dark-200-on-sm {\n    background-color: var(--pf-global--BackgroundColor--dark-200) !important; }\n  .pf-u-background-color-dark-300-on-sm {\n    background-color: var(--pf-global--BackgroundColor--dark-300) !important; }\n  .pf-u-background-color-dark-400-on-sm {\n    background-color: var(--pf-global--BackgroundColor--dark-400) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-background-color-100-on-md {\n    background-color: var(--pf-global--BackgroundColor--100) !important; }\n  .pf-u-background-color-200-on-md {\n    background-color: var(--pf-global--BackgroundColor--200) !important; }\n  .pf-u-background-color-dark-100-on-md {\n    background-color: var(--pf-global--BackgroundColor--dark-100) !important; }\n  .pf-u-background-color-dark-200-on-md {\n    background-color: var(--pf-global--BackgroundColor--dark-200) !important; }\n  .pf-u-background-color-dark-300-on-md {\n    background-color: var(--pf-global--BackgroundColor--dark-300) !important; }\n  .pf-u-background-color-dark-400-on-md {\n    background-color: var(--pf-global--BackgroundColor--dark-400) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-background-color-100-on-lg {\n    background-color: var(--pf-global--BackgroundColor--100) !important; }\n  .pf-u-background-color-200-on-lg {\n    background-color: var(--pf-global--BackgroundColor--200) !important; }\n  .pf-u-background-color-dark-100-on-lg {\n    background-color: var(--pf-global--BackgroundColor--dark-100) !important; }\n  .pf-u-background-color-dark-200-on-lg {\n    background-color: var(--pf-global--BackgroundColor--dark-200) !important; }\n  .pf-u-background-color-dark-300-on-lg {\n    background-color: var(--pf-global--BackgroundColor--dark-300) !important; }\n  .pf-u-background-color-dark-400-on-lg {\n    background-color: var(--pf-global--BackgroundColor--dark-400) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-background-color-100-on-xl {\n    background-color: var(--pf-global--BackgroundColor--100) !important; }\n  .pf-u-background-color-200-on-xl {\n    background-color: var(--pf-global--BackgroundColor--200) !important; }\n  .pf-u-background-color-dark-100-on-xl {\n    background-color: var(--pf-global--BackgroundColor--dark-100) !important; }\n  .pf-u-background-color-dark-200-on-xl {\n    background-color: var(--pf-global--BackgroundColor--dark-200) !important; }\n  .pf-u-background-color-dark-300-on-xl {\n    background-color: var(--pf-global--BackgroundColor--dark-300) !important; }\n  .pf-u-background-color-dark-400-on-xl {\n    background-color: var(--pf-global--BackgroundColor--dark-400) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-background-color-100-on-2xl {\n    background-color: var(--pf-global--BackgroundColor--100) !important; }\n  .pf-u-background-color-200-on-2xl {\n    background-color: var(--pf-global--BackgroundColor--200) !important; }\n  .pf-u-background-color-dark-100-on-2xl {\n    background-color: var(--pf-global--BackgroundColor--dark-100) !important; }\n  .pf-u-background-color-dark-200-on-2xl {\n    background-color: var(--pf-global--BackgroundColor--dark-200) !important; }\n  .pf-u-background-color-dark-300-on-2xl {\n    background-color: var(--pf-global--BackgroundColor--dark-300) !important; }\n  .pf-u-background-color-dark-400-on-2xl {\n    background-color: var(--pf-global--BackgroundColor--dark-400) !important; } }\n\n.pf-u-box-shadow-sm {\n  box-shadow: var(--pf-global--BoxShadow--sm) !important; }\n\n.pf-u-box-shadow-sm-top {\n  box-shadow: var(--pf-global--BoxShadow--sm-top) !important; }\n\n.pf-u-box-shadow-sm-right {\n  box-shadow: var(--pf-global--BoxShadow--sm-right) !important; }\n\n.pf-u-box-shadow-sm-bottom {\n  box-shadow: var(--pf-global--BoxShadow--sm-bottom) !important; }\n\n.pf-u-box-shadow-sm-left {\n  box-shadow: var(--pf-global--BoxShadow--sm-left) !important; }\n\n.pf-u-box-shadow-md {\n  box-shadow: var(--pf-global--BoxShadow--md) !important; }\n\n.pf-u-box-shadow-md-top {\n  box-shadow: var(--pf-global--BoxShadow--md-top) !important; }\n\n.pf-u-box-shadow-md-right {\n  box-shadow: var(--pf-global--BoxShadow--md-right) !important; }\n\n.pf-u-box-shadow-md-bottom {\n  box-shadow: var(--pf-global--BoxShadow--md-bottom) !important; }\n\n.pf-u-box-shadow-md-left {\n  box-shadow: var(--pf-global--BoxShadow--md-left) !important; }\n\n.pf-u-box-shadow-lg {\n  box-shadow: var(--pf-global--BoxShadow--lg) !important; }\n\n.pf-u-box-shadow-lg-top {\n  box-shadow: var(--pf-global--BoxShadow--lg-top) !important; }\n\n.pf-u-box-shadow-lg-right {\n  box-shadow: var(--pf-global--BoxShadow--lg-right) !important; }\n\n.pf-u-box-shadow-lg-bottom {\n  box-shadow: var(--pf-global--BoxShadow--lg-bottom) !important; }\n\n.pf-u-box-shadow-lg-left {\n  box-shadow: var(--pf-global--BoxShadow--lg-left) !important; }\n\n.pf-u-box-shadow-xl {\n  box-shadow: var(--pf-global--BoxShadow--xl) !important; }\n\n.pf-u-box-shadow-xl-top {\n  box-shadow: var(--pf-global--BoxShadow--xl-top) !important; }\n\n.pf-u-box-shadow-xl-right {\n  box-shadow: var(--pf-global--BoxShadow--xl-right) !important; }\n\n.pf-u-box-shadow-xl-bottom {\n  box-shadow: var(--pf-global--BoxShadow--xl-bottom) !important; }\n\n.pf-u-box-shadow-xl-left {\n  box-shadow: var(--pf-global--BoxShadow--xl-left) !important; }\n\n.pf-u-box-shadow-inset {\n  box-shadow: var(--pf-global--BoxShadow--inset) !important; }\n\n.pf-u-display-none {\n  display: none !important; }\n\n.pf-u-display-inline-block {\n  display: inline-block !important; }\n\n.pf-u-display-block {\n  display: block !important; }\n\n.pf-u-display-inline {\n  display: inline !important; }\n\n.pf-u-display-table {\n  display: table !important; }\n\n.pf-u-display-table-cell {\n  display: table-cell !important; }\n\n.pf-u-display-table-row {\n  display: table-row !important; }\n\n.pf-u-display-flex {\n  display: flex !important; }\n\n.pf-u-display-inline-flex {\n  display: inline-flex !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-display-none-on-sm {\n    display: none !important; }\n  .pf-u-display-inline-block-on-sm {\n    display: inline-block !important; }\n  .pf-u-display-block-on-sm {\n    display: block !important; }\n  .pf-u-display-inline-on-sm {\n    display: inline !important; }\n  .pf-u-display-table-on-sm {\n    display: table !important; }\n  .pf-u-display-table-cell-on-sm {\n    display: table-cell !important; }\n  .pf-u-display-table-row-on-sm {\n    display: table-row !important; }\n  .pf-u-display-flex-on-sm {\n    display: flex !important; }\n  .pf-u-display-inline-flex-on-sm {\n    display: inline-flex !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-display-none-on-md {\n    display: none !important; }\n  .pf-u-display-inline-block-on-md {\n    display: inline-block !important; }\n  .pf-u-display-block-on-md {\n    display: block !important; }\n  .pf-u-display-inline-on-md {\n    display: inline !important; }\n  .pf-u-display-table-on-md {\n    display: table !important; }\n  .pf-u-display-table-cell-on-md {\n    display: table-cell !important; }\n  .pf-u-display-table-row-on-md {\n    display: table-row !important; }\n  .pf-u-display-flex-on-md {\n    display: flex !important; }\n  .pf-u-display-inline-flex-on-md {\n    display: inline-flex !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-display-none-on-lg {\n    display: none !important; }\n  .pf-u-display-inline-block-on-lg {\n    display: inline-block !important; }\n  .pf-u-display-block-on-lg {\n    display: block !important; }\n  .pf-u-display-inline-on-lg {\n    display: inline !important; }\n  .pf-u-display-table-on-lg {\n    display: table !important; }\n  .pf-u-display-table-cell-on-lg {\n    display: table-cell !important; }\n  .pf-u-display-table-row-on-lg {\n    display: table-row !important; }\n  .pf-u-display-flex-on-lg {\n    display: flex !important; }\n  .pf-u-display-inline-flex-on-lg {\n    display: inline-flex !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-display-none-on-xl {\n    display: none !important; }\n  .pf-u-display-inline-block-on-xl {\n    display: inline-block !important; }\n  .pf-u-display-block-on-xl {\n    display: block !important; }\n  .pf-u-display-inline-on-xl {\n    display: inline !important; }\n  .pf-u-display-table-on-xl {\n    display: table !important; }\n  .pf-u-display-table-cell-on-xl {\n    display: table-cell !important; }\n  .pf-u-display-table-row-on-xl {\n    display: table-row !important; }\n  .pf-u-display-flex-on-xl {\n    display: flex !important; }\n  .pf-u-display-inline-flex-on-xl {\n    display: inline-flex !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-display-none-on-2xl {\n    display: none !important; }\n  .pf-u-display-inline-block-on-2xl {\n    display: inline-block !important; }\n  .pf-u-display-block-on-2xl {\n    display: block !important; }\n  .pf-u-display-inline-on-2xl {\n    display: inline !important; }\n  .pf-u-display-table-on-2xl {\n    display: table !important; }\n  .pf-u-display-table-cell-on-2xl {\n    display: table-cell !important; }\n  .pf-u-display-table-row-on-2xl {\n    display: table-row !important; }\n  .pf-u-display-flex-on-2xl {\n    display: flex !important; }\n  .pf-u-display-inline-flex-on-2xl {\n    display: inline-flex !important; } }\n\n.pf-u-flex-direction-column {\n  flex-direction: column !important; }\n\n.pf-u-flex-direction-column-reverse {\n  flex-direction: column-reverse !important; }\n\n.pf-u-flex-direction-row {\n  flex-direction: row !important; }\n\n.pf-u-flex-direction-row-reverse {\n  flex-direction: row-reverse !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-flex-direction-column-on-sm {\n    flex-direction: column !important; }\n  .pf-u-flex-direction-column-reverse-on-sm {\n    flex-direction: column-reverse !important; }\n  .pf-u-flex-direction-row-on-sm {\n    flex-direction: row !important; }\n  .pf-u-flex-direction-row-reverse-on-sm {\n    flex-direction: row-reverse !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-flex-direction-column-on-md {\n    flex-direction: column !important; }\n  .pf-u-flex-direction-column-reverse-on-md {\n    flex-direction: column-reverse !important; }\n  .pf-u-flex-direction-row-on-md {\n    flex-direction: row !important; }\n  .pf-u-flex-direction-row-reverse-on-md {\n    flex-direction: row-reverse !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-flex-direction-column-on-lg {\n    flex-direction: column !important; }\n  .pf-u-flex-direction-column-reverse-on-lg {\n    flex-direction: column-reverse !important; }\n  .pf-u-flex-direction-row-on-lg {\n    flex-direction: row !important; }\n  .pf-u-flex-direction-row-reverse-on-lg {\n    flex-direction: row-reverse !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-flex-direction-column-on-xl {\n    flex-direction: column !important; }\n  .pf-u-flex-direction-column-reverse-on-xl {\n    flex-direction: column-reverse !important; }\n  .pf-u-flex-direction-row-on-xl {\n    flex-direction: row !important; }\n  .pf-u-flex-direction-row-reverse-on-xl {\n    flex-direction: row-reverse !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-flex-direction-column-on-2xl {\n    flex-direction: column !important; }\n  .pf-u-flex-direction-column-reverse-on-2xl {\n    flex-direction: column-reverse !important; }\n  .pf-u-flex-direction-row-on-2xl {\n    flex-direction: row !important; }\n  .pf-u-flex-direction-row-reverse-on-2xl {\n    flex-direction: row-reverse !important; } }\n\n.pf-u-flex-wrap {\n  flex-wrap: wrap !important; }\n\n.pf-u-flex-nowrap {\n  flex-wrap: nowrap !important; }\n\n.pf-u-flex-wrap-reverse {\n  flex-wrap: wrap-reverse !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-flex-wrap-on-sm {\n    flex-wrap: wrap !important; }\n  .pf-u-flex-nowrap-on-sm {\n    flex-wrap: nowrap !important; }\n  .pf-u-flex-wrap-reverse-on-sm {\n    flex-wrap: wrap-reverse !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-flex-wrap-on-md {\n    flex-wrap: wrap !important; }\n  .pf-u-flex-nowrap-on-md {\n    flex-wrap: nowrap !important; }\n  .pf-u-flex-wrap-reverse-on-md {\n    flex-wrap: wrap-reverse !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-flex-wrap-on-lg {\n    flex-wrap: wrap !important; }\n  .pf-u-flex-nowrap-on-lg {\n    flex-wrap: nowrap !important; }\n  .pf-u-flex-wrap-reverse-on-lg {\n    flex-wrap: wrap-reverse !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-flex-wrap-on-xl {\n    flex-wrap: wrap !important; }\n  .pf-u-flex-nowrap-on-xl {\n    flex-wrap: nowrap !important; }\n  .pf-u-flex-wrap-reverse-on-xl {\n    flex-wrap: wrap-reverse !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-flex-wrap-on-2xl {\n    flex-wrap: wrap !important; }\n  .pf-u-flex-nowrap-on-2xl {\n    flex-wrap: nowrap !important; }\n  .pf-u-flex-wrap-reverse-on-2xl {\n    flex-wrap: wrap-reverse !important; } }\n\n.pf-u-align-items-flex-start {\n  align-items: flex-start !important; }\n\n.pf-u-align-items-flex-end {\n  align-items: flex-end !important; }\n\n.pf-u-align-items-center {\n  align-items: center !important; }\n\n.pf-u-align-items-baseline {\n  align-items: baseline !important; }\n\n.pf-u-align-items-stretch {\n  align-items: stretch !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-align-items-flex-start-on-sm {\n    align-items: flex-start !important; }\n  .pf-u-align-items-flex-end-on-sm {\n    align-items: flex-end !important; }\n  .pf-u-align-items-center-on-sm {\n    align-items: center !important; }\n  .pf-u-align-items-baseline-on-sm {\n    align-items: baseline !important; }\n  .pf-u-align-items-stretch-on-sm {\n    align-items: stretch !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-align-items-flex-start-on-md {\n    align-items: flex-start !important; }\n  .pf-u-align-items-flex-end-on-md {\n    align-items: flex-end !important; }\n  .pf-u-align-items-center-on-md {\n    align-items: center !important; }\n  .pf-u-align-items-baseline-on-md {\n    align-items: baseline !important; }\n  .pf-u-align-items-stretch-on-md {\n    align-items: stretch !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-align-items-flex-start-on-lg {\n    align-items: flex-start !important; }\n  .pf-u-align-items-flex-end-on-lg {\n    align-items: flex-end !important; }\n  .pf-u-align-items-center-on-lg {\n    align-items: center !important; }\n  .pf-u-align-items-baseline-on-lg {\n    align-items: baseline !important; }\n  .pf-u-align-items-stretch-on-lg {\n    align-items: stretch !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-align-items-flex-start-on-xl {\n    align-items: flex-start !important; }\n  .pf-u-align-items-flex-end-on-xl {\n    align-items: flex-end !important; }\n  .pf-u-align-items-center-on-xl {\n    align-items: center !important; }\n  .pf-u-align-items-baseline-on-xl {\n    align-items: baseline !important; }\n  .pf-u-align-items-stretch-on-xl {\n    align-items: stretch !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-align-items-flex-start-on-2xl {\n    align-items: flex-start !important; }\n  .pf-u-align-items-flex-end-on-2xl {\n    align-items: flex-end !important; }\n  .pf-u-align-items-center-on-2xl {\n    align-items: center !important; }\n  .pf-u-align-items-baseline-on-2xl {\n    align-items: baseline !important; }\n  .pf-u-align-items-stretch-on-2xl {\n    align-items: stretch !important; } }\n\n.pf-u-align-self-flex-start {\n  align-self: flex-start !important; }\n\n.pf-u-align-self-flex-end {\n  align-self: flex-end !important; }\n\n.pf-u-align-self-center {\n  align-self: center !important; }\n\n.pf-u-align-self-baseline {\n  align-self: baseline !important; }\n\n.pf-u-align-self-stretch {\n  align-self: stretch !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-align-self-flex-start-on-sm {\n    align-self: flex-start !important; }\n  .pf-u-align-self-flex-end-on-sm {\n    align-self: flex-end !important; }\n  .pf-u-align-self-center-on-sm {\n    align-self: center !important; }\n  .pf-u-align-self-baseline-on-sm {\n    align-self: baseline !important; }\n  .pf-u-align-self-stretch-on-sm {\n    align-self: stretch !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-align-self-flex-start-on-md {\n    align-self: flex-start !important; }\n  .pf-u-align-self-flex-end-on-md {\n    align-self: flex-end !important; }\n  .pf-u-align-self-center-on-md {\n    align-self: center !important; }\n  .pf-u-align-self-baseline-on-md {\n    align-self: baseline !important; }\n  .pf-u-align-self-stretch-on-md {\n    align-self: stretch !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-align-self-flex-start-on-lg {\n    align-self: flex-start !important; }\n  .pf-u-align-self-flex-end-on-lg {\n    align-self: flex-end !important; }\n  .pf-u-align-self-center-on-lg {\n    align-self: center !important; }\n  .pf-u-align-self-baseline-on-lg {\n    align-self: baseline !important; }\n  .pf-u-align-self-stretch-on-lg {\n    align-self: stretch !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-align-self-flex-start-on-xl {\n    align-self: flex-start !important; }\n  .pf-u-align-self-flex-end-on-xl {\n    align-self: flex-end !important; }\n  .pf-u-align-self-center-on-xl {\n    align-self: center !important; }\n  .pf-u-align-self-baseline-on-xl {\n    align-self: baseline !important; }\n  .pf-u-align-self-stretch-on-xl {\n    align-self: stretch !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-align-self-flex-start-on-2xl {\n    align-self: flex-start !important; }\n  .pf-u-align-self-flex-end-on-2xl {\n    align-self: flex-end !important; }\n  .pf-u-align-self-center-on-2xl {\n    align-self: center !important; }\n  .pf-u-align-self-baseline-on-2xl {\n    align-self: baseline !important; }\n  .pf-u-align-self-stretch-on-2xl {\n    align-self: stretch !important; } }\n\n.pf-u-align-content-flex-start {\n  align-content: flex-start !important; }\n\n.pf-u-align-content-flex-end {\n  align-content: flex-end !important; }\n\n.pf-u-align-content-center {\n  align-content: center !important; }\n\n.pf-u-align-content-space-between {\n  align-content: space-between !important; }\n\n.pf-u-align-content-space-around {\n  align-content: space-around !important; }\n\n.pf-u-align-content-stretch {\n  align-content: stretch !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-align-content-flex-start-on-sm {\n    align-content: flex-start !important; }\n  .pf-u-align-content-flex-end-on-sm {\n    align-content: flex-end !important; }\n  .pf-u-align-content-center-on-sm {\n    align-content: center !important; }\n  .pf-u-align-content-space-between-on-sm {\n    align-content: space-between !important; }\n  .pf-u-align-content-space-around-on-sm {\n    align-content: space-around !important; }\n  .pf-u-align-content-stretch-on-sm {\n    align-content: stretch !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-align-content-flex-start-on-md {\n    align-content: flex-start !important; }\n  .pf-u-align-content-flex-end-on-md {\n    align-content: flex-end !important; }\n  .pf-u-align-content-center-on-md {\n    align-content: center !important; }\n  .pf-u-align-content-space-between-on-md {\n    align-content: space-between !important; }\n  .pf-u-align-content-space-around-on-md {\n    align-content: space-around !important; }\n  .pf-u-align-content-stretch-on-md {\n    align-content: stretch !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-align-content-flex-start-on-lg {\n    align-content: flex-start !important; }\n  .pf-u-align-content-flex-end-on-lg {\n    align-content: flex-end !important; }\n  .pf-u-align-content-center-on-lg {\n    align-content: center !important; }\n  .pf-u-align-content-space-between-on-lg {\n    align-content: space-between !important; }\n  .pf-u-align-content-space-around-on-lg {\n    align-content: space-around !important; }\n  .pf-u-align-content-stretch-on-lg {\n    align-content: stretch !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-align-content-flex-start-on-xl {\n    align-content: flex-start !important; }\n  .pf-u-align-content-flex-end-on-xl {\n    align-content: flex-end !important; }\n  .pf-u-align-content-center-on-xl {\n    align-content: center !important; }\n  .pf-u-align-content-space-between-on-xl {\n    align-content: space-between !important; }\n  .pf-u-align-content-space-around-on-xl {\n    align-content: space-around !important; }\n  .pf-u-align-content-stretch-on-xl {\n    align-content: stretch !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-align-content-flex-start-on-2xl {\n    align-content: flex-start !important; }\n  .pf-u-align-content-flex-end-on-2xl {\n    align-content: flex-end !important; }\n  .pf-u-align-content-center-on-2xl {\n    align-content: center !important; }\n  .pf-u-align-content-space-between-on-2xl {\n    align-content: space-between !important; }\n  .pf-u-align-content-space-around-on-2xl {\n    align-content: space-around !important; }\n  .pf-u-align-content-stretch-on-2xl {\n    align-content: stretch !important; } }\n\n.pf-u-justify-content-flex-start {\n  justify-content: flex-start !important; }\n\n.pf-u-justify-content-flex-end {\n  justify-content: flex-end !important; }\n\n.pf-u-justify-content-center {\n  justify-content: center !important; }\n\n.pf-u-justify-content-space-between {\n  justify-content: space-between !important; }\n\n.pf-u-justify-content-space-around {\n  justify-content: space-around !important; }\n\n.pf-u-justify-content-stretch {\n  justify-content: stretch !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-justify-content-flex-start-on-sm {\n    justify-content: flex-start !important; }\n  .pf-u-justify-content-flex-end-on-sm {\n    justify-content: flex-end !important; }\n  .pf-u-justify-content-center-on-sm {\n    justify-content: center !important; }\n  .pf-u-justify-content-space-between-on-sm {\n    justify-content: space-between !important; }\n  .pf-u-justify-content-space-around-on-sm {\n    justify-content: space-around !important; }\n  .pf-u-justify-content-stretch-on-sm {\n    justify-content: stretch !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-justify-content-flex-start-on-md {\n    justify-content: flex-start !important; }\n  .pf-u-justify-content-flex-end-on-md {\n    justify-content: flex-end !important; }\n  .pf-u-justify-content-center-on-md {\n    justify-content: center !important; }\n  .pf-u-justify-content-space-between-on-md {\n    justify-content: space-between !important; }\n  .pf-u-justify-content-space-around-on-md {\n    justify-content: space-around !important; }\n  .pf-u-justify-content-stretch-on-md {\n    justify-content: stretch !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-justify-content-flex-start-on-lg {\n    justify-content: flex-start !important; }\n  .pf-u-justify-content-flex-end-on-lg {\n    justify-content: flex-end !important; }\n  .pf-u-justify-content-center-on-lg {\n    justify-content: center !important; }\n  .pf-u-justify-content-space-between-on-lg {\n    justify-content: space-between !important; }\n  .pf-u-justify-content-space-around-on-lg {\n    justify-content: space-around !important; }\n  .pf-u-justify-content-stretch-on-lg {\n    justify-content: stretch !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-justify-content-flex-start-on-xl {\n    justify-content: flex-start !important; }\n  .pf-u-justify-content-flex-end-on-xl {\n    justify-content: flex-end !important; }\n  .pf-u-justify-content-center-on-xl {\n    justify-content: center !important; }\n  .pf-u-justify-content-space-between-on-xl {\n    justify-content: space-between !important; }\n  .pf-u-justify-content-space-around-on-xl {\n    justify-content: space-around !important; }\n  .pf-u-justify-content-stretch-on-xl {\n    justify-content: stretch !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-justify-content-flex-start-on-2xl {\n    justify-content: flex-start !important; }\n  .pf-u-justify-content-flex-end-on-2xl {\n    justify-content: flex-end !important; }\n  .pf-u-justify-content-center-on-2xl {\n    justify-content: center !important; }\n  .pf-u-justify-content-space-between-on-2xl {\n    justify-content: space-between !important; }\n  .pf-u-justify-content-space-around-on-2xl {\n    justify-content: space-around !important; }\n  .pf-u-justify-content-stretch-on-2xl {\n    justify-content: stretch !important; } }\n\n.pf-u-flex-shrink-1 {\n  flex-shrink: 1 !important; }\n\n.pf-u-flex-grow-1 {\n  flex-grow: 1 !important; }\n\n.pf-u-flex-shrink-0 {\n  flex-shrink: 0 !important; }\n\n.pf-u-flex-grow-0 {\n  flex-grow: 0 !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-flex-shrink-1-on-sm {\n    flex-shrink: 1 !important; }\n  .pf-u-flex-grow-1-on-sm {\n    flex-grow: 1 !important; }\n  .pf-u-flex-shrink-0-on-sm {\n    flex-shrink: 0 !important; }\n  .pf-u-flex-grow-0-on-sm {\n    flex-grow: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-flex-shrink-1-on-md {\n    flex-shrink: 1 !important; }\n  .pf-u-flex-grow-1-on-md {\n    flex-grow: 1 !important; }\n  .pf-u-flex-shrink-0-on-md {\n    flex-shrink: 0 !important; }\n  .pf-u-flex-grow-0-on-md {\n    flex-grow: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-flex-shrink-1-on-lg {\n    flex-shrink: 1 !important; }\n  .pf-u-flex-grow-1-on-lg {\n    flex-grow: 1 !important; }\n  .pf-u-flex-shrink-0-on-lg {\n    flex-shrink: 0 !important; }\n  .pf-u-flex-grow-0-on-lg {\n    flex-grow: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-flex-shrink-1-on-xl {\n    flex-shrink: 1 !important; }\n  .pf-u-flex-grow-1-on-xl {\n    flex-grow: 1 !important; }\n  .pf-u-flex-shrink-0-on-xl {\n    flex-shrink: 0 !important; }\n  .pf-u-flex-grow-0-on-xl {\n    flex-grow: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-flex-shrink-1-on-2xl {\n    flex-shrink: 1 !important; }\n  .pf-u-flex-grow-1-on-2xl {\n    flex-grow: 1 !important; }\n  .pf-u-flex-shrink-0-on-2xl {\n    flex-shrink: 0 !important; }\n  .pf-u-flex-grow-0-on-2xl {\n    flex-grow: 0 !important; } }\n\n.pf-u-flex-basis-0 {\n  flex-basis: 0 !important; }\n\n.pf-u-flex-basis-auto {\n  flex-basis: auto !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-flex-basis-0-on-sm {\n    flex-basis: 0 !important; }\n  .pf-u-flex-basis-auto-on-sm {\n    flex-basis: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-flex-basis-0-on-md {\n    flex-basis: 0 !important; }\n  .pf-u-flex-basis-auto-on-md {\n    flex-basis: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-flex-basis-0-on-lg {\n    flex-basis: 0 !important; }\n  .pf-u-flex-basis-auto-on-lg {\n    flex-basis: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-flex-basis-0-on-xl {\n    flex-basis: 0 !important; }\n  .pf-u-flex-basis-auto-on-xl {\n    flex-basis: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-flex-basis-0-on-2xl {\n    flex-basis: 0 !important; }\n  .pf-u-flex-basis-auto-on-2xl {\n    flex-basis: auto !important; } }\n\n.pf-u-flex-none {\n  flex: none !important; }\n\n.pf-u-flex-1 {\n  flex: 1 !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-flex-none-on-sm {\n    flex: none !important; }\n  .pf-u-flex-1-on-sm {\n    flex: 1 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-flex-none-on-md {\n    flex: none !important; }\n  .pf-u-flex-1-on-md {\n    flex: 1 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-flex-none-on-lg {\n    flex: none !important; }\n  .pf-u-flex-1-on-lg {\n    flex: 1 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-flex-none-on-xl {\n    flex: none !important; }\n  .pf-u-flex-1-on-xl {\n    flex: 1 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-flex-none-on-2xl {\n    flex: none !important; }\n  .pf-u-flex-1-on-2xl {\n    flex: 1 !important; } }\n\n.pf-u-flex-fill {\n  flex: 1 1 auto !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-flex-fill-on-sm {\n    flex: 1 1 auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-flex-fill-on-md {\n    flex: 1 1 auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-flex-fill-on-lg {\n    flex: 1 1 auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-flex-fill-on-xl {\n    flex: 1 1 auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-flex-fill-on-2xl {\n    flex: 1 1 auto !important; } }\n\n.pf-u-float-left {\n  float: left !important; }\n\n.pf-u-float-right {\n  float: right !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-float-left-on-sm {\n    float: left !important; }\n  .pf-u-float-right-on-sm {\n    float: right !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-float-left-on-md {\n    float: left !important; }\n  .pf-u-float-right-on-md {\n    float: right !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-float-left-on-lg {\n    float: left !important; }\n  .pf-u-float-right-on-lg {\n    float: right !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-float-left-on-xl {\n    float: left !important; }\n  .pf-u-float-right-on-xl {\n    float: right !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-float-left-on-2xl {\n    float: left !important; }\n  .pf-u-float-right-on-2xl {\n    float: right !important; } }\n\n.pf-u-w-auto {\n  width: auto !important; }\n\n.pf-u-w-initial {\n  width: initial !important; }\n\n.pf-u-w-inherit {\n  width: inherit !important; }\n\n.pf-u-w-0 {\n  width: 0% !important; }\n\n.pf-u-w-25 {\n  width: 25% !important; }\n\n.pf-u-w-33 {\n  width: calc(100% / 3) !important; }\n\n.pf-u-w-50 {\n  width: 50% !important; }\n\n.pf-u-w-66 {\n  width: calc(100% / 3 * 2) !important; }\n\n.pf-u-w-75 {\n  width: 75% !important; }\n\n.pf-u-w-100 {\n  width: 100% !important; }\n\n.pf-u-w-25vw {\n  width: 25vw !important; }\n\n.pf-u-w-33vw {\n  width: calc(100vw / 3) !important; }\n\n.pf-u-w-50vw {\n  width: 50vw !important; }\n\n.pf-u-w-66vw {\n  width: calc(100vw / 3 * 2) !important; }\n\n.pf-u-w-75vw {\n  width: 75vw !important; }\n\n.pf-u-w-100vw {\n  width: 100vw !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-w-auto-on-sm {\n    width: auto !important; }\n  .pf-u-w-initial-on-sm {\n    width: initial !important; }\n  .pf-u-w-inherit-on-sm {\n    width: inherit !important; }\n  .pf-u-w-0-on-sm {\n    width: 0% !important; }\n  .pf-u-w-25-on-sm {\n    width: 25% !important; }\n  .pf-u-w-33-on-sm {\n    width: calc(100% / 3) !important; }\n  .pf-u-w-50-on-sm {\n    width: 50% !important; }\n  .pf-u-w-66-on-sm {\n    width: calc(100% / 3 * 2) !important; }\n  .pf-u-w-75-on-sm {\n    width: 75% !important; }\n  .pf-u-w-100-on-sm {\n    width: 100% !important; }\n  .pf-u-w-25vw-on-sm {\n    width: 25vw !important; }\n  .pf-u-w-33vw-on-sm {\n    width: calc(100vw / 3) !important; }\n  .pf-u-w-50vw-on-sm {\n    width: 50vw !important; }\n  .pf-u-w-66vw-on-sm {\n    width: calc(100vw / 3 * 2) !important; }\n  .pf-u-w-75vw-on-sm {\n    width: 75vw !important; }\n  .pf-u-w-100vw-on-sm {\n    width: 100vw !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-w-auto-on-md {\n    width: auto !important; }\n  .pf-u-w-initial-on-md {\n    width: initial !important; }\n  .pf-u-w-inherit-on-md {\n    width: inherit !important; }\n  .pf-u-w-0-on-md {\n    width: 0% !important; }\n  .pf-u-w-25-on-md {\n    width: 25% !important; }\n  .pf-u-w-33-on-md {\n    width: calc(100% / 3) !important; }\n  .pf-u-w-50-on-md {\n    width: 50% !important; }\n  .pf-u-w-66-on-md {\n    width: calc(100% / 3 * 2) !important; }\n  .pf-u-w-75-on-md {\n    width: 75% !important; }\n  .pf-u-w-100-on-md {\n    width: 100% !important; }\n  .pf-u-w-25vw-on-md {\n    width: 25vw !important; }\n  .pf-u-w-33vw-on-md {\n    width: calc(100vw / 3) !important; }\n  .pf-u-w-50vw-on-md {\n    width: 50vw !important; }\n  .pf-u-w-66vw-on-md {\n    width: calc(100vw / 3 * 2) !important; }\n  .pf-u-w-75vw-on-md {\n    width: 75vw !important; }\n  .pf-u-w-100vw-on-md {\n    width: 100vw !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-w-auto-on-lg {\n    width: auto !important; }\n  .pf-u-w-initial-on-lg {\n    width: initial !important; }\n  .pf-u-w-inherit-on-lg {\n    width: inherit !important; }\n  .pf-u-w-0-on-lg {\n    width: 0% !important; }\n  .pf-u-w-25-on-lg {\n    width: 25% !important; }\n  .pf-u-w-33-on-lg {\n    width: calc(100% / 3) !important; }\n  .pf-u-w-50-on-lg {\n    width: 50% !important; }\n  .pf-u-w-66-on-lg {\n    width: calc(100% / 3 * 2) !important; }\n  .pf-u-w-75-on-lg {\n    width: 75% !important; }\n  .pf-u-w-100-on-lg {\n    width: 100% !important; }\n  .pf-u-w-25vw-on-lg {\n    width: 25vw !important; }\n  .pf-u-w-33vw-on-lg {\n    width: calc(100vw / 3) !important; }\n  .pf-u-w-50vw-on-lg {\n    width: 50vw !important; }\n  .pf-u-w-66vw-on-lg {\n    width: calc(100vw / 3 * 2) !important; }\n  .pf-u-w-75vw-on-lg {\n    width: 75vw !important; }\n  .pf-u-w-100vw-on-lg {\n    width: 100vw !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-w-auto-on-xl {\n    width: auto !important; }\n  .pf-u-w-initial-on-xl {\n    width: initial !important; }\n  .pf-u-w-inherit-on-xl {\n    width: inherit !important; }\n  .pf-u-w-0-on-xl {\n    width: 0% !important; }\n  .pf-u-w-25-on-xl {\n    width: 25% !important; }\n  .pf-u-w-33-on-xl {\n    width: calc(100% / 3) !important; }\n  .pf-u-w-50-on-xl {\n    width: 50% !important; }\n  .pf-u-w-66-on-xl {\n    width: calc(100% / 3 * 2) !important; }\n  .pf-u-w-75-on-xl {\n    width: 75% !important; }\n  .pf-u-w-100-on-xl {\n    width: 100% !important; }\n  .pf-u-w-25vw-on-xl {\n    width: 25vw !important; }\n  .pf-u-w-33vw-on-xl {\n    width: calc(100vw / 3) !important; }\n  .pf-u-w-50vw-on-xl {\n    width: 50vw !important; }\n  .pf-u-w-66vw-on-xl {\n    width: calc(100vw / 3 * 2) !important; }\n  .pf-u-w-75vw-on-xl {\n    width: 75vw !important; }\n  .pf-u-w-100vw-on-xl {\n    width: 100vw !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-w-auto-on-2xl {\n    width: auto !important; }\n  .pf-u-w-initial-on-2xl {\n    width: initial !important; }\n  .pf-u-w-inherit-on-2xl {\n    width: inherit !important; }\n  .pf-u-w-0-on-2xl {\n    width: 0% !important; }\n  .pf-u-w-25-on-2xl {\n    width: 25% !important; }\n  .pf-u-w-33-on-2xl {\n    width: calc(100% / 3) !important; }\n  .pf-u-w-50-on-2xl {\n    width: 50% !important; }\n  .pf-u-w-66-on-2xl {\n    width: calc(100% / 3 * 2) !important; }\n  .pf-u-w-75-on-2xl {\n    width: 75% !important; }\n  .pf-u-w-100-on-2xl {\n    width: 100% !important; }\n  .pf-u-w-25vw-on-2xl {\n    width: 25vw !important; }\n  .pf-u-w-33vw-on-2xl {\n    width: calc(100vw / 3) !important; }\n  .pf-u-w-50vw-on-2xl {\n    width: 50vw !important; }\n  .pf-u-w-66vw-on-2xl {\n    width: calc(100vw / 3 * 2) !important; }\n  .pf-u-w-75vw-on-2xl {\n    width: 75vw !important; }\n  .pf-u-w-100vw-on-2xl {\n    width: 100vw !important; } }\n\n.pf-u-h-auto {\n  height: auto !important; }\n\n.pf-u-h-initial {\n  height: initial !important; }\n\n.pf-u-h-inherit {\n  height: inherit !important; }\n\n.pf-u-h-0 {\n  height: 0% !important; }\n\n.pf-u-h-25 {\n  height: 25% !important; }\n\n.pf-u-h-33 {\n  height: calc(100% / 3) !important; }\n\n.pf-u-h-50 {\n  height: 50% !important; }\n\n.pf-u-h-66 {\n  height: calc(100% / 3 * 2) !important; }\n\n.pf-u-h-75 {\n  height: 75% !important; }\n\n.pf-u-h-100 {\n  height: 100% !important; }\n\n.pf-u-h-25vh {\n  height: 25vh !important; }\n\n.pf-u-h-33vh {\n  height: calc(100vh / 3) !important; }\n\n.pf-u-h-50vh {\n  height: 50vh !important; }\n\n.pf-u-h-66vh {\n  height: calc(100vh / 3 * 2) !important; }\n\n.pf-u-h-75vh {\n  height: 75vh !important; }\n\n.pf-u-h-100vh {\n  height: 100vh !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-h-auto-on-sm {\n    height: auto !important; }\n  .pf-u-h-initial-on-sm {\n    height: initial !important; }\n  .pf-u-h-inherit-on-sm {\n    height: inherit !important; }\n  .pf-u-h-0-on-sm {\n    height: 0% !important; }\n  .pf-u-h-25-on-sm {\n    height: 25% !important; }\n  .pf-u-h-33-on-sm {\n    height: calc(100% / 3) !important; }\n  .pf-u-h-50-on-sm {\n    height: 50% !important; }\n  .pf-u-h-66-on-sm {\n    height: calc(100% / 3 * 2) !important; }\n  .pf-u-h-75-on-sm {\n    height: 75% !important; }\n  .pf-u-h-100-on-sm {\n    height: 100% !important; }\n  .pf-u-h-25vh-on-sm {\n    height: 25vh !important; }\n  .pf-u-h-33vh-on-sm {\n    height: calc(100vh / 3) !important; }\n  .pf-u-h-50vh-on-sm {\n    height: 50vh !important; }\n  .pf-u-h-66vh-on-sm {\n    height: calc(100vh / 3 * 2) !important; }\n  .pf-u-h-75vh-on-sm {\n    height: 75vh !important; }\n  .pf-u-h-100vh-on-sm {\n    height: 100vh !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-h-auto-on-md {\n    height: auto !important; }\n  .pf-u-h-initial-on-md {\n    height: initial !important; }\n  .pf-u-h-inherit-on-md {\n    height: inherit !important; }\n  .pf-u-h-0-on-md {\n    height: 0% !important; }\n  .pf-u-h-25-on-md {\n    height: 25% !important; }\n  .pf-u-h-33-on-md {\n    height: calc(100% / 3) !important; }\n  .pf-u-h-50-on-md {\n    height: 50% !important; }\n  .pf-u-h-66-on-md {\n    height: calc(100% / 3 * 2) !important; }\n  .pf-u-h-75-on-md {\n    height: 75% !important; }\n  .pf-u-h-100-on-md {\n    height: 100% !important; }\n  .pf-u-h-25vh-on-md {\n    height: 25vh !important; }\n  .pf-u-h-33vh-on-md {\n    height: calc(100vh / 3) !important; }\n  .pf-u-h-50vh-on-md {\n    height: 50vh !important; }\n  .pf-u-h-66vh-on-md {\n    height: calc(100vh / 3 * 2) !important; }\n  .pf-u-h-75vh-on-md {\n    height: 75vh !important; }\n  .pf-u-h-100vh-on-md {\n    height: 100vh !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-h-auto-on-lg {\n    height: auto !important; }\n  .pf-u-h-initial-on-lg {\n    height: initial !important; }\n  .pf-u-h-inherit-on-lg {\n    height: inherit !important; }\n  .pf-u-h-0-on-lg {\n    height: 0% !important; }\n  .pf-u-h-25-on-lg {\n    height: 25% !important; }\n  .pf-u-h-33-on-lg {\n    height: calc(100% / 3) !important; }\n  .pf-u-h-50-on-lg {\n    height: 50% !important; }\n  .pf-u-h-66-on-lg {\n    height: calc(100% / 3 * 2) !important; }\n  .pf-u-h-75-on-lg {\n    height: 75% !important; }\n  .pf-u-h-100-on-lg {\n    height: 100% !important; }\n  .pf-u-h-25vh-on-lg {\n    height: 25vh !important; }\n  .pf-u-h-33vh-on-lg {\n    height: calc(100vh / 3) !important; }\n  .pf-u-h-50vh-on-lg {\n    height: 50vh !important; }\n  .pf-u-h-66vh-on-lg {\n    height: calc(100vh / 3 * 2) !important; }\n  .pf-u-h-75vh-on-lg {\n    height: 75vh !important; }\n  .pf-u-h-100vh-on-lg {\n    height: 100vh !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-h-auto-on-xl {\n    height: auto !important; }\n  .pf-u-h-initial-on-xl {\n    height: initial !important; }\n  .pf-u-h-inherit-on-xl {\n    height: inherit !important; }\n  .pf-u-h-0-on-xl {\n    height: 0% !important; }\n  .pf-u-h-25-on-xl {\n    height: 25% !important; }\n  .pf-u-h-33-on-xl {\n    height: calc(100% / 3) !important; }\n  .pf-u-h-50-on-xl {\n    height: 50% !important; }\n  .pf-u-h-66-on-xl {\n    height: calc(100% / 3 * 2) !important; }\n  .pf-u-h-75-on-xl {\n    height: 75% !important; }\n  .pf-u-h-100-on-xl {\n    height: 100% !important; }\n  .pf-u-h-25vh-on-xl {\n    height: 25vh !important; }\n  .pf-u-h-33vh-on-xl {\n    height: calc(100vh / 3) !important; }\n  .pf-u-h-50vh-on-xl {\n    height: 50vh !important; }\n  .pf-u-h-66vh-on-xl {\n    height: calc(100vh / 3 * 2) !important; }\n  .pf-u-h-75vh-on-xl {\n    height: 75vh !important; }\n  .pf-u-h-100vh-on-xl {\n    height: 100vh !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-h-auto-on-2xl {\n    height: auto !important; }\n  .pf-u-h-initial-on-2xl {\n    height: initial !important; }\n  .pf-u-h-inherit-on-2xl {\n    height: inherit !important; }\n  .pf-u-h-0-on-2xl {\n    height: 0% !important; }\n  .pf-u-h-25-on-2xl {\n    height: 25% !important; }\n  .pf-u-h-33-on-2xl {\n    height: calc(100% / 3) !important; }\n  .pf-u-h-50-on-2xl {\n    height: 50% !important; }\n  .pf-u-h-66-on-2xl {\n    height: calc(100% / 3 * 2) !important; }\n  .pf-u-h-75-on-2xl {\n    height: 75% !important; }\n  .pf-u-h-100-on-2xl {\n    height: 100% !important; }\n  .pf-u-h-25vh-on-2xl {\n    height: 25vh !important; }\n  .pf-u-h-33vh-on-2xl {\n    height: calc(100vh / 3) !important; }\n  .pf-u-h-50vh-on-2xl {\n    height: 50vh !important; }\n  .pf-u-h-66vh-on-2xl {\n    height: calc(100vh / 3 * 2) !important; }\n  .pf-u-h-75vh-on-2xl {\n    height: 75vh !important; }\n  .pf-u-h-100vh-on-2xl {\n    height: 100vh !important; } }\n\n.pf-u-m-auto {\n  margin: auto !important; }\n\n.pf-u-m-0 {\n  margin: 0 !important; }\n\n.pf-u-m-xs {\n  margin: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-m-sm {\n  margin: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-m-md {\n  margin: var(--pf-global--spacer--md) !important; }\n\n.pf-u-m-lg {\n  margin: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-m-xl {\n  margin: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-m-2xl {\n  margin: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-m-3xl {\n  margin: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-m-4xl {\n  margin: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-mt-auto {\n  margin-top: auto !important; }\n\n.pf-u-mt-0 {\n  margin-top: 0 !important; }\n\n.pf-u-mt-xs {\n  margin-top: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-mt-sm {\n  margin-top: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-mt-md {\n  margin-top: var(--pf-global--spacer--md) !important; }\n\n.pf-u-mt-lg {\n  margin-top: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-mt-xl {\n  margin-top: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-mt-2xl {\n  margin-top: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-mt-3xl {\n  margin-top: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-mt-4xl {\n  margin-top: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-mr-auto {\n  margin-right: auto !important; }\n\n.pf-u-mr-0 {\n  margin-right: 0 !important; }\n\n.pf-u-mr-xs {\n  margin-right: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-mr-sm {\n  margin-right: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-mr-md {\n  margin-right: var(--pf-global--spacer--md) !important; }\n\n.pf-u-mr-lg {\n  margin-right: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-mr-xl {\n  margin-right: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-mr-2xl {\n  margin-right: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-mr-3xl {\n  margin-right: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-mr-4xl {\n  margin-right: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-mb-auto {\n  margin-bottom: auto !important; }\n\n.pf-u-mb-0 {\n  margin-bottom: 0 !important; }\n\n.pf-u-mb-xs {\n  margin-bottom: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-mb-sm {\n  margin-bottom: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-mb-md {\n  margin-bottom: var(--pf-global--spacer--md) !important; }\n\n.pf-u-mb-lg {\n  margin-bottom: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-mb-xl {\n  margin-bottom: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-mb-2xl {\n  margin-bottom: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-mb-3xl {\n  margin-bottom: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-mb-4xl {\n  margin-bottom: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-ml-auto {\n  margin-left: auto !important; }\n\n.pf-u-ml-0 {\n  margin-left: 0 !important; }\n\n.pf-u-ml-xs {\n  margin-left: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-ml-sm {\n  margin-left: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-ml-md {\n  margin-left: var(--pf-global--spacer--md) !important; }\n\n.pf-u-ml-lg {\n  margin-left: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-ml-xl {\n  margin-left: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-ml-2xl {\n  margin-left: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-ml-3xl {\n  margin-left: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-ml-4xl {\n  margin-left: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important; }\n\n.pf-u-mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important; }\n\n.pf-u-mx-xs {\n  margin-right: var(--pf-global--spacer--xs) !important;\n  margin-left: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-mx-sm {\n  margin-right: var(--pf-global--spacer--sm) !important;\n  margin-left: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-mx-md {\n  margin-right: var(--pf-global--spacer--md) !important;\n  margin-left: var(--pf-global--spacer--md) !important; }\n\n.pf-u-mx-lg {\n  margin-right: var(--pf-global--spacer--lg) !important;\n  margin-left: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-mx-xl {\n  margin-right: var(--pf-global--spacer--xl) !important;\n  margin-left: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-mx-2xl {\n  margin-right: var(--pf-global--spacer--2xl) !important;\n  margin-left: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-mx-3xl {\n  margin-right: var(--pf-global--spacer--3xl) !important;\n  margin-left: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-mx-4xl {\n  margin-right: var(--pf-global--spacer--4xl) !important;\n  margin-left: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important; }\n\n.pf-u-my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important; }\n\n.pf-u-my-xs {\n  margin-top: var(--pf-global--spacer--xs) !important;\n  margin-bottom: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-my-sm {\n  margin-top: var(--pf-global--spacer--sm) !important;\n  margin-bottom: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-my-md {\n  margin-top: var(--pf-global--spacer--md) !important;\n  margin-bottom: var(--pf-global--spacer--md) !important; }\n\n.pf-u-my-lg {\n  margin-top: var(--pf-global--spacer--lg) !important;\n  margin-bottom: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-my-xl {\n  margin-top: var(--pf-global--spacer--xl) !important;\n  margin-bottom: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-my-2xl {\n  margin-top: var(--pf-global--spacer--2xl) !important;\n  margin-bottom: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-my-3xl {\n  margin-top: var(--pf-global--spacer--3xl) !important;\n  margin-bottom: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-my-4xl {\n  margin-top: var(--pf-global--spacer--4xl) !important;\n  margin-bottom: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-p-auto {\n  padding: auto !important; }\n\n.pf-u-p-0 {\n  padding: 0 !important; }\n\n.pf-u-p-xs {\n  padding: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-p-sm {\n  padding: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-p-md {\n  padding: var(--pf-global--spacer--md) !important; }\n\n.pf-u-p-lg {\n  padding: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-p-xl {\n  padding: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-p-2xl {\n  padding: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-p-3xl {\n  padding: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-p-4xl {\n  padding: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-pt-auto {\n  padding-top: auto !important; }\n\n.pf-u-pt-0 {\n  padding-top: 0 !important; }\n\n.pf-u-pt-xs {\n  padding-top: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-pt-sm {\n  padding-top: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-pt-md {\n  padding-top: var(--pf-global--spacer--md) !important; }\n\n.pf-u-pt-lg {\n  padding-top: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-pt-xl {\n  padding-top: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-pt-2xl {\n  padding-top: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-pt-3xl {\n  padding-top: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-pt-4xl {\n  padding-top: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-pr-auto {\n  padding-right: auto !important; }\n\n.pf-u-pr-0 {\n  padding-right: 0 !important; }\n\n.pf-u-pr-xs {\n  padding-right: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-pr-sm {\n  padding-right: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-pr-md {\n  padding-right: var(--pf-global--spacer--md) !important; }\n\n.pf-u-pr-lg {\n  padding-right: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-pr-xl {\n  padding-right: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-pr-2xl {\n  padding-right: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-pr-3xl {\n  padding-right: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-pr-4xl {\n  padding-right: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-pb-auto {\n  padding-bottom: auto !important; }\n\n.pf-u-pb-0 {\n  padding-bottom: 0 !important; }\n\n.pf-u-pb-xs {\n  padding-bottom: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-pb-sm {\n  padding-bottom: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-pb-md {\n  padding-bottom: var(--pf-global--spacer--md) !important; }\n\n.pf-u-pb-lg {\n  padding-bottom: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-pb-xl {\n  padding-bottom: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-pb-2xl {\n  padding-bottom: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-pb-3xl {\n  padding-bottom: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-pb-4xl {\n  padding-bottom: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-pl-auto {\n  padding-left: auto !important; }\n\n.pf-u-pl-0 {\n  padding-left: 0 !important; }\n\n.pf-u-pl-xs {\n  padding-left: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-pl-sm {\n  padding-left: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-pl-md {\n  padding-left: var(--pf-global--spacer--md) !important; }\n\n.pf-u-pl-lg {\n  padding-left: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-pl-xl {\n  padding-left: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-pl-2xl {\n  padding-left: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-pl-3xl {\n  padding-left: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-pl-4xl {\n  padding-left: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-px-auto {\n  padding-right: auto !important;\n  padding-left: auto !important; }\n\n.pf-u-px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important; }\n\n.pf-u-px-xs {\n  padding-right: var(--pf-global--spacer--xs) !important;\n  padding-left: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-px-sm {\n  padding-right: var(--pf-global--spacer--sm) !important;\n  padding-left: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-px-md {\n  padding-right: var(--pf-global--spacer--md) !important;\n  padding-left: var(--pf-global--spacer--md) !important; }\n\n.pf-u-px-lg {\n  padding-right: var(--pf-global--spacer--lg) !important;\n  padding-left: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-px-xl {\n  padding-right: var(--pf-global--spacer--xl) !important;\n  padding-left: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-px-2xl {\n  padding-right: var(--pf-global--spacer--2xl) !important;\n  padding-left: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-px-3xl {\n  padding-right: var(--pf-global--spacer--3xl) !important;\n  padding-left: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-px-4xl {\n  padding-right: var(--pf-global--spacer--4xl) !important;\n  padding-left: var(--pf-global--spacer--4xl) !important; }\n\n.pf-u-py-auto {\n  padding-top: auto !important;\n  padding-bottom: auto !important; }\n\n.pf-u-py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important; }\n\n.pf-u-py-xs {\n  padding-top: var(--pf-global--spacer--xs) !important;\n  padding-bottom: var(--pf-global--spacer--xs) !important; }\n\n.pf-u-py-sm {\n  padding-top: var(--pf-global--spacer--sm) !important;\n  padding-bottom: var(--pf-global--spacer--sm) !important; }\n\n.pf-u-py-md {\n  padding-top: var(--pf-global--spacer--md) !important;\n  padding-bottom: var(--pf-global--spacer--md) !important; }\n\n.pf-u-py-lg {\n  padding-top: var(--pf-global--spacer--lg) !important;\n  padding-bottom: var(--pf-global--spacer--lg) !important; }\n\n.pf-u-py-xl {\n  padding-top: var(--pf-global--spacer--xl) !important;\n  padding-bottom: var(--pf-global--spacer--xl) !important; }\n\n.pf-u-py-2xl {\n  padding-top: var(--pf-global--spacer--2xl) !important;\n  padding-bottom: var(--pf-global--spacer--2xl) !important; }\n\n.pf-u-py-3xl {\n  padding-top: var(--pf-global--spacer--3xl) !important;\n  padding-bottom: var(--pf-global--spacer--3xl) !important; }\n\n.pf-u-py-4xl {\n  padding-top: var(--pf-global--spacer--4xl) !important;\n  padding-bottom: var(--pf-global--spacer--4xl) !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-auto-on-sm {\n    margin: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-0-on-sm {\n    margin: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-xs-on-sm {\n    margin: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-sm-on-sm {\n    margin: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-md-on-sm {\n    margin: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-lg-on-sm {\n    margin: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-xl-on-sm {\n    margin: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-2xl-on-sm {\n    margin: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-3xl-on-sm {\n    margin: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-m-4xl-on-sm {\n    margin: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-auto-on-sm {\n    margin-top: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-0-on-sm {\n    margin-top: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-xs-on-sm {\n    margin-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-sm-on-sm {\n    margin-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-md-on-sm {\n    margin-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-lg-on-sm {\n    margin-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-xl-on-sm {\n    margin-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-2xl-on-sm {\n    margin-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-3xl-on-sm {\n    margin-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mt-4xl-on-sm {\n    margin-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-auto-on-sm {\n    margin-right: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-0-on-sm {\n    margin-right: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-xs-on-sm {\n    margin-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-sm-on-sm {\n    margin-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-md-on-sm {\n    margin-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-lg-on-sm {\n    margin-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-xl-on-sm {\n    margin-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-2xl-on-sm {\n    margin-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-3xl-on-sm {\n    margin-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mr-4xl-on-sm {\n    margin-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-auto-on-sm {\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-0-on-sm {\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-xs-on-sm {\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-sm-on-sm {\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-md-on-sm {\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-lg-on-sm {\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-xl-on-sm {\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-2xl-on-sm {\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-3xl-on-sm {\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mb-4xl-on-sm {\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-auto-on-sm {\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-0-on-sm {\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-xs-on-sm {\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-sm-on-sm {\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-md-on-sm {\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-lg-on-sm {\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-xl-on-sm {\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-2xl-on-sm {\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-3xl-on-sm {\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-ml-4xl-on-sm {\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-auto-on-sm {\n    margin-right: auto !important;\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-0-on-sm {\n    margin-right: 0 !important;\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-xs-on-sm {\n    margin-right: var(--pf-global--spacer--xs) !important;\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-sm-on-sm {\n    margin-right: var(--pf-global--spacer--sm) !important;\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-md-on-sm {\n    margin-right: var(--pf-global--spacer--md) !important;\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-lg-on-sm {\n    margin-right: var(--pf-global--spacer--lg) !important;\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-xl-on-sm {\n    margin-right: var(--pf-global--spacer--xl) !important;\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-2xl-on-sm {\n    margin-right: var(--pf-global--spacer--2xl) !important;\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-3xl-on-sm {\n    margin-right: var(--pf-global--spacer--3xl) !important;\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-mx-4xl-on-sm {\n    margin-right: var(--pf-global--spacer--4xl) !important;\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-auto-on-sm {\n    margin-top: auto !important;\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-0-on-sm {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-xs-on-sm {\n    margin-top: var(--pf-global--spacer--xs) !important;\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-sm-on-sm {\n    margin-top: var(--pf-global--spacer--sm) !important;\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-md-on-sm {\n    margin-top: var(--pf-global--spacer--md) !important;\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-lg-on-sm {\n    margin-top: var(--pf-global--spacer--lg) !important;\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-xl-on-sm {\n    margin-top: var(--pf-global--spacer--xl) !important;\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-2xl-on-sm {\n    margin-top: var(--pf-global--spacer--2xl) !important;\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-3xl-on-sm {\n    margin-top: var(--pf-global--spacer--3xl) !important;\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-my-4xl-on-sm {\n    margin-top: var(--pf-global--spacer--4xl) !important;\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-auto-on-sm {\n    padding: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-0-on-sm {\n    padding: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-xs-on-sm {\n    padding: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-sm-on-sm {\n    padding: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-md-on-sm {\n    padding: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-lg-on-sm {\n    padding: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-xl-on-sm {\n    padding: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-2xl-on-sm {\n    padding: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-3xl-on-sm {\n    padding: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-p-4xl-on-sm {\n    padding: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-auto-on-sm {\n    padding-top: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-0-on-sm {\n    padding-top: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-xs-on-sm {\n    padding-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-sm-on-sm {\n    padding-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-md-on-sm {\n    padding-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-lg-on-sm {\n    padding-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-xl-on-sm {\n    padding-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-2xl-on-sm {\n    padding-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-3xl-on-sm {\n    padding-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pt-4xl-on-sm {\n    padding-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-auto-on-sm {\n    padding-right: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-0-on-sm {\n    padding-right: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-xs-on-sm {\n    padding-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-sm-on-sm {\n    padding-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-md-on-sm {\n    padding-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-lg-on-sm {\n    padding-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-xl-on-sm {\n    padding-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-2xl-on-sm {\n    padding-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-3xl-on-sm {\n    padding-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pr-4xl-on-sm {\n    padding-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-auto-on-sm {\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-0-on-sm {\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-xs-on-sm {\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-sm-on-sm {\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-md-on-sm {\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-lg-on-sm {\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-xl-on-sm {\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-2xl-on-sm {\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-3xl-on-sm {\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pb-4xl-on-sm {\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-auto-on-sm {\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-0-on-sm {\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-xs-on-sm {\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-sm-on-sm {\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-md-on-sm {\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-lg-on-sm {\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-xl-on-sm {\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-2xl-on-sm {\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-3xl-on-sm {\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-pl-4xl-on-sm {\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-auto-on-sm {\n    padding-right: auto !important;\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-0-on-sm {\n    padding-right: 0 !important;\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-xs-on-sm {\n    padding-right: var(--pf-global--spacer--xs) !important;\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-sm-on-sm {\n    padding-right: var(--pf-global--spacer--sm) !important;\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-md-on-sm {\n    padding-right: var(--pf-global--spacer--md) !important;\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-lg-on-sm {\n    padding-right: var(--pf-global--spacer--lg) !important;\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-xl-on-sm {\n    padding-right: var(--pf-global--spacer--xl) !important;\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-2xl-on-sm {\n    padding-right: var(--pf-global--spacer--2xl) !important;\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-3xl-on-sm {\n    padding-right: var(--pf-global--spacer--3xl) !important;\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-px-4xl-on-sm {\n    padding-right: var(--pf-global--spacer--4xl) !important;\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-auto-on-sm {\n    padding-top: auto !important;\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-0-on-sm {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-xs-on-sm {\n    padding-top: var(--pf-global--spacer--xs) !important;\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-sm-on-sm {\n    padding-top: var(--pf-global--spacer--sm) !important;\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-md-on-sm {\n    padding-top: var(--pf-global--spacer--md) !important;\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-lg-on-sm {\n    padding-top: var(--pf-global--spacer--lg) !important;\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-xl-on-sm {\n    padding-top: var(--pf-global--spacer--xl) !important;\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-2xl-on-sm {\n    padding-top: var(--pf-global--spacer--2xl) !important;\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-3xl-on-sm {\n    padding-top: var(--pf-global--spacer--3xl) !important;\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 576px) {\n  .pf-u-py-4xl-on-sm {\n    padding-top: var(--pf-global--spacer--4xl) !important;\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-auto-on-md {\n    margin: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-0-on-md {\n    margin: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-xs-on-md {\n    margin: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-sm-on-md {\n    margin: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-md-on-md {\n    margin: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-lg-on-md {\n    margin: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-xl-on-md {\n    margin: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-2xl-on-md {\n    margin: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-3xl-on-md {\n    margin: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-m-4xl-on-md {\n    margin: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-auto-on-md {\n    margin-top: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-0-on-md {\n    margin-top: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-xs-on-md {\n    margin-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-sm-on-md {\n    margin-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-md-on-md {\n    margin-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-lg-on-md {\n    margin-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-xl-on-md {\n    margin-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-2xl-on-md {\n    margin-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-3xl-on-md {\n    margin-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mt-4xl-on-md {\n    margin-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-auto-on-md {\n    margin-right: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-0-on-md {\n    margin-right: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-xs-on-md {\n    margin-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-sm-on-md {\n    margin-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-md-on-md {\n    margin-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-lg-on-md {\n    margin-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-xl-on-md {\n    margin-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-2xl-on-md {\n    margin-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-3xl-on-md {\n    margin-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mr-4xl-on-md {\n    margin-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-auto-on-md {\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-0-on-md {\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-xs-on-md {\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-sm-on-md {\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-md-on-md {\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-lg-on-md {\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-xl-on-md {\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-2xl-on-md {\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-3xl-on-md {\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mb-4xl-on-md {\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-auto-on-md {\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-0-on-md {\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-xs-on-md {\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-sm-on-md {\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-md-on-md {\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-lg-on-md {\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-xl-on-md {\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-2xl-on-md {\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-3xl-on-md {\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-ml-4xl-on-md {\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-auto-on-md {\n    margin-right: auto !important;\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-0-on-md {\n    margin-right: 0 !important;\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-xs-on-md {\n    margin-right: var(--pf-global--spacer--xs) !important;\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-sm-on-md {\n    margin-right: var(--pf-global--spacer--sm) !important;\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-md-on-md {\n    margin-right: var(--pf-global--spacer--md) !important;\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-lg-on-md {\n    margin-right: var(--pf-global--spacer--lg) !important;\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-xl-on-md {\n    margin-right: var(--pf-global--spacer--xl) !important;\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-2xl-on-md {\n    margin-right: var(--pf-global--spacer--2xl) !important;\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-3xl-on-md {\n    margin-right: var(--pf-global--spacer--3xl) !important;\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-mx-4xl-on-md {\n    margin-right: var(--pf-global--spacer--4xl) !important;\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-auto-on-md {\n    margin-top: auto !important;\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-0-on-md {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-xs-on-md {\n    margin-top: var(--pf-global--spacer--xs) !important;\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-sm-on-md {\n    margin-top: var(--pf-global--spacer--sm) !important;\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-md-on-md {\n    margin-top: var(--pf-global--spacer--md) !important;\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-lg-on-md {\n    margin-top: var(--pf-global--spacer--lg) !important;\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-xl-on-md {\n    margin-top: var(--pf-global--spacer--xl) !important;\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-2xl-on-md {\n    margin-top: var(--pf-global--spacer--2xl) !important;\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-3xl-on-md {\n    margin-top: var(--pf-global--spacer--3xl) !important;\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-my-4xl-on-md {\n    margin-top: var(--pf-global--spacer--4xl) !important;\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-auto-on-md {\n    padding: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-0-on-md {\n    padding: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-xs-on-md {\n    padding: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-sm-on-md {\n    padding: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-md-on-md {\n    padding: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-lg-on-md {\n    padding: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-xl-on-md {\n    padding: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-2xl-on-md {\n    padding: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-3xl-on-md {\n    padding: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-p-4xl-on-md {\n    padding: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-auto-on-md {\n    padding-top: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-0-on-md {\n    padding-top: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-xs-on-md {\n    padding-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-sm-on-md {\n    padding-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-md-on-md {\n    padding-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-lg-on-md {\n    padding-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-xl-on-md {\n    padding-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-2xl-on-md {\n    padding-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-3xl-on-md {\n    padding-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pt-4xl-on-md {\n    padding-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-auto-on-md {\n    padding-right: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-0-on-md {\n    padding-right: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-xs-on-md {\n    padding-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-sm-on-md {\n    padding-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-md-on-md {\n    padding-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-lg-on-md {\n    padding-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-xl-on-md {\n    padding-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-2xl-on-md {\n    padding-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-3xl-on-md {\n    padding-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pr-4xl-on-md {\n    padding-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-auto-on-md {\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-0-on-md {\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-xs-on-md {\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-sm-on-md {\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-md-on-md {\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-lg-on-md {\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-xl-on-md {\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-2xl-on-md {\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-3xl-on-md {\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pb-4xl-on-md {\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-auto-on-md {\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-0-on-md {\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-xs-on-md {\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-sm-on-md {\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-md-on-md {\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-lg-on-md {\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-xl-on-md {\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-2xl-on-md {\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-3xl-on-md {\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-pl-4xl-on-md {\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-auto-on-md {\n    padding-right: auto !important;\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-0-on-md {\n    padding-right: 0 !important;\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-xs-on-md {\n    padding-right: var(--pf-global--spacer--xs) !important;\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-sm-on-md {\n    padding-right: var(--pf-global--spacer--sm) !important;\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-md-on-md {\n    padding-right: var(--pf-global--spacer--md) !important;\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-lg-on-md {\n    padding-right: var(--pf-global--spacer--lg) !important;\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-xl-on-md {\n    padding-right: var(--pf-global--spacer--xl) !important;\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-2xl-on-md {\n    padding-right: var(--pf-global--spacer--2xl) !important;\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-3xl-on-md {\n    padding-right: var(--pf-global--spacer--3xl) !important;\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-px-4xl-on-md {\n    padding-right: var(--pf-global--spacer--4xl) !important;\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-auto-on-md {\n    padding-top: auto !important;\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-0-on-md {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-xs-on-md {\n    padding-top: var(--pf-global--spacer--xs) !important;\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-sm-on-md {\n    padding-top: var(--pf-global--spacer--sm) !important;\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-md-on-md {\n    padding-top: var(--pf-global--spacer--md) !important;\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-lg-on-md {\n    padding-top: var(--pf-global--spacer--lg) !important;\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-xl-on-md {\n    padding-top: var(--pf-global--spacer--xl) !important;\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-2xl-on-md {\n    padding-top: var(--pf-global--spacer--2xl) !important;\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-3xl-on-md {\n    padding-top: var(--pf-global--spacer--3xl) !important;\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-py-4xl-on-md {\n    padding-top: var(--pf-global--spacer--4xl) !important;\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-auto-on-lg {\n    margin: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-0-on-lg {\n    margin: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-xs-on-lg {\n    margin: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-sm-on-lg {\n    margin: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-md-on-lg {\n    margin: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-lg-on-lg {\n    margin: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-xl-on-lg {\n    margin: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-2xl-on-lg {\n    margin: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-3xl-on-lg {\n    margin: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-m-4xl-on-lg {\n    margin: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-auto-on-lg {\n    margin-top: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-0-on-lg {\n    margin-top: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-xs-on-lg {\n    margin-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-sm-on-lg {\n    margin-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-md-on-lg {\n    margin-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-lg-on-lg {\n    margin-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-xl-on-lg {\n    margin-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-2xl-on-lg {\n    margin-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-3xl-on-lg {\n    margin-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mt-4xl-on-lg {\n    margin-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-auto-on-lg {\n    margin-right: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-0-on-lg {\n    margin-right: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-xs-on-lg {\n    margin-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-sm-on-lg {\n    margin-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-md-on-lg {\n    margin-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-lg-on-lg {\n    margin-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-xl-on-lg {\n    margin-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-2xl-on-lg {\n    margin-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-3xl-on-lg {\n    margin-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mr-4xl-on-lg {\n    margin-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-auto-on-lg {\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-0-on-lg {\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-xs-on-lg {\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-sm-on-lg {\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-md-on-lg {\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-lg-on-lg {\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-xl-on-lg {\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-2xl-on-lg {\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-3xl-on-lg {\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mb-4xl-on-lg {\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-auto-on-lg {\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-0-on-lg {\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-xs-on-lg {\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-sm-on-lg {\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-md-on-lg {\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-lg-on-lg {\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-xl-on-lg {\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-2xl-on-lg {\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-3xl-on-lg {\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-ml-4xl-on-lg {\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-auto-on-lg {\n    margin-right: auto !important;\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-0-on-lg {\n    margin-right: 0 !important;\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-xs-on-lg {\n    margin-right: var(--pf-global--spacer--xs) !important;\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-sm-on-lg {\n    margin-right: var(--pf-global--spacer--sm) !important;\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-md-on-lg {\n    margin-right: var(--pf-global--spacer--md) !important;\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-lg-on-lg {\n    margin-right: var(--pf-global--spacer--lg) !important;\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-xl-on-lg {\n    margin-right: var(--pf-global--spacer--xl) !important;\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-2xl-on-lg {\n    margin-right: var(--pf-global--spacer--2xl) !important;\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-3xl-on-lg {\n    margin-right: var(--pf-global--spacer--3xl) !important;\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-mx-4xl-on-lg {\n    margin-right: var(--pf-global--spacer--4xl) !important;\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-auto-on-lg {\n    margin-top: auto !important;\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-0-on-lg {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-xs-on-lg {\n    margin-top: var(--pf-global--spacer--xs) !important;\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-sm-on-lg {\n    margin-top: var(--pf-global--spacer--sm) !important;\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-md-on-lg {\n    margin-top: var(--pf-global--spacer--md) !important;\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-lg-on-lg {\n    margin-top: var(--pf-global--spacer--lg) !important;\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-xl-on-lg {\n    margin-top: var(--pf-global--spacer--xl) !important;\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-2xl-on-lg {\n    margin-top: var(--pf-global--spacer--2xl) !important;\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-3xl-on-lg {\n    margin-top: var(--pf-global--spacer--3xl) !important;\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-my-4xl-on-lg {\n    margin-top: var(--pf-global--spacer--4xl) !important;\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-auto-on-lg {\n    padding: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-0-on-lg {\n    padding: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-xs-on-lg {\n    padding: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-sm-on-lg {\n    padding: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-md-on-lg {\n    padding: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-lg-on-lg {\n    padding: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-xl-on-lg {\n    padding: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-2xl-on-lg {\n    padding: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-3xl-on-lg {\n    padding: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-p-4xl-on-lg {\n    padding: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-auto-on-lg {\n    padding-top: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-0-on-lg {\n    padding-top: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-xs-on-lg {\n    padding-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-sm-on-lg {\n    padding-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-md-on-lg {\n    padding-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-lg-on-lg {\n    padding-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-xl-on-lg {\n    padding-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-2xl-on-lg {\n    padding-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-3xl-on-lg {\n    padding-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pt-4xl-on-lg {\n    padding-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-auto-on-lg {\n    padding-right: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-0-on-lg {\n    padding-right: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-xs-on-lg {\n    padding-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-sm-on-lg {\n    padding-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-md-on-lg {\n    padding-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-lg-on-lg {\n    padding-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-xl-on-lg {\n    padding-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-2xl-on-lg {\n    padding-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-3xl-on-lg {\n    padding-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pr-4xl-on-lg {\n    padding-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-auto-on-lg {\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-0-on-lg {\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-xs-on-lg {\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-sm-on-lg {\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-md-on-lg {\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-lg-on-lg {\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-xl-on-lg {\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-2xl-on-lg {\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-3xl-on-lg {\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pb-4xl-on-lg {\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-auto-on-lg {\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-0-on-lg {\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-xs-on-lg {\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-sm-on-lg {\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-md-on-lg {\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-lg-on-lg {\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-xl-on-lg {\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-2xl-on-lg {\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-3xl-on-lg {\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-pl-4xl-on-lg {\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-auto-on-lg {\n    padding-right: auto !important;\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-0-on-lg {\n    padding-right: 0 !important;\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-xs-on-lg {\n    padding-right: var(--pf-global--spacer--xs) !important;\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-sm-on-lg {\n    padding-right: var(--pf-global--spacer--sm) !important;\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-md-on-lg {\n    padding-right: var(--pf-global--spacer--md) !important;\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-lg-on-lg {\n    padding-right: var(--pf-global--spacer--lg) !important;\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-xl-on-lg {\n    padding-right: var(--pf-global--spacer--xl) !important;\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-2xl-on-lg {\n    padding-right: var(--pf-global--spacer--2xl) !important;\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-3xl-on-lg {\n    padding-right: var(--pf-global--spacer--3xl) !important;\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-px-4xl-on-lg {\n    padding-right: var(--pf-global--spacer--4xl) !important;\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-auto-on-lg {\n    padding-top: auto !important;\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-0-on-lg {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-xs-on-lg {\n    padding-top: var(--pf-global--spacer--xs) !important;\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-sm-on-lg {\n    padding-top: var(--pf-global--spacer--sm) !important;\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-md-on-lg {\n    padding-top: var(--pf-global--spacer--md) !important;\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-lg-on-lg {\n    padding-top: var(--pf-global--spacer--lg) !important;\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-xl-on-lg {\n    padding-top: var(--pf-global--spacer--xl) !important;\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-2xl-on-lg {\n    padding-top: var(--pf-global--spacer--2xl) !important;\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-3xl-on-lg {\n    padding-top: var(--pf-global--spacer--3xl) !important;\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-py-4xl-on-lg {\n    padding-top: var(--pf-global--spacer--4xl) !important;\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-auto-on-xl {\n    margin: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-0-on-xl {\n    margin: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-xs-on-xl {\n    margin: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-sm-on-xl {\n    margin: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-md-on-xl {\n    margin: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-lg-on-xl {\n    margin: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-xl-on-xl {\n    margin: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-2xl-on-xl {\n    margin: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-3xl-on-xl {\n    margin: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-m-4xl-on-xl {\n    margin: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-auto-on-xl {\n    margin-top: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-0-on-xl {\n    margin-top: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-xs-on-xl {\n    margin-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-sm-on-xl {\n    margin-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-md-on-xl {\n    margin-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-lg-on-xl {\n    margin-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-xl-on-xl {\n    margin-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-2xl-on-xl {\n    margin-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-3xl-on-xl {\n    margin-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mt-4xl-on-xl {\n    margin-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-auto-on-xl {\n    margin-right: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-0-on-xl {\n    margin-right: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-xs-on-xl {\n    margin-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-sm-on-xl {\n    margin-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-md-on-xl {\n    margin-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-lg-on-xl {\n    margin-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-xl-on-xl {\n    margin-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-2xl-on-xl {\n    margin-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-3xl-on-xl {\n    margin-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mr-4xl-on-xl {\n    margin-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-auto-on-xl {\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-0-on-xl {\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-xs-on-xl {\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-sm-on-xl {\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-md-on-xl {\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-lg-on-xl {\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-xl-on-xl {\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-2xl-on-xl {\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-3xl-on-xl {\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mb-4xl-on-xl {\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-auto-on-xl {\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-0-on-xl {\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-xs-on-xl {\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-sm-on-xl {\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-md-on-xl {\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-lg-on-xl {\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-xl-on-xl {\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-2xl-on-xl {\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-3xl-on-xl {\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-ml-4xl-on-xl {\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-auto-on-xl {\n    margin-right: auto !important;\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-0-on-xl {\n    margin-right: 0 !important;\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-xs-on-xl {\n    margin-right: var(--pf-global--spacer--xs) !important;\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-sm-on-xl {\n    margin-right: var(--pf-global--spacer--sm) !important;\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-md-on-xl {\n    margin-right: var(--pf-global--spacer--md) !important;\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-lg-on-xl {\n    margin-right: var(--pf-global--spacer--lg) !important;\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-xl-on-xl {\n    margin-right: var(--pf-global--spacer--xl) !important;\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-2xl-on-xl {\n    margin-right: var(--pf-global--spacer--2xl) !important;\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-3xl-on-xl {\n    margin-right: var(--pf-global--spacer--3xl) !important;\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-mx-4xl-on-xl {\n    margin-right: var(--pf-global--spacer--4xl) !important;\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-auto-on-xl {\n    margin-top: auto !important;\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-0-on-xl {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-xs-on-xl {\n    margin-top: var(--pf-global--spacer--xs) !important;\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-sm-on-xl {\n    margin-top: var(--pf-global--spacer--sm) !important;\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-md-on-xl {\n    margin-top: var(--pf-global--spacer--md) !important;\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-lg-on-xl {\n    margin-top: var(--pf-global--spacer--lg) !important;\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-xl-on-xl {\n    margin-top: var(--pf-global--spacer--xl) !important;\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-2xl-on-xl {\n    margin-top: var(--pf-global--spacer--2xl) !important;\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-3xl-on-xl {\n    margin-top: var(--pf-global--spacer--3xl) !important;\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-my-4xl-on-xl {\n    margin-top: var(--pf-global--spacer--4xl) !important;\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-auto-on-xl {\n    padding: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-0-on-xl {\n    padding: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-xs-on-xl {\n    padding: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-sm-on-xl {\n    padding: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-md-on-xl {\n    padding: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-lg-on-xl {\n    padding: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-xl-on-xl {\n    padding: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-2xl-on-xl {\n    padding: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-3xl-on-xl {\n    padding: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-p-4xl-on-xl {\n    padding: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-auto-on-xl {\n    padding-top: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-0-on-xl {\n    padding-top: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-xs-on-xl {\n    padding-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-sm-on-xl {\n    padding-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-md-on-xl {\n    padding-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-lg-on-xl {\n    padding-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-xl-on-xl {\n    padding-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-2xl-on-xl {\n    padding-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-3xl-on-xl {\n    padding-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pt-4xl-on-xl {\n    padding-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-auto-on-xl {\n    padding-right: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-0-on-xl {\n    padding-right: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-xs-on-xl {\n    padding-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-sm-on-xl {\n    padding-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-md-on-xl {\n    padding-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-lg-on-xl {\n    padding-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-xl-on-xl {\n    padding-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-2xl-on-xl {\n    padding-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-3xl-on-xl {\n    padding-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pr-4xl-on-xl {\n    padding-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-auto-on-xl {\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-0-on-xl {\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-xs-on-xl {\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-sm-on-xl {\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-md-on-xl {\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-lg-on-xl {\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-xl-on-xl {\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-2xl-on-xl {\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-3xl-on-xl {\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pb-4xl-on-xl {\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-auto-on-xl {\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-0-on-xl {\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-xs-on-xl {\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-sm-on-xl {\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-md-on-xl {\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-lg-on-xl {\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-xl-on-xl {\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-2xl-on-xl {\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-3xl-on-xl {\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-pl-4xl-on-xl {\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-auto-on-xl {\n    padding-right: auto !important;\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-0-on-xl {\n    padding-right: 0 !important;\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-xs-on-xl {\n    padding-right: var(--pf-global--spacer--xs) !important;\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-sm-on-xl {\n    padding-right: var(--pf-global--spacer--sm) !important;\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-md-on-xl {\n    padding-right: var(--pf-global--spacer--md) !important;\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-lg-on-xl {\n    padding-right: var(--pf-global--spacer--lg) !important;\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-xl-on-xl {\n    padding-right: var(--pf-global--spacer--xl) !important;\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-2xl-on-xl {\n    padding-right: var(--pf-global--spacer--2xl) !important;\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-3xl-on-xl {\n    padding-right: var(--pf-global--spacer--3xl) !important;\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-px-4xl-on-xl {\n    padding-right: var(--pf-global--spacer--4xl) !important;\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-auto-on-xl {\n    padding-top: auto !important;\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-0-on-xl {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-xs-on-xl {\n    padding-top: var(--pf-global--spacer--xs) !important;\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-sm-on-xl {\n    padding-top: var(--pf-global--spacer--sm) !important;\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-md-on-xl {\n    padding-top: var(--pf-global--spacer--md) !important;\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-lg-on-xl {\n    padding-top: var(--pf-global--spacer--lg) !important;\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-xl-on-xl {\n    padding-top: var(--pf-global--spacer--xl) !important;\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-2xl-on-xl {\n    padding-top: var(--pf-global--spacer--2xl) !important;\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-3xl-on-xl {\n    padding-top: var(--pf-global--spacer--3xl) !important;\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-py-4xl-on-xl {\n    padding-top: var(--pf-global--spacer--4xl) !important;\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-auto-on-2xl {\n    margin: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-0-on-2xl {\n    margin: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-xs-on-2xl {\n    margin: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-sm-on-2xl {\n    margin: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-md-on-2xl {\n    margin: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-lg-on-2xl {\n    margin: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-xl-on-2xl {\n    margin: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-2xl-on-2xl {\n    margin: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-3xl-on-2xl {\n    margin: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-m-4xl-on-2xl {\n    margin: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-auto-on-2xl {\n    margin-top: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-0-on-2xl {\n    margin-top: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-xs-on-2xl {\n    margin-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-sm-on-2xl {\n    margin-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-md-on-2xl {\n    margin-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-lg-on-2xl {\n    margin-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-xl-on-2xl {\n    margin-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-2xl-on-2xl {\n    margin-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-3xl-on-2xl {\n    margin-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mt-4xl-on-2xl {\n    margin-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-auto-on-2xl {\n    margin-right: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-0-on-2xl {\n    margin-right: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-xs-on-2xl {\n    margin-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-sm-on-2xl {\n    margin-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-md-on-2xl {\n    margin-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-lg-on-2xl {\n    margin-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-xl-on-2xl {\n    margin-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-2xl-on-2xl {\n    margin-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-3xl-on-2xl {\n    margin-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mr-4xl-on-2xl {\n    margin-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-auto-on-2xl {\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-0-on-2xl {\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-xs-on-2xl {\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-sm-on-2xl {\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-md-on-2xl {\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-lg-on-2xl {\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-xl-on-2xl {\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-2xl-on-2xl {\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-3xl-on-2xl {\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mb-4xl-on-2xl {\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-auto-on-2xl {\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-0-on-2xl {\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-xs-on-2xl {\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-sm-on-2xl {\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-md-on-2xl {\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-lg-on-2xl {\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-xl-on-2xl {\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-2xl-on-2xl {\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-3xl-on-2xl {\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-ml-4xl-on-2xl {\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-auto-on-2xl {\n    margin-right: auto !important;\n    margin-left: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-0-on-2xl {\n    margin-right: 0 !important;\n    margin-left: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-xs-on-2xl {\n    margin-right: var(--pf-global--spacer--xs) !important;\n    margin-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-sm-on-2xl {\n    margin-right: var(--pf-global--spacer--sm) !important;\n    margin-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-md-on-2xl {\n    margin-right: var(--pf-global--spacer--md) !important;\n    margin-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-lg-on-2xl {\n    margin-right: var(--pf-global--spacer--lg) !important;\n    margin-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-xl-on-2xl {\n    margin-right: var(--pf-global--spacer--xl) !important;\n    margin-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-2xl-on-2xl {\n    margin-right: var(--pf-global--spacer--2xl) !important;\n    margin-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-3xl-on-2xl {\n    margin-right: var(--pf-global--spacer--3xl) !important;\n    margin-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-mx-4xl-on-2xl {\n    margin-right: var(--pf-global--spacer--4xl) !important;\n    margin-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-auto-on-2xl {\n    margin-top: auto !important;\n    margin-bottom: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-0-on-2xl {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-xs-on-2xl {\n    margin-top: var(--pf-global--spacer--xs) !important;\n    margin-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-sm-on-2xl {\n    margin-top: var(--pf-global--spacer--sm) !important;\n    margin-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-md-on-2xl {\n    margin-top: var(--pf-global--spacer--md) !important;\n    margin-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-lg-on-2xl {\n    margin-top: var(--pf-global--spacer--lg) !important;\n    margin-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-xl-on-2xl {\n    margin-top: var(--pf-global--spacer--xl) !important;\n    margin-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-2xl-on-2xl {\n    margin-top: var(--pf-global--spacer--2xl) !important;\n    margin-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-3xl-on-2xl {\n    margin-top: var(--pf-global--spacer--3xl) !important;\n    margin-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-my-4xl-on-2xl {\n    margin-top: var(--pf-global--spacer--4xl) !important;\n    margin-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-auto-on-2xl {\n    padding: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-0-on-2xl {\n    padding: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-xs-on-2xl {\n    padding: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-sm-on-2xl {\n    padding: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-md-on-2xl {\n    padding: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-lg-on-2xl {\n    padding: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-xl-on-2xl {\n    padding: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-2xl-on-2xl {\n    padding: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-3xl-on-2xl {\n    padding: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-p-4xl-on-2xl {\n    padding: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-auto-on-2xl {\n    padding-top: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-0-on-2xl {\n    padding-top: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-xs-on-2xl {\n    padding-top: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-sm-on-2xl {\n    padding-top: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-md-on-2xl {\n    padding-top: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-lg-on-2xl {\n    padding-top: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-xl-on-2xl {\n    padding-top: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-2xl-on-2xl {\n    padding-top: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-3xl-on-2xl {\n    padding-top: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pt-4xl-on-2xl {\n    padding-top: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-auto-on-2xl {\n    padding-right: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-0-on-2xl {\n    padding-right: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-xs-on-2xl {\n    padding-right: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-sm-on-2xl {\n    padding-right: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-md-on-2xl {\n    padding-right: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-lg-on-2xl {\n    padding-right: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-xl-on-2xl {\n    padding-right: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-2xl-on-2xl {\n    padding-right: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-3xl-on-2xl {\n    padding-right: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pr-4xl-on-2xl {\n    padding-right: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-auto-on-2xl {\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-0-on-2xl {\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-xs-on-2xl {\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-sm-on-2xl {\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-md-on-2xl {\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-lg-on-2xl {\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-xl-on-2xl {\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-2xl-on-2xl {\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-3xl-on-2xl {\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pb-4xl-on-2xl {\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-auto-on-2xl {\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-0-on-2xl {\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-xs-on-2xl {\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-sm-on-2xl {\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-md-on-2xl {\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-lg-on-2xl {\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-xl-on-2xl {\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-2xl-on-2xl {\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-3xl-on-2xl {\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-pl-4xl-on-2xl {\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-auto-on-2xl {\n    padding-right: auto !important;\n    padding-left: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-0-on-2xl {\n    padding-right: 0 !important;\n    padding-left: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-xs-on-2xl {\n    padding-right: var(--pf-global--spacer--xs) !important;\n    padding-left: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-sm-on-2xl {\n    padding-right: var(--pf-global--spacer--sm) !important;\n    padding-left: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-md-on-2xl {\n    padding-right: var(--pf-global--spacer--md) !important;\n    padding-left: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-lg-on-2xl {\n    padding-right: var(--pf-global--spacer--lg) !important;\n    padding-left: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-xl-on-2xl {\n    padding-right: var(--pf-global--spacer--xl) !important;\n    padding-left: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-2xl-on-2xl {\n    padding-right: var(--pf-global--spacer--2xl) !important;\n    padding-left: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-3xl-on-2xl {\n    padding-right: var(--pf-global--spacer--3xl) !important;\n    padding-left: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-px-4xl-on-2xl {\n    padding-right: var(--pf-global--spacer--4xl) !important;\n    padding-left: var(--pf-global--spacer--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-auto-on-2xl {\n    padding-top: auto !important;\n    padding-bottom: auto !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-0-on-2xl {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-xs-on-2xl {\n    padding-top: var(--pf-global--spacer--xs) !important;\n    padding-bottom: var(--pf-global--spacer--xs) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-sm-on-2xl {\n    padding-top: var(--pf-global--spacer--sm) !important;\n    padding-bottom: var(--pf-global--spacer--sm) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-md-on-2xl {\n    padding-top: var(--pf-global--spacer--md) !important;\n    padding-bottom: var(--pf-global--spacer--md) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-lg-on-2xl {\n    padding-top: var(--pf-global--spacer--lg) !important;\n    padding-bottom: var(--pf-global--spacer--lg) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-xl-on-2xl {\n    padding-top: var(--pf-global--spacer--xl) !important;\n    padding-bottom: var(--pf-global--spacer--xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-2xl-on-2xl {\n    padding-top: var(--pf-global--spacer--2xl) !important;\n    padding-bottom: var(--pf-global--spacer--2xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-3xl-on-2xl {\n    padding-top: var(--pf-global--spacer--3xl) !important;\n    padding-bottom: var(--pf-global--spacer--3xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-py-4xl-on-2xl {\n    padding-top: var(--pf-global--spacer--4xl) !important;\n    padding-bottom: var(--pf-global--spacer--4xl) !important; } }\n\n.pf-u-font-size-xs {\n  font-size: var(--pf-global--FontSize--xs) !important; }\n\n.pf-u-font-size-sm {\n  font-size: var(--pf-global--FontSize--sm) !important; }\n\n.pf-u-font-size-md {\n  font-size: var(--pf-global--FontSize--md) !important; }\n\n.pf-u-font-size-lg {\n  font-size: var(--pf-global--FontSize--lg) !important; }\n\n.pf-u-font-size-xl {\n  font-size: var(--pf-global--FontSize--xl) !important; }\n\n.pf-u-font-size-2xl {\n  font-size: var(--pf-global--FontSize--2xl) !important; }\n\n.pf-u-font-size-3xl {\n  font-size: var(--pf-global--FontSize--3xl) !important; }\n\n.pf-u-font-size-4xl {\n  font-size: var(--pf-global--FontSize--4xl) !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-font-size-xs-on-sm {\n    font-size: var(--pf-global--FontSize--xs) !important; }\n  .pf-u-font-size-sm-on-sm {\n    font-size: var(--pf-global--FontSize--sm) !important; }\n  .pf-u-font-size-md-on-sm {\n    font-size: var(--pf-global--FontSize--md) !important; }\n  .pf-u-font-size-lg-on-sm {\n    font-size: var(--pf-global--FontSize--lg) !important; }\n  .pf-u-font-size-xl-on-sm {\n    font-size: var(--pf-global--FontSize--xl) !important; }\n  .pf-u-font-size-2xl-on-sm {\n    font-size: var(--pf-global--FontSize--2xl) !important; }\n  .pf-u-font-size-3xl-on-sm {\n    font-size: var(--pf-global--FontSize--3xl) !important; }\n  .pf-u-font-size-4xl-on-sm {\n    font-size: var(--pf-global--FontSize--4xl) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-font-size-xs-on-md {\n    font-size: var(--pf-global--FontSize--xs) !important; }\n  .pf-u-font-size-sm-on-md {\n    font-size: var(--pf-global--FontSize--sm) !important; }\n  .pf-u-font-size-md-on-md {\n    font-size: var(--pf-global--FontSize--md) !important; }\n  .pf-u-font-size-lg-on-md {\n    font-size: var(--pf-global--FontSize--lg) !important; }\n  .pf-u-font-size-xl-on-md {\n    font-size: var(--pf-global--FontSize--xl) !important; }\n  .pf-u-font-size-2xl-on-md {\n    font-size: var(--pf-global--FontSize--2xl) !important; }\n  .pf-u-font-size-3xl-on-md {\n    font-size: var(--pf-global--FontSize--3xl) !important; }\n  .pf-u-font-size-4xl-on-md {\n    font-size: var(--pf-global--FontSize--4xl) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-font-size-xs-on-lg {\n    font-size: var(--pf-global--FontSize--xs) !important; }\n  .pf-u-font-size-sm-on-lg {\n    font-size: var(--pf-global--FontSize--sm) !important; }\n  .pf-u-font-size-md-on-lg {\n    font-size: var(--pf-global--FontSize--md) !important; }\n  .pf-u-font-size-lg-on-lg {\n    font-size: var(--pf-global--FontSize--lg) !important; }\n  .pf-u-font-size-xl-on-lg {\n    font-size: var(--pf-global--FontSize--xl) !important; }\n  .pf-u-font-size-2xl-on-lg {\n    font-size: var(--pf-global--FontSize--2xl) !important; }\n  .pf-u-font-size-3xl-on-lg {\n    font-size: var(--pf-global--FontSize--3xl) !important; }\n  .pf-u-font-size-4xl-on-lg {\n    font-size: var(--pf-global--FontSize--4xl) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-font-size-xs-on-xl {\n    font-size: var(--pf-global--FontSize--xs) !important; }\n  .pf-u-font-size-sm-on-xl {\n    font-size: var(--pf-global--FontSize--sm) !important; }\n  .pf-u-font-size-md-on-xl {\n    font-size: var(--pf-global--FontSize--md) !important; }\n  .pf-u-font-size-lg-on-xl {\n    font-size: var(--pf-global--FontSize--lg) !important; }\n  .pf-u-font-size-xl-on-xl {\n    font-size: var(--pf-global--FontSize--xl) !important; }\n  .pf-u-font-size-2xl-on-xl {\n    font-size: var(--pf-global--FontSize--2xl) !important; }\n  .pf-u-font-size-3xl-on-xl {\n    font-size: var(--pf-global--FontSize--3xl) !important; }\n  .pf-u-font-size-4xl-on-xl {\n    font-size: var(--pf-global--FontSize--4xl) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-font-size-xs-on-2xl {\n    font-size: var(--pf-global--FontSize--xs) !important; }\n  .pf-u-font-size-sm-on-2xl {\n    font-size: var(--pf-global--FontSize--sm) !important; }\n  .pf-u-font-size-md-on-2xl {\n    font-size: var(--pf-global--FontSize--md) !important; }\n  .pf-u-font-size-lg-on-2xl {\n    font-size: var(--pf-global--FontSize--lg) !important; }\n  .pf-u-font-size-xl-on-2xl {\n    font-size: var(--pf-global--FontSize--xl) !important; }\n  .pf-u-font-size-2xl-on-2xl {\n    font-size: var(--pf-global--FontSize--2xl) !important; }\n  .pf-u-font-size-3xl-on-2xl {\n    font-size: var(--pf-global--FontSize--3xl) !important; }\n  .pf-u-font-size-4xl-on-2xl {\n    font-size: var(--pf-global--FontSize--4xl) !important; } }\n\n.pf-u-font-weight-light {\n  font-weight: var(--pf-global--FontWeight--light) !important; }\n\n.pf-u-font-weight-normal {\n  font-weight: var(--pf-global--FontWeight--normal) !important; }\n\n.pf-u-font-weight-bold {\n  font-weight: var(--pf-global--FontWeight--bold) !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-font-weight-light-on-sm {\n    font-weight: var(--pf-global--FontWeight--light) !important; }\n  .pf-u-font-weight-normal-on-sm {\n    font-weight: var(--pf-global--FontWeight--normal) !important; }\n  .pf-u-font-weight-bold-on-sm {\n    font-weight: var(--pf-global--FontWeight--bold) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-font-weight-light-on-md {\n    font-weight: var(--pf-global--FontWeight--light) !important; }\n  .pf-u-font-weight-normal-on-md {\n    font-weight: var(--pf-global--FontWeight--normal) !important; }\n  .pf-u-font-weight-bold-on-md {\n    font-weight: var(--pf-global--FontWeight--bold) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-font-weight-light-on-lg {\n    font-weight: var(--pf-global--FontWeight--light) !important; }\n  .pf-u-font-weight-normal-on-lg {\n    font-weight: var(--pf-global--FontWeight--normal) !important; }\n  .pf-u-font-weight-bold-on-lg {\n    font-weight: var(--pf-global--FontWeight--bold) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-font-weight-light-on-xl {\n    font-weight: var(--pf-global--FontWeight--light) !important; }\n  .pf-u-font-weight-normal-on-xl {\n    font-weight: var(--pf-global--FontWeight--normal) !important; }\n  .pf-u-font-weight-bold-on-xl {\n    font-weight: var(--pf-global--FontWeight--bold) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-font-weight-light-on-2xl {\n    font-weight: var(--pf-global--FontWeight--light) !important; }\n  .pf-u-font-weight-normal-on-2xl {\n    font-weight: var(--pf-global--FontWeight--normal) !important; }\n  .pf-u-font-weight-bold-on-2xl {\n    font-weight: var(--pf-global--FontWeight--bold) !important; } }\n\n.pf-u-color-100 {\n  color: var(--pf-global--Color--100) !important; }\n\n.pf-u-color-200 {\n  color: var(--pf-global--Color--200) !important; }\n\n.pf-u-color-300 {\n  color: var(--pf-global--Color--300) !important; }\n\n.pf-u-color-400 {\n  color: var(--pf-global--Color--400) !important; }\n\n.pf-u-icon-color-light {\n  color: var(--pf-global--icon--Color--light) !important; }\n\n.pf-u-icon-color-dark {\n  color: var(--pf-global--icon--Color--dark) !important; }\n\n.pf-u-link-color {\n  color: var(--pf-global--link--Color) !important; }\n\n.pf-u-active-color-100 {\n  color: var(--pf-global--active-color--100) !important; }\n\n.pf-u-active-color-200 {\n  color: var(--pf-global--active-color--200) !important; }\n\n.pf-u-active-color-300 {\n  color: var(--pf-global--active-color--300) !important; }\n\n.pf-u-active-color-400 {\n  color: var(--pf-global--active-color--400) !important; }\n\n.pf-u-disabled-color-100 {\n  color: var(--pf-global--disabled-color--100) !important; }\n\n.pf-u-disabled-color-200 {\n  color: var(--pf-global--disabled-color--200) !important; }\n\n.pf-u-disabled-color-300 {\n  color: var(--pf-global--disabled-color--300) !important; }\n\n.pf-u-primary-color-100 {\n  color: var(--pf-global--primary-color--100) !important; }\n\n.pf-u-primary-color-200 {\n  color: var(--pf-global--primary-color--200) !important; }\n\n.pf-u-secondary-color-100 {\n  color: var(--pf-global--secondary-color--100) !important; }\n\n.pf-u-default-color-100 {\n  color: var(--pf-global--default-color--100) !important; }\n\n.pf-u-default-color-200 {\n  color: var(--pf-global--default-color--200) !important; }\n\n.pf-u-default-color-300 {\n  color: var(--pf-global--default-color--300) !important; }\n\n.pf-u-success-color-100 {\n  color: var(--pf-global--success-color--100) !important; }\n\n.pf-u-success-color-200 {\n  color: var(--pf-global--success-color--200) !important; }\n\n.pf-u-info-color-100 {\n  color: var(--pf-global--info-color--100) !important; }\n\n.pf-u-info-color-200 {\n  color: var(--pf-global--info-color--200) !important; }\n\n.pf-u-warning-color-100 {\n  color: var(--pf-global--warning-color--100) !important; }\n\n.pf-u-warning-color-200 {\n  color: var(--pf-global--warning-color--200) !important; }\n\n.pf-u-danger-color-100 {\n  color: var(--pf-global--danger-color--100) !important; }\n\n.pf-u-danger-color-200 {\n  color: var(--pf-global--danger-color--200) !important; }\n\n.pf-u-danger-color-300 {\n  color: var(--pf-global--danger-color--300) !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-color-100-on-sm {\n    color: var(--pf-global--Color--100) !important; }\n  .pf-u-color-200-on-sm {\n    color: var(--pf-global--Color--200) !important; }\n  .pf-u-color-300-on-sm {\n    color: var(--pf-global--Color--300) !important; }\n  .pf-u-color-400-on-sm {\n    color: var(--pf-global--Color--400) !important; }\n  .pf-u-icon-color-light-on-sm {\n    color: var(--pf-global--icon--Color--light) !important; }\n  .pf-u-icon-color-dark-on-sm {\n    color: var(--pf-global--icon--Color--dark) !important; }\n  .pf-u-link-color-on-sm {\n    color: var(--pf-global--link--Color) !important; }\n  .pf-u-active-color-100-on-sm {\n    color: var(--pf-global--active-color--100) !important; }\n  .pf-u-active-color-200-on-sm {\n    color: var(--pf-global--active-color--200) !important; }\n  .pf-u-active-color-300-on-sm {\n    color: var(--pf-global--active-color--300) !important; }\n  .pf-u-active-color-400-on-sm {\n    color: var(--pf-global--active-color--400) !important; }\n  .pf-u-disabled-color-100-on-sm {\n    color: var(--pf-global--disabled-color--100) !important; }\n  .pf-u-disabled-color-200-on-sm {\n    color: var(--pf-global--disabled-color--200) !important; }\n  .pf-u-disabled-color-300-on-sm {\n    color: var(--pf-global--disabled-color--300) !important; }\n  .pf-u-primary-color-100-on-sm {\n    color: var(--pf-global--primary-color--100) !important; }\n  .pf-u-primary-color-200-on-sm {\n    color: var(--pf-global--primary-color--200) !important; }\n  .pf-u-secondary-color-100-on-sm {\n    color: var(--pf-global--secondary-color--100) !important; }\n  .pf-u-default-color-100-on-sm {\n    color: var(--pf-global--default-color--100) !important; }\n  .pf-u-default-color-200-on-sm {\n    color: var(--pf-global--default-color--200) !important; }\n  .pf-u-default-color-300-on-sm {\n    color: var(--pf-global--default-color--300) !important; }\n  .pf-u-success-color-100-on-sm {\n    color: var(--pf-global--success-color--100) !important; }\n  .pf-u-success-color-200-on-sm {\n    color: var(--pf-global--success-color--200) !important; }\n  .pf-u-info-color-100-on-sm {\n    color: var(--pf-global--info-color--100) !important; }\n  .pf-u-info-color-200-on-sm {\n    color: var(--pf-global--info-color--200) !important; }\n  .pf-u-warning-color-100-on-sm {\n    color: var(--pf-global--warning-color--100) !important; }\n  .pf-u-warning-color-200-on-sm {\n    color: var(--pf-global--warning-color--200) !important; }\n  .pf-u-danger-color-100-on-sm {\n    color: var(--pf-global--danger-color--100) !important; }\n  .pf-u-danger-color-200-on-sm {\n    color: var(--pf-global--danger-color--200) !important; }\n  .pf-u-danger-color-300-on-sm {\n    color: var(--pf-global--danger-color--300) !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-color-100-on-md {\n    color: var(--pf-global--Color--100) !important; }\n  .pf-u-color-200-on-md {\n    color: var(--pf-global--Color--200) !important; }\n  .pf-u-color-300-on-md {\n    color: var(--pf-global--Color--300) !important; }\n  .pf-u-color-400-on-md {\n    color: var(--pf-global--Color--400) !important; }\n  .pf-u-icon-color-light-on-md {\n    color: var(--pf-global--icon--Color--light) !important; }\n  .pf-u-icon-color-dark-on-md {\n    color: var(--pf-global--icon--Color--dark) !important; }\n  .pf-u-link-color-on-md {\n    color: var(--pf-global--link--Color) !important; }\n  .pf-u-active-color-100-on-md {\n    color: var(--pf-global--active-color--100) !important; }\n  .pf-u-active-color-200-on-md {\n    color: var(--pf-global--active-color--200) !important; }\n  .pf-u-active-color-300-on-md {\n    color: var(--pf-global--active-color--300) !important; }\n  .pf-u-active-color-400-on-md {\n    color: var(--pf-global--active-color--400) !important; }\n  .pf-u-disabled-color-100-on-md {\n    color: var(--pf-global--disabled-color--100) !important; }\n  .pf-u-disabled-color-200-on-md {\n    color: var(--pf-global--disabled-color--200) !important; }\n  .pf-u-disabled-color-300-on-md {\n    color: var(--pf-global--disabled-color--300) !important; }\n  .pf-u-primary-color-100-on-md {\n    color: var(--pf-global--primary-color--100) !important; }\n  .pf-u-primary-color-200-on-md {\n    color: var(--pf-global--primary-color--200) !important; }\n  .pf-u-secondary-color-100-on-md {\n    color: var(--pf-global--secondary-color--100) !important; }\n  .pf-u-default-color-100-on-md {\n    color: var(--pf-global--default-color--100) !important; }\n  .pf-u-default-color-200-on-md {\n    color: var(--pf-global--default-color--200) !important; }\n  .pf-u-default-color-300-on-md {\n    color: var(--pf-global--default-color--300) !important; }\n  .pf-u-success-color-100-on-md {\n    color: var(--pf-global--success-color--100) !important; }\n  .pf-u-success-color-200-on-md {\n    color: var(--pf-global--success-color--200) !important; }\n  .pf-u-info-color-100-on-md {\n    color: var(--pf-global--info-color--100) !important; }\n  .pf-u-info-color-200-on-md {\n    color: var(--pf-global--info-color--200) !important; }\n  .pf-u-warning-color-100-on-md {\n    color: var(--pf-global--warning-color--100) !important; }\n  .pf-u-warning-color-200-on-md {\n    color: var(--pf-global--warning-color--200) !important; }\n  .pf-u-danger-color-100-on-md {\n    color: var(--pf-global--danger-color--100) !important; }\n  .pf-u-danger-color-200-on-md {\n    color: var(--pf-global--danger-color--200) !important; }\n  .pf-u-danger-color-300-on-md {\n    color: var(--pf-global--danger-color--300) !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-color-100-on-lg {\n    color: var(--pf-global--Color--100) !important; }\n  .pf-u-color-200-on-lg {\n    color: var(--pf-global--Color--200) !important; }\n  .pf-u-color-300-on-lg {\n    color: var(--pf-global--Color--300) !important; }\n  .pf-u-color-400-on-lg {\n    color: var(--pf-global--Color--400) !important; }\n  .pf-u-icon-color-light-on-lg {\n    color: var(--pf-global--icon--Color--light) !important; }\n  .pf-u-icon-color-dark-on-lg {\n    color: var(--pf-global--icon--Color--dark) !important; }\n  .pf-u-link-color-on-lg {\n    color: var(--pf-global--link--Color) !important; }\n  .pf-u-active-color-100-on-lg {\n    color: var(--pf-global--active-color--100) !important; }\n  .pf-u-active-color-200-on-lg {\n    color: var(--pf-global--active-color--200) !important; }\n  .pf-u-active-color-300-on-lg {\n    color: var(--pf-global--active-color--300) !important; }\n  .pf-u-active-color-400-on-lg {\n    color: var(--pf-global--active-color--400) !important; }\n  .pf-u-disabled-color-100-on-lg {\n    color: var(--pf-global--disabled-color--100) !important; }\n  .pf-u-disabled-color-200-on-lg {\n    color: var(--pf-global--disabled-color--200) !important; }\n  .pf-u-disabled-color-300-on-lg {\n    color: var(--pf-global--disabled-color--300) !important; }\n  .pf-u-primary-color-100-on-lg {\n    color: var(--pf-global--primary-color--100) !important; }\n  .pf-u-primary-color-200-on-lg {\n    color: var(--pf-global--primary-color--200) !important; }\n  .pf-u-secondary-color-100-on-lg {\n    color: var(--pf-global--secondary-color--100) !important; }\n  .pf-u-default-color-100-on-lg {\n    color: var(--pf-global--default-color--100) !important; }\n  .pf-u-default-color-200-on-lg {\n    color: var(--pf-global--default-color--200) !important; }\n  .pf-u-default-color-300-on-lg {\n    color: var(--pf-global--default-color--300) !important; }\n  .pf-u-success-color-100-on-lg {\n    color: var(--pf-global--success-color--100) !important; }\n  .pf-u-success-color-200-on-lg {\n    color: var(--pf-global--success-color--200) !important; }\n  .pf-u-info-color-100-on-lg {\n    color: var(--pf-global--info-color--100) !important; }\n  .pf-u-info-color-200-on-lg {\n    color: var(--pf-global--info-color--200) !important; }\n  .pf-u-warning-color-100-on-lg {\n    color: var(--pf-global--warning-color--100) !important; }\n  .pf-u-warning-color-200-on-lg {\n    color: var(--pf-global--warning-color--200) !important; }\n  .pf-u-danger-color-100-on-lg {\n    color: var(--pf-global--danger-color--100) !important; }\n  .pf-u-danger-color-200-on-lg {\n    color: var(--pf-global--danger-color--200) !important; }\n  .pf-u-danger-color-300-on-lg {\n    color: var(--pf-global--danger-color--300) !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-color-100-on-xl {\n    color: var(--pf-global--Color--100) !important; }\n  .pf-u-color-200-on-xl {\n    color: var(--pf-global--Color--200) !important; }\n  .pf-u-color-300-on-xl {\n    color: var(--pf-global--Color--300) !important; }\n  .pf-u-color-400-on-xl {\n    color: var(--pf-global--Color--400) !important; }\n  .pf-u-icon-color-light-on-xl {\n    color: var(--pf-global--icon--Color--light) !important; }\n  .pf-u-icon-color-dark-on-xl {\n    color: var(--pf-global--icon--Color--dark) !important; }\n  .pf-u-link-color-on-xl {\n    color: var(--pf-global--link--Color) !important; }\n  .pf-u-active-color-100-on-xl {\n    color: var(--pf-global--active-color--100) !important; }\n  .pf-u-active-color-200-on-xl {\n    color: var(--pf-global--active-color--200) !important; }\n  .pf-u-active-color-300-on-xl {\n    color: var(--pf-global--active-color--300) !important; }\n  .pf-u-active-color-400-on-xl {\n    color: var(--pf-global--active-color--400) !important; }\n  .pf-u-disabled-color-100-on-xl {\n    color: var(--pf-global--disabled-color--100) !important; }\n  .pf-u-disabled-color-200-on-xl {\n    color: var(--pf-global--disabled-color--200) !important; }\n  .pf-u-disabled-color-300-on-xl {\n    color: var(--pf-global--disabled-color--300) !important; }\n  .pf-u-primary-color-100-on-xl {\n    color: var(--pf-global--primary-color--100) !important; }\n  .pf-u-primary-color-200-on-xl {\n    color: var(--pf-global--primary-color--200) !important; }\n  .pf-u-secondary-color-100-on-xl {\n    color: var(--pf-global--secondary-color--100) !important; }\n  .pf-u-default-color-100-on-xl {\n    color: var(--pf-global--default-color--100) !important; }\n  .pf-u-default-color-200-on-xl {\n    color: var(--pf-global--default-color--200) !important; }\n  .pf-u-default-color-300-on-xl {\n    color: var(--pf-global--default-color--300) !important; }\n  .pf-u-success-color-100-on-xl {\n    color: var(--pf-global--success-color--100) !important; }\n  .pf-u-success-color-200-on-xl {\n    color: var(--pf-global--success-color--200) !important; }\n  .pf-u-info-color-100-on-xl {\n    color: var(--pf-global--info-color--100) !important; }\n  .pf-u-info-color-200-on-xl {\n    color: var(--pf-global--info-color--200) !important; }\n  .pf-u-warning-color-100-on-xl {\n    color: var(--pf-global--warning-color--100) !important; }\n  .pf-u-warning-color-200-on-xl {\n    color: var(--pf-global--warning-color--200) !important; }\n  .pf-u-danger-color-100-on-xl {\n    color: var(--pf-global--danger-color--100) !important; }\n  .pf-u-danger-color-200-on-xl {\n    color: var(--pf-global--danger-color--200) !important; }\n  .pf-u-danger-color-300-on-xl {\n    color: var(--pf-global--danger-color--300) !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-color-100-on-2xl {\n    color: var(--pf-global--Color--100) !important; }\n  .pf-u-color-200-on-2xl {\n    color: var(--pf-global--Color--200) !important; }\n  .pf-u-color-300-on-2xl {\n    color: var(--pf-global--Color--300) !important; }\n  .pf-u-color-400-on-2xl {\n    color: var(--pf-global--Color--400) !important; }\n  .pf-u-icon-color-light-on-2xl {\n    color: var(--pf-global--icon--Color--light) !important; }\n  .pf-u-icon-color-dark-on-2xl {\n    color: var(--pf-global--icon--Color--dark) !important; }\n  .pf-u-link-color-on-2xl {\n    color: var(--pf-global--link--Color) !important; }\n  .pf-u-active-color-100-on-2xl {\n    color: var(--pf-global--active-color--100) !important; }\n  .pf-u-active-color-200-on-2xl {\n    color: var(--pf-global--active-color--200) !important; }\n  .pf-u-active-color-300-on-2xl {\n    color: var(--pf-global--active-color--300) !important; }\n  .pf-u-active-color-400-on-2xl {\n    color: var(--pf-global--active-color--400) !important; }\n  .pf-u-disabled-color-100-on-2xl {\n    color: var(--pf-global--disabled-color--100) !important; }\n  .pf-u-disabled-color-200-on-2xl {\n    color: var(--pf-global--disabled-color--200) !important; }\n  .pf-u-disabled-color-300-on-2xl {\n    color: var(--pf-global--disabled-color--300) !important; }\n  .pf-u-primary-color-100-on-2xl {\n    color: var(--pf-global--primary-color--100) !important; }\n  .pf-u-primary-color-200-on-2xl {\n    color: var(--pf-global--primary-color--200) !important; }\n  .pf-u-secondary-color-100-on-2xl {\n    color: var(--pf-global--secondary-color--100) !important; }\n  .pf-u-default-color-100-on-2xl {\n    color: var(--pf-global--default-color--100) !important; }\n  .pf-u-default-color-200-on-2xl {\n    color: var(--pf-global--default-color--200) !important; }\n  .pf-u-default-color-300-on-2xl {\n    color: var(--pf-global--default-color--300) !important; }\n  .pf-u-success-color-100-on-2xl {\n    color: var(--pf-global--success-color--100) !important; }\n  .pf-u-success-color-200-on-2xl {\n    color: var(--pf-global--success-color--200) !important; }\n  .pf-u-info-color-100-on-2xl {\n    color: var(--pf-global--info-color--100) !important; }\n  .pf-u-info-color-200-on-2xl {\n    color: var(--pf-global--info-color--200) !important; }\n  .pf-u-warning-color-100-on-2xl {\n    color: var(--pf-global--warning-color--100) !important; }\n  .pf-u-warning-color-200-on-2xl {\n    color: var(--pf-global--warning-color--200) !important; }\n  .pf-u-danger-color-100-on-2xl {\n    color: var(--pf-global--danger-color--100) !important; }\n  .pf-u-danger-color-200-on-2xl {\n    color: var(--pf-global--danger-color--200) !important; }\n  .pf-u-danger-color-300-on-2xl {\n    color: var(--pf-global--danger-color--300) !important; } }\n\n.pf-u-text-break-word {\n  word-break: break-word !important; }\n\n.pf-u-text-nowrap {\n  white-space: nowrap !important; }\n\n.pf-u-text-wrap {\n  white-space: normal !important; }\n\n@media screen and (min-width: 576px) {\n  .pf-u-text-break-word-on-sm {\n    word-break: break-word !important; }\n  .pf-u-text-nowrap-on-sm {\n    white-space: nowrap !important; }\n  .pf-u-text-wrap-on-sm {\n    white-space: normal !important; } }\n\n@media screen and (min-width: 768px) {\n  .pf-u-text-break-word-on-md {\n    word-break: break-word !important; }\n  .pf-u-text-nowrap-on-md {\n    white-space: nowrap !important; }\n  .pf-u-text-wrap-on-md {\n    white-space: normal !important; } }\n\n@media screen and (min-width: 992px) {\n  .pf-u-text-break-word-on-lg {\n    word-break: break-word !important; }\n  .pf-u-text-nowrap-on-lg {\n    white-space: nowrap !important; }\n  .pf-u-text-wrap-on-lg {\n    white-space: normal !important; } }\n\n@media screen and (min-width: 1200px) {\n  .pf-u-text-break-word-on-xl {\n    word-break: break-word !important; }\n  .pf-u-text-nowrap-on-xl {\n    white-space: nowrap !important; }\n  .pf-u-text-wrap-on-xl {\n    white-space: normal !important; } }\n\n@media screen and (min-width: 1450px) {\n  .pf-u-text-break-word-on-2xl {\n    word-break: break-word !important; }\n  .pf-u-text-nowrap-on-2xl {\n    white-space: nowrap !important; }\n  .pf-u-text-wrap-on-2xl {\n    white-space: normal !important; } }\n\n.pf-u-text-truncate {\n  min-width: 0 !important;\n  max-width: 100% !important;\n  overflow: hidden !important;\n  text-overflow: ellipsis !important;\n  white-space: nowrap !important; }\n");const On=new CSSStyleSheet;On.replaceSync('@font-face {\n    font-family: "DIN 1451 Std";\n    src: url("fonts/DINEngschriftStd.woff2") format("woff2"),\n        url("fonts/DINEngschriftStd.woff") format("woff");\n    font-weight: normal;\n    font-style: normal;\n    font-display: swap;\n}\n\nhtml {\n    --pf-c-nav__link--PaddingTop: 0.5rem;\n    --pf-c-nav__link--PaddingRight: 0.5rem;\n    --pf-c-nav__link--PaddingBottom: 0.5rem;\n    --pf-c-nav__link--PaddingLeft: 0.5rem;\n}\n\n.pb-brand {\n    font-family: "DIN 1451 Std";\n    font-size: 4em;\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    margin-right: 0.5em;\n    color: var(--pf-global--Color--light-200);\n}\n\n.pb-brand > a:hover {\n    text-decoration: none;\n}\n\n.pb-brand > img {\n    max-height: 68px;\n    margin-right: 0.5em;\n}\n\n.pf-c-background-image::before {\n    background-image: url("./flow_background.jpg");\n    background-position: center;\n}\n\n/* Fix patternfly sidebar and header with open Modal */\n.pf-c-page__sidebar {\n    z-index: 0;\n}\n\n.pf-c-page__header {\n    z-index: 0;\n}\n\n/* Ensure card is displayed on small screens */\n.pf-c-login__main {\n    display: block;\n}\n\n/* login page\'s icons */\n.pf-c-login__main-footer-links-item-link img {\n    fill: var(--pf-c-login__main-footer-links-item-link-svg--Fill);\n    width: 100%;\n    max-width: var(--pf-c-login__main-footer-links-item-link-svg--Width);\n    height: 100%;\n    max-height: var(--pf-c-login__main-footer-links-item-link-svg--Height);\n}\n\n.pf-m-success {\n    color: var(--pf-global--success-color--100);\n}\n.pf-m-warning {\n    color: var(--pf-global--warning-color--100);\n}\n.pf-m-danger {\n    color: var(--pf-global--danger-color--100);\n}\n\n/* fix multiple selects height */\nselect[multiple] {\n    height: initial;\n}\n\n/* Selector */\n.selector {\n    display: flex;\n    width: 100%;\n    height: 45vh;\n}\n\n.selector .selector-filter {\n    display: flex;\n    align-items: center;\n}\n\n.selector .selector-filter label {\n    margin: 0 8px 0 0;\n}\n\n.selector .selector-filter input {\n    width: auto;\n    min-height: 0;\n    flex: 1 1;\n}\n\n.selector-available,\n.selector-chosen {\n    width: auto;\n    flex: 1 1;\n    display: flex;\n    flex-direction: column;\n}\n\n.selector select {\n    width: 100%;\n    flex: 1 0 auto;\n    margin-bottom: 5px;\n}\n\n.selector ul.selector-chooser {\n    width: 26px;\n    height: 52px;\n    padding: 2px 0;\n    margin: auto 15px;\n    border-radius: 20px;\n    transform: translateY(-10px);\n    list-style: none;\n}\n\n.selector-add,\n.selector-remove {\n    width: 20px;\n    height: 20px;\n    background-size: 20px auto;\n}\n\n.selector-add {\n    background-position: 0 -120px;\n}\n\n.selector-remove {\n    background-position: 0 -80px;\n}\n\na.selector-chooseall,\na.selector-clearall {\n    align-self: center;\n}\n\n.stacked {\n    flex-direction: column;\n    max-width: 480px;\n}\n\n.stacked > * {\n    flex: 0 1 auto;\n}\n\n.stacked select {\n    margin-bottom: 0;\n}\n\n.stacked .selector-available,\n.stacked .selector-chosen {\n    width: auto;\n}\n\n.stacked ul.selector-chooser {\n    width: 52px;\n    height: 26px;\n    padding: 0 2px;\n    margin: 15px auto;\n    transform: none;\n}\n\n.stacked .selector-chooser li {\n    padding: 3px;\n}\n\n.stacked .selector-add,\n.stacked .selector-remove {\n    background-size: 20px auto;\n}\n\n.stacked .selector-add {\n    background-position: 0 -40px;\n}\n\n.stacked .active.selector-add {\n    background-position: 0 -60px;\n}\n\n.stacked .selector-remove {\n    background-position: 0 0;\n}\n\n.stacked .active.selector-remove {\n    background-position: 0 -20px;\n}\n\n.help-tooltip,\n.selector .help-icon {\n    display: none;\n}\n\nform .form-row p.datetime {\n    width: 100%;\n}\n\n.datetime input {\n    width: 50%;\n    max-width: 120px;\n}\n\n.datetime span {\n    font-size: 13px;\n}\n\n.datetime .timezonewarning {\n    display: block;\n    font-size: 11px;\n    color: #999;\n}\n\n.datetimeshortcuts {\n    color: #ccc;\n}\n\n.inline-group {\n    overflow: auto;\n}\n\n.selector-add,\n.selector-remove {\n    width: 16px;\n    height: 16px;\n    display: block;\n    text-indent: -3000px;\n    overflow: hidden;\n    cursor: default;\n    opacity: 0.3;\n}\n\n.active.selector-add,\n.active.selector-remove {\n    opacity: 1;\n}\n\n.active.selector-add:hover,\n.active.selector-remove:hover {\n    cursor: pointer;\n}\n\n.selector-add {\n    background: url(../admin/img/selector-icons.svg) 0 -96px no-repeat;\n}\n\n.active.selector-add:focus,\n.active.selector-add:hover {\n    background-position: 0 -112px;\n}\n\n.selector-remove {\n    background: url(../admin/img/selector-icons.svg) 0 -64px no-repeat;\n}\n\ninput[data-is-monospace] {\n    font-family: monospace;\n}\n\n/* Form with user */\n.form-control-static {\n    margin-top: var(--pf-global--spacer--sm);\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n}\n.form-control-static .left {\n    display: flex;\n    align-items: center;\n}\n.form-control-static img {\n    margin-right: var(--pf-global--spacer--xs);\n}\n.form-control-static a {\n    padding-top: var(--pf-global--spacer--xs);\n    padding-bottom: var(--pf-global--spacer--xs);\n    line-height: var(--pf-global--spacer--xl);\n}\n\n/* Static OTP Tokens, passbook.stages.otp_static */\n.pb-otp-tokens {\n    list-style: circle;\n    columns: 2;\n    -webkit-columns: 2;\n    -moz-columns: 2;\n    margin-left: var(--pf-global--spacer--xs);\n}\n.pb-otp-tokens li {\n    font-size: var(--pf-global--FontSize--2xl);\n    font-family: monospace;\n}\n\n/* Fix pre elements within alerts */\n.pf-c-alert pre {\n    white-space: pre-wrap;\n}\n\n/* Aggregate Cards */\n.pb-aggregate-card {\n    font-size: var(--pf-global--icon--FontSize--lg);\n    text-align: center;\n}\n');const An=[{url:new RegExp("^overview$"),element:A`<pb-site-shell url="/overview/"><div slot="body"></div></pb-site-shell>`}];let In=class extends tn{constructor(){super(),window.addEventListener("hashchange",(n=>this.navigate()))}static get styles(){return[Fn,Dn,On]}firstUpdated(){this.navigate()}navigate(){let n=window.location.hash.slice(1,1/0);""===n&&(n=this.defaultUrl),An.forEach((e=>{let t=null;e.url.exec(n)&&(t=e),t||(console.log(`passbook/router: route "${n}" not defined, defaulting to shell`),t={url:RegExp(""),element:A`<pb-site-shell url="${n}"><div slot="body"></div></pb-site-shell>`}),this.activeRoute=t}))}render(){var n;return null===(n=this.activeRoute)||void 0===n?void 0:n.element}};n([$()],In.prototype,"activeRoute",void 0),n([$()],In.prototype,"defaultUrl",void 0),In=n([X("pb-router-outlet")],In);var Hn=xn((function(n,e){n.exports=function(){var e,t;function o(){return e.apply(null,arguments)}function a(n){e=n}function r(n){return n instanceof Array||"[object Array]"===Object.prototype.toString.call(n)}function i(n){return null!=n&&"[object Object]"===Object.prototype.toString.call(n)}function l(n,e){return Object.prototype.hasOwnProperty.call(n,e)}function f(n){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(n).length;var e;for(e in n)if(l(n,e))return!1;return!0}function p(n){return void 0===n}function c(n){return"number"==typeof n||"[object Number]"===Object.prototype.toString.call(n)}function d(n){return n instanceof Date||"[object Date]"===Object.prototype.toString.call(n)}function s(n,e){var t,o=[];for(t=0;t<n.length;++t)o.push(e(n[t],t));return o}function m(n,e){for(var t in e)l(e,t)&&(n[t]=e[t]);return l(e,"toString")&&(n.toString=e.toString),l(e,"valueOf")&&(n.valueOf=e.valueOf),n}function g(n,e,t,o){return Xt(n,e,t,o,!0).utc()}function b(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function u(n){return null==n._pf&&(n._pf=b()),n._pf}function _(n){if(null==n._isValid){var e=u(n),o=t.call(e.parsedDateParts,(function(n){return null!=n})),a=!isNaN(n._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidEra&&!e.invalidMonth&&!e.invalidWeekday&&!e.weekdayMismatch&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&o);if(n._strict&&(a=a&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(n))return a;n._isValid=a}return n._isValid}function h(n){var e=g(NaN);return null!=n?m(u(e),n):u(e).userInvalidated=!0,e}t=Array.prototype.some?Array.prototype.some:function(n){var e,t=Object(this),o=t.length>>>0;for(e=0;e<o;e++)if(e in t&&n.call(this,t[e],e,t))return!0;return!1};var v=o.momentProperties=[],x=!1;function w(n,e){var t,o,a;if(p(e._isAMomentObject)||(n._isAMomentObject=e._isAMomentObject),p(e._i)||(n._i=e._i),p(e._f)||(n._f=e._f),p(e._l)||(n._l=e._l),p(e._strict)||(n._strict=e._strict),p(e._tzm)||(n._tzm=e._tzm),p(e._isUTC)||(n._isUTC=e._isUTC),p(e._offset)||(n._offset=e._offset),p(e._pf)||(n._pf=u(e)),p(e._locale)||(n._locale=e._locale),v.length>0)for(t=0;t<v.length;t++)p(a=e[o=v[t]])||(n[o]=a);return n}function y(n){w(this,n),this._d=new Date(null!=n._d?n._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===x&&(x=!0,o.updateOffset(this),x=!1)}function k(n){return n instanceof y||null!=n&&null!=n._isAMomentObject}function C(n){!1===o.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+n)}function B(n,e){var t=!0;return m((function(){if(null!=o.deprecationHandler&&o.deprecationHandler(null,n),t){var a,r,i,f=[];for(r=0;r<arguments.length;r++){if(a="","object"==typeof arguments[r]){for(i in a+="\n["+r+"] ",arguments[0])l(arguments[0],i)&&(a+=i+": "+arguments[0][i]+", ");a=a.slice(0,-2)}else a=arguments[r];f.push(a)}C(n+"\nArguments: "+Array.prototype.slice.call(f).join("")+"\n"+(new Error).stack),t=!1}return e.apply(this,arguments)}),e)}var P,S={};function T(n,e){null!=o.deprecationHandler&&o.deprecationHandler(n,e),S[n]||(C(e),S[n]=!0)}function M(n){return"undefined"!=typeof Function&&n instanceof Function||"[object Function]"===Object.prototype.toString.call(n)}function L(n){var e,t;for(t in n)l(n,t)&&(M(e=n[t])?this[t]=e:this["_"+t]=e);this._config=n,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function z(n,e){var t,o=m({},n);for(t in e)l(e,t)&&(i(n[t])&&i(e[t])?(o[t]={},m(o[t],n[t]),m(o[t],e[t])):null!=e[t]?o[t]=e[t]:delete o[t]);for(t in n)l(n,t)&&!l(e,t)&&i(n[t])&&(o[t]=m({},o[t]));return o}function W(n){null!=n&&this.set(n)}o.suppressDeprecationWarnings=!1,o.deprecationHandler=null,P=Object.keys?Object.keys:function(n){var e,t=[];for(e in n)l(n,e)&&t.push(e);return t};var R={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function F(n,e,t){var o=this._calendar[n]||this._calendar.sameElse;return M(o)?o.call(e,t):o}function D(n,e,t){var o=""+Math.abs(n),a=e-o.length;return(n>=0?t?"+":"":"-")+Math.pow(10,Math.max(0,a)).toString().substr(1)+o}var O=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,A=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,I={},H={};function N(n,e,t,o){var a=o;"string"==typeof o&&(a=function(){return this[o]()}),n&&(H[n]=a),e&&(H[e[0]]=function(){return D(a.apply(this,arguments),e[1],e[2])}),t&&(H[t]=function(){return this.localeData().ordinal(a.apply(this,arguments),n)})}function E(n){return n.match(/\[[\s\S]/)?n.replace(/^\[|\]$/g,""):n.replace(/\\/g,"")}function j(n){var e,t,o=n.match(O);for(e=0,t=o.length;e<t;e++)H[o[e]]?o[e]=H[o[e]]:o[e]=E(o[e]);return function(e){var a,r="";for(a=0;a<t;a++)r+=M(o[a])?o[a].call(e,n):o[a];return r}}function G(n,e){return n.isValid()?(e=Y(e,n.localeData()),I[e]=I[e]||j(e),I[e](n)):n.localeData().invalidDate()}function Y(n,e){var t=5;function o(n){return e.longDateFormat(n)||n}for(A.lastIndex=0;t>=0&&A.test(n);)n=n.replace(A,o),A.lastIndex=0,t-=1;return n}var V={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function q(n){var e=this._longDateFormat[n],t=this._longDateFormat[n.toUpperCase()];return e||!t?e:(this._longDateFormat[n]=t.match(O).map((function(n){return"MMMM"===n||"MM"===n||"DD"===n||"dddd"===n?n.slice(1):n})).join(""),this._longDateFormat[n])}var U="Invalid date";function X(){return this._invalidDate}var Z="%d",$=/\d{1,2}/;function K(n){return this._ordinal.replace("%d",n)}var J={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function Q(n,e,t,o){var a=this._relativeTime[t];return M(a)?a(n,e,t,o):a.replace(/%d/i,n)}function nn(n,e){var t=this._relativeTime[n>0?"future":"past"];return M(t)?t(e):t.replace(/%s/i,e)}var en={};function tn(n,e){var t=n.toLowerCase();en[t]=en[t+"s"]=en[e]=n}function on(n){return"string"==typeof n?en[n]||en[n.toLowerCase()]:void 0}function an(n){var e,t,o={};for(t in n)l(n,t)&&(e=on(t))&&(o[e]=n[t]);return o}var rn={};function ln(n,e){rn[n]=e}function fn(n){var e,t=[];for(e in n)l(n,e)&&t.push({unit:e,priority:rn[e]});return t.sort((function(n,e){return n.priority-e.priority})),t}function pn(n){return n%4==0&&n%100!=0||n%400==0}function cn(n){return n<0?Math.ceil(n)||0:Math.floor(n)}function dn(n){var e=+n,t=0;return 0!==e&&isFinite(e)&&(t=cn(e)),t}function sn(n,e){return function(t){return null!=t?(gn(this,n,t),o.updateOffset(this,e),this):mn(this,n)}}function mn(n,e){return n.isValid()?n._d["get"+(n._isUTC?"UTC":"")+e]():NaN}function gn(n,e,t){n.isValid()&&!isNaN(t)&&("FullYear"===e&&pn(n.year())&&1===n.month()&&29===n.date()?(t=dn(t),n._d["set"+(n._isUTC?"UTC":"")+e](t,n.month(),ee(t,n.month()))):n._d["set"+(n._isUTC?"UTC":"")+e](t))}function bn(n){return M(this[n=on(n)])?this[n]():this}function un(n,e){if("object"==typeof n){var t,o=fn(n=an(n));for(t=0;t<o.length;t++)this[o[t].unit](n[o[t].unit])}else if(M(this[n=on(n)]))return this[n](e);return this}var _n,hn=/\d/,xn=/\d\d/,wn=/\d{3}/,yn=/\d{4}/,kn=/[+-]?\d{6}/,Cn=/\d\d?/,Bn=/\d\d\d\d?/,Pn=/\d\d\d\d\d\d?/,Sn=/\d{1,3}/,Tn=/\d{1,4}/,Mn=/[+-]?\d{1,6}/,Ln=/\d+/,zn=/[+-]?\d+/,Wn=/Z|[+-]\d\d:?\d\d/gi,Rn=/Z|[+-]\d\d(?::?\d\d)?/gi,Fn=/[+-]?\d+(\.\d{1,3})?/,Dn=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function On(n,e,t){_n[n]=M(e)?e:function(n,o){return n&&t?t:e}}function An(n,e){return l(_n,n)?_n[n](e._strict,e._locale):new RegExp(In(n))}function In(n){return Hn(n.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(n,e,t,o,a){return e||t||o||a})))}function Hn(n){return n.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}_n={};var Nn={};function En(n,e){var t,o=e;for("string"==typeof n&&(n=[n]),c(e)&&(o=function(n,t){t[e]=dn(n)}),t=0;t<n.length;t++)Nn[n[t]]=o}function jn(n,e){En(n,(function(n,t,o,a){o._w=o._w||{},e(n,o._w,o,a)}))}function Gn(n,e,t){null!=e&&l(Nn,n)&&Nn[n](e,t._a,t,n)}var Yn,Vn=0,qn=1,Un=2,Xn=3,Zn=4,$n=5,Kn=6,Jn=7,Qn=8;function ne(n,e){return(n%e+e)%e}function ee(n,e){if(isNaN(n)||isNaN(e))return NaN;var t=ne(e,12);return n+=(e-t)/12,1===t?pn(n)?29:28:31-t%7%2}Yn=Array.prototype.indexOf?Array.prototype.indexOf:function(n){var e;for(e=0;e<this.length;++e)if(this[e]===n)return e;return-1},N("M",["MM",2],"Mo",(function(){return this.month()+1})),N("MMM",0,0,(function(n){return this.localeData().monthsShort(this,n)})),N("MMMM",0,0,(function(n){return this.localeData().months(this,n)})),tn("month","M"),ln("month",8),On("M",Cn),On("MM",Cn,xn),On("MMM",(function(n,e){return e.monthsShortRegex(n)})),On("MMMM",(function(n,e){return e.monthsRegex(n)})),En(["M","MM"],(function(n,e){e[qn]=dn(n)-1})),En(["MMM","MMMM"],(function(n,e,t,o){var a=t._locale.monthsParse(n,o,t._strict);null!=a?e[qn]=a:u(t).invalidMonth=n}));var te="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),oe="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),ae=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,re=Dn,ie=Dn;function le(n,e){return n?r(this._months)?this._months[n.month()]:this._months[(this._months.isFormat||ae).test(e)?"format":"standalone"][n.month()]:r(this._months)?this._months:this._months.standalone}function fe(n,e){return n?r(this._monthsShort)?this._monthsShort[n.month()]:this._monthsShort[ae.test(e)?"format":"standalone"][n.month()]:r(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function pe(n,e,t){var o,a,r,i=n.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],o=0;o<12;++o)r=g([2e3,o]),this._shortMonthsParse[o]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[o]=this.months(r,"").toLocaleLowerCase();return t?"MMM"===e?-1!==(a=Yn.call(this._shortMonthsParse,i))?a:null:-1!==(a=Yn.call(this._longMonthsParse,i))?a:null:"MMM"===e?-1!==(a=Yn.call(this._shortMonthsParse,i))||-1!==(a=Yn.call(this._longMonthsParse,i))?a:null:-1!==(a=Yn.call(this._longMonthsParse,i))||-1!==(a=Yn.call(this._shortMonthsParse,i))?a:null}function ce(n,e,t){var o,a,r;if(this._monthsParseExact)return pe.call(this,n,e,t);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),o=0;o<12;o++){if(a=g([2e3,o]),t&&!this._longMonthsParse[o]&&(this._longMonthsParse[o]=new RegExp("^"+this.months(a,"").replace(".","")+"$","i"),this._shortMonthsParse[o]=new RegExp("^"+this.monthsShort(a,"").replace(".","")+"$","i")),t||this._monthsParse[o]||(r="^"+this.months(a,"")+"|^"+this.monthsShort(a,""),this._monthsParse[o]=new RegExp(r.replace(".",""),"i")),t&&"MMMM"===e&&this._longMonthsParse[o].test(n))return o;if(t&&"MMM"===e&&this._shortMonthsParse[o].test(n))return o;if(!t&&this._monthsParse[o].test(n))return o}}function de(n,e){var t;if(!n.isValid())return n;if("string"==typeof e)if(/^\d+$/.test(e))e=dn(e);else if(!c(e=n.localeData().monthsParse(e)))return n;return t=Math.min(n.date(),ee(n.year(),e)),n._d["set"+(n._isUTC?"UTC":"")+"Month"](e,t),n}function se(n){return null!=n?(de(this,n),o.updateOffset(this,!0),this):mn(this,"Month")}function me(){return ee(this.year(),this.month())}function ge(n){return this._monthsParseExact?(l(this,"_monthsRegex")||ue.call(this),n?this._monthsShortStrictRegex:this._monthsShortRegex):(l(this,"_monthsShortRegex")||(this._monthsShortRegex=re),this._monthsShortStrictRegex&&n?this._monthsShortStrictRegex:this._monthsShortRegex)}function be(n){return this._monthsParseExact?(l(this,"_monthsRegex")||ue.call(this),n?this._monthsStrictRegex:this._monthsRegex):(l(this,"_monthsRegex")||(this._monthsRegex=ie),this._monthsStrictRegex&&n?this._monthsStrictRegex:this._monthsRegex)}function ue(){function n(n,e){return e.length-n.length}var e,t,o=[],a=[],r=[];for(e=0;e<12;e++)t=g([2e3,e]),o.push(this.monthsShort(t,"")),a.push(this.months(t,"")),r.push(this.months(t,"")),r.push(this.monthsShort(t,""));for(o.sort(n),a.sort(n),r.sort(n),e=0;e<12;e++)o[e]=Hn(o[e]),a[e]=Hn(a[e]);for(e=0;e<24;e++)r[e]=Hn(r[e]);this._monthsRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+o.join("|")+")","i")}function _e(n){return pn(n)?366:365}N("Y",0,0,(function(){var n=this.year();return n<=9999?D(n,4):"+"+n})),N(0,["YY",2],0,(function(){return this.year()%100})),N(0,["YYYY",4],0,"year"),N(0,["YYYYY",5],0,"year"),N(0,["YYYYYY",6,!0],0,"year"),tn("year","y"),ln("year",1),On("Y",zn),On("YY",Cn,xn),On("YYYY",Tn,yn),On("YYYYY",Mn,kn),On("YYYYYY",Mn,kn),En(["YYYYY","YYYYYY"],Vn),En("YYYY",(function(n,e){e[Vn]=2===n.length?o.parseTwoDigitYear(n):dn(n)})),En("YY",(function(n,e){e[Vn]=o.parseTwoDigitYear(n)})),En("Y",(function(n,e){e[Vn]=parseInt(n,10)})),o.parseTwoDigitYear=function(n){return dn(n)+(dn(n)>68?1900:2e3)};var he=sn("FullYear",!0);function ve(){return pn(this.year())}function xe(n,e,t,o,a,r,i){var l;return n<100&&n>=0?(l=new Date(n+400,e,t,o,a,r,i),isFinite(l.getFullYear())&&l.setFullYear(n)):l=new Date(n,e,t,o,a,r,i),l}function we(n){var e,t;return n<100&&n>=0?((t=Array.prototype.slice.call(arguments))[0]=n+400,e=new Date(Date.UTC.apply(null,t)),isFinite(e.getUTCFullYear())&&e.setUTCFullYear(n)):e=new Date(Date.UTC.apply(null,arguments)),e}function ye(n,e,t){var o=7+e-t;return-(7+we(n,0,o).getUTCDay()-e)%7+o-1}function ke(n,e,t,o,a){var r,i,l=1+7*(e-1)+(7+t-o)%7+ye(n,o,a);return l<=0?i=_e(r=n-1)+l:l>_e(n)?(r=n+1,i=l-_e(n)):(r=n,i=l),{year:r,dayOfYear:i}}function Ce(n,e,t){var o,a,r=ye(n.year(),e,t),i=Math.floor((n.dayOfYear()-r-1)/7)+1;return i<1?o=i+Be(a=n.year()-1,e,t):i>Be(n.year(),e,t)?(o=i-Be(n.year(),e,t),a=n.year()+1):(a=n.year(),o=i),{week:o,year:a}}function Be(n,e,t){var o=ye(n,e,t),a=ye(n+1,e,t);return(_e(n)-o+a)/7}function Pe(n){return Ce(n,this._week.dow,this._week.doy).week}N("w",["ww",2],"wo","week"),N("W",["WW",2],"Wo","isoWeek"),tn("week","w"),tn("isoWeek","W"),ln("week",5),ln("isoWeek",5),On("w",Cn),On("ww",Cn,xn),On("W",Cn),On("WW",Cn,xn),jn(["w","ww","W","WW"],(function(n,e,t,o){e[o.substr(0,1)]=dn(n)}));var Se={dow:0,doy:6};function Te(){return this._week.dow}function Me(){return this._week.doy}function Le(n){var e=this.localeData().week(this);return null==n?e:this.add(7*(n-e),"d")}function ze(n){var e=Ce(this,1,4).week;return null==n?e:this.add(7*(n-e),"d")}function We(n,e){return"string"!=typeof n?n:isNaN(n)?"number"==typeof(n=e.weekdaysParse(n))?n:null:parseInt(n,10)}function Re(n,e){return"string"==typeof n?e.weekdaysParse(n)%7||7:isNaN(n)?null:n}function Fe(n,e){return n.slice(e,7).concat(n.slice(0,e))}N("d",0,"do","day"),N("dd",0,0,(function(n){return this.localeData().weekdaysMin(this,n)})),N("ddd",0,0,(function(n){return this.localeData().weekdaysShort(this,n)})),N("dddd",0,0,(function(n){return this.localeData().weekdays(this,n)})),N("e",0,0,"weekday"),N("E",0,0,"isoWeekday"),tn("day","d"),tn("weekday","e"),tn("isoWeekday","E"),ln("day",11),ln("weekday",11),ln("isoWeekday",11),On("d",Cn),On("e",Cn),On("E",Cn),On("dd",(function(n,e){return e.weekdaysMinRegex(n)})),On("ddd",(function(n,e){return e.weekdaysShortRegex(n)})),On("dddd",(function(n,e){return e.weekdaysRegex(n)})),jn(["dd","ddd","dddd"],(function(n,e,t,o){var a=t._locale.weekdaysParse(n,o,t._strict);null!=a?e.d=a:u(t).invalidWeekday=n})),jn(["d","e","E"],(function(n,e,t,o){e[o]=dn(n)}));var De="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Oe="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Ae="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ie=Dn,He=Dn,Ne=Dn;function Ee(n,e){var t=r(this._weekdays)?this._weekdays:this._weekdays[n&&!0!==n&&this._weekdays.isFormat.test(e)?"format":"standalone"];return!0===n?Fe(t,this._week.dow):n?t[n.day()]:t}function je(n){return!0===n?Fe(this._weekdaysShort,this._week.dow):n?this._weekdaysShort[n.day()]:this._weekdaysShort}function Ge(n){return!0===n?Fe(this._weekdaysMin,this._week.dow):n?this._weekdaysMin[n.day()]:this._weekdaysMin}function Ye(n,e,t){var o,a,r,i=n.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],o=0;o<7;++o)r=g([2e3,1]).day(o),this._minWeekdaysParse[o]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[o]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[o]=this.weekdays(r,"").toLocaleLowerCase();return t?"dddd"===e?-1!==(a=Yn.call(this._weekdaysParse,i))?a:null:"ddd"===e?-1!==(a=Yn.call(this._shortWeekdaysParse,i))?a:null:-1!==(a=Yn.call(this._minWeekdaysParse,i))?a:null:"dddd"===e?-1!==(a=Yn.call(this._weekdaysParse,i))||-1!==(a=Yn.call(this._shortWeekdaysParse,i))||-1!==(a=Yn.call(this._minWeekdaysParse,i))?a:null:"ddd"===e?-1!==(a=Yn.call(this._shortWeekdaysParse,i))||-1!==(a=Yn.call(this._weekdaysParse,i))||-1!==(a=Yn.call(this._minWeekdaysParse,i))?a:null:-1!==(a=Yn.call(this._minWeekdaysParse,i))||-1!==(a=Yn.call(this._weekdaysParse,i))||-1!==(a=Yn.call(this._shortWeekdaysParse,i))?a:null}function Ve(n,e,t){var o,a,r;if(this._weekdaysParseExact)return Ye.call(this,n,e,t);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;o<7;o++){if(a=g([2e3,1]).day(o),t&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp("^"+this.weekdays(a,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[o]=new RegExp("^"+this.weekdaysShort(a,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[o]=new RegExp("^"+this.weekdaysMin(a,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[o]||(r="^"+this.weekdays(a,"")+"|^"+this.weekdaysShort(a,"")+"|^"+this.weekdaysMin(a,""),this._weekdaysParse[o]=new RegExp(r.replace(".",""),"i")),t&&"dddd"===e&&this._fullWeekdaysParse[o].test(n))return o;if(t&&"ddd"===e&&this._shortWeekdaysParse[o].test(n))return o;if(t&&"dd"===e&&this._minWeekdaysParse[o].test(n))return o;if(!t&&this._weekdaysParse[o].test(n))return o}}function qe(n){if(!this.isValid())return null!=n?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=n?(n=We(n,this.localeData()),this.add(n-e,"d")):e}function Ue(n){if(!this.isValid())return null!=n?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==n?e:this.add(n-e,"d")}function Xe(n){if(!this.isValid())return null!=n?this:NaN;if(null!=n){var e=Re(n,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7}function Ze(n){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Je.call(this),n?this._weekdaysStrictRegex:this._weekdaysRegex):(l(this,"_weekdaysRegex")||(this._weekdaysRegex=Ie),this._weekdaysStrictRegex&&n?this._weekdaysStrictRegex:this._weekdaysRegex)}function $e(n){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Je.call(this),n?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(l(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=He),this._weekdaysShortStrictRegex&&n?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Ke(n){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||Je.call(this),n?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(l(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ne),this._weekdaysMinStrictRegex&&n?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Je(){function n(n,e){return e.length-n.length}var e,t,o,a,r,i=[],l=[],f=[],p=[];for(e=0;e<7;e++)t=g([2e3,1]).day(e),o=Hn(this.weekdaysMin(t,"")),a=Hn(this.weekdaysShort(t,"")),r=Hn(this.weekdays(t,"")),i.push(o),l.push(a),f.push(r),p.push(o),p.push(a),p.push(r);i.sort(n),l.sort(n),f.sort(n),p.sort(n),this._weekdaysRegex=new RegExp("^("+p.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+f.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+i.join("|")+")","i")}function Qe(){return this.hours()%12||12}function nt(){return this.hours()||24}function et(n,e){N(n,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)}))}function tt(n,e){return e._meridiemParse}function ot(n){return"p"===(n+"").toLowerCase().charAt(0)}N("H",["HH",2],0,"hour"),N("h",["hh",2],0,Qe),N("k",["kk",2],0,nt),N("hmm",0,0,(function(){return""+Qe.apply(this)+D(this.minutes(),2)})),N("hmmss",0,0,(function(){return""+Qe.apply(this)+D(this.minutes(),2)+D(this.seconds(),2)})),N("Hmm",0,0,(function(){return""+this.hours()+D(this.minutes(),2)})),N("Hmmss",0,0,(function(){return""+this.hours()+D(this.minutes(),2)+D(this.seconds(),2)})),et("a",!0),et("A",!1),tn("hour","h"),ln("hour",13),On("a",tt),On("A",tt),On("H",Cn),On("h",Cn),On("k",Cn),On("HH",Cn,xn),On("hh",Cn,xn),On("kk",Cn,xn),On("hmm",Bn),On("hmmss",Pn),On("Hmm",Bn),On("Hmmss",Pn),En(["H","HH"],Xn),En(["k","kk"],(function(n,e,t){var o=dn(n);e[Xn]=24===o?0:o})),En(["a","A"],(function(n,e,t){t._isPm=t._locale.isPM(n),t._meridiem=n})),En(["h","hh"],(function(n,e,t){e[Xn]=dn(n),u(t).bigHour=!0})),En("hmm",(function(n,e,t){var o=n.length-2;e[Xn]=dn(n.substr(0,o)),e[Zn]=dn(n.substr(o)),u(t).bigHour=!0})),En("hmmss",(function(n,e,t){var o=n.length-4,a=n.length-2;e[Xn]=dn(n.substr(0,o)),e[Zn]=dn(n.substr(o,2)),e[$n]=dn(n.substr(a)),u(t).bigHour=!0})),En("Hmm",(function(n,e,t){var o=n.length-2;e[Xn]=dn(n.substr(0,o)),e[Zn]=dn(n.substr(o))})),En("Hmmss",(function(n,e,t){var o=n.length-4,a=n.length-2;e[Xn]=dn(n.substr(0,o)),e[Zn]=dn(n.substr(o,2)),e[$n]=dn(n.substr(a))}));var at=/[ap]\.?m?\.?/i,rt=sn("Hours",!0);function it(n,e,t){return n>11?t?"pm":"PM":t?"am":"AM"}var lt,ft={calendar:R,longDateFormat:V,invalidDate:U,ordinal:Z,dayOfMonthOrdinalParse:$,relativeTime:J,months:te,monthsShort:oe,week:Se,weekdays:De,weekdaysMin:Ae,weekdaysShort:Oe,meridiemParse:at},pt={},ct={};function dt(n,e){var t,o=Math.min(n.length,e.length);for(t=0;t<o;t+=1)if(n[t]!==e[t])return t;return o}function st(n){return n?n.toLowerCase().replace("_","-"):n}function mt(n){for(var e,t,o,a,r=0;r<n.length;){for(e=(a=st(n[r]).split("-")).length,t=(t=st(n[r+1]))?t.split("-"):null;e>0;){if(o=gt(a.slice(0,e).join("-")))return o;if(t&&t.length>=e&&dt(a,t)>=e-1)break;e--}r++}return lt}function gt(e){var t=null;if(void 0===pt[e]&&n&&n.exports)try{t=lt._abbr,vn(),bt(t)}catch(n){pt[e]=null}return pt[e]}function bt(n,e){var t;return n&&((t=p(e)?ht(n):ut(n,e))?lt=t:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+n+" not found. Did you forget to load it?")),lt._abbr}function ut(n,e){if(null!==e){var t,o=ft;if(e.abbr=n,null!=pt[n])T("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),o=pt[n]._config;else if(null!=e.parentLocale)if(null!=pt[e.parentLocale])o=pt[e.parentLocale]._config;else{if(null==(t=gt(e.parentLocale)))return ct[e.parentLocale]||(ct[e.parentLocale]=[]),ct[e.parentLocale].push({name:n,config:e}),null;o=t._config}return pt[n]=new W(z(o,e)),ct[n]&&ct[n].forEach((function(n){ut(n.name,n.config)})),bt(n),pt[n]}return delete pt[n],null}function _t(n,e){if(null!=e){var t,o,a=ft;null!=pt[n]&&null!=pt[n].parentLocale?pt[n].set(z(pt[n]._config,e)):(null!=(o=gt(n))&&(a=o._config),e=z(a,e),null==o&&(e.abbr=n),(t=new W(e)).parentLocale=pt[n],pt[n]=t),bt(n)}else null!=pt[n]&&(null!=pt[n].parentLocale?(pt[n]=pt[n].parentLocale,n===bt()&&bt(n)):null!=pt[n]&&delete pt[n]);return pt[n]}function ht(n){var e;if(n&&n._locale&&n._locale._abbr&&(n=n._locale._abbr),!n)return lt;if(!r(n)){if(e=gt(n))return e;n=[n]}return mt(n)}function vt(){return P(pt)}function xt(n){var e,t=n._a;return t&&-2===u(n).overflow&&(e=t[qn]<0||t[qn]>11?qn:t[Un]<1||t[Un]>ee(t[Vn],t[qn])?Un:t[Xn]<0||t[Xn]>24||24===t[Xn]&&(0!==t[Zn]||0!==t[$n]||0!==t[Kn])?Xn:t[Zn]<0||t[Zn]>59?Zn:t[$n]<0||t[$n]>59?$n:t[Kn]<0||t[Kn]>999?Kn:-1,u(n)._overflowDayOfYear&&(e<Vn||e>Un)&&(e=Un),u(n)._overflowWeeks&&-1===e&&(e=Jn),u(n)._overflowWeekday&&-1===e&&(e=Qn),u(n).overflow=e),n}var wt=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,yt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,kt=/Z|[+-]\d\d(?::?\d\d)?/,Ct=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Bt=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Pt=/^\/?Date\((-?\d+)/i,St=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Tt={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Mt(n){var e,t,o,a,r,i,l=n._i,f=wt.exec(l)||yt.exec(l);if(f){for(u(n).iso=!0,e=0,t=Ct.length;e<t;e++)if(Ct[e][1].exec(f[1])){a=Ct[e][0],o=!1!==Ct[e][2];break}if(null==a)return void(n._isValid=!1);if(f[3]){for(e=0,t=Bt.length;e<t;e++)if(Bt[e][1].exec(f[3])){r=(f[2]||" ")+Bt[e][0];break}if(null==r)return void(n._isValid=!1)}if(!o&&null!=r)return void(n._isValid=!1);if(f[4]){if(!kt.exec(f[4]))return void(n._isValid=!1);i="Z"}n._f=a+(r||"")+(i||""),Et(n)}else n._isValid=!1}function Lt(n,e,t,o,a,r){var i=[zt(n),oe.indexOf(e),parseInt(t,10),parseInt(o,10),parseInt(a,10)];return r&&i.push(parseInt(r,10)),i}function zt(n){var e=parseInt(n,10);return e<=49?2e3+e:e<=999?1900+e:e}function Wt(n){return n.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function Rt(n,e,t){return!n||Oe.indexOf(n)===new Date(e[0],e[1],e[2]).getDay()||(u(t).weekdayMismatch=!0,t._isValid=!1,!1)}function Ft(n,e,t){if(n)return Tt[n];if(e)return 0;var o=parseInt(t,10),a=o%100;return(o-a)/100*60+a}function Dt(n){var e,t=St.exec(Wt(n._i));if(t){if(e=Lt(t[4],t[3],t[2],t[5],t[6],t[7]),!Rt(t[1],e,n))return;n._a=e,n._tzm=Ft(t[8],t[9],t[10]),n._d=we.apply(null,n._a),n._d.setUTCMinutes(n._d.getUTCMinutes()-n._tzm),u(n).rfc2822=!0}else n._isValid=!1}function Ot(n){var e=Pt.exec(n._i);null===e?(Mt(n),!1===n._isValid&&(delete n._isValid,Dt(n),!1===n._isValid&&(delete n._isValid,n._strict?n._isValid=!1:o.createFromInputFallback(n)))):n._d=new Date(+e[1])}function At(n,e,t){return null!=n?n:null!=e?e:t}function It(n){var e=new Date(o.now());return n._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}function Ht(n){var e,t,o,a,r,i=[];if(!n._d){for(o=It(n),n._w&&null==n._a[Un]&&null==n._a[qn]&&Nt(n),null!=n._dayOfYear&&(r=At(n._a[Vn],o[Vn]),(n._dayOfYear>_e(r)||0===n._dayOfYear)&&(u(n)._overflowDayOfYear=!0),t=we(r,0,n._dayOfYear),n._a[qn]=t.getUTCMonth(),n._a[Un]=t.getUTCDate()),e=0;e<3&&null==n._a[e];++e)n._a[e]=i[e]=o[e];for(;e<7;e++)n._a[e]=i[e]=null==n._a[e]?2===e?1:0:n._a[e];24===n._a[Xn]&&0===n._a[Zn]&&0===n._a[$n]&&0===n._a[Kn]&&(n._nextDay=!0,n._a[Xn]=0),n._d=(n._useUTC?we:xe).apply(null,i),a=n._useUTC?n._d.getUTCDay():n._d.getDay(),null!=n._tzm&&n._d.setUTCMinutes(n._d.getUTCMinutes()-n._tzm),n._nextDay&&(n._a[Xn]=24),n._w&&void 0!==n._w.d&&n._w.d!==a&&(u(n).weekdayMismatch=!0)}}function Nt(n){var e,t,o,a,r,i,l,f,p;null!=(e=n._w).GG||null!=e.W||null!=e.E?(r=1,i=4,t=At(e.GG,n._a[Vn],Ce(Zt(),1,4).year),o=At(e.W,1),((a=At(e.E,1))<1||a>7)&&(f=!0)):(r=n._locale._week.dow,i=n._locale._week.doy,p=Ce(Zt(),r,i),t=At(e.gg,n._a[Vn],p.year),o=At(e.w,p.week),null!=e.d?((a=e.d)<0||a>6)&&(f=!0):null!=e.e?(a=e.e+r,(e.e<0||e.e>6)&&(f=!0)):a=r),o<1||o>Be(t,r,i)?u(n)._overflowWeeks=!0:null!=f?u(n)._overflowWeekday=!0:(l=ke(t,o,a,r,i),n._a[Vn]=l.year,n._dayOfYear=l.dayOfYear)}function Et(n){if(n._f!==o.ISO_8601)if(n._f!==o.RFC_2822){n._a=[],u(n).empty=!0;var e,t,a,r,i,l,f=""+n._i,p=f.length,c=0;for(a=Y(n._f,n._locale).match(O)||[],e=0;e<a.length;e++)r=a[e],(t=(f.match(An(r,n))||[])[0])&&((i=f.substr(0,f.indexOf(t))).length>0&&u(n).unusedInput.push(i),f=f.slice(f.indexOf(t)+t.length),c+=t.length),H[r]?(t?u(n).empty=!1:u(n).unusedTokens.push(r),Gn(r,t,n)):n._strict&&!t&&u(n).unusedTokens.push(r);u(n).charsLeftOver=p-c,f.length>0&&u(n).unusedInput.push(f),n._a[Xn]<=12&&!0===u(n).bigHour&&n._a[Xn]>0&&(u(n).bigHour=void 0),u(n).parsedDateParts=n._a.slice(0),u(n).meridiem=n._meridiem,n._a[Xn]=jt(n._locale,n._a[Xn],n._meridiem),null!==(l=u(n).era)&&(n._a[Vn]=n._locale.erasConvertYear(l,n._a[Vn])),Ht(n),xt(n)}else Dt(n);else Mt(n)}function jt(n,e,t){var o;return null==t?e:null!=n.meridiemHour?n.meridiemHour(e,t):null!=n.isPM?((o=n.isPM(t))&&e<12&&(e+=12),o||12!==e||(e=0),e):e}function Gt(n){var e,t,o,a,r,i,l=!1;if(0===n._f.length)return u(n).invalidFormat=!0,void(n._d=new Date(NaN));for(a=0;a<n._f.length;a++)r=0,i=!1,e=w({},n),null!=n._useUTC&&(e._useUTC=n._useUTC),e._f=n._f[a],Et(e),_(e)&&(i=!0),r+=u(e).charsLeftOver,r+=10*u(e).unusedTokens.length,u(e).score=r,l?r<o&&(o=r,t=e):(null==o||r<o||i)&&(o=r,t=e,i&&(l=!0));m(n,t||e)}function Yt(n){if(!n._d){var e=an(n._i),t=void 0===e.day?e.date:e.day;n._a=s([e.year,e.month,t,e.hour,e.minute,e.second,e.millisecond],(function(n){return n&&parseInt(n,10)})),Ht(n)}}function Vt(n){var e=new y(xt(qt(n)));return e._nextDay&&(e.add(1,"d"),e._nextDay=void 0),e}function qt(n){var e=n._i,t=n._f;return n._locale=n._locale||ht(n._l),null===e||void 0===t&&""===e?h({nullInput:!0}):("string"==typeof e&&(n._i=e=n._locale.preparse(e)),k(e)?new y(xt(e)):(d(e)?n._d=e:r(t)?Gt(n):t?Et(n):Ut(n),_(n)||(n._d=null),n))}function Ut(n){var e=n._i;p(e)?n._d=new Date(o.now()):d(e)?n._d=new Date(e.valueOf()):"string"==typeof e?Ot(n):r(e)?(n._a=s(e.slice(0),(function(n){return parseInt(n,10)})),Ht(n)):i(e)?Yt(n):c(e)?n._d=new Date(e):o.createFromInputFallback(n)}function Xt(n,e,t,o,a){var l={};return!0!==e&&!1!==e||(o=e,e=void 0),!0!==t&&!1!==t||(o=t,t=void 0),(i(n)&&f(n)||r(n)&&0===n.length)&&(n=void 0),l._isAMomentObject=!0,l._useUTC=l._isUTC=a,l._l=t,l._i=n,l._f=e,l._strict=o,Vt(l)}function Zt(n,e,t,o){return Xt(n,e,t,o,!1)}o.createFromInputFallback=B("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(n){n._d=new Date(n._i+(n._useUTC?" UTC":""))})),o.ISO_8601=function(){},o.RFC_2822=function(){};var $t=B("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var n=Zt.apply(null,arguments);return this.isValid()&&n.isValid()?n<this?this:n:h()})),Kt=B("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var n=Zt.apply(null,arguments);return this.isValid()&&n.isValid()?n>this?this:n:h()}));function Jt(n,e){var t,o;if(1===e.length&&r(e[0])&&(e=e[0]),!e.length)return Zt();for(t=e[0],o=1;o<e.length;++o)e[o].isValid()&&!e[o][n](t)||(t=e[o]);return t}function Qt(){return Jt("isBefore",[].slice.call(arguments,0))}function no(){return Jt("isAfter",[].slice.call(arguments,0))}var eo=function(){return Date.now?Date.now():+new Date},to=["year","quarter","month","week","day","hour","minute","second","millisecond"];function oo(n){var e,t,o=!1;for(e in n)if(l(n,e)&&(-1===Yn.call(to,e)||null!=n[e]&&isNaN(n[e])))return!1;for(t=0;t<to.length;++t)if(n[to[t]]){if(o)return!1;parseFloat(n[to[t]])!==dn(n[to[t]])&&(o=!0)}return!0}function ao(){return this._isValid}function ro(){return Mo(NaN)}function io(n){var e=an(n),t=e.year||0,o=e.quarter||0,a=e.month||0,r=e.week||e.isoWeek||0,i=e.day||0,l=e.hour||0,f=e.minute||0,p=e.second||0,c=e.millisecond||0;this._isValid=oo(e),this._milliseconds=+c+1e3*p+6e4*f+1e3*l*60*60,this._days=+i+7*r,this._months=+a+3*o+12*t,this._data={},this._locale=ht(),this._bubble()}function lo(n){return n instanceof io}function fo(n){return n<0?-1*Math.round(-1*n):Math.round(n)}function po(n,e,t){var o,a=Math.min(n.length,e.length),r=Math.abs(n.length-e.length),i=0;for(o=0;o<a;o++)(t&&n[o]!==e[o]||!t&&dn(n[o])!==dn(e[o]))&&i++;return i+r}function co(n,e){N(n,0,0,(function(){var n=this.utcOffset(),t="+";return n<0&&(n=-n,t="-"),t+D(~~(n/60),2)+e+D(~~n%60,2)}))}co("Z",":"),co("ZZ",""),On("Z",Rn),On("ZZ",Rn),En(["Z","ZZ"],(function(n,e,t){t._useUTC=!0,t._tzm=mo(Rn,n)}));var so=/([\+\-]|\d\d)/gi;function mo(n,e){var t,o,a=(e||"").match(n);return null===a?null:0===(o=60*(t=((a[a.length-1]||[])+"").match(so)||["-",0,0])[1]+dn(t[2]))?0:"+"===t[0]?o:-o}function go(n,e){var t,a;return e._isUTC?(t=e.clone(),a=(k(n)||d(n)?n.valueOf():Zt(n).valueOf())-t.valueOf(),t._d.setTime(t._d.valueOf()+a),o.updateOffset(t,!1),t):Zt(n).local()}function bo(n){return-Math.round(n._d.getTimezoneOffset())}function uo(n,e,t){var a,r=this._offset||0;if(!this.isValid())return null!=n?this:NaN;if(null!=n){if("string"==typeof n){if(null===(n=mo(Rn,n)))return this}else Math.abs(n)<16&&!t&&(n*=60);return!this._isUTC&&e&&(a=bo(this)),this._offset=n,this._isUTC=!0,null!=a&&this.add(a,"m"),r!==n&&(!e||this._changeInProgress?Fo(this,Mo(n-r,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,o.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?r:bo(this)}function _o(n,e){return null!=n?("string"!=typeof n&&(n=-n),this.utcOffset(n,e),this):-this.utcOffset()}function ho(n){return this.utcOffset(0,n)}function vo(n){return this._isUTC&&(this.utcOffset(0,n),this._isUTC=!1,n&&this.subtract(bo(this),"m")),this}function xo(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var n=mo(Wn,this._i);null!=n?this.utcOffset(n):this.utcOffset(0,!0)}return this}function wo(n){return!!this.isValid()&&(n=n?Zt(n).utcOffset():0,(this.utcOffset()-n)%60==0)}function yo(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function ko(){if(!p(this._isDSTShifted))return this._isDSTShifted;var n,e={};return w(e,this),(e=qt(e))._a?(n=e._isUTC?g(e._a):Zt(e._a),this._isDSTShifted=this.isValid()&&po(e._a,n.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function Co(){return!!this.isValid()&&!this._isUTC}function Bo(){return!!this.isValid()&&this._isUTC}function Po(){return!!this.isValid()&&this._isUTC&&0===this._offset}o.updateOffset=function(){};var So=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,To=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Mo(n,e){var t,o,a,r=n,i=null;return lo(n)?r={ms:n._milliseconds,d:n._days,M:n._months}:c(n)||!isNaN(+n)?(r={},e?r[e]=+n:r.milliseconds=+n):(i=So.exec(n))?(t="-"===i[1]?-1:1,r={y:0,d:dn(i[Un])*t,h:dn(i[Xn])*t,m:dn(i[Zn])*t,s:dn(i[$n])*t,ms:dn(fo(1e3*i[Kn]))*t}):(i=To.exec(n))?(t="-"===i[1]?-1:1,r={y:Lo(i[2],t),M:Lo(i[3],t),w:Lo(i[4],t),d:Lo(i[5],t),h:Lo(i[6],t),m:Lo(i[7],t),s:Lo(i[8],t)}):null==r?r={}:"object"==typeof r&&("from"in r||"to"in r)&&(a=Wo(Zt(r.from),Zt(r.to)),(r={}).ms=a.milliseconds,r.M=a.months),o=new io(r),lo(n)&&l(n,"_locale")&&(o._locale=n._locale),lo(n)&&l(n,"_isValid")&&(o._isValid=n._isValid),o}function Lo(n,e){var t=n&&parseFloat(n.replace(",","."));return(isNaN(t)?0:t)*e}function zo(n,e){var t={};return t.months=e.month()-n.month()+12*(e.year()-n.year()),n.clone().add(t.months,"M").isAfter(e)&&--t.months,t.milliseconds=+e-+n.clone().add(t.months,"M"),t}function Wo(n,e){var t;return n.isValid()&&e.isValid()?(e=go(e,n),n.isBefore(e)?t=zo(n,e):((t=zo(e,n)).milliseconds=-t.milliseconds,t.months=-t.months),t):{milliseconds:0,months:0}}function Ro(n,e){return function(t,o){var a;return null===o||isNaN(+o)||(T(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),a=t,t=o,o=a),Fo(this,Mo(t,o),n),this}}function Fo(n,e,t,a){var r=e._milliseconds,i=fo(e._days),l=fo(e._months);n.isValid()&&(a=null==a||a,l&&de(n,mn(n,"Month")+l*t),i&&gn(n,"Date",mn(n,"Date")+i*t),r&&n._d.setTime(n._d.valueOf()+r*t),a&&o.updateOffset(n,i||l))}Mo.fn=io.prototype,Mo.invalid=ro;var Do=Ro(1,"add"),Oo=Ro(-1,"subtract");function Ao(n){return"string"==typeof n||n instanceof String}function Io(n){return k(n)||d(n)||Ao(n)||c(n)||No(n)||Ho(n)||null==n}function Ho(n){var e,t,o=i(n)&&!f(n),a=!1,r=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"];for(e=0;e<r.length;e+=1)t=r[e],a=a||l(n,t);return o&&a}function No(n){var e=r(n),t=!1;return e&&(t=0===n.filter((function(e){return!c(e)&&Ao(n)})).length),e&&t}function Eo(n){var e,t,o=i(n)&&!f(n),a=!1,r=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(e=0;e<r.length;e+=1)t=r[e],a=a||l(n,t);return o&&a}function jo(n,e){var t=n.diff(e,"days",!0);return t<-6?"sameElse":t<-1?"lastWeek":t<0?"lastDay":t<1?"sameDay":t<2?"nextDay":t<7?"nextWeek":"sameElse"}function Go(n,e){1===arguments.length&&(arguments[0]?Io(arguments[0])?(n=arguments[0],e=void 0):Eo(arguments[0])&&(e=arguments[0],n=void 0):(n=void 0,e=void 0));var t=n||Zt(),a=go(t,this).startOf("day"),r=o.calendarFormat(this,a)||"sameElse",i=e&&(M(e[r])?e[r].call(this,t):e[r]);return this.format(i||this.localeData().calendar(r,this,Zt(t)))}function Yo(){return new y(this)}function Vo(n,e){var t=k(n)?n:Zt(n);return!(!this.isValid()||!t.isValid())&&("millisecond"===(e=on(e)||"millisecond")?this.valueOf()>t.valueOf():t.valueOf()<this.clone().startOf(e).valueOf())}function qo(n,e){var t=k(n)?n:Zt(n);return!(!this.isValid()||!t.isValid())&&("millisecond"===(e=on(e)||"millisecond")?this.valueOf()<t.valueOf():this.clone().endOf(e).valueOf()<t.valueOf())}function Uo(n,e,t,o){var a=k(n)?n:Zt(n),r=k(e)?e:Zt(e);return!!(this.isValid()&&a.isValid()&&r.isValid())&&("("===(o=o||"()")[0]?this.isAfter(a,t):!this.isBefore(a,t))&&(")"===o[1]?this.isBefore(r,t):!this.isAfter(r,t))}function Xo(n,e){var t,o=k(n)?n:Zt(n);return!(!this.isValid()||!o.isValid())&&("millisecond"===(e=on(e)||"millisecond")?this.valueOf()===o.valueOf():(t=o.valueOf(),this.clone().startOf(e).valueOf()<=t&&t<=this.clone().endOf(e).valueOf()))}function Zo(n,e){return this.isSame(n,e)||this.isAfter(n,e)}function $o(n,e){return this.isSame(n,e)||this.isBefore(n,e)}function Ko(n,e,t){var o,a,r;if(!this.isValid())return NaN;if(!(o=go(n,this)).isValid())return NaN;switch(a=6e4*(o.utcOffset()-this.utcOffset()),e=on(e)){case"year":r=Jo(this,o)/12;break;case"month":r=Jo(this,o);break;case"quarter":r=Jo(this,o)/3;break;case"second":r=(this-o)/1e3;break;case"minute":r=(this-o)/6e4;break;case"hour":r=(this-o)/36e5;break;case"day":r=(this-o-a)/864e5;break;case"week":r=(this-o-a)/6048e5;break;default:r=this-o}return t?r:cn(r)}function Jo(n,e){if(n.date()<e.date())return-Jo(e,n);var t=12*(e.year()-n.year())+(e.month()-n.month()),o=n.clone().add(t,"months");return-(t+(e-o<0?(e-o)/(o-n.clone().add(t-1,"months")):(e-o)/(n.clone().add(t+1,"months")-o)))||0}function Qo(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function na(n){if(!this.isValid())return null;var e=!0!==n,t=e?this.clone().utc():this;return t.year()<0||t.year()>9999?G(t,e?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):M(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",G(t,"Z")):G(t,e?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function ea(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var n,e,t,o,a="moment",r="";return this.isLocal()||(a=0===this.utcOffset()?"moment.utc":"moment.parseZone",r="Z"),n="["+a+'("]',e=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",t="-MM-DD[T]HH:mm:ss.SSS",o=r+'[")]',this.format(n+e+t+o)}function ta(n){n||(n=this.isUtc()?o.defaultFormatUtc:o.defaultFormat);var e=G(this,n);return this.localeData().postformat(e)}function oa(n,e){return this.isValid()&&(k(n)&&n.isValid()||Zt(n).isValid())?Mo({to:this,from:n}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function aa(n){return this.from(Zt(),n)}function ra(n,e){return this.isValid()&&(k(n)&&n.isValid()||Zt(n).isValid())?Mo({from:this,to:n}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function ia(n){return this.to(Zt(),n)}function la(n){var e;return void 0===n?this._locale._abbr:(null!=(e=ht(n))&&(this._locale=e),this)}o.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",o.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var fa=B("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(n){return void 0===n?this.localeData():this.locale(n)}));function pa(){return this._locale}var ca=1e3,da=60*ca,sa=60*da,ma=3506328*sa;function ga(n,e){return(n%e+e)%e}function ba(n,e,t){return n<100&&n>=0?new Date(n+400,e,t)-ma:new Date(n,e,t).valueOf()}function ua(n,e,t){return n<100&&n>=0?Date.UTC(n+400,e,t)-ma:Date.UTC(n,e,t)}function _a(n){var e,t;if(void 0===(n=on(n))||"millisecond"===n||!this.isValid())return this;switch(t=this._isUTC?ua:ba,n){case"year":e=t(this.year(),0,1);break;case"quarter":e=t(this.year(),this.month()-this.month()%3,1);break;case"month":e=t(this.year(),this.month(),1);break;case"week":e=t(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":e=t(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":e=t(this.year(),this.month(),this.date());break;case"hour":e=this._d.valueOf(),e-=ga(e+(this._isUTC?0:this.utcOffset()*da),sa);break;case"minute":e=this._d.valueOf(),e-=ga(e,da);break;case"second":e=this._d.valueOf(),e-=ga(e,ca)}return this._d.setTime(e),o.updateOffset(this,!0),this}function ha(n){var e,t;if(void 0===(n=on(n))||"millisecond"===n||!this.isValid())return this;switch(t=this._isUTC?ua:ba,n){case"year":e=t(this.year()+1,0,1)-1;break;case"quarter":e=t(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":e=t(this.year(),this.month()+1,1)-1;break;case"week":e=t(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":e=t(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":e=t(this.year(),this.month(),this.date()+1)-1;break;case"hour":e=this._d.valueOf(),e+=sa-ga(e+(this._isUTC?0:this.utcOffset()*da),sa)-1;break;case"minute":e=this._d.valueOf(),e+=da-ga(e,da)-1;break;case"second":e=this._d.valueOf(),e+=ca-ga(e,ca)-1}return this._d.setTime(e),o.updateOffset(this,!0),this}function va(){return this._d.valueOf()-6e4*(this._offset||0)}function xa(){return Math.floor(this.valueOf()/1e3)}function wa(){return new Date(this.valueOf())}function ya(){var n=this;return[n.year(),n.month(),n.date(),n.hour(),n.minute(),n.second(),n.millisecond()]}function ka(){var n=this;return{years:n.year(),months:n.month(),date:n.date(),hours:n.hours(),minutes:n.minutes(),seconds:n.seconds(),milliseconds:n.milliseconds()}}function Ca(){return this.isValid()?this.toISOString():null}function Ba(){return _(this)}function Pa(){return m({},u(this))}function Sa(){return u(this).overflow}function Ta(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Ma(n,e){var t,a,r,i=this._eras||ht("en")._eras;for(t=0,a=i.length;t<a;++t){switch(typeof i[t].since){case"string":r=o(i[t].since).startOf("day"),i[t].since=r.valueOf()}switch(typeof i[t].until){case"undefined":i[t].until=1/0;break;case"string":r=o(i[t].until).startOf("day").valueOf(),i[t].until=r.valueOf()}}return i}function La(n,e,t){var o,a,r,i,l,f=this.eras();for(n=n.toUpperCase(),o=0,a=f.length;o<a;++o)if(r=f[o].name.toUpperCase(),i=f[o].abbr.toUpperCase(),l=f[o].narrow.toUpperCase(),t)switch(e){case"N":case"NN":case"NNN":if(i===n)return f[o];break;case"NNNN":if(r===n)return f[o];break;case"NNNNN":if(l===n)return f[o]}else if([r,i,l].indexOf(n)>=0)return f[o]}function za(n,e){var t=n.since<=n.until?1:-1;return void 0===e?o(n.since).year():o(n.since).year()+(e-n.offset)*t}function Wa(){var n,e,t,o=this.localeData().eras();for(n=0,e=o.length;n<e;++n){if(t=this.clone().startOf("day").valueOf(),o[n].since<=t&&t<=o[n].until)return o[n].name;if(o[n].until<=t&&t<=o[n].since)return o[n].name}return""}function Ra(){var n,e,t,o=this.localeData().eras();for(n=0,e=o.length;n<e;++n){if(t=this.clone().startOf("day").valueOf(),o[n].since<=t&&t<=o[n].until)return o[n].narrow;if(o[n].until<=t&&t<=o[n].since)return o[n].narrow}return""}function Fa(){var n,e,t,o=this.localeData().eras();for(n=0,e=o.length;n<e;++n){if(t=this.clone().startOf("day").valueOf(),o[n].since<=t&&t<=o[n].until)return o[n].abbr;if(o[n].until<=t&&t<=o[n].since)return o[n].abbr}return""}function Da(){var n,e,t,a,r=this.localeData().eras();for(n=0,e=r.length;n<e;++n)if(t=r[n].since<=r[n].until?1:-1,a=this.clone().startOf("day").valueOf(),r[n].since<=a&&a<=r[n].until||r[n].until<=a&&a<=r[n].since)return(this.year()-o(r[n].since).year())*t+r[n].offset;return this.year()}function Oa(n){return l(this,"_erasNameRegex")||Ga.call(this),n?this._erasNameRegex:this._erasRegex}function Aa(n){return l(this,"_erasAbbrRegex")||Ga.call(this),n?this._erasAbbrRegex:this._erasRegex}function Ia(n){return l(this,"_erasNarrowRegex")||Ga.call(this),n?this._erasNarrowRegex:this._erasRegex}function Ha(n,e){return e.erasAbbrRegex(n)}function Na(n,e){return e.erasNameRegex(n)}function Ea(n,e){return e.erasNarrowRegex(n)}function ja(n,e){return e._eraYearOrdinalRegex||Ln}function Ga(){var n,e,t=[],o=[],a=[],r=[],i=this.eras();for(n=0,e=i.length;n<e;++n)o.push(Hn(i[n].name)),t.push(Hn(i[n].abbr)),a.push(Hn(i[n].narrow)),r.push(Hn(i[n].name)),r.push(Hn(i[n].abbr)),r.push(Hn(i[n].narrow));this._erasRegex=new RegExp("^("+r.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+o.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+t.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+a.join("|")+")","i")}function Ya(n,e){N(0,[n,n.length],0,e)}function Va(n){return Ka.call(this,n,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function qa(n){return Ka.call(this,n,this.isoWeek(),this.isoWeekday(),1,4)}function Ua(){return Be(this.year(),1,4)}function Xa(){return Be(this.isoWeekYear(),1,4)}function Za(){var n=this.localeData()._week;return Be(this.year(),n.dow,n.doy)}function $a(){var n=this.localeData()._week;return Be(this.weekYear(),n.dow,n.doy)}function Ka(n,e,t,o,a){var r;return null==n?Ce(this,o,a).year:(e>(r=Be(n,o,a))&&(e=r),Ja.call(this,n,e,t,o,a))}function Ja(n,e,t,o,a){var r=ke(n,e,t,o,a),i=we(r.year,0,r.dayOfYear);return this.year(i.getUTCFullYear()),this.month(i.getUTCMonth()),this.date(i.getUTCDate()),this}function Qa(n){return null==n?Math.ceil((this.month()+1)/3):this.month(3*(n-1)+this.month()%3)}N("N",0,0,"eraAbbr"),N("NN",0,0,"eraAbbr"),N("NNN",0,0,"eraAbbr"),N("NNNN",0,0,"eraName"),N("NNNNN",0,0,"eraNarrow"),N("y",["y",1],"yo","eraYear"),N("y",["yy",2],0,"eraYear"),N("y",["yyy",3],0,"eraYear"),N("y",["yyyy",4],0,"eraYear"),On("N",Ha),On("NN",Ha),On("NNN",Ha),On("NNNN",Na),On("NNNNN",Ea),En(["N","NN","NNN","NNNN","NNNNN"],(function(n,e,t,o){var a=t._locale.erasParse(n,o,t._strict);a?u(t).era=a:u(t).invalidEra=n})),On("y",Ln),On("yy",Ln),On("yyy",Ln),On("yyyy",Ln),On("yo",ja),En(["y","yy","yyy","yyyy"],Vn),En(["yo"],(function(n,e,t,o){var a;t._locale._eraYearOrdinalRegex&&(a=n.match(t._locale._eraYearOrdinalRegex)),t._locale.eraYearOrdinalParse?e[Vn]=t._locale.eraYearOrdinalParse(n,a):e[Vn]=parseInt(n,10)})),N(0,["gg",2],0,(function(){return this.weekYear()%100})),N(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),Ya("gggg","weekYear"),Ya("ggggg","weekYear"),Ya("GGGG","isoWeekYear"),Ya("GGGGG","isoWeekYear"),tn("weekYear","gg"),tn("isoWeekYear","GG"),ln("weekYear",1),ln("isoWeekYear",1),On("G",zn),On("g",zn),On("GG",Cn,xn),On("gg",Cn,xn),On("GGGG",Tn,yn),On("gggg",Tn,yn),On("GGGGG",Mn,kn),On("ggggg",Mn,kn),jn(["gggg","ggggg","GGGG","GGGGG"],(function(n,e,t,o){e[o.substr(0,2)]=dn(n)})),jn(["gg","GG"],(function(n,e,t,a){e[a]=o.parseTwoDigitYear(n)})),N("Q",0,"Qo","quarter"),tn("quarter","Q"),ln("quarter",7),On("Q",hn),En("Q",(function(n,e){e[qn]=3*(dn(n)-1)})),N("D",["DD",2],"Do","date"),tn("date","D"),ln("date",9),On("D",Cn),On("DD",Cn,xn),On("Do",(function(n,e){return n?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient})),En(["D","DD"],Un),En("Do",(function(n,e){e[Un]=dn(n.match(Cn)[0])}));var nr=sn("Date",!0);function er(n){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==n?e:this.add(n-e,"d")}N("DDD",["DDDD",3],"DDDo","dayOfYear"),tn("dayOfYear","DDD"),ln("dayOfYear",4),On("DDD",Sn),On("DDDD",wn),En(["DDD","DDDD"],(function(n,e,t){t._dayOfYear=dn(n)})),N("m",["mm",2],0,"minute"),tn("minute","m"),ln("minute",14),On("m",Cn),On("mm",Cn,xn),En(["m","mm"],Zn);var tr=sn("Minutes",!1);N("s",["ss",2],0,"second"),tn("second","s"),ln("second",15),On("s",Cn),On("ss",Cn,xn),En(["s","ss"],$n);var or,ar,rr=sn("Seconds",!1);for(N("S",0,0,(function(){return~~(this.millisecond()/100)})),N(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),N(0,["SSS",3],0,"millisecond"),N(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),N(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),N(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),N(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),N(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),N(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),tn("millisecond","ms"),ln("millisecond",16),On("S",Sn,hn),On("SS",Sn,xn),On("SSS",Sn,wn),or="SSSS";or.length<=9;or+="S")On(or,Ln);function ir(n,e){e[Kn]=dn(1e3*("0."+n))}for(or="S";or.length<=9;or+="S")En(or,ir);function lr(){return this._isUTC?"UTC":""}function fr(){return this._isUTC?"Coordinated Universal Time":""}ar=sn("Milliseconds",!1),N("z",0,0,"zoneAbbr"),N("zz",0,0,"zoneName");var pr=y.prototype;function cr(n){return Zt(1e3*n)}function dr(){return Zt.apply(null,arguments).parseZone()}function sr(n){return n}pr.add=Do,pr.calendar=Go,pr.clone=Yo,pr.diff=Ko,pr.endOf=ha,pr.format=ta,pr.from=oa,pr.fromNow=aa,pr.to=ra,pr.toNow=ia,pr.get=bn,pr.invalidAt=Sa,pr.isAfter=Vo,pr.isBefore=qo,pr.isBetween=Uo,pr.isSame=Xo,pr.isSameOrAfter=Zo,pr.isSameOrBefore=$o,pr.isValid=Ba,pr.lang=fa,pr.locale=la,pr.localeData=pa,pr.max=Kt,pr.min=$t,pr.parsingFlags=Pa,pr.set=un,pr.startOf=_a,pr.subtract=Oo,pr.toArray=ya,pr.toObject=ka,pr.toDate=wa,pr.toISOString=na,pr.inspect=ea,"undefined"!=typeof Symbol&&null!=Symbol.for&&(pr[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),pr.toJSON=Ca,pr.toString=Qo,pr.unix=xa,pr.valueOf=va,pr.creationData=Ta,pr.eraName=Wa,pr.eraNarrow=Ra,pr.eraAbbr=Fa,pr.eraYear=Da,pr.year=he,pr.isLeapYear=ve,pr.weekYear=Va,pr.isoWeekYear=qa,pr.quarter=pr.quarters=Qa,pr.month=se,pr.daysInMonth=me,pr.week=pr.weeks=Le,pr.isoWeek=pr.isoWeeks=ze,pr.weeksInYear=Za,pr.weeksInWeekYear=$a,pr.isoWeeksInYear=Ua,pr.isoWeeksInISOWeekYear=Xa,pr.date=nr,pr.day=pr.days=qe,pr.weekday=Ue,pr.isoWeekday=Xe,pr.dayOfYear=er,pr.hour=pr.hours=rt,pr.minute=pr.minutes=tr,pr.second=pr.seconds=rr,pr.millisecond=pr.milliseconds=ar,pr.utcOffset=uo,pr.utc=ho,pr.local=vo,pr.parseZone=xo,pr.hasAlignedHourOffset=wo,pr.isDST=yo,pr.isLocal=Co,pr.isUtcOffset=Bo,pr.isUtc=Po,pr.isUTC=Po,pr.zoneAbbr=lr,pr.zoneName=fr,pr.dates=B("dates accessor is deprecated. Use date instead.",nr),pr.months=B("months accessor is deprecated. Use month instead",se),pr.years=B("years accessor is deprecated. Use year instead",he),pr.zone=B("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",_o),pr.isDSTShifted=B("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",ko);var mr=W.prototype;function gr(n,e,t,o){var a=ht(),r=g().set(o,e);return a[t](r,n)}function br(n,e,t){if(c(n)&&(e=n,n=void 0),n=n||"",null!=e)return gr(n,e,t,"month");var o,a=[];for(o=0;o<12;o++)a[o]=gr(n,o,t,"month");return a}function ur(n,e,t,o){"boolean"==typeof n?(c(e)&&(t=e,e=void 0),e=e||""):(t=e=n,n=!1,c(e)&&(t=e,e=void 0),e=e||"");var a,r=ht(),i=n?r._week.dow:0,l=[];if(null!=t)return gr(e,(t+i)%7,o,"day");for(a=0;a<7;a++)l[a]=gr(e,(a+i)%7,o,"day");return l}function _r(n,e){return br(n,e,"months")}function hr(n,e){return br(n,e,"monthsShort")}function vr(n,e,t){return ur(n,e,t,"weekdays")}function xr(n,e,t){return ur(n,e,t,"weekdaysShort")}function wr(n,e,t){return ur(n,e,t,"weekdaysMin")}mr.calendar=F,mr.longDateFormat=q,mr.invalidDate=X,mr.ordinal=K,mr.preparse=sr,mr.postformat=sr,mr.relativeTime=Q,mr.pastFuture=nn,mr.set=L,mr.eras=Ma,mr.erasParse=La,mr.erasConvertYear=za,mr.erasAbbrRegex=Aa,mr.erasNameRegex=Oa,mr.erasNarrowRegex=Ia,mr.months=le,mr.monthsShort=fe,mr.monthsParse=ce,mr.monthsRegex=be,mr.monthsShortRegex=ge,mr.week=Pe,mr.firstDayOfYear=Me,mr.firstDayOfWeek=Te,mr.weekdays=Ee,mr.weekdaysMin=Ge,mr.weekdaysShort=je,mr.weekdaysParse=Ve,mr.weekdaysRegex=Ze,mr.weekdaysShortRegex=$e,mr.weekdaysMinRegex=Ke,mr.isPM=ot,mr.meridiem=it,bt("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(n){var e=n%10;return n+(1===dn(n%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),o.lang=B("moment.lang is deprecated. Use moment.locale instead.",bt),o.langData=B("moment.langData is deprecated. Use moment.localeData instead.",ht);var yr=Math.abs;function kr(){var n=this._data;return this._milliseconds=yr(this._milliseconds),this._days=yr(this._days),this._months=yr(this._months),n.milliseconds=yr(n.milliseconds),n.seconds=yr(n.seconds),n.minutes=yr(n.minutes),n.hours=yr(n.hours),n.months=yr(n.months),n.years=yr(n.years),this}function Cr(n,e,t,o){var a=Mo(e,t);return n._milliseconds+=o*a._milliseconds,n._days+=o*a._days,n._months+=o*a._months,n._bubble()}function Br(n,e){return Cr(this,n,e,1)}function Pr(n,e){return Cr(this,n,e,-1)}function Sr(n){return n<0?Math.floor(n):Math.ceil(n)}function Tr(){var n,e,t,o,a,r=this._milliseconds,i=this._days,l=this._months,f=this._data;return r>=0&&i>=0&&l>=0||r<=0&&i<=0&&l<=0||(r+=864e5*Sr(Lr(l)+i),i=0,l=0),f.milliseconds=r%1e3,n=cn(r/1e3),f.seconds=n%60,e=cn(n/60),f.minutes=e%60,t=cn(e/60),f.hours=t%24,i+=cn(t/24),l+=a=cn(Mr(i)),i-=Sr(Lr(a)),o=cn(l/12),l%=12,f.days=i,f.months=l,f.years=o,this}function Mr(n){return 4800*n/146097}function Lr(n){return 146097*n/4800}function zr(n){if(!this.isValid())return NaN;var e,t,o=this._milliseconds;if("month"===(n=on(n))||"quarter"===n||"year"===n)switch(e=this._days+o/864e5,t=this._months+Mr(e),n){case"month":return t;case"quarter":return t/3;case"year":return t/12}else switch(e=this._days+Math.round(Lr(this._months)),n){case"week":return e/7+o/6048e5;case"day":return e+o/864e5;case"hour":return 24*e+o/36e5;case"minute":return 1440*e+o/6e4;case"second":return 86400*e+o/1e3;case"millisecond":return Math.floor(864e5*e)+o;default:throw new Error("Unknown unit "+n)}}function Wr(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*dn(this._months/12):NaN}function Rr(n){return function(){return this.as(n)}}var Fr=Rr("ms"),Dr=Rr("s"),Or=Rr("m"),Ar=Rr("h"),Ir=Rr("d"),Hr=Rr("w"),Nr=Rr("M"),Er=Rr("Q"),jr=Rr("y");function Gr(){return Mo(this)}function Yr(n){return n=on(n),this.isValid()?this[n+"s"]():NaN}function Vr(n){return function(){return this.isValid()?this._data[n]:NaN}}var qr=Vr("milliseconds"),Ur=Vr("seconds"),Xr=Vr("minutes"),Zr=Vr("hours"),$r=Vr("days"),Kr=Vr("months"),Jr=Vr("years");function Qr(){return cn(this.days()/7)}var ni=Math.round,ei={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function ti(n,e,t,o,a){return a.relativeTime(e||1,!!t,n,o)}function oi(n,e,t,o){var a=Mo(n).abs(),r=ni(a.as("s")),i=ni(a.as("m")),l=ni(a.as("h")),f=ni(a.as("d")),p=ni(a.as("M")),c=ni(a.as("w")),d=ni(a.as("y")),s=r<=t.ss&&["s",r]||r<t.s&&["ss",r]||i<=1&&["m"]||i<t.m&&["mm",i]||l<=1&&["h"]||l<t.h&&["hh",l]||f<=1&&["d"]||f<t.d&&["dd",f];return null!=t.w&&(s=s||c<=1&&["w"]||c<t.w&&["ww",c]),(s=s||p<=1&&["M"]||p<t.M&&["MM",p]||d<=1&&["y"]||["yy",d])[2]=e,s[3]=+n>0,s[4]=o,ti.apply(null,s)}function ai(n){return void 0===n?ni:"function"==typeof n&&(ni=n,!0)}function ri(n,e){return void 0!==ei[n]&&(void 0===e?ei[n]:(ei[n]=e,"s"===n&&(ei.ss=e-1),!0))}function ii(n,e){if(!this.isValid())return this.localeData().invalidDate();var t,o,a=!1,r=ei;return"object"==typeof n&&(e=n,n=!1),"boolean"==typeof n&&(a=n),"object"==typeof e&&(r=Object.assign({},ei,e),null!=e.s&&null==e.ss&&(r.ss=e.s-1)),o=oi(this,!a,r,t=this.localeData()),a&&(o=t.pastFuture(+this,o)),t.postformat(o)}var li=Math.abs;function fi(n){return(n>0)-(n<0)||+n}function pi(){if(!this.isValid())return this.localeData().invalidDate();var n,e,t,o,a,r,i,l,f=li(this._milliseconds)/1e3,p=li(this._days),c=li(this._months),d=this.asSeconds();return d?(n=cn(f/60),e=cn(n/60),f%=60,n%=60,t=cn(c/12),c%=12,o=f?f.toFixed(3).replace(/\.?0+$/,""):"",a=d<0?"-":"",r=fi(this._months)!==fi(d)?"-":"",i=fi(this._days)!==fi(d)?"-":"",l=fi(this._milliseconds)!==fi(d)?"-":"",a+"P"+(t?r+t+"Y":"")+(c?r+c+"M":"")+(p?i+p+"D":"")+(e||n||f?"T":"")+(e?l+e+"H":"")+(n?l+n+"M":"")+(f?l+o+"S":"")):"P0D"}var ci=io.prototype;return ci.isValid=ao,ci.abs=kr,ci.add=Br,ci.subtract=Pr,ci.as=zr,ci.asMilliseconds=Fr,ci.asSeconds=Dr,ci.asMinutes=Or,ci.asHours=Ar,ci.asDays=Ir,ci.asWeeks=Hr,ci.asMonths=Nr,ci.asQuarters=Er,ci.asYears=jr,ci.valueOf=Wr,ci._bubble=Tr,ci.clone=Gr,ci.get=Yr,ci.milliseconds=qr,ci.seconds=Ur,ci.minutes=Xr,ci.hours=Zr,ci.days=$r,ci.weeks=Qr,ci.months=Kr,ci.years=Jr,ci.humanize=ii,ci.toISOString=pi,ci.toString=pi,ci.toJSON=pi,ci.locale=la,ci.localeData=pa,ci.toIsoString=B("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",pi),ci.lang=fa,N("X",0,0,"unix"),N("x",0,0,"valueOf"),On("x",zn),On("X",Fn),En("X",(function(n,e,t){t._d=new Date(1e3*parseFloat(n))})),En("x",(function(n,e,t){t._d=new Date(dn(n))})),
 //! moment.js
-o.version="2.29.1",a(Zt),o.fn=pr,o.min=Qt,o.max=no,o.now=eo,o.utc=g,o.unix=cr,o.months=_r,o.isDate=d,o.locale=bt,o.invalid=h,o.duration=Mo,o.isMoment=k,o.weekdays=vr,o.parseZone=dr,o.localeData=ht,o.isDuration=lo,o.monthsShort=hr,o.weekdaysMin=wr,o.defineLocale=ut,o.updateLocale=_t,o.locales=vt,o.weekdaysShort=xr,o.normalizeUnits=on,o.relativeTimeRounding=ai,o.relativeTimeThreshold=ri,o.calendarFormat=jo,o.prototype=pr,o.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},o}()})),Hn=xn((function(n,e){
+o.version="2.29.1",a(Zt),o.fn=pr,o.min=Qt,o.max=no,o.now=eo,o.utc=g,o.unix=cr,o.months=_r,o.isDate=d,o.locale=bt,o.invalid=h,o.duration=Mo,o.isMoment=k,o.weekdays=vr,o.parseZone=dr,o.localeData=ht,o.isDuration=lo,o.monthsShort=hr,o.weekdaysMin=wr,o.defineLocale=ut,o.updateLocale=_t,o.locales=vt,o.weekdaysShort=xr,o.normalizeUnits=on,o.relativeTimeRounding=ai,o.relativeTimeThreshold=ri,o.calendarFormat=jo,o.prototype=pr,o.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},o}()})),Nn=xn((function(n,e){
 /*!
  * Chart.js v2.9.4
  * https://www.chartjs.org
  * (c) 2020 Chart.js Contributors
  * Released under the MIT License
  */
-n.exports=function(n){function e(n,e){return n(e={exports:{}},e.exports),e.exports}function t(n){return n&&n.default||n}n=n&&n.hasOwnProperty("default")?n.default:n;var o={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},a=e((function(n){var e={};for(var t in o)o.hasOwnProperty(t)&&(e[o[t]]=t);var a=n.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var r in a)if(a.hasOwnProperty(r)){if(!("channels"in a[r]))throw new Error("missing channels property: "+r);if(!("labels"in a[r]))throw new Error("missing channel labels property: "+r);if(a[r].labels.length!==a[r].channels)throw new Error("channel and label counts mismatch: "+r);var i=a[r].channels,l=a[r].labels;delete a[r].channels,delete a[r].labels,Object.defineProperty(a[r],"channels",{value:i}),Object.defineProperty(a[r],"labels",{value:l})}function f(n,e){return Math.pow(n[0]-e[0],2)+Math.pow(n[1]-e[1],2)+Math.pow(n[2]-e[2],2)}a.rgb.hsl=function(n){var e,t,o=n[0]/255,a=n[1]/255,r=n[2]/255,i=Math.min(o,a,r),l=Math.max(o,a,r),f=l-i;return l===i?e=0:o===l?e=(a-r)/f:a===l?e=2+(r-o)/f:r===l&&(e=4+(o-a)/f),(e=Math.min(60*e,360))<0&&(e+=360),t=(i+l)/2,[e,100*(l===i?0:t<=.5?f/(l+i):f/(2-l-i)),100*t]},a.rgb.hsv=function(n){var e,t,o,a,r,i=n[0]/255,l=n[1]/255,f=n[2]/255,p=Math.max(i,l,f),c=p-Math.min(i,l,f),d=function(n){return(p-n)/6/c+.5};return 0===c?a=r=0:(r=c/p,e=d(i),t=d(l),o=d(f),i===p?a=o-t:l===p?a=1/3+e-o:f===p&&(a=2/3+t-e),a<0?a+=1:a>1&&(a-=1)),[360*a,100*r,100*p]},a.rgb.hwb=function(n){var e=n[0],t=n[1],o=n[2];return[a.rgb.hsl(n)[0],1/255*Math.min(e,Math.min(t,o))*100,100*(o=1-1/255*Math.max(e,Math.max(t,o)))]},a.rgb.cmyk=function(n){var e,t=n[0]/255,o=n[1]/255,a=n[2]/255;return[100*((1-t-(e=Math.min(1-t,1-o,1-a)))/(1-e)||0),100*((1-o-e)/(1-e)||0),100*((1-a-e)/(1-e)||0),100*e]},a.rgb.keyword=function(n){var t=e[n];if(t)return t;var a,r=1/0;for(var i in o)if(o.hasOwnProperty(i)){var l=f(n,o[i]);l<r&&(r=l,a=i)}return a},a.keyword.rgb=function(n){return o[n]},a.rgb.xyz=function(n){var e=n[0]/255,t=n[1]/255,o=n[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(o=o>.04045?Math.pow((o+.055)/1.055,2.4):o/12.92)),100*(.2126*e+.7152*t+.0722*o),100*(.0193*e+.1192*t+.9505*o)]},a.rgb.lab=function(n){var e=a.rgb.xyz(n),t=e[0],o=e[1],r=e[2];return o/=100,r/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116)-16,500*(t-o),200*(o-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},a.hsl.rgb=function(n){var e,t,o,a,r,i=n[0]/360,l=n[1]/100,f=n[2]/100;if(0===l)return[r=255*f,r,r];e=2*f-(t=f<.5?f*(1+l):f+l-f*l),a=[0,0,0];for(var p=0;p<3;p++)(o=i+1/3*-(p-1))<0&&o++,o>1&&o--,r=6*o<1?e+6*(t-e)*o:2*o<1?t:3*o<2?e+(t-e)*(2/3-o)*6:e,a[p]=255*r;return a},a.hsl.hsv=function(n){var e=n[0],t=n[1]/100,o=n[2]/100,a=t,r=Math.max(o,.01);return t*=(o*=2)<=1?o:2-o,a*=r<=1?r:2-r,[e,100*(0===o?2*a/(r+a):2*t/(o+t)),(o+t)/2*100]},a.hsv.rgb=function(n){var e=n[0]/60,t=n[1]/100,o=n[2]/100,a=Math.floor(e)%6,r=e-Math.floor(e),i=255*o*(1-t),l=255*o*(1-t*r),f=255*o*(1-t*(1-r));switch(o*=255,a){case 0:return[o,f,i];case 1:return[l,o,i];case 2:return[i,o,f];case 3:return[i,l,o];case 4:return[f,i,o];case 5:return[o,i,l]}},a.hsv.hsl=function(n){var e,t,o,a=n[0],r=n[1]/100,i=n[2]/100,l=Math.max(i,.01);return o=(2-r)*i,t=r*l,[a,100*(t=(t/=(e=(2-r)*l)<=1?e:2-e)||0),100*(o/=2)]},a.hwb.rgb=function(n){var e,t,o,a,r,i,l,f=n[0]/360,p=n[1]/100,c=n[2]/100,d=p+c;switch(d>1&&(p/=d,c/=d),o=6*f-(e=Math.floor(6*f)),0!=(1&e)&&(o=1-o),a=p+o*((t=1-c)-p),e){default:case 6:case 0:r=t,i=a,l=p;break;case 1:r=a,i=t,l=p;break;case 2:r=p,i=t,l=a;break;case 3:r=p,i=a,l=t;break;case 4:r=a,i=p,l=t;break;case 5:r=t,i=p,l=a}return[255*r,255*i,255*l]},a.cmyk.rgb=function(n){var e=n[0]/100,t=n[1]/100,o=n[2]/100,a=n[3]/100;return[255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,o*(1-a)+a))]},a.xyz.rgb=function(n){var e,t,o,a=n[0]/100,r=n[1]/100,i=n[2]/100;return t=-.9689*a+1.8758*r+.0415*i,o=.0557*a+-.204*r+1.057*i,e=(e=3.2406*a+-1.5372*r+-.4986*i)>.0031308?1.055*Math.pow(e,1/2.4)-.055:12.92*e,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,o=o>.0031308?1.055*Math.pow(o,1/2.4)-.055:12.92*o,[255*(e=Math.min(Math.max(0,e),1)),255*(t=Math.min(Math.max(0,t),1)),255*(o=Math.min(Math.max(0,o),1))]},a.xyz.lab=function(n){var e=n[0],t=n[1],o=n[2];return t/=100,o/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(e-t),200*(t-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},a.lab.xyz=function(n){var e,t,o,a=n[0];e=n[1]/500+(t=(a+16)/116),o=t-n[2]/200;var r=Math.pow(t,3),i=Math.pow(e,3),l=Math.pow(o,3);return t=r>.008856?r:(t-16/116)/7.787,e=i>.008856?i:(e-16/116)/7.787,o=l>.008856?l:(o-16/116)/7.787,[e*=95.047,t*=100,o*=108.883]},a.lab.lch=function(n){var e,t=n[0],o=n[1],a=n[2];return(e=360*Math.atan2(a,o)/2/Math.PI)<0&&(e+=360),[t,Math.sqrt(o*o+a*a),e]},a.lch.lab=function(n){var e,t=n[0],o=n[1];return e=n[2]/360*2*Math.PI,[t,o*Math.cos(e),o*Math.sin(e)]},a.rgb.ansi16=function(n){var e=n[0],t=n[1],o=n[2],r=1 in arguments?arguments[1]:a.rgb.hsv(n)[2];if(0===(r=Math.round(r/50)))return 30;var i=30+(Math.round(o/255)<<2|Math.round(t/255)<<1|Math.round(e/255));return 2===r&&(i+=60),i},a.hsv.ansi16=function(n){return a.rgb.ansi16(a.hsv.rgb(n),n[2])},a.rgb.ansi256=function(n){var e=n[0],t=n[1],o=n[2];return e===t&&t===o?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(o/255*5)},a.ansi16.rgb=function(n){var e=n%10;if(0===e||7===e)return n>50&&(e+=3.5),[e=e/10.5*255,e,e];var t=.5*(1+~~(n>50));return[(1&e)*t*255,(e>>1&1)*t*255,(e>>2&1)*t*255]},a.ansi256.rgb=function(n){if(n>=232){var e=10*(n-232)+8;return[e,e,e]}var t;return n-=16,[Math.floor(n/36)/5*255,Math.floor((t=n%36)/6)/5*255,t%6/5*255]},a.rgb.hex=function(n){var e=(((255&Math.round(n[0]))<<16)+((255&Math.round(n[1]))<<8)+(255&Math.round(n[2]))).toString(16).toUpperCase();return"000000".substring(e.length)+e},a.hex.rgb=function(n){var e=n.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];var t=e[0];3===e[0].length&&(t=t.split("").map((function(n){return n+n})).join(""));var o=parseInt(t,16);return[o>>16&255,o>>8&255,255&o]},a.rgb.hcg=function(n){var e,t=n[0]/255,o=n[1]/255,a=n[2]/255,r=Math.max(Math.max(t,o),a),i=Math.min(Math.min(t,o),a),l=r-i;return e=l<=0?0:r===t?(o-a)/l%6:r===o?2+(a-t)/l:4+(t-o)/l+4,e/=6,[360*(e%=1),100*l,100*(l<1?i/(1-l):0)]},a.hsl.hcg=function(n){var e=n[1]/100,t=n[2]/100,o=1,a=0;return(o=t<.5?2*e*t:2*e*(1-t))<1&&(a=(t-.5*o)/(1-o)),[n[0],100*o,100*a]},a.hsv.hcg=function(n){var e=n[1]/100,t=n[2]/100,o=e*t,a=0;return o<1&&(a=(t-o)/(1-o)),[n[0],100*o,100*a]},a.hcg.rgb=function(n){var e=n[0]/360,t=n[1]/100,o=n[2]/100;if(0===t)return[255*o,255*o,255*o];var a=[0,0,0],r=e%1*6,i=r%1,l=1-i,f=0;switch(Math.floor(r)){case 0:a[0]=1,a[1]=i,a[2]=0;break;case 1:a[0]=l,a[1]=1,a[2]=0;break;case 2:a[0]=0,a[1]=1,a[2]=i;break;case 3:a[0]=0,a[1]=l,a[2]=1;break;case 4:a[0]=i,a[1]=0,a[2]=1;break;default:a[0]=1,a[1]=0,a[2]=l}return f=(1-t)*o,[255*(t*a[0]+f),255*(t*a[1]+f),255*(t*a[2]+f)]},a.hcg.hsv=function(n){var e=n[1]/100,t=e+n[2]/100*(1-e),o=0;return t>0&&(o=e/t),[n[0],100*o,100*t]},a.hcg.hsl=function(n){var e=n[1]/100,t=n[2]/100*(1-e)+.5*e,o=0;return t>0&&t<.5?o=e/(2*t):t>=.5&&t<1&&(o=e/(2*(1-t))),[n[0],100*o,100*t]},a.hcg.hwb=function(n){var e=n[1]/100,t=e+n[2]/100*(1-e);return[n[0],100*(t-e),100*(1-t)]},a.hwb.hcg=function(n){var e=n[1]/100,t=1-n[2]/100,o=t-e,a=0;return o<1&&(a=(t-o)/(1-o)),[n[0],100*o,100*a]},a.apple.rgb=function(n){return[n[0]/65535*255,n[1]/65535*255,n[2]/65535*255]},a.rgb.apple=function(n){return[n[0]/255*65535,n[1]/255*65535,n[2]/255*65535]},a.gray.rgb=function(n){return[n[0]/100*255,n[0]/100*255,n[0]/100*255]},a.gray.hsl=a.gray.hsv=function(n){return[0,0,n[0]]},a.gray.hwb=function(n){return[0,100,n[0]]},a.gray.cmyk=function(n){return[0,0,0,n[0]]},a.gray.lab=function(n){return[n[0],0,0]},a.gray.hex=function(n){var e=255&Math.round(n[0]/100*255),t=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(t.length)+t},a.rgb.gray=function(n){return[(n[0]+n[1]+n[2])/3/255*100]}}));function r(){for(var n={},e=Object.keys(a),t=e.length,o=0;o<t;o++)n[e[o]]={distance:-1,parent:null};return n}function i(n){var e=r(),t=[n];for(e[n].distance=0;t.length;)for(var o=t.pop(),i=Object.keys(a[o]),l=i.length,f=0;f<l;f++){var p=i[f],c=e[p];-1===c.distance&&(c.distance=e[o].distance+1,c.parent=o,t.unshift(p))}return e}function l(n,e){return function(t){return e(n(t))}}function f(n,e){for(var t=[e[n].parent,n],o=a[e[n].parent][n],r=e[n].parent;e[r].parent;)t.unshift(e[r].parent),o=l(a[e[r].parent][r],o),r=e[r].parent;return o.conversion=t,o}a.rgb,a.hsl,a.hsv,a.hwb,a.cmyk,a.xyz,a.lab,a.lch,a.hex,a.keyword,a.ansi16,a.ansi256,a.hcg,a.apple,a.gray;var p=function(n){for(var e=i(n),t={},o=Object.keys(e),a=o.length,r=0;r<a;r++){var l=o[r];null!==e[l].parent&&(t[l]=f(l,e))}return t},c={};function d(n){var e=function(e){return null==e?e:(arguments.length>1&&(e=Array.prototype.slice.call(arguments)),n(e))};return"conversion"in n&&(e.conversion=n.conversion),e}function s(n){var e=function(e){if(null==e)return e;arguments.length>1&&(e=Array.prototype.slice.call(arguments));var t=n(e);if("object"==typeof t)for(var o=t.length,a=0;a<o;a++)t[a]=Math.round(t[a]);return t};return"conversion"in n&&(e.conversion=n.conversion),e}Object.keys(a).forEach((function(n){c[n]={},Object.defineProperty(c[n],"channels",{value:a[n].channels}),Object.defineProperty(c[n],"labels",{value:a[n].labels});var e=p(n);Object.keys(e).forEach((function(t){var o=e[t];c[n][t]=s(o),c[n][t].raw=d(o)}))}));var m=c,g={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},b={getRgba:u,getHsla:_,getRgb:v,getHsl:x,getHwb:h,getAlpha:w,hexString:y,rgbString:k,rgbaString:C,percentString:B,percentaString:P,hslString:S,hslaString:T,hwbString:M,keyword:L};function u(n){if(n){var e=/^#([a-fA-F0-9]{3,4})$/i,t=/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i,o=/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i,a=/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i,r=/(\w+)/,i=[0,0,0],l=1,f=n.match(e),p="";if(f){p=(f=f[1])[3];for(var c=0;c<i.length;c++)i[c]=parseInt(f[c]+f[c],16);p&&(l=Math.round(parseInt(p+p,16)/255*100)/100)}else if(f=n.match(t)){for(p=f[2],f=f[1],c=0;c<i.length;c++)i[c]=parseInt(f.slice(2*c,2*c+2),16);p&&(l=Math.round(parseInt(p,16)/255*100)/100)}else if(f=n.match(o)){for(c=0;c<i.length;c++)i[c]=parseInt(f[c+1]);l=parseFloat(f[4])}else if(f=n.match(a)){for(c=0;c<i.length;c++)i[c]=Math.round(2.55*parseFloat(f[c+1]));l=parseFloat(f[4])}else if(f=n.match(r)){if("transparent"==f[1])return[0,0,0,0];if(!(i=g[f[1]]))return}for(c=0;c<i.length;c++)i[c]=z(i[c],0,255);return l=l||0==l?z(l,0,1):1,i[3]=l,i}}function _(n){if(n){var e=/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/,t=n.match(e);if(t){var o=parseFloat(t[4]);return[z(parseInt(t[1]),0,360),z(parseFloat(t[2]),0,100),z(parseFloat(t[3]),0,100),z(isNaN(o)?1:o,0,1)]}}}function h(n){if(n){var e=/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/,t=n.match(e);if(t){var o=parseFloat(t[4]);return[z(parseInt(t[1]),0,360),z(parseFloat(t[2]),0,100),z(parseFloat(t[3]),0,100),z(isNaN(o)?1:o,0,1)]}}}function v(n){var e=u(n);return e&&e.slice(0,3)}function x(n){var e=_(n);return e&&e.slice(0,3)}function w(n){var e=u(n);return e||(e=_(n))||(e=h(n))?e[3]:void 0}function y(n,e){return e=void 0!==e&&3===n.length?e:n[3],"#"+W(n[0])+W(n[1])+W(n[2])+(e>=0&&e<1?W(Math.round(255*e)):"")}function k(n,e){return e<1||n[3]&&n[3]<1?C(n,e):"rgb("+n[0]+", "+n[1]+", "+n[2]+")"}function C(n,e){return void 0===e&&(e=void 0!==n[3]?n[3]:1),"rgba("+n[0]+", "+n[1]+", "+n[2]+", "+e+")"}function B(n,e){return e<1||n[3]&&n[3]<1?P(n,e):"rgb("+Math.round(n[0]/255*100)+"%, "+Math.round(n[1]/255*100)+"%, "+Math.round(n[2]/255*100)+"%)"}function P(n,e){return"rgba("+Math.round(n[0]/255*100)+"%, "+Math.round(n[1]/255*100)+"%, "+Math.round(n[2]/255*100)+"%, "+(e||n[3]||1)+")"}function S(n,e){return e<1||n[3]&&n[3]<1?T(n,e):"hsl("+n[0]+", "+n[1]+"%, "+n[2]+"%)"}function T(n,e){return void 0===e&&(e=void 0!==n[3]?n[3]:1),"hsla("+n[0]+", "+n[1]+"%, "+n[2]+"%, "+e+")"}function M(n,e){return void 0===e&&(e=void 0!==n[3]?n[3]:1),"hwb("+n[0]+", "+n[1]+"%, "+n[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"}function L(n){return R[n.slice(0,3)]}function z(n,e,t){return Math.min(Math.max(e,n),t)}function W(n){var e=n.toString(16).toUpperCase();return e.length<2?"0"+e:e}var R={};for(var F in g)R[g[F]]=F;var D=function(n){return n instanceof D?n:this instanceof D?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof n?(e=b.getRgba(n))?this.setValues("rgb",e):(e=b.getHsla(n))?this.setValues("hsl",e):(e=b.getHwb(n))&&this.setValues("hwb",e):"object"==typeof n&&(void 0!==(e=n).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e)))):new D(n);var e};D.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var n=this.values;return 1!==n.alpha?n.hwb.concat([n.alpha]):n.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var n=this.values;return n.rgb.concat([n.alpha])},hslaArray:function(){var n=this.values;return n.hsl.concat([n.alpha])},alpha:function(n){return void 0===n?this.values.alpha:(this.setValues("alpha",n),this)},red:function(n){return this.setChannel("rgb",0,n)},green:function(n){return this.setChannel("rgb",1,n)},blue:function(n){return this.setChannel("rgb",2,n)},hue:function(n){return n&&(n=(n%=360)<0?360+n:n),this.setChannel("hsl",0,n)},saturation:function(n){return this.setChannel("hsl",1,n)},lightness:function(n){return this.setChannel("hsl",2,n)},saturationv:function(n){return this.setChannel("hsv",1,n)},whiteness:function(n){return this.setChannel("hwb",1,n)},blackness:function(n){return this.setChannel("hwb",2,n)},value:function(n){return this.setChannel("hsv",2,n)},cyan:function(n){return this.setChannel("cmyk",0,n)},magenta:function(n){return this.setChannel("cmyk",1,n)},yellow:function(n){return this.setChannel("cmyk",2,n)},black:function(n){return this.setChannel("cmyk",3,n)},hexString:function(){return b.hexString(this.values.rgb)},rgbString:function(){return b.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return b.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return b.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return b.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return b.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return b.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return b.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var n=this.values.rgb;return n[0]<<16|n[1]<<8|n[2]},luminosity:function(){for(var n=this.values.rgb,e=[],t=0;t<n.length;t++){var o=n[t]/255;e[t]=o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(n){var e=this.luminosity(),t=n.luminosity();return e>t?(e+.05)/(t+.05):(t+.05)/(e+.05)},level:function(n){var e=this.contrast(n);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var n=this.values.rgb;return(299*n[0]+587*n[1]+114*n[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var n=[],e=0;e<3;e++)n[e]=255-this.values.rgb[e];return this.setValues("rgb",n),this},lighten:function(n){var e=this.values.hsl;return e[2]+=e[2]*n,this.setValues("hsl",e),this},darken:function(n){var e=this.values.hsl;return e[2]-=e[2]*n,this.setValues("hsl",e),this},saturate:function(n){var e=this.values.hsl;return e[1]+=e[1]*n,this.setValues("hsl",e),this},desaturate:function(n){var e=this.values.hsl;return e[1]-=e[1]*n,this.setValues("hsl",e),this},whiten:function(n){var e=this.values.hwb;return e[1]+=e[1]*n,this.setValues("hwb",e),this},blacken:function(n){var e=this.values.hwb;return e[2]+=e[2]*n,this.setValues("hwb",e),this},greyscale:function(){var n=this.values.rgb,e=.3*n[0]+.59*n[1]+.11*n[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(n){var e=this.values.alpha;return this.setValues("alpha",e-e*n),this},opaquer:function(n){var e=this.values.alpha;return this.setValues("alpha",e+e*n),this},rotate:function(n){var e=this.values.hsl,t=(e[0]+n)%360;return e[0]=t<0?360+t:t,this.setValues("hsl",e),this},mix:function(n,e){var t=this,o=n,a=void 0===e?.5:e,r=2*a-1,i=t.alpha()-o.alpha(),l=((r*i==-1?r:(r+i)/(1+r*i))+1)/2,f=1-l;return this.rgb(l*t.red()+f*o.red(),l*t.green()+f*o.green(),l*t.blue()+f*o.blue()).alpha(t.alpha()*a+o.alpha()*(1-a))},toJSON:function(){return this.rgb()},clone:function(){var n,e,t=new D,o=this.values,a=t.values;for(var r in o)o.hasOwnProperty(r)&&(n=o[r],"[object Array]"===(e={}.toString.call(n))?a[r]=n.slice(0):"[object Number]"===e?a[r]=n:console.error("unexpected color value:",n));return t}},D.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},D.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},D.prototype.getValues=function(n){for(var e=this.values,t={},o=0;o<n.length;o++)t[n.charAt(o)]=e[n][o];return 1!==e.alpha&&(t.a=e.alpha),t},D.prototype.setValues=function(n,e){var t,o,a=this.values,r=this.spaces,i=this.maxes,l=1;if(this.valid=!0,"alpha"===n)l=e;else if(e.length)a[n]=e.slice(0,n.length),l=e[n.length];else if(void 0!==e[n.charAt(0)]){for(t=0;t<n.length;t++)a[n][t]=e[n.charAt(t)];l=e.a}else if(void 0!==e[r[n][0]]){var f=r[n];for(t=0;t<n.length;t++)a[n][t]=e[f[t]];l=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===l?a.alpha:l)),"alpha"===n)return!1;for(t=0;t<n.length;t++)o=Math.max(0,Math.min(i[n][t],a[n][t])),a[n][t]=Math.round(o);for(var p in r)p!==n&&(a[p]=m[n][p](a[n]));return!0},D.prototype.setSpace=function(n,e){var t=e[0];return void 0===t?this.getValues(n):("number"==typeof t&&(t=Array.prototype.slice.call(e)),this.setValues(n,t),this)},D.prototype.setChannel=function(n,e,t){var o=this.values[n];return void 0===t?o[e]:(t===o[e]||(o[e]=t,this.setValues(n,o)),this)},"undefined"!=typeof window&&(window.Color=D);var O=D;function A(n){return-1===["__proto__","prototype","constructor"].indexOf(n)}var I,H={noop:function(){},uid:(I=0,function(){return I++}),isNullOrUndef:function(n){return null==n},isArray:function(n){if(Array.isArray&&Array.isArray(n))return!0;var e=Object.prototype.toString.call(n);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)},isObject:function(n){return null!==n&&"[object Object]"===Object.prototype.toString.call(n)},isFinite:function(n){return("number"==typeof n||n instanceof Number)&&isFinite(n)},valueOrDefault:function(n,e){return void 0===n?e:n},valueAtIndexOrDefault:function(n,e,t){return H.valueOrDefault(H.isArray(n)?n[e]:n,t)},callback:function(n,e,t){if(n&&"function"==typeof n.call)return n.apply(t,e)},each:function(n,e,t,o){var a,r,i;if(H.isArray(n))if(r=n.length,o)for(a=r-1;a>=0;a--)e.call(t,n[a],a);else for(a=0;a<r;a++)e.call(t,n[a],a);else if(H.isObject(n))for(r=(i=Object.keys(n)).length,a=0;a<r;a++)e.call(t,n[i[a]],i[a])},arrayEquals:function(n,e){var t,o,a,r;if(!n||!e||n.length!==e.length)return!1;for(t=0,o=n.length;t<o;++t)if(a=n[t],r=e[t],a instanceof Array&&r instanceof Array){if(!H.arrayEquals(a,r))return!1}else if(a!==r)return!1;return!0},clone:function(n){if(H.isArray(n))return n.map(H.clone);if(H.isObject(n)){for(var e=Object.create(n),t=Object.keys(n),o=t.length,a=0;a<o;++a)e[t[a]]=H.clone(n[t[a]]);return e}return n},_merger:function(n,e,t,o){if(A(n)){var a=e[n],r=t[n];H.isObject(a)&&H.isObject(r)?H.merge(a,r,o):e[n]=H.clone(r)}},_mergerIf:function(n,e,t){if(A(n)){var o=e[n],a=t[n];H.isObject(o)&&H.isObject(a)?H.mergeIf(o,a):e.hasOwnProperty(n)||(e[n]=H.clone(a))}},merge:function(n,e,t){var o,a,r,i,l,f=H.isArray(e)?e:[e],p=f.length;if(!H.isObject(n))return n;for(o=(t=t||{}).merger||H._merger,a=0;a<p;++a)if(e=f[a],H.isObject(e))for(l=0,i=(r=Object.keys(e)).length;l<i;++l)o(r[l],n,e,t);return n},mergeIf:function(n,e){return H.merge(n,e,{merger:H._mergerIf})},extend:Object.assign||function(n){return H.merge(n,[].slice.call(arguments,1),{merger:function(n,e,t){e[n]=t[n]}})},inherits:function(n){var e=this,t=n&&n.hasOwnProperty("constructor")?n.constructor:function(){return e.apply(this,arguments)},o=function(){this.constructor=t};return o.prototype=e.prototype,t.prototype=new o,t.extend=H.inherits,n&&H.extend(t.prototype,n),t.__super__=e.prototype,t},_deprecated:function(n,e,t,o){void 0!==e&&console.warn(n+': "'+t+'" is deprecated. Please use "'+o+'" instead')}},N=H;H.callCallback=H.callback,H.indexOf=function(n,e,t){return Array.prototype.indexOf.call(n,e,t)},H.getValueOrDefault=H.valueOrDefault,H.getValueAtIndexOrDefault=H.valueAtIndexOrDefault;var E={linear:function(n){return n},easeInQuad:function(n){return n*n},easeOutQuad:function(n){return-n*(n-2)},easeInOutQuad:function(n){return(n/=.5)<1?.5*n*n:-.5*(--n*(n-2)-1)},easeInCubic:function(n){return n*n*n},easeOutCubic:function(n){return(n-=1)*n*n+1},easeInOutCubic:function(n){return(n/=.5)<1?.5*n*n*n:.5*((n-=2)*n*n+2)},easeInQuart:function(n){return n*n*n*n},easeOutQuart:function(n){return-((n-=1)*n*n*n-1)},easeInOutQuart:function(n){return(n/=.5)<1?.5*n*n*n*n:-.5*((n-=2)*n*n*n-2)},easeInQuint:function(n){return n*n*n*n*n},easeOutQuint:function(n){return(n-=1)*n*n*n*n+1},easeInOutQuint:function(n){return(n/=.5)<1?.5*n*n*n*n*n:.5*((n-=2)*n*n*n*n+2)},easeInSine:function(n){return 1-Math.cos(n*(Math.PI/2))},easeOutSine:function(n){return Math.sin(n*(Math.PI/2))},easeInOutSine:function(n){return-.5*(Math.cos(Math.PI*n)-1)},easeInExpo:function(n){return 0===n?0:Math.pow(2,10*(n-1))},easeOutExpo:function(n){return 1===n?1:1-Math.pow(2,-10*n)},easeInOutExpo:function(n){return 0===n?0:1===n?1:(n/=.5)<1?.5*Math.pow(2,10*(n-1)):.5*(2-Math.pow(2,-10*--n))},easeInCirc:function(n){return n>=1?n:-(Math.sqrt(1-n*n)-1)},easeOutCirc:function(n){return Math.sqrt(1-(n-=1)*n)},easeInOutCirc:function(n){return(n/=.5)<1?-.5*(Math.sqrt(1-n*n)-1):.5*(Math.sqrt(1-(n-=2)*n)+1)},easeInElastic:function(n){var e=1.70158,t=0,o=1;return 0===n?0:1===n?1:(t||(t=.3),e=t/(2*Math.PI)*Math.asin(1/o),-o*Math.pow(2,10*(n-=1))*Math.sin((n-e)*(2*Math.PI)/t))},easeOutElastic:function(n){var e=1.70158,t=0,o=1;return 0===n?0:1===n?1:(t||(t=.3),e=t/(2*Math.PI)*Math.asin(1/o),o*Math.pow(2,-10*n)*Math.sin((n-e)*(2*Math.PI)/t)+1)},easeInOutElastic:function(n){var e=1.70158,t=0,o=1;return 0===n?0:2==(n/=.5)?1:(t||(t=.45),e=t/(2*Math.PI)*Math.asin(1/o),n<1?o*Math.pow(2,10*(n-=1))*Math.sin((n-e)*(2*Math.PI)/t)*-.5:o*Math.pow(2,-10*(n-=1))*Math.sin((n-e)*(2*Math.PI)/t)*.5+1)},easeInBack:function(n){var e=1.70158;return n*n*((e+1)*n-e)},easeOutBack:function(n){var e=1.70158;return(n-=1)*n*((e+1)*n+e)+1},easeInOutBack:function(n){var e=1.70158;return(n/=.5)<1?n*n*((1+(e*=1.525))*n-e)*.5:.5*((n-=2)*n*((1+(e*=1.525))*n+e)+2)},easeInBounce:function(n){return 1-E.easeOutBounce(1-n)},easeOutBounce:function(n){return n<1/2.75?7.5625*n*n:n<2/2.75?7.5625*(n-=1.5/2.75)*n+.75:n<2.5/2.75?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375},easeInOutBounce:function(n){return n<.5?.5*E.easeInBounce(2*n):.5*E.easeOutBounce(2*n-1)+.5}},j={effects:E};N.easingEffects=E;var G=Math.PI,Y=G/180,V=2*G,q=G/2,U=G/4,X=2*G/3,Z={clear:function(n){n.ctx.clearRect(0,0,n.width,n.height)},roundedRect:function(n,e,t,o,a,r){if(r){var i=Math.min(r,a/2,o/2),l=e+i,f=t+i,p=e+o-i,c=t+a-i;n.moveTo(e,f),l<p&&f<c?(n.arc(l,f,i,-G,-q),n.arc(p,f,i,-q,0),n.arc(p,c,i,0,q),n.arc(l,c,i,q,G)):l<p?(n.moveTo(l,t),n.arc(p,f,i,-q,q),n.arc(l,f,i,q,G+q)):f<c?(n.arc(l,f,i,-G,0),n.arc(l,c,i,0,G)):n.arc(l,f,i,-G,G),n.closePath(),n.moveTo(e,t)}else n.rect(e,t,o,a)},drawPoint:function(n,e,t,o,a,r){var i,l,f,p,c,d=(r||0)*Y;if(e&&"object"==typeof e&&("[object HTMLImageElement]"===(i=e.toString())||"[object HTMLCanvasElement]"===i))return n.save(),n.translate(o,a),n.rotate(d),n.drawImage(e,-e.width/2,-e.height/2,e.width,e.height),void n.restore();if(!(isNaN(t)||t<=0)){switch(n.beginPath(),e){default:n.arc(o,a,t,0,V),n.closePath();break;case"triangle":n.moveTo(o+Math.sin(d)*t,a-Math.cos(d)*t),d+=X,n.lineTo(o+Math.sin(d)*t,a-Math.cos(d)*t),d+=X,n.lineTo(o+Math.sin(d)*t,a-Math.cos(d)*t),n.closePath();break;case"rectRounded":p=t-(c=.516*t),l=Math.cos(d+U)*p,f=Math.sin(d+U)*p,n.arc(o-l,a-f,c,d-G,d-q),n.arc(o+f,a-l,c,d-q,d),n.arc(o+l,a+f,c,d,d+q),n.arc(o-f,a+l,c,d+q,d+G),n.closePath();break;case"rect":if(!r){p=Math.SQRT1_2*t,n.rect(o-p,a-p,2*p,2*p);break}d+=U;case"rectRot":l=Math.cos(d)*t,f=Math.sin(d)*t,n.moveTo(o-l,a-f),n.lineTo(o+f,a-l),n.lineTo(o+l,a+f),n.lineTo(o-f,a+l),n.closePath();break;case"crossRot":d+=U;case"cross":l=Math.cos(d)*t,f=Math.sin(d)*t,n.moveTo(o-l,a-f),n.lineTo(o+l,a+f),n.moveTo(o+f,a-l),n.lineTo(o-f,a+l);break;case"star":l=Math.cos(d)*t,f=Math.sin(d)*t,n.moveTo(o-l,a-f),n.lineTo(o+l,a+f),n.moveTo(o+f,a-l),n.lineTo(o-f,a+l),d+=U,l=Math.cos(d)*t,f=Math.sin(d)*t,n.moveTo(o-l,a-f),n.lineTo(o+l,a+f),n.moveTo(o+f,a-l),n.lineTo(o-f,a+l);break;case"line":l=Math.cos(d)*t,f=Math.sin(d)*t,n.moveTo(o-l,a-f),n.lineTo(o+l,a+f);break;case"dash":n.moveTo(o,a),n.lineTo(o+Math.cos(d)*t,a+Math.sin(d)*t)}n.fill(),n.stroke()}},_isPointInArea:function(n,e){var t=1e-6;return n.x>e.left-t&&n.x<e.right+t&&n.y>e.top-t&&n.y<e.bottom+t},clipArea:function(n,e){n.save(),n.beginPath(),n.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),n.clip()},unclipArea:function(n){n.restore()},lineTo:function(n,e,t,o){var a=t.steppedLine;if(a){if("middle"===a){var r=(e.x+t.x)/2;n.lineTo(r,o?t.y:e.y),n.lineTo(r,o?e.y:t.y)}else"after"===a&&!o||"after"!==a&&o?n.lineTo(e.x,t.y):n.lineTo(t.x,e.y);n.lineTo(t.x,t.y)}else t.tension?n.bezierCurveTo(o?e.controlPointPreviousX:e.controlPointNextX,o?e.controlPointPreviousY:e.controlPointNextY,o?t.controlPointNextX:t.controlPointPreviousX,o?t.controlPointNextY:t.controlPointPreviousY,t.x,t.y):n.lineTo(t.x,t.y)}},$=Z;N.clear=Z.clear,N.drawRoundedRectangle=function(n){n.beginPath(),Z.roundedRect.apply(Z,arguments)};var K={_set:function(n,e){return N.merge(this[n]||(this[n]={}),e)}};K._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var J=K,Q=N.valueOrDefault;function nn(n){return!n||N.isNullOrUndef(n.size)||N.isNullOrUndef(n.family)?null:(n.style?n.style+" ":"")+(n.weight?n.weight+" ":"")+n.size+"px "+n.family}var en={toLineHeight:function(n,e){var t=(""+n).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!t||"normal"===t[1])return 1.2*e;switch(n=+t[2],t[3]){case"px":return n;case"%":n/=100}return e*n},toPadding:function(n){var e,t,o,a;return N.isObject(n)?(e=+n.top||0,t=+n.right||0,o=+n.bottom||0,a=+n.left||0):e=t=o=a=+n||0,{top:e,right:t,bottom:o,left:a,height:e+o,width:a+t}},_parseFont:function(n){var e=J.global,t=Q(n.fontSize,e.defaultFontSize),o={family:Q(n.fontFamily,e.defaultFontFamily),lineHeight:N.options.toLineHeight(Q(n.lineHeight,e.defaultLineHeight),t),size:t,style:Q(n.fontStyle,e.defaultFontStyle),weight:null,string:""};return o.string=nn(o),o},resolve:function(n,e,t,o){var a,r,i,l=!0;for(a=0,r=n.length;a<r;++a)if(void 0!==(i=n[a])&&(void 0!==e&&"function"==typeof i&&(i=i(e),l=!1),void 0!==t&&N.isArray(i)&&(i=i[t],l=!1),void 0!==i))return o&&!l&&(o.cacheable=!1),i}},tn={_factorize:function(n){var e,t=[],o=Math.sqrt(n);for(e=1;e<o;e++)n%e==0&&(t.push(e),t.push(n/e));return o===(0|o)&&t.push(o),t.sort((function(n,e){return n-e})).pop(),t},log10:Math.log10||function(n){var e=Math.log(n)*Math.LOG10E,t=Math.round(e);return n===Math.pow(10,t)?t:e}},on=tn;N.log10=tn.log10;var an=function(n,e){return{x:function(t){return n+n+e-t},setWidth:function(n){e=n},textAlign:function(n){return"center"===n?n:"right"===n?"left":"right"},xPlus:function(n,e){return n-e},leftForLtr:function(n,e){return n-e}}},rn=function(){return{x:function(n){return n},setWidth:function(n){},textAlign:function(n){return n},xPlus:function(n,e){return n+e},leftForLtr:function(n,e){return n}}},ln=N,fn=j,pn=$,cn=en,dn=on,sn={getRtlAdapter:function(n,e,t){return n?an(e,t):rn()},overrideTextDirection:function(n,e){var t,o;"ltr"!==e&&"rtl"!==e||(o=[(t=n.canvas.style).getPropertyValue("direction"),t.getPropertyPriority("direction")],t.setProperty("direction",e,"important"),n.prevTextDirection=o)},restoreTextDirection:function(n){var e=n.prevTextDirection;void 0!==e&&(delete n.prevTextDirection,n.canvas.style.setProperty("direction",e[0],e[1]))}};function mn(n,e,t,o){var a,r,i,l,f,p,c,d,s,m=Object.keys(t);for(a=0,r=m.length;a<r;++a)if(p=t[i=m[a]],e.hasOwnProperty(i)||(e[i]=p),(l=e[i])!==p&&"_"!==i[0]){if(n.hasOwnProperty(i)||(n[i]=l),(c=typeof p)==typeof(f=n[i]))if("string"===c){if((d=O(f)).valid&&(s=O(p)).valid){e[i]=s.mix(d,o).rgbString();continue}}else if(ln.isFinite(f)&&ln.isFinite(p)){e[i]=f+(p-f)*o;continue}e[i]=p}}ln.easing=fn,ln.canvas=pn,ln.options=cn,ln.math=dn,ln.rtl=sn;var gn=function(n){ln.extend(this,n),this.initialize.apply(this,arguments)};ln.extend(gn.prototype,{_type:void 0,initialize:function(){this.hidden=!1},pivot:function(){var n=this;return n._view||(n._view=ln.extend({},n._model)),n._start={},n},transition:function(n){var e=this,t=e._model,o=e._start,a=e._view;return t&&1!==n?(a||(a=e._view={}),o||(o=e._start={}),mn(o,a,t,n),e):(e._view=ln.extend({},t),e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return ln.isNumber(this._model.x)&&ln.isNumber(this._model.y)}}),gn.extend=ln.inherits;var bn=gn,un=bn.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),_n=un;Object.defineProperty(un.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(un.prototype,"chartInstance",{get:function(){return this.chart},set:function(n){this.chart=n}}),J._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:ln.noop,onComplete:ln.noop}});var hn={animations:[],request:null,addAnimation:function(n,e,t,o){var a,r,i=this.animations;for(e.chart=n,e.startTime=Date.now(),e.duration=t,o||(n.animating=!0),a=0,r=i.length;a<r;++a)if(i[a].chart===n)return void(i[a]=e);i.push(e),1===i.length&&this.requestAnimationFrame()},cancelAnimation:function(n){var e=ln.findIndex(this.animations,(function(e){return e.chart===n}));-1!==e&&(this.animations.splice(e,1),n.animating=!1)},requestAnimationFrame:function(){var n=this;null===n.request&&(n.request=ln.requestAnimFrame.call(window,(function(){n.request=null,n.startDigest()})))},startDigest:function(){var n=this;n.advance(),n.animations.length>0&&n.requestAnimationFrame()},advance:function(){for(var n,e,t,o,a=this.animations,r=0;r<a.length;)e=(n=a[r]).chart,t=n.numSteps,o=Math.floor((Date.now()-n.startTime)/n.duration*t)+1,n.currentStep=Math.min(o,t),ln.callback(n.render,[e,n],e),ln.callback(n.onAnimationProgress,[n],e),n.currentStep>=t?(ln.callback(n.onAnimationComplete,[n],e),e.animating=!1,a.splice(r,1)):++r}},vn=ln.options.resolve,xn=["push","pop","shift","splice","unshift"];function wn(n,e){n._chartjs?n._chartjs.listeners.push(e):(Object.defineProperty(n,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),xn.forEach((function(e){var t="onData"+e.charAt(0).toUpperCase()+e.slice(1),o=n[e];Object.defineProperty(n,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),a=o.apply(this,e);return ln.each(n._chartjs.listeners,(function(n){"function"==typeof n[t]&&n[t].apply(n,e)})),a}})})))}function yn(n,e){var t=n._chartjs;if(t){var o=t.listeners,a=o.indexOf(e);-1!==a&&o.splice(a,1),o.length>0||(xn.forEach((function(e){delete n[e]})),delete n._chartjs)}}var kn=function(n,e){this.initialize(n,e)};ln.extend(kn.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(n,e){var t=this;t.chart=n,t.index=e,t.linkScales(),t.addElements(),t._type=t.getMeta().type},updateIndex:function(n){this.index=n},linkScales:function(){var n=this,e=n.getMeta(),t=n.chart,o=t.scales,a=n.getDataset(),r=t.options.scales;null!==e.xAxisID&&e.xAxisID in o&&!a.xAxisID||(e.xAxisID=a.xAxisID||r.xAxes[0].id),null!==e.yAxisID&&e.yAxisID in o&&!a.yAxisID||(e.yAxisID=a.yAxisID||r.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(n){return this.chart.scales[n]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&yn(this._data,this)},createMetaDataset:function(){var n=this,e=n.datasetElementType;return e&&new e({_chart:n.chart,_datasetIndex:n.index})},createMetaData:function(n){var e=this,t=e.dataElementType;return t&&new t({_chart:e.chart,_datasetIndex:e.index,_index:n})},addElements:function(){var n,e,t=this,o=t.getMeta(),a=t.getDataset().data||[],r=o.data;for(n=0,e=a.length;n<e;++n)r[n]=r[n]||t.createMetaData(n);o.dataset=o.dataset||t.createMetaDataset()},addElementAndReset:function(n){var e=this.createMetaData(n);this.getMeta().data.splice(n,0,e),this.updateElement(e,n,!0)},buildOrUpdateElements:function(){var n=this,e=n.getDataset(),t=e.data||(e.data=[]);n._data!==t&&(n._data&&yn(n._data,n),t&&Object.isExtensible(t)&&wn(t,n),n._data=t),n.resyncElements()},_configure:function(){var n=this;n._config=ln.merge(Object.create(null),[n.chart.options.datasets[n._type],n.getDataset()],{merger:function(n,e,t){"_meta"!==n&&"data"!==n&&ln._merger(n,e,t)}})},_update:function(n){var e=this;e._configure(),e._cachedDataOpts=null,e.update(n)},update:ln.noop,transition:function(n){for(var e=this.getMeta(),t=e.data||[],o=t.length,a=0;a<o;++a)t[a].transition(n);e.dataset&&e.dataset.transition(n)},draw:function(){var n=this.getMeta(),e=n.data||[],t=e.length,o=0;for(n.dataset&&n.dataset.draw();o<t;++o)e[o].draw()},getStyle:function(n){var e,t=this,o=t.getMeta(),a=o.dataset;return t._configure(),a&&void 0===n?e=t._resolveDatasetElementOptions(a||{}):(n=n||0,e=t._resolveDataElementOptions(o.data[n]||{},n)),!1!==e.fill&&null!==e.fill||(e.backgroundColor=e.borderColor),e},_resolveDatasetElementOptions:function(n,e){var t,o,a,r,i=this,l=i.chart,f=i._config,p=n.custom||{},c=l.options.elements[i.datasetElementType.prototype._type]||{},d=i._datasetElementOptions,s={},m={chart:l,dataset:i.getDataset(),datasetIndex:i.index,hover:e};for(t=0,o=d.length;t<o;++t)a=d[t],r=e?"hover"+a.charAt(0).toUpperCase()+a.slice(1):a,s[a]=vn([p[r],f[r],c[r]],m);return s},_resolveDataElementOptions:function(n,e){var t=this,o=n&&n.custom,a=t._cachedDataOpts;if(a&&!o)return a;var r,i,l,f,p=t.chart,c=t._config,d=p.options.elements[t.dataElementType.prototype._type]||{},s=t._dataElementOptions,m={},g={chart:p,dataIndex:e,dataset:t.getDataset(),datasetIndex:t.index},b={cacheable:!o};if(o=o||{},ln.isArray(s))for(i=0,l=s.length;i<l;++i)m[f=s[i]]=vn([o[f],c[f],d[f]],g,e,b);else for(i=0,l=(r=Object.keys(s)).length;i<l;++i)m[f=r[i]]=vn([o[f],c[s[f]],c[f],d[f]],g,e,b);return b.cacheable&&(t._cachedDataOpts=Object.freeze(m)),m},removeHoverStyle:function(n){ln.merge(n._model,n.$previousStyle||{}),delete n.$previousStyle},setHoverStyle:function(n){var e=this.chart.data.datasets[n._datasetIndex],t=n._index,o=n.custom||{},a=n._model,r=ln.getHoverColor;n.$previousStyle={backgroundColor:a.backgroundColor,borderColor:a.borderColor,borderWidth:a.borderWidth},a.backgroundColor=vn([o.hoverBackgroundColor,e.hoverBackgroundColor,r(a.backgroundColor)],void 0,t),a.borderColor=vn([o.hoverBorderColor,e.hoverBorderColor,r(a.borderColor)],void 0,t),a.borderWidth=vn([o.hoverBorderWidth,e.hoverBorderWidth,a.borderWidth],void 0,t)},_removeDatasetHoverStyle:function(){var n=this.getMeta().dataset;n&&this.removeHoverStyle(n)},_setDatasetHoverStyle:function(){var n,e,t,o,a,r,i=this.getMeta().dataset,l={};if(i){for(r=i._model,a=this._resolveDatasetElementOptions(i,!0),n=0,e=(o=Object.keys(a)).length;n<e;++n)l[t=o[n]]=r[t],r[t]=a[t];i.$previousStyle=l}},resyncElements:function(){var n=this,e=n.getMeta(),t=n.getDataset().data,o=e.data.length,a=t.length;a<o?e.data.splice(a,o-a):a>o&&n.insertElements(o,a-o)},insertElements:function(n,e){for(var t=0;t<e;++t)this.addElementAndReset(n+t)},onDataPush:function(){var n=arguments.length;this.insertElements(this.getDataset().data.length-n,n)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(n,e){this.getMeta().data.splice(n,e),this.insertElements(n,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),kn.extend=ln.inherits;var Cn=kn,Bn=2*Math.PI;function Pn(n,e){var t=e.startAngle,o=e.endAngle,a=e.pixelMargin,r=a/e.outerRadius,i=e.x,l=e.y;n.beginPath(),n.arc(i,l,e.outerRadius,t-r,o+r),e.innerRadius>a?(r=a/e.innerRadius,n.arc(i,l,e.innerRadius-a,o+r,t-r,!0)):n.arc(i,l,a,o+Math.PI/2,t-Math.PI/2),n.closePath(),n.clip()}function Sn(n,e,t,o){var a,r=t.endAngle;for(o&&(t.endAngle=t.startAngle+Bn,Pn(n,t),t.endAngle=r,t.endAngle===t.startAngle&&t.fullCircles&&(t.endAngle+=Bn,t.fullCircles--)),n.beginPath(),n.arc(t.x,t.y,t.innerRadius,t.startAngle+Bn,t.startAngle,!0),a=0;a<t.fullCircles;++a)n.stroke();for(n.beginPath(),n.arc(t.x,t.y,e.outerRadius,t.startAngle,t.startAngle+Bn),a=0;a<t.fullCircles;++a)n.stroke()}function Tn(n,e,t){var o="inner"===e.borderAlign;o?(n.lineWidth=2*e.borderWidth,n.lineJoin="round"):(n.lineWidth=e.borderWidth,n.lineJoin="bevel"),t.fullCircles&&Sn(n,e,t,o),o&&Pn(n,t),n.beginPath(),n.arc(t.x,t.y,e.outerRadius,t.startAngle,t.endAngle),n.arc(t.x,t.y,t.innerRadius,t.endAngle,t.startAngle,!0),n.closePath(),n.stroke()}J._set("global",{elements:{arc:{backgroundColor:J.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var Mn=bn.extend({_type:"arc",inLabelRange:function(n){var e=this._view;return!!e&&Math.pow(n-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(n,e){var t=this._view;if(t){for(var o=ln.getAngleFromPoint(t,{x:n,y:e}),a=o.angle,r=o.distance,i=t.startAngle,l=t.endAngle;l<i;)l+=Bn;for(;a>l;)a-=Bn;for(;a<i;)a+=Bn;var f=a>=i&&a<=l,p=r>=t.innerRadius&&r<=t.outerRadius;return f&&p}return!1},getCenterPoint:function(){var n=this._view,e=(n.startAngle+n.endAngle)/2,t=(n.innerRadius+n.outerRadius)/2;return{x:n.x+Math.cos(e)*t,y:n.y+Math.sin(e)*t}},getArea:function(){var n=this._view;return Math.PI*((n.endAngle-n.startAngle)/(2*Math.PI))*(Math.pow(n.outerRadius,2)-Math.pow(n.innerRadius,2))},tooltipPosition:function(){var n=this._view,e=n.startAngle+(n.endAngle-n.startAngle)/2,t=(n.outerRadius-n.innerRadius)/2+n.innerRadius;return{x:n.x+Math.cos(e)*t,y:n.y+Math.sin(e)*t}},draw:function(){var n,e=this._chart.ctx,t=this._view,o="inner"===t.borderAlign?.33:0,a={x:t.x,y:t.y,innerRadius:t.innerRadius,outerRadius:Math.max(t.outerRadius-o,0),pixelMargin:o,startAngle:t.startAngle,endAngle:t.endAngle,fullCircles:Math.floor(t.circumference/Bn)};if(e.save(),e.fillStyle=t.backgroundColor,e.strokeStyle=t.borderColor,a.fullCircles){for(a.endAngle=a.startAngle+Bn,e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),n=0;n<a.fullCircles;++n)e.fill();a.endAngle=a.startAngle+t.circumference%Bn}e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),e.fill(),t.borderWidth&&Tn(e,t,a),e.restore()}}),Ln=ln.valueOrDefault,zn=J.global.defaultColor;J._set("global",{elements:{line:{tension:.4,backgroundColor:zn,borderWidth:3,borderColor:zn,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var Wn=bn.extend({_type:"line",draw:function(){var n,e,t,o=this,a=o._view,r=o._chart.ctx,i=a.spanGaps,l=o._children.slice(),f=J.global,p=f.elements.line,c=-1,d=o._loop;if(l.length){if(o._loop){for(n=0;n<l.length;++n)if(e=ln.previousItem(l,n),!l[n]._view.skip&&e._view.skip){l=l.slice(n).concat(l.slice(0,n)),d=i;break}d&&l.push(l[0])}for(r.save(),r.lineCap=a.borderCapStyle||p.borderCapStyle,r.setLineDash&&r.setLineDash(a.borderDash||p.borderDash),r.lineDashOffset=Ln(a.borderDashOffset,p.borderDashOffset),r.lineJoin=a.borderJoinStyle||p.borderJoinStyle,r.lineWidth=Ln(a.borderWidth,p.borderWidth),r.strokeStyle=a.borderColor||f.defaultColor,r.beginPath(),(t=l[0]._view).skip||(r.moveTo(t.x,t.y),c=0),n=1;n<l.length;++n)t=l[n]._view,e=-1===c?ln.previousItem(l,n):l[c],t.skip||(c!==n-1&&!i||-1===c?r.moveTo(t.x,t.y):ln.canvas.lineTo(r,e._view,t),c=n);d&&r.closePath(),r.stroke(),r.restore()}}}),Rn=ln.valueOrDefault,Fn=J.global.defaultColor;function Dn(n){var e=this._view;return!!e&&Math.abs(n-e.x)<e.radius+e.hitRadius}function On(n){var e=this._view;return!!e&&Math.abs(n-e.y)<e.radius+e.hitRadius}J._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:Fn,borderColor:Fn,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var An=bn.extend({_type:"point",inRange:function(n,e){var t=this._view;return!!t&&Math.pow(n-t.x,2)+Math.pow(e-t.y,2)<Math.pow(t.hitRadius+t.radius,2)},inLabelRange:Dn,inXRange:Dn,inYRange:On,getCenterPoint:function(){var n=this._view;return{x:n.x,y:n.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var n=this._view;return{x:n.x,y:n.y,padding:n.radius+n.borderWidth}},draw:function(n){var e=this._view,t=this._chart.ctx,o=e.pointStyle,a=e.rotation,r=e.radius,i=e.x,l=e.y,f=J.global,p=f.defaultColor;e.skip||(void 0===n||ln.canvas._isPointInArea(e,n))&&(t.strokeStyle=e.borderColor||p,t.lineWidth=Rn(e.borderWidth,f.elements.point.borderWidth),t.fillStyle=e.backgroundColor||p,ln.canvas.drawPoint(t,o,r,i,l,a))}}),In=J.global.defaultColor;function Hn(n){return n&&void 0!==n.width}function Nn(n){var e,t,o,a,r;return Hn(n)?(r=n.width/2,e=n.x-r,t=n.x+r,o=Math.min(n.y,n.base),a=Math.max(n.y,n.base)):(r=n.height/2,e=Math.min(n.x,n.base),t=Math.max(n.x,n.base),o=n.y-r,a=n.y+r),{left:e,top:o,right:t,bottom:a}}function En(n,e,t){return n===e?t:n===t?e:n}function jn(n){var e=n.borderSkipped,t={};return e?(n.horizontal?n.base>n.x&&(e=En(e,"left","right")):n.base<n.y&&(e=En(e,"bottom","top")),t[e]=!0,t):t}function Gn(n,e,t){var o,a,r,i,l=n.borderWidth,f=jn(n);return ln.isObject(l)?(o=+l.top||0,a=+l.right||0,r=+l.bottom||0,i=+l.left||0):o=a=r=i=+l||0,{t:f.top||o<0?0:o>t?t:o,r:f.right||a<0?0:a>e?e:a,b:f.bottom||r<0?0:r>t?t:r,l:f.left||i<0?0:i>e?e:i}}function Yn(n){var e=Nn(n),t=e.right-e.left,o=e.bottom-e.top,a=Gn(n,t/2,o/2);return{outer:{x:e.left,y:e.top,w:t,h:o},inner:{x:e.left+a.l,y:e.top+a.t,w:t-a.l-a.r,h:o-a.t-a.b}}}function Vn(n,e,t){var o=null===e,a=null===t,r=!(!n||o&&a)&&Nn(n);return r&&(o||e>=r.left&&e<=r.right)&&(a||t>=r.top&&t<=r.bottom)}J._set("global",{elements:{rectangle:{backgroundColor:In,borderColor:In,borderSkipped:"bottom",borderWidth:0}}});var qn=bn.extend({_type:"rectangle",draw:function(){var n=this._chart.ctx,e=this._view,t=Yn(e),o=t.outer,a=t.inner;n.fillStyle=e.backgroundColor,n.fillRect(o.x,o.y,o.w,o.h),o.w===a.w&&o.h===a.h||(n.save(),n.beginPath(),n.rect(o.x,o.y,o.w,o.h),n.clip(),n.fillStyle=e.borderColor,n.rect(a.x,a.y,a.w,a.h),n.fill("evenodd"),n.restore())},height:function(){var n=this._view;return n.base-n.y},inRange:function(n,e){return Vn(this._view,n,e)},inLabelRange:function(n,e){var t=this._view;return Hn(t)?Vn(t,n,null):Vn(t,null,e)},inXRange:function(n){return Vn(this._view,n,null)},inYRange:function(n){return Vn(this._view,null,n)},getCenterPoint:function(){var n,e,t=this._view;return Hn(t)?(n=t.x,e=(t.y+t.base)/2):(n=(t.x+t.base)/2,e=t.y),{x:n,y:e}},getArea:function(){var n=this._view;return Hn(n)?n.width*Math.abs(n.y-n.base):n.height*Math.abs(n.x-n.base)},tooltipPosition:function(){var n=this._view;return{x:n.x,y:n.y}}}),Un={},Xn=Mn,Zn=Wn,$n=An,Kn=qn;Un.Arc=Xn,Un.Line=Zn,Un.Point=$n,Un.Rectangle=Kn;var Jn=ln._deprecated,Qn=ln.valueOrDefault;function ne(n,e){var t,o,a,r,i=n._length;for(a=1,r=e.length;a<r;++a)i=Math.min(i,Math.abs(e[a]-e[a-1]));for(a=0,r=n.getTicks().length;a<r;++a)o=n.getPixelForTick(a),i=a>0?Math.min(i,Math.abs(o-t)):i,t=o;return i}function ee(n,e,t){var o,a,r=t.barThickness,i=e.stackCount,l=e.pixels[n],f=ln.isNullOrUndef(r)?ne(e.scale,e.pixels):-1;return ln.isNullOrUndef(r)?(o=f*t.categoryPercentage,a=t.barPercentage):(o=r*i,a=1),{chunk:o/i,ratio:a,start:l-o/2}}function te(n,e,t){var o,a=e.pixels,r=a[n],i=n>0?a[n-1]:null,l=n<a.length-1?a[n+1]:null,f=t.categoryPercentage;return null===i&&(i=r-(null===l?e.end-e.start:l-r)),null===l&&(l=r+r-i),o=r-(r-Math.min(i,l))/2*f,{chunk:Math.abs(l-i)/2*f/e.stackCount,ratio:t.barPercentage,start:o}}J._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),J._set("global",{datasets:{bar:{categoryPercentage:.8,barPercentage:.9}}});var oe=Cn.extend({dataElementType:Un.Rectangle,_dataElementOptions:["backgroundColor","borderColor","borderSkipped","borderWidth","barPercentage","barThickness","categoryPercentage","maxBarThickness","minBarLength"],initialize:function(){var n,e,t=this;Cn.prototype.initialize.apply(t,arguments),(n=t.getMeta()).stack=t.getDataset().stack,n.bar=!0,e=t._getIndexScale().options,Jn("bar chart",e.barPercentage,"scales.[x/y]Axes.barPercentage","dataset.barPercentage"),Jn("bar chart",e.barThickness,"scales.[x/y]Axes.barThickness","dataset.barThickness"),Jn("bar chart",e.categoryPercentage,"scales.[x/y]Axes.categoryPercentage","dataset.categoryPercentage"),Jn("bar chart",t._getValueScale().options.minBarLength,"scales.[x/y]Axes.minBarLength","dataset.minBarLength"),Jn("bar chart",e.maxBarThickness,"scales.[x/y]Axes.maxBarThickness","dataset.maxBarThickness")},update:function(n){var e,t,o=this,a=o.getMeta().data;for(o._ruler=o.getRuler(),e=0,t=a.length;e<t;++e)o.updateElement(a[e],e,n)},updateElement:function(n,e,t){var o=this,a=o.getMeta(),r=o.getDataset(),i=o._resolveDataElementOptions(n,e);n._xScale=o.getScaleForId(a.xAxisID),n._yScale=o.getScaleForId(a.yAxisID),n._datasetIndex=o.index,n._index=e,n._model={backgroundColor:i.backgroundColor,borderColor:i.borderColor,borderSkipped:i.borderSkipped,borderWidth:i.borderWidth,datasetLabel:r.label,label:o.chart.data.labels[e]},ln.isArray(r.data[e])&&(n._model.borderSkipped=null),o._updateElementGeometry(n,e,t,i),n.pivot()},_updateElementGeometry:function(n,e,t,o){var a=this,r=n._model,i=a._getValueScale(),l=i.getBasePixel(),f=i.isHorizontal(),p=a._ruler||a.getRuler(),c=a.calculateBarValuePixels(a.index,e,o),d=a.calculateBarIndexPixels(a.index,e,p,o);r.horizontal=f,r.base=t?l:c.base,r.x=f?t?l:c.head:d.center,r.y=f?d.center:t?l:c.head,r.height=f?d.size:void 0,r.width=f?void 0:d.size},_getStacks:function(n){var e,t,o=this,a=o._getIndexScale(),r=a._getMatchingVisibleMetas(o._type),i=a.options.stacked,l=r.length,f=[];for(e=0;e<l&&(t=r[e],(!1===i||-1===f.indexOf(t.stack)||void 0===i&&void 0===t.stack)&&f.push(t.stack),t.index!==n);++e);return f},getStackCount:function(){return this._getStacks().length},getStackIndex:function(n,e){var t=this._getStacks(n),o=void 0!==e?t.indexOf(e):-1;return-1===o?t.length-1:o},getRuler:function(){var n,e,t=this,o=t._getIndexScale(),a=[];for(n=0,e=t.getMeta().data.length;n<e;++n)a.push(o.getPixelForValue(null,n,t.index));return{pixels:a,start:o._startPixel,end:o._endPixel,stackCount:t.getStackCount(),scale:o}},calculateBarValuePixels:function(n,e,t){var o,a,r,i,l,f,p,c=this,d=c.chart,s=c._getValueScale(),m=s.isHorizontal(),g=d.data.datasets,b=s._getMatchingVisibleMetas(c._type),u=s._parseValue(g[n].data[e]),_=t.minBarLength,h=s.options.stacked,v=c.getMeta().stack,x=void 0===u.start?0:u.max>=0&&u.min>=0?u.min:u.max,w=void 0===u.start?u.end:u.max>=0&&u.min>=0?u.max-u.min:u.min-u.max,y=b.length;if(h||void 0===h&&void 0!==v)for(o=0;o<y&&(a=b[o]).index!==n;++o)a.stack===v&&(r=void 0===(p=s._parseValue(g[a.index].data[e])).start?p.end:p.min>=0&&p.max>=0?p.max:p.min,(u.min<0&&r<0||u.max>=0&&r>0)&&(x+=r));return i=s.getPixelForValue(x),f=(l=s.getPixelForValue(x+w))-i,void 0!==_&&Math.abs(f)<_&&(f=_,l=w>=0&&!m||w<0&&m?i-_:i+_),{size:f,base:i,head:l,center:l+f/2}},calculateBarIndexPixels:function(n,e,t,o){var a=this,r="flex"===o.barThickness?te(e,t,o):ee(e,t,o),i=a.getStackIndex(n,a.getMeta().stack),l=r.start+r.chunk*i+r.chunk/2,f=Math.min(Qn(o.maxBarThickness,1/0),r.chunk*r.ratio);return{base:l-f/2,head:l+f/2,center:l,size:f}},draw:function(){var n=this,e=n.chart,t=n._getValueScale(),o=n.getMeta().data,a=n.getDataset(),r=o.length,i=0;for(ln.canvas.clipArea(e.ctx,e.chartArea);i<r;++i){var l=t._parseValue(a.data[i]);isNaN(l.min)||isNaN(l.max)||o[i].draw()}ln.canvas.unclipArea(e.ctx)},_resolveDataElementOptions:function(){var n=this,e=ln.extend({},Cn.prototype._resolveDataElementOptions.apply(n,arguments)),t=n._getIndexScale().options,o=n._getValueScale().options;return e.barPercentage=Qn(t.barPercentage,e.barPercentage),e.barThickness=Qn(t.barThickness,e.barThickness),e.categoryPercentage=Qn(t.categoryPercentage,e.categoryPercentage),e.maxBarThickness=Qn(t.maxBarThickness,e.maxBarThickness),e.minBarLength=Qn(o.minBarLength,e.minBarLength),e}}),ae=ln.valueOrDefault,re=ln.options.resolve;J._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(n,e){var t=e.datasets[n.datasetIndex].label||"",o=e.datasets[n.datasetIndex].data[n.index];return t+": ("+n.xLabel+", "+n.yLabel+", "+o.r+")"}}}});var ie=Cn.extend({dataElementType:Un.Point,_dataElementOptions:["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"],update:function(n){var e=this,t=e.getMeta().data;ln.each(t,(function(t,o){e.updateElement(t,o,n)}))},updateElement:function(n,e,t){var o=this,a=o.getMeta(),r=n.custom||{},i=o.getScaleForId(a.xAxisID),l=o.getScaleForId(a.yAxisID),f=o._resolveDataElementOptions(n,e),p=o.getDataset().data[e],c=o.index,d=t?i.getPixelForDecimal(.5):i.getPixelForValue("object"==typeof p?p:NaN,e,c),s=t?l.getBasePixel():l.getPixelForValue(p,e,c);n._xScale=i,n._yScale=l,n._options=f,n._datasetIndex=c,n._index=e,n._model={backgroundColor:f.backgroundColor,borderColor:f.borderColor,borderWidth:f.borderWidth,hitRadius:f.hitRadius,pointStyle:f.pointStyle,rotation:f.rotation,radius:t?0:f.radius,skip:r.skip||isNaN(d)||isNaN(s),x:d,y:s},n.pivot()},setHoverStyle:function(n){var e=n._model,t=n._options,o=ln.getHoverColor;n.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=ae(t.hoverBackgroundColor,o(t.backgroundColor)),e.borderColor=ae(t.hoverBorderColor,o(t.borderColor)),e.borderWidth=ae(t.hoverBorderWidth,t.borderWidth),e.radius=t.radius+t.hoverRadius},_resolveDataElementOptions:function(n,e){var t=this,o=t.chart,a=t.getDataset(),r=n.custom||{},i=a.data[e]||{},l=Cn.prototype._resolveDataElementOptions.apply(t,arguments),f={chart:o,dataIndex:e,dataset:a,datasetIndex:t.index};return t._cachedDataOpts===l&&(l=ln.extend({},l)),l.radius=re([r.radius,i.r,t._config.radius,o.options.elements.point.radius],f,e),l}}),le=ln.valueOrDefault,fe=Math.PI,pe=2*fe,ce=fe/2;J._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(n){var e,t,o,a=document.createElement("ul"),r=n.data,i=r.datasets,l=r.labels;if(a.setAttribute("class",n.id+"-legend"),i.length)for(e=0,t=i[0].data.length;e<t;++e)(o=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=i[0].backgroundColor[e],l[e]&&o.appendChild(document.createTextNode(l[e]));return a.outerHTML},legend:{labels:{generateLabels:function(n){var e=n.data;return e.labels.length&&e.datasets.length?e.labels.map((function(t,o){var a=n.getDatasetMeta(0),r=a.controller.getStyle(o);return{text:t,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[o])||a.data[o].hidden,index:o}})):[]}},onClick:function(n,e){var t,o,a,r=e.index,i=this.chart;for(t=0,o=(i.data.datasets||[]).length;t<o;++t)(a=i.getDatasetMeta(t)).data[r]&&(a.data[r].hidden=!a.data[r].hidden);i.update()}},cutoutPercentage:50,rotation:-ce,circumference:pe,tooltips:{callbacks:{title:function(){return""},label:function(n,e){var t=e.labels[n.index],o=": "+e.datasets[n.datasetIndex].data[n.index];return ln.isArray(t)?(t=t.slice())[0]+=o:t+=o,t}}}});var de=Cn.extend({dataElementType:Un.Arc,linkScales:ln.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],getRingIndex:function(n){for(var e=0,t=0;t<n;++t)this.chart.isDatasetVisible(t)&&++e;return e},update:function(n){var e,t,o,a,r=this,i=r.chart,l=i.chartArea,f=i.options,p=1,c=1,d=0,s=0,m=r.getMeta(),g=m.data,b=f.cutoutPercentage/100||0,u=f.circumference,_=r._getRingWeight(r.index);if(u<pe){var h=f.rotation%pe,v=(h+=h>=fe?-pe:h<-fe?pe:0)+u,x=Math.cos(h),w=Math.sin(h),y=Math.cos(v),k=Math.sin(v),C=h<=0&&v>=0||v>=pe,B=h<=ce&&v>=ce||v>=pe+ce,P=h<=-ce&&v>=-ce||v>=fe+ce,S=h===-fe||v>=fe?-1:Math.min(x,x*b,y,y*b),T=P?-1:Math.min(w,w*b,k,k*b),M=C?1:Math.max(x,x*b,y,y*b),L=B?1:Math.max(w,w*b,k,k*b);p=(M-S)/2,c=(L-T)/2,d=-(M+S)/2,s=-(L+T)/2}for(o=0,a=g.length;o<a;++o)g[o]._options=r._resolveDataElementOptions(g[o],o);for(i.borderWidth=r.getMaxBorderWidth(),e=(l.right-l.left-i.borderWidth)/p,t=(l.bottom-l.top-i.borderWidth)/c,i.outerRadius=Math.max(Math.min(e,t)/2,0),i.innerRadius=Math.max(i.outerRadius*b,0),i.radiusLength=(i.outerRadius-i.innerRadius)/(r._getVisibleDatasetWeightTotal()||1),i.offsetX=d*i.outerRadius,i.offsetY=s*i.outerRadius,m.total=r.calculateTotal(),r.outerRadius=i.outerRadius-i.radiusLength*r._getRingWeightOffset(r.index),r.innerRadius=Math.max(r.outerRadius-i.radiusLength*_,0),o=0,a=g.length;o<a;++o)r.updateElement(g[o],o,n)},updateElement:function(n,e,t){var o=this,a=o.chart,r=a.chartArea,i=a.options,l=i.animation,f=(r.left+r.right)/2,p=(r.top+r.bottom)/2,c=i.rotation,d=i.rotation,s=o.getDataset(),m=t&&l.animateRotate||n.hidden?0:o.calculateCircumference(s.data[e])*(i.circumference/pe),g=t&&l.animateScale?0:o.innerRadius,b=t&&l.animateScale?0:o.outerRadius,u=n._options||{};ln.extend(n,{_datasetIndex:o.index,_index:e,_model:{backgroundColor:u.backgroundColor,borderColor:u.borderColor,borderWidth:u.borderWidth,borderAlign:u.borderAlign,x:f+a.offsetX,y:p+a.offsetY,startAngle:c,endAngle:d,circumference:m,outerRadius:b,innerRadius:g,label:ln.valueAtIndexOrDefault(s.label,e,a.data.labels[e])}});var _=n._model;t&&l.animateRotate||(_.startAngle=0===e?i.rotation:o.getMeta().data[e-1]._model.endAngle,_.endAngle=_.startAngle+_.circumference),n.pivot()},calculateTotal:function(){var n,e=this.getDataset(),t=this.getMeta(),o=0;return ln.each(t.data,(function(t,a){n=e.data[a],isNaN(n)||t.hidden||(o+=Math.abs(n))})),o},calculateCircumference:function(n){var e=this.getMeta().total;return e>0&&!isNaN(n)?pe*(Math.abs(n)/e):0},getMaxBorderWidth:function(n){var e,t,o,a,r,i,l,f,p=this,c=0,d=p.chart;if(!n)for(e=0,t=d.data.datasets.length;e<t;++e)if(d.isDatasetVisible(e)){n=(o=d.getDatasetMeta(e)).data,e!==p.index&&(r=o.controller);break}if(!n)return 0;for(e=0,t=n.length;e<t;++e)a=n[e],r?(r._configure(),i=r._resolveDataElementOptions(a,e)):i=a._options,"inner"!==i.borderAlign&&(l=i.borderWidth,c=(f=i.hoverBorderWidth)>(c=l>c?l:c)?f:c);return c},setHoverStyle:function(n){var e=n._model,t=n._options,o=ln.getHoverColor;n.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=le(t.hoverBackgroundColor,o(t.backgroundColor)),e.borderColor=le(t.hoverBorderColor,o(t.borderColor)),e.borderWidth=le(t.hoverBorderWidth,t.borderWidth)},_getRingWeightOffset:function(n){for(var e=0,t=0;t<n;++t)this.chart.isDatasetVisible(t)&&(e+=this._getRingWeight(t));return e},_getRingWeight:function(n){return Math.max(le(this.chart.data.datasets[n].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});J._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}}),J._set("global",{datasets:{horizontalBar:{categoryPercentage:.8,barPercentage:.9}}});var se=oe.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),me=ln.valueOrDefault,ge=ln.options.resolve,be=ln.canvas._isPointInArea;function ue(n,e){var t=n&&n.options.ticks||{},o=t.reverse,a=void 0===t.min?e:0,r=void 0===t.max?e:0;return{start:o?r:a,end:o?a:r}}function _e(n,e,t){var o=t/2,a=ue(n,o),r=ue(e,o);return{top:r.end,right:a.end,bottom:r.start,left:a.start}}function he(n){var e,t,o,a;return ln.isObject(n)?(e=n.top,t=n.right,o=n.bottom,a=n.left):e=t=o=a=n,{top:e,right:t,bottom:o,left:a}}J._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var ve=Cn.extend({datasetElementType:Un.Line,dataElementType:Un.Point,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth","cubicInterpolationMode","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},update:function(n){var e,t,o=this,a=o.getMeta(),r=a.dataset,i=a.data||[],l=o.chart.options,f=o._config,p=o._showLine=me(f.showLine,l.showLines);for(o._xScale=o.getScaleForId(a.xAxisID),o._yScale=o.getScaleForId(a.yAxisID),p&&(void 0!==f.tension&&void 0===f.lineTension&&(f.lineTension=f.tension),r._scale=o._yScale,r._datasetIndex=o.index,r._children=i,r._model=o._resolveDatasetElementOptions(r),r.pivot()),e=0,t=i.length;e<t;++e)o.updateElement(i[e],e,n);for(p&&0!==r._model.tension&&o.updateBezierControlPoints(),e=0,t=i.length;e<t;++e)i[e].pivot()},updateElement:function(n,e,t){var o,a,r=this,i=r.getMeta(),l=n.custom||{},f=r.getDataset(),p=r.index,c=f.data[e],d=r._xScale,s=r._yScale,m=i.dataset._model,g=r._resolveDataElementOptions(n,e);o=d.getPixelForValue("object"==typeof c?c:NaN,e,p),a=t?s.getBasePixel():r.calculatePointY(c,e,p),n._xScale=d,n._yScale=s,n._options=g,n._datasetIndex=p,n._index=e,n._model={x:o,y:a,skip:l.skip||isNaN(o)||isNaN(a),radius:g.radius,pointStyle:g.pointStyle,rotation:g.rotation,backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,tension:me(l.tension,m?m.tension:0),steppedLine:!!m&&m.steppedLine,hitRadius:g.hitRadius}},_resolveDatasetElementOptions:function(n){var e=this,t=e._config,o=n.custom||{},a=e.chart.options,r=a.elements.line,i=Cn.prototype._resolveDatasetElementOptions.apply(e,arguments);return i.spanGaps=me(t.spanGaps,a.spanGaps),i.tension=me(t.lineTension,r.tension),i.steppedLine=ge([o.steppedLine,t.steppedLine,r.stepped]),i.clip=he(me(t.clip,_e(e._xScale,e._yScale,i.borderWidth))),i},calculatePointY:function(n,e,t){var o,a,r,i,l,f,p,c=this,d=c.chart,s=c._yScale,m=0,g=0;if(s.options.stacked){for(l=+s.getRightValue(n),p=(f=d._getSortedVisibleDatasetMetas()).length,o=0;o<p&&(r=f[o]).index!==t;++o)a=d.data.datasets[r.index],"line"===r.type&&r.yAxisID===s.id&&((i=+s.getRightValue(a.data[e]))<0?g+=i||0:m+=i||0);return l<0?s.getPixelForValue(g+l):s.getPixelForValue(m+l)}return s.getPixelForValue(n)},updateBezierControlPoints:function(){var n,e,t,o,a=this,r=a.chart,i=a.getMeta(),l=i.dataset._model,f=r.chartArea,p=i.data||[];function c(n,e,t){return Math.max(Math.min(n,t),e)}if(l.spanGaps&&(p=p.filter((function(n){return!n._model.skip}))),"monotone"===l.cubicInterpolationMode)ln.splineCurveMonotone(p);else for(n=0,e=p.length;n<e;++n)t=p[n]._model,o=ln.splineCurve(ln.previousItem(p,n)._model,t,ln.nextItem(p,n)._model,l.tension),t.controlPointPreviousX=o.previous.x,t.controlPointPreviousY=o.previous.y,t.controlPointNextX=o.next.x,t.controlPointNextY=o.next.y;if(r.options.elements.line.capBezierPoints)for(n=0,e=p.length;n<e;++n)t=p[n]._model,be(t,f)&&(n>0&&be(p[n-1]._model,f)&&(t.controlPointPreviousX=c(t.controlPointPreviousX,f.left,f.right),t.controlPointPreviousY=c(t.controlPointPreviousY,f.top,f.bottom)),n<p.length-1&&be(p[n+1]._model,f)&&(t.controlPointNextX=c(t.controlPointNextX,f.left,f.right),t.controlPointNextY=c(t.controlPointNextY,f.top,f.bottom)))},draw:function(){var n,e=this,t=e.chart,o=e.getMeta(),a=o.data||[],r=t.chartArea,i=t.canvas,l=0,f=a.length;for(e._showLine&&(n=o.dataset._model.clip,ln.canvas.clipArea(t.ctx,{left:!1===n.left?0:r.left-n.left,right:!1===n.right?i.width:r.right+n.right,top:!1===n.top?0:r.top-n.top,bottom:!1===n.bottom?i.height:r.bottom+n.bottom}),o.dataset.draw(),ln.canvas.unclipArea(t.ctx));l<f;++l)a[l].draw(r)},setHoverStyle:function(n){var e=n._model,t=n._options,o=ln.getHoverColor;n.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=me(t.hoverBackgroundColor,o(t.backgroundColor)),e.borderColor=me(t.hoverBorderColor,o(t.borderColor)),e.borderWidth=me(t.hoverBorderWidth,t.borderWidth),e.radius=me(t.hoverRadius,t.radius)}}),xe=ln.options.resolve;J._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(n){var e,t,o,a=document.createElement("ul"),r=n.data,i=r.datasets,l=r.labels;if(a.setAttribute("class",n.id+"-legend"),i.length)for(e=0,t=i[0].data.length;e<t;++e)(o=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=i[0].backgroundColor[e],l[e]&&o.appendChild(document.createTextNode(l[e]));return a.outerHTML},legend:{labels:{generateLabels:function(n){var e=n.data;return e.labels.length&&e.datasets.length?e.labels.map((function(t,o){var a=n.getDatasetMeta(0),r=a.controller.getStyle(o);return{text:t,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[o])||a.data[o].hidden,index:o}})):[]}},onClick:function(n,e){var t,o,a,r=e.index,i=this.chart;for(t=0,o=(i.data.datasets||[]).length;t<o;++t)(a=i.getDatasetMeta(t)).data[r].hidden=!a.data[r].hidden;i.update()}},tooltips:{callbacks:{title:function(){return""},label:function(n,e){return e.labels[n.index]+": "+n.yLabel}}}});var we=Cn.extend({dataElementType:Un.Arc,linkScales:ln.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(n){var e,t,o,a=this,r=a.getDataset(),i=a.getMeta(),l=a.chart.options.startAngle||0,f=a._starts=[],p=a._angles=[],c=i.data;for(a._updateRadius(),i.count=a.countVisibleElements(),e=0,t=r.data.length;e<t;e++)f[e]=l,o=a._computeAngle(e),p[e]=o,l+=o;for(e=0,t=c.length;e<t;++e)c[e]._options=a._resolveDataElementOptions(c[e],e),a.updateElement(c[e],e,n)},_updateRadius:function(){var n=this,e=n.chart,t=e.chartArea,o=e.options,a=Math.min(t.right-t.left,t.bottom-t.top);e.outerRadius=Math.max(a/2,0),e.innerRadius=Math.max(o.cutoutPercentage?e.outerRadius/100*o.cutoutPercentage:1,0),e.radiusLength=(e.outerRadius-e.innerRadius)/e.getVisibleDatasetCount(),n.outerRadius=e.outerRadius-e.radiusLength*n.index,n.innerRadius=n.outerRadius-e.radiusLength},updateElement:function(n,e,t){var o=this,a=o.chart,r=o.getDataset(),i=a.options,l=i.animation,f=a.scale,p=a.data.labels,c=f.xCenter,d=f.yCenter,s=i.startAngle,m=n.hidden?0:f.getDistanceFromCenterForValue(r.data[e]),g=o._starts[e],b=g+(n.hidden?0:o._angles[e]),u=l.animateScale?0:f.getDistanceFromCenterForValue(r.data[e]),_=n._options||{};ln.extend(n,{_datasetIndex:o.index,_index:e,_scale:f,_model:{backgroundColor:_.backgroundColor,borderColor:_.borderColor,borderWidth:_.borderWidth,borderAlign:_.borderAlign,x:c,y:d,innerRadius:0,outerRadius:t?u:m,startAngle:t&&l.animateRotate?s:g,endAngle:t&&l.animateRotate?s:b,label:ln.valueAtIndexOrDefault(p,e,p[e])}}),n.pivot()},countVisibleElements:function(){var n=this.getDataset(),e=this.getMeta(),t=0;return ln.each(e.data,(function(e,o){isNaN(n.data[o])||e.hidden||t++})),t},setHoverStyle:function(n){var e=n._model,t=n._options,o=ln.getHoverColor,a=ln.valueOrDefault;n.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=a(t.hoverBackgroundColor,o(t.backgroundColor)),e.borderColor=a(t.hoverBorderColor,o(t.borderColor)),e.borderWidth=a(t.hoverBorderWidth,t.borderWidth)},_computeAngle:function(n){var e=this,t=this.getMeta().count,o=e.getDataset(),a=e.getMeta();if(isNaN(o.data[n])||a.data[n].hidden)return 0;var r={chart:e.chart,dataIndex:n,dataset:o,datasetIndex:e.index};return xe([e.chart.options.elements.arc.angle,2*Math.PI/t],r,n)}});J._set("pie",ln.clone(J.doughnut)),J._set("pie",{cutoutPercentage:0});var ye=de,ke=ln.valueOrDefault;J._set("radar",{spanGaps:!1,scale:{type:"radialLinear"},elements:{line:{fill:"start",tension:0}}});var Ce=Cn.extend({datasetElementType:Un.Line,dataElementType:Un.Point,linkScales:ln.noop,_datasetElementOptions:["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(n){var e,t,o=this,a=o.getMeta(),r=a.dataset,i=a.data||[],l=o.chart.scale,f=o._config;for(void 0!==f.tension&&void 0===f.lineTension&&(f.lineTension=f.tension),r._scale=l,r._datasetIndex=o.index,r._children=i,r._loop=!0,r._model=o._resolveDatasetElementOptions(r),r.pivot(),e=0,t=i.length;e<t;++e)o.updateElement(i[e],e,n);for(o.updateBezierControlPoints(),e=0,t=i.length;e<t;++e)i[e].pivot()},updateElement:function(n,e,t){var o=this,a=n.custom||{},r=o.getDataset(),i=o.chart.scale,l=i.getPointPositionForValue(e,r.data[e]),f=o._resolveDataElementOptions(n,e),p=o.getMeta().dataset._model,c=t?i.xCenter:l.x,d=t?i.yCenter:l.y;n._scale=i,n._options=f,n._datasetIndex=o.index,n._index=e,n._model={x:c,y:d,skip:a.skip||isNaN(c)||isNaN(d),radius:f.radius,pointStyle:f.pointStyle,rotation:f.rotation,backgroundColor:f.backgroundColor,borderColor:f.borderColor,borderWidth:f.borderWidth,tension:ke(a.tension,p?p.tension:0),hitRadius:f.hitRadius}},_resolveDatasetElementOptions:function(){var n=this,e=n._config,t=n.chart.options,o=Cn.prototype._resolveDatasetElementOptions.apply(n,arguments);return o.spanGaps=ke(e.spanGaps,t.spanGaps),o.tension=ke(e.lineTension,t.elements.line.tension),o},updateBezierControlPoints:function(){var n,e,t,o,a=this,r=a.getMeta(),i=a.chart.chartArea,l=r.data||[];function f(n,e,t){return Math.max(Math.min(n,t),e)}for(r.dataset._model.spanGaps&&(l=l.filter((function(n){return!n._model.skip}))),n=0,e=l.length;n<e;++n)t=l[n]._model,o=ln.splineCurve(ln.previousItem(l,n,!0)._model,t,ln.nextItem(l,n,!0)._model,t.tension),t.controlPointPreviousX=f(o.previous.x,i.left,i.right),t.controlPointPreviousY=f(o.previous.y,i.top,i.bottom),t.controlPointNextX=f(o.next.x,i.left,i.right),t.controlPointNextY=f(o.next.y,i.top,i.bottom)},setHoverStyle:function(n){var e=n._model,t=n._options,o=ln.getHoverColor;n.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=ke(t.hoverBackgroundColor,o(t.backgroundColor)),e.borderColor=ke(t.hoverBorderColor,o(t.borderColor)),e.borderWidth=ke(t.hoverBorderWidth,t.borderWidth),e.radius=ke(t.hoverRadius,t.radius)}});J._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},tooltips:{callbacks:{title:function(){return""},label:function(n){return"("+n.xLabel+", "+n.yLabel+")"}}}}),J._set("global",{datasets:{scatter:{showLine:!1}}});var Be={bar:oe,bubble:ie,doughnut:de,horizontalBar:se,line:ve,polarArea:we,pie:ye,radar:Ce,scatter:ve};function Pe(n,e){return n.native?{x:n.x,y:n.y}:ln.getRelativePosition(n,e)}function Se(n,e){var t,o,a,r,i,l,f=n._getSortedVisibleDatasetMetas();for(o=0,r=f.length;o<r;++o)for(a=0,i=(t=f[o].data).length;a<i;++a)(l=t[a])._view.skip||e(l)}function Te(n,e){var t=[];return Se(n,(function(n){n.inRange(e.x,e.y)&&t.push(n)})),t}function Me(n,e,t,o){var a=Number.POSITIVE_INFINITY,r=[];return Se(n,(function(n){if(!t||n.inRange(e.x,e.y)){var i=n.getCenterPoint(),l=o(e,i);l<a?(r=[n],a=l):l===a&&r.push(n)}})),r}function Le(n){var e=-1!==n.indexOf("x"),t=-1!==n.indexOf("y");return function(n,o){var a=e?Math.abs(n.x-o.x):0,r=t?Math.abs(n.y-o.y):0;return Math.sqrt(Math.pow(a,2)+Math.pow(r,2))}}function ze(n,e,t){var o=Pe(e,n);t.axis=t.axis||"x";var a=Le(t.axis),r=t.intersect?Te(n,o):Me(n,o,!1,a),i=[];return r.length?(n._getSortedVisibleDatasetMetas().forEach((function(n){var e=n.data[r[0]._index];e&&!e._view.skip&&i.push(e)})),i):[]}var We={modes:{single:function(n,e){var t=Pe(e,n),o=[];return Se(n,(function(n){if(n.inRange(t.x,t.y))return o.push(n),o})),o.slice(0,1)},label:ze,index:ze,dataset:function(n,e,t){var o=Pe(e,n);t.axis=t.axis||"xy";var a=Le(t.axis),r=t.intersect?Te(n,o):Me(n,o,!1,a);return r.length>0&&(r=n.getDatasetMeta(r[0]._datasetIndex).data),r},"x-axis":function(n,e){return ze(n,e,{intersect:!1})},point:function(n,e){return Te(n,Pe(e,n))},nearest:function(n,e,t){var o=Pe(e,n);t.axis=t.axis||"xy";var a=Le(t.axis);return Me(n,o,t.intersect,a)},x:function(n,e,t){var o=Pe(e,n),a=[],r=!1;return Se(n,(function(n){n.inXRange(o.x)&&a.push(n),n.inRange(o.x,o.y)&&(r=!0)})),t.intersect&&!r&&(a=[]),a},y:function(n,e,t){var o=Pe(e,n),a=[],r=!1;return Se(n,(function(n){n.inYRange(o.y)&&a.push(n),n.inRange(o.x,o.y)&&(r=!0)})),t.intersect&&!r&&(a=[]),a}}},Re=ln.extend;function Fe(n,e){return ln.where(n,(function(n){return n.pos===e}))}function De(n,e){return n.sort((function(n,t){var o=e?t:n,a=e?n:t;return o.weight===a.weight?o.index-a.index:o.weight-a.weight}))}function Oe(n){var e,t,o,a=[];for(e=0,t=(n||[]).length;e<t;++e)o=n[e],a.push({index:e,box:o,pos:o.position,horizontal:o.isHorizontal(),weight:o.weight});return a}function Ae(n,e){var t,o,a;for(t=0,o=n.length;t<o;++t)(a=n[t]).width=a.horizontal?a.box.fullWidth&&e.availableWidth:e.vBoxMaxWidth,a.height=a.horizontal&&e.hBoxMaxHeight}function Ie(n){var e=Oe(n),t=De(Fe(e,"left"),!0),o=De(Fe(e,"right")),a=De(Fe(e,"top"),!0),r=De(Fe(e,"bottom"));return{leftAndTop:t.concat(a),rightAndBottom:o.concat(r),chartArea:Fe(e,"chartArea"),vertical:t.concat(o),horizontal:a.concat(r)}}function He(n,e,t,o){return Math.max(n[t],e[t])+Math.max(n[o],e[o])}function Ne(n,e,t){var o,a,r=t.box,i=n.maxPadding;if(t.size&&(n[t.pos]-=t.size),t.size=t.horizontal?r.height:r.width,n[t.pos]+=t.size,r.getPadding){var l=r.getPadding();i.top=Math.max(i.top,l.top),i.left=Math.max(i.left,l.left),i.bottom=Math.max(i.bottom,l.bottom),i.right=Math.max(i.right,l.right)}if(o=e.outerWidth-He(i,n,"left","right"),a=e.outerHeight-He(i,n,"top","bottom"),o!==n.w||a!==n.h){n.w=o,n.h=a;var f=t.horizontal?[o,n.w]:[a,n.h];return!(f[0]===f[1]||isNaN(f[0])&&isNaN(f[1]))}}function Ee(n){var e=n.maxPadding;function t(t){var o=Math.max(e[t]-n[t],0);return n[t]+=o,o}n.y+=t("top"),n.x+=t("left"),t("right"),t("bottom")}function je(n,e){var t=e.maxPadding;function o(n){var o={left:0,top:0,right:0,bottom:0};return n.forEach((function(n){o[n]=Math.max(e[n],t[n])})),o}return o(n?["left","right"]:["top","bottom"])}function Ge(n,e,t){var o,a,r,i,l,f,p=[];for(o=0,a=n.length;o<a;++o)(i=(r=n[o]).box).update(r.width||e.w,r.height||e.h,je(r.horizontal,e)),Ne(e,t,r)&&(f=!0,p.length&&(l=!0)),i.fullWidth||p.push(r);return l&&Ge(p,e,t)||f}function Ye(n,e,t){var o,a,r,i,l=t.padding,f=e.x,p=e.y;for(o=0,a=n.length;o<a;++o)i=(r=n[o]).box,r.horizontal?(i.left=i.fullWidth?l.left:e.left,i.right=i.fullWidth?t.outerWidth-l.right:e.left+e.w,i.top=p,i.bottom=p+i.height,i.width=i.right-i.left,p=i.bottom):(i.left=f,i.right=f+i.width,i.top=e.top,i.bottom=e.top+e.h,i.height=i.bottom-i.top,f=i.right);e.x=f,e.y=p}J._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var Ve={defaults:{},addBox:function(n,e){n.boxes||(n.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw:function(){e.draw.apply(e,arguments)}}]},n.boxes.push(e)},removeBox:function(n,e){var t=n.boxes?n.boxes.indexOf(e):-1;-1!==t&&n.boxes.splice(t,1)},configure:function(n,e,t){for(var o,a=["fullWidth","position","weight"],r=a.length,i=0;i<r;++i)o=a[i],t.hasOwnProperty(o)&&(e[o]=t[o])},update:function(n,e,t){if(n){var o=n.options.layout||{},a=ln.options.toPadding(o.padding),r=e-a.width,i=t-a.height,l=Ie(n.boxes),f=l.vertical,p=l.horizontal,c=Object.freeze({outerWidth:e,outerHeight:t,padding:a,availableWidth:r,vBoxMaxWidth:r/2/f.length,hBoxMaxHeight:i/2}),d=Re({maxPadding:Re({},a),w:r,h:i,x:a.left,y:a.top},a);Ae(f.concat(p),c),Ge(f,d,c),Ge(p,d,c)&&Ge(f,d,c),Ee(d),Ye(l.leftAndTop,d,c),d.x+=d.w,d.y+=d.h,Ye(l.rightAndBottom,d,c),n.chartArea={left:d.left,top:d.top,right:d.left+d.w,bottom:d.top+d.h},ln.each(l.chartArea,(function(e){var t=e.box;Re(t,n.chartArea),t.update(d.w,d.h)}))}}},qe={acquireContext:function(n){return n&&n.canvas&&(n=n.canvas),n&&n.getContext("2d")||null}},Ue="/*\r\n * DOM element rendering detection\r\n * https://davidwalsh.name/detect-node-insertion\r\n */\r\n@keyframes chartjs-render-animation {\r\n\tfrom { opacity: 0.99; }\r\n\tto { opacity: 1; }\r\n}\r\n\r\n.chartjs-render-monitor {\r\n\tanimation: chartjs-render-animation 0.001s;\r\n}\r\n\r\n/*\r\n * DOM element resizing detection\r\n * https://github.com/marcj/css-element-queries\r\n */\r\n.chartjs-size-monitor,\r\n.chartjs-size-monitor-expand,\r\n.chartjs-size-monitor-shrink {\r\n\tposition: absolute;\r\n\tdirection: ltr;\r\n\tleft: 0;\r\n\ttop: 0;\r\n\tright: 0;\r\n\tbottom: 0;\r\n\toverflow: hidden;\r\n\tpointer-events: none;\r\n\tvisibility: hidden;\r\n\tz-index: -1;\r\n}\r\n\r\n.chartjs-size-monitor-expand > div {\r\n\tposition: absolute;\r\n\twidth: 1000000px;\r\n\theight: 1000000px;\r\n\tleft: 0;\r\n\ttop: 0;\r\n}\r\n\r\n.chartjs-size-monitor-shrink > div {\r\n\tposition: absolute;\r\n\twidth: 200%;\r\n\theight: 200%;\r\n\tleft: 0;\r\n\ttop: 0;\r\n}\r\n",Xe=t(Object.freeze({__proto__:null,default:Ue})),Ze="$chartjs",$e="chartjs-",Ke=$e+"size-monitor",Je=$e+"render-monitor",Qe=$e+"render-animation",nt=["animationstart","webkitAnimationStart"],et={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function tt(n,e){var t=ln.getStyle(n,e),o=t&&t.match(/^(\d+)(\.\d+)?px$/);return o?Number(o[1]):void 0}function ot(n,e){var t=n.style,o=n.getAttribute("height"),a=n.getAttribute("width");if(n[Ze]={initial:{height:o,width:a,style:{display:t.display,height:t.height,width:t.width}}},t.display=t.display||"block",null===a||""===a){var r=tt(n,"width");void 0!==r&&(n.width=r)}if(null===o||""===o)if(""===n.style.height)n.height=n.width/(e.options.aspectRatio||2);else{var i=tt(n,"height");void 0!==r&&(n.height=i)}return n}var at=!!function(){var n=!1;try{var e=Object.defineProperty({},"passive",{get:function(){n=!0}});window.addEventListener("e",null,e)}catch(n){}return n}()&&{passive:!0};function rt(n,e,t){n.addEventListener(e,t,at)}function it(n,e,t){n.removeEventListener(e,t,at)}function lt(n,e,t,o,a){return{type:n,chart:e,native:a||null,x:void 0!==t?t:null,y:void 0!==o?o:null}}function ft(n,e){var t=et[n.type]||n.type,o=ln.getRelativePosition(n,e);return lt(t,e,o.x,o.y,n)}function pt(n,e){var t=!1,o=[];return function(){o=Array.prototype.slice.call(arguments),e=e||this,t||(t=!0,ln.requestAnimFrame.call(window,(function(){t=!1,n.apply(e,o)})))}}function ct(n){var e=document.createElement("div");return e.className=n||"",e}function dt(n){var e=1e6,t=ct(Ke),o=ct(Ke+"-expand"),a=ct(Ke+"-shrink");o.appendChild(ct()),a.appendChild(ct()),t.appendChild(o),t.appendChild(a),t._reset=function(){o.scrollLeft=e,o.scrollTop=e,a.scrollLeft=e,a.scrollTop=e};var r=function(){t._reset(),n()};return rt(o,"scroll",r.bind(o,"expand")),rt(a,"scroll",r.bind(a,"shrink")),t}function st(n,e){var t=n[Ze]||(n[Ze]={}),o=t.renderProxy=function(n){n.animationName===Qe&&e()};ln.each(nt,(function(e){rt(n,e,o)})),t.reflow=!!n.offsetParent,n.classList.add(Je)}function mt(n){var e=n[Ze]||{},t=e.renderProxy;t&&(ln.each(nt,(function(e){it(n,e,t)})),delete e.renderProxy),n.classList.remove(Je)}function gt(n,e,t){var o=n[Ze]||(n[Ze]={}),a=o.resizer=dt(pt((function(){if(o.resizer){var a=t.options.maintainAspectRatio&&n.parentNode,r=a?a.clientWidth:0;e(lt("resize",t)),a&&a.clientWidth<r&&t.canvas&&e(lt("resize",t))}})));st(n,(function(){if(o.resizer){var e=n.parentNode;e&&e!==a.parentNode&&e.insertBefore(a,e.firstChild),a._reset()}}))}function bt(n){var e=n[Ze]||{},t=e.resizer;delete e.resizer,mt(n),t&&t.parentNode&&t.parentNode.removeChild(t)}function ut(n,e){var t=n[Ze]||(n[Ze]={});if(!t.containsStyles){t.containsStyles=!0,e="/* Chart.js */\n"+e;var o=document.createElement("style");o.setAttribute("type","text/css"),o.appendChild(document.createTextNode(e)),n.appendChild(o)}}var _t={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(n){if(!this.disableCSSInjection){var e=n.getRootNode?n.getRootNode():document;ut(e.host?e:document.head,Xe)}},acquireContext:function(n,e){"string"==typeof n?n=document.getElementById(n):n.length&&(n=n[0]),n&&n.canvas&&(n=n.canvas);var t=n&&n.getContext&&n.getContext("2d");return t&&t.canvas===n?(this._ensureLoaded(n),ot(n,e),t):null},releaseContext:function(n){var e=n.canvas;if(e[Ze]){var t=e[Ze].initial;["height","width"].forEach((function(n){var o=t[n];ln.isNullOrUndef(o)?e.removeAttribute(n):e.setAttribute(n,o)})),ln.each(t.style||{},(function(n,t){e.style[t]=n})),e.width=e.width,delete e[Ze]}},addEventListener:function(n,e,t){var o=n.canvas;if("resize"!==e){var a=t[Ze]||(t[Ze]={});rt(o,e,(a.proxies||(a.proxies={}))[n.id+"_"+e]=function(e){t(ft(e,n))})}else gt(o,t,n)},removeEventListener:function(n,e,t){var o=n.canvas;if("resize"!==e){var a=((t[Ze]||{}).proxies||{})[n.id+"_"+e];a&&it(o,e,a)}else bt(o)}};ln.addEvent=rt,ln.removeEvent=it;var ht=_t._enabled?_t:qe,vt=ln.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},ht);J._set("global",{plugins:{}});var xt={_plugins:[],_cacheId:0,register:function(n){var e=this._plugins;[].concat(n).forEach((function(n){-1===e.indexOf(n)&&e.push(n)})),this._cacheId++},unregister:function(n){var e=this._plugins;[].concat(n).forEach((function(n){var t=e.indexOf(n);-1!==t&&e.splice(t,1)})),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(n,e,t){var o,a,r,i,l,f=this.descriptors(n),p=f.length;for(o=0;o<p;++o)if("function"==typeof(l=(r=(a=f[o]).plugin)[e])&&((i=[n].concat(t||[])).push(a.options),!1===l.apply(r,i)))return!1;return!0},descriptors:function(n){var e=n.$plugins||(n.$plugins={});if(e.id===this._cacheId)return e.descriptors;var t=[],o=[],a=n&&n.config||{},r=a.options&&a.options.plugins||{};return this._plugins.concat(a.plugins||[]).forEach((function(n){if(-1===t.indexOf(n)){var e=n.id,a=r[e];!1!==a&&(!0===a&&(a=ln.clone(J.global.plugins[e])),t.push(n),o.push({plugin:n,options:a||{}}))}})),e.descriptors=o,e.id=this._cacheId,o},_invalidate:function(n){delete n.$plugins}},wt={constructors:{},defaults:{},registerScaleType:function(n,e,t){this.constructors[n]=e,this.defaults[n]=ln.clone(t)},getScaleConstructor:function(n){return this.constructors.hasOwnProperty(n)?this.constructors[n]:void 0},getScaleDefaults:function(n){return this.defaults.hasOwnProperty(n)?ln.merge(Object.create(null),[J.scale,this.defaults[n]]):{}},updateScaleDefaults:function(n,e){var t=this;t.defaults.hasOwnProperty(n)&&(t.defaults[n]=ln.extend(t.defaults[n],e))},addScalesToLayout:function(n){ln.each(n.scales,(function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,Ve.addBox(n,e)}))}},yt=ln.valueOrDefault,kt=ln.rtl.getRtlAdapter;J._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:ln.noop,title:function(n,e){var t="",o=e.labels,a=o?o.length:0;if(n.length>0){var r=n[0];r.label?t=r.label:r.xLabel?t=r.xLabel:a>0&&r.index<a&&(t=o[r.index])}return t},afterTitle:ln.noop,beforeBody:ln.noop,beforeLabel:ln.noop,label:function(n,e){var t=e.datasets[n.datasetIndex].label||"";return t&&(t+=": "),ln.isNullOrUndef(n.value)?t+=n.yLabel:t+=n.value,t},labelColor:function(n,e){var t=e.getDatasetMeta(n.datasetIndex).data[n.index]._view;return{borderColor:t.borderColor,backgroundColor:t.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:ln.noop,afterBody:ln.noop,beforeFooter:ln.noop,footer:ln.noop,afterFooter:ln.noop}}});var Ct={average:function(n){if(!n.length)return!1;var e,t,o=0,a=0,r=0;for(e=0,t=n.length;e<t;++e){var i=n[e];if(i&&i.hasValue()){var l=i.tooltipPosition();o+=l.x,a+=l.y,++r}}return{x:o/r,y:a/r}},nearest:function(n,e){var t,o,a,r=e.x,i=e.y,l=Number.POSITIVE_INFINITY;for(t=0,o=n.length;t<o;++t){var f=n[t];if(f&&f.hasValue()){var p=f.getCenterPoint(),c=ln.distanceBetweenPoints(e,p);c<l&&(l=c,a=f)}}if(a){var d=a.tooltipPosition();r=d.x,i=d.y}return{x:r,y:i}}};function Bt(n,e){return e&&(ln.isArray(e)?Array.prototype.push.apply(n,e):n.push(e)),n}function Pt(n){return("string"==typeof n||n instanceof String)&&n.indexOf("\n")>-1?n.split("\n"):n}function St(n){var e=n._xScale,t=n._yScale||n._scale,o=n._index,a=n._datasetIndex,r=n._chart.getDatasetMeta(a).controller,i=r._getIndexScale(),l=r._getValueScale();return{xLabel:e?e.getLabelForIndex(o,a):"",yLabel:t?t.getLabelForIndex(o,a):"",label:i?""+i.getLabelForIndex(o,a):"",value:l?""+l.getLabelForIndex(o,a):"",index:o,datasetIndex:a,x:n._model.x,y:n._model.y}}function Tt(n){var e=J.global;return{xPadding:n.xPadding,yPadding:n.yPadding,xAlign:n.xAlign,yAlign:n.yAlign,rtl:n.rtl,textDirection:n.textDirection,bodyFontColor:n.bodyFontColor,_bodyFontFamily:yt(n.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:yt(n.bodyFontStyle,e.defaultFontStyle),_bodyAlign:n.bodyAlign,bodyFontSize:yt(n.bodyFontSize,e.defaultFontSize),bodySpacing:n.bodySpacing,titleFontColor:n.titleFontColor,_titleFontFamily:yt(n.titleFontFamily,e.defaultFontFamily),_titleFontStyle:yt(n.titleFontStyle,e.defaultFontStyle),titleFontSize:yt(n.titleFontSize,e.defaultFontSize),_titleAlign:n.titleAlign,titleSpacing:n.titleSpacing,titleMarginBottom:n.titleMarginBottom,footerFontColor:n.footerFontColor,_footerFontFamily:yt(n.footerFontFamily,e.defaultFontFamily),_footerFontStyle:yt(n.footerFontStyle,e.defaultFontStyle),footerFontSize:yt(n.footerFontSize,e.defaultFontSize),_footerAlign:n.footerAlign,footerSpacing:n.footerSpacing,footerMarginTop:n.footerMarginTop,caretSize:n.caretSize,cornerRadius:n.cornerRadius,backgroundColor:n.backgroundColor,opacity:0,legendColorBackground:n.multiKeyBackground,displayColors:n.displayColors,borderColor:n.borderColor,borderWidth:n.borderWidth}}function Mt(n,e){var t=n._chart.ctx,o=2*e.yPadding,a=0,r=e.body,i=r.reduce((function(n,e){return n+e.before.length+e.lines.length+e.after.length}),0);i+=e.beforeBody.length+e.afterBody.length;var l=e.title.length,f=e.footer.length,p=e.titleFontSize,c=e.bodyFontSize,d=e.footerFontSize;o+=l*p,o+=l?(l-1)*e.titleSpacing:0,o+=l?e.titleMarginBottom:0,o+=i*c,o+=i?(i-1)*e.bodySpacing:0,o+=f?e.footerMarginTop:0,o+=f*d,o+=f?(f-1)*e.footerSpacing:0;var s=0,m=function(n){a=Math.max(a,t.measureText(n).width+s)};return t.font=ln.fontString(p,e._titleFontStyle,e._titleFontFamily),ln.each(e.title,m),t.font=ln.fontString(c,e._bodyFontStyle,e._bodyFontFamily),ln.each(e.beforeBody.concat(e.afterBody),m),s=e.displayColors?c+2:0,ln.each(r,(function(n){ln.each(n.before,m),ln.each(n.lines,m),ln.each(n.after,m)})),s=0,t.font=ln.fontString(d,e._footerFontStyle,e._footerFontFamily),ln.each(e.footer,m),{width:a+=2*e.xPadding,height:o}}function Lt(n,e){var t,o,a,r,i,l=n._model,f=n._chart,p=n._chart.chartArea,c="center",d="center";l.y<e.height?d="top":l.y>f.height-e.height&&(d="bottom");var s=(p.left+p.right)/2,m=(p.top+p.bottom)/2;"center"===d?(t=function(n){return n<=s},o=function(n){return n>s}):(t=function(n){return n<=e.width/2},o=function(n){return n>=f.width-e.width/2}),a=function(n){return n+e.width+l.caretSize+l.caretPadding>f.width},r=function(n){return n-e.width-l.caretSize-l.caretPadding<0},i=function(n){return n<=m?"top":"bottom"},t(l.x)?(c="left",a(l.x)&&(c="center",d=i(l.y))):o(l.x)&&(c="right",r(l.x)&&(c="center",d=i(l.y)));var g=n._options;return{xAlign:g.xAlign?g.xAlign:c,yAlign:g.yAlign?g.yAlign:d}}function zt(n,e,t,o){var a=n.x,r=n.y,i=n.caretSize,l=n.caretPadding,f=n.cornerRadius,p=t.xAlign,c=t.yAlign,d=i+l,s=f+l;return"right"===p?a-=e.width:"center"===p&&((a-=e.width/2)+e.width>o.width&&(a=o.width-e.width),a<0&&(a=0)),"top"===c?r+=d:r-="bottom"===c?e.height+d:e.height/2,"center"===c?"left"===p?a+=d:"right"===p&&(a-=d):"left"===p?a-=s:"right"===p&&(a+=s),{x:a,y:r}}function Wt(n,e){return"center"===e?n.x+n.width/2:"right"===e?n.x+n.width-n.xPadding:n.x+n.xPadding}function Rt(n){return Bt([],Pt(n))}var Ft=bn.extend({initialize:function(){this._model=Tt(this._options),this._lastActive=[]},getTitle:function(){var n=this,e=n._options.callbacks,t=e.beforeTitle.apply(n,arguments),o=e.title.apply(n,arguments),a=e.afterTitle.apply(n,arguments),r=[];return r=Bt(r,Pt(t)),r=Bt(r,Pt(o)),r=Bt(r,Pt(a))},getBeforeBody:function(){return Rt(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(n,e){var t=this,o=t._options.callbacks,a=[];return ln.each(n,(function(n){var r={before:[],lines:[],after:[]};Bt(r.before,Pt(o.beforeLabel.call(t,n,e))),Bt(r.lines,o.label.call(t,n,e)),Bt(r.after,Pt(o.afterLabel.call(t,n,e))),a.push(r)})),a},getAfterBody:function(){return Rt(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var n=this,e=n._options.callbacks,t=e.beforeFooter.apply(n,arguments),o=e.footer.apply(n,arguments),a=e.afterFooter.apply(n,arguments),r=[];return r=Bt(r,Pt(t)),r=Bt(r,Pt(o)),r=Bt(r,Pt(a))},update:function(n){var e,t,o=this,a=o._options,r=o._model,i=o._model=Tt(a),l=o._active,f=o._data,p={xAlign:r.xAlign,yAlign:r.yAlign},c={x:r.x,y:r.y},d={width:r.width,height:r.height},s={x:r.caretX,y:r.caretY};if(l.length){i.opacity=1;var m=[],g=[];s=Ct[a.position].call(o,l,o._eventPosition);var b=[];for(e=0,t=l.length;e<t;++e)b.push(St(l[e]));a.filter&&(b=b.filter((function(n){return a.filter(n,f)}))),a.itemSort&&(b=b.sort((function(n,e){return a.itemSort(n,e,f)}))),ln.each(b,(function(n){m.push(a.callbacks.labelColor.call(o,n,o._chart)),g.push(a.callbacks.labelTextColor.call(o,n,o._chart))})),i.title=o.getTitle(b,f),i.beforeBody=o.getBeforeBody(b,f),i.body=o.getBody(b,f),i.afterBody=o.getAfterBody(b,f),i.footer=o.getFooter(b,f),i.x=s.x,i.y=s.y,i.caretPadding=a.caretPadding,i.labelColors=m,i.labelTextColors=g,i.dataPoints=b,c=zt(i,d=Mt(this,i),p=Lt(this,d),o._chart)}else i.opacity=0;return i.xAlign=p.xAlign,i.yAlign=p.yAlign,i.x=c.x,i.y=c.y,i.width=d.width,i.height=d.height,i.caretX=s.x,i.caretY=s.y,o._model=i,n&&a.custom&&a.custom.call(o,i),o},drawCaret:function(n,e){var t=this._chart.ctx,o=this._view,a=this.getCaretPosition(n,e,o);t.lineTo(a.x1,a.y1),t.lineTo(a.x2,a.y2),t.lineTo(a.x3,a.y3)},getCaretPosition:function(n,e,t){var o,a,r,i,l,f,p=t.caretSize,c=t.cornerRadius,d=t.xAlign,s=t.yAlign,m=n.x,g=n.y,b=e.width,u=e.height;if("center"===s)l=g+u/2,"left"===d?(a=(o=m)-p,r=o,i=l+p,f=l-p):(a=(o=m+b)+p,r=o,i=l-p,f=l+p);else if("left"===d?(o=(a=m+c+p)-p,r=a+p):"right"===d?(o=(a=m+b-c-p)-p,r=a+p):(o=(a=t.caretX)-p,r=a+p),"top"===s)l=(i=g)-p,f=i;else{l=(i=g+u)+p,f=i;var _=r;r=o,o=_}return{x1:o,x2:a,x3:r,y1:i,y2:l,y3:f}},drawTitle:function(n,e,t){var o,a,r,i=e.title,l=i.length;if(l){var f=kt(e.rtl,e.x,e.width);for(n.x=Wt(e,e._titleAlign),t.textAlign=f.textAlign(e._titleAlign),t.textBaseline="middle",o=e.titleFontSize,a=e.titleSpacing,t.fillStyle=e.titleFontColor,t.font=ln.fontString(o,e._titleFontStyle,e._titleFontFamily),r=0;r<l;++r)t.fillText(i[r],f.x(n.x),n.y+o/2),n.y+=o+a,r+1===l&&(n.y+=e.titleMarginBottom-a)}},drawBody:function(n,e,t){var o,a,r,i,l,f,p,c,d=e.bodyFontSize,s=e.bodySpacing,m=e._bodyAlign,g=e.body,b=e.displayColors,u=0,_=b?Wt(e,"left"):0,h=kt(e.rtl,e.x,e.width),v=function(e){t.fillText(e,h.x(n.x+u),n.y+d/2),n.y+=d+s},x=h.textAlign(m);for(t.textAlign=m,t.textBaseline="middle",t.font=ln.fontString(d,e._bodyFontStyle,e._bodyFontFamily),n.x=Wt(e,x),t.fillStyle=e.bodyFontColor,ln.each(e.beforeBody,v),u=b&&"right"!==x?"center"===m?d/2+1:d+2:0,l=0,p=g.length;l<p;++l){for(o=g[l],a=e.labelTextColors[l],r=e.labelColors[l],t.fillStyle=a,ln.each(o.before,v),f=0,c=(i=o.lines).length;f<c;++f){if(b){var w=h.x(_);t.fillStyle=e.legendColorBackground,t.fillRect(h.leftForLtr(w,d),n.y,d,d),t.lineWidth=1,t.strokeStyle=r.borderColor,t.strokeRect(h.leftForLtr(w,d),n.y,d,d),t.fillStyle=r.backgroundColor,t.fillRect(h.leftForLtr(h.xPlus(w,1),d-2),n.y+1,d-2,d-2),t.fillStyle=a}v(i[f])}ln.each(o.after,v)}u=0,ln.each(e.afterBody,v),n.y-=s},drawFooter:function(n,e,t){var o,a,r=e.footer,i=r.length;if(i){var l=kt(e.rtl,e.x,e.width);for(n.x=Wt(e,e._footerAlign),n.y+=e.footerMarginTop,t.textAlign=l.textAlign(e._footerAlign),t.textBaseline="middle",o=e.footerFontSize,t.fillStyle=e.footerFontColor,t.font=ln.fontString(o,e._footerFontStyle,e._footerFontFamily),a=0;a<i;++a)t.fillText(r[a],l.x(n.x),n.y+o/2),n.y+=o+e.footerSpacing}},drawBackground:function(n,e,t,o){t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor,t.lineWidth=e.borderWidth;var a=e.xAlign,r=e.yAlign,i=n.x,l=n.y,f=o.width,p=o.height,c=e.cornerRadius;t.beginPath(),t.moveTo(i+c,l),"top"===r&&this.drawCaret(n,o),t.lineTo(i+f-c,l),t.quadraticCurveTo(i+f,l,i+f,l+c),"center"===r&&"right"===a&&this.drawCaret(n,o),t.lineTo(i+f,l+p-c),t.quadraticCurveTo(i+f,l+p,i+f-c,l+p),"bottom"===r&&this.drawCaret(n,o),t.lineTo(i+c,l+p),t.quadraticCurveTo(i,l+p,i,l+p-c),"center"===r&&"left"===a&&this.drawCaret(n,o),t.lineTo(i,l+c),t.quadraticCurveTo(i,l,i+c,l),t.closePath(),t.fill(),e.borderWidth>0&&t.stroke()},draw:function(){var n=this._chart.ctx,e=this._view;if(0!==e.opacity){var t={width:e.width,height:e.height},o={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,r=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&r&&(n.save(),n.globalAlpha=a,this.drawBackground(o,e,n,t),o.y+=e.yPadding,ln.rtl.overrideTextDirection(n,e.textDirection),this.drawTitle(o,e,n),this.drawBody(o,e,n),this.drawFooter(o,e,n),ln.rtl.restoreTextDirection(n,e.textDirection),n.restore())}},handleEvent:function(n){var e=this,t=e._options,o=!1;return e._lastActive=e._lastActive||[],"mouseout"===n.type?e._active=[]:(e._active=e._chart.getElementsAtEventForMode(n,t.mode,t),t.reverse&&e._active.reverse()),(o=!ln.arrayEquals(e._active,e._lastActive))&&(e._lastActive=e._active,(t.enabled||t.custom)&&(e._eventPosition={x:n.x,y:n.y},e.update(!0),e.pivot())),o}}),Dt=Ct,Ot=Ft;Ot.positioners=Dt;var At=ln.valueOrDefault;function It(){return ln.merge(Object.create(null),[].slice.call(arguments),{merger:function(n,e,t,o){if("xAxes"===n||"yAxes"===n){var a,r,i,l=t[n].length;for(e[n]||(e[n]=[]),a=0;a<l;++a)i=t[n][a],r=At(i.type,"xAxes"===n?"category":"linear"),a>=e[n].length&&e[n].push({}),!e[n][a].type||i.type&&i.type!==e[n][a].type?ln.merge(e[n][a],[wt.getScaleDefaults(r),i]):ln.merge(e[n][a],i)}else ln._merger(n,e,t,o)}})}function Ht(){return ln.merge(Object.create(null),[].slice.call(arguments),{merger:function(n,e,t,o){var a=e[n]||Object.create(null),r=t[n];"scales"===n?e[n]=It(a,r):"scale"===n?e[n]=ln.merge(a,[wt.getScaleDefaults(r.type),r]):ln._merger(n,e,t,o)}})}function Nt(n){var e=(n=n||Object.create(null)).data=n.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],n.options=Ht(J.global,J[n.type],n.options||{}),n}function Et(n){var e=n.options;ln.each(n.scales,(function(e){Ve.removeBox(n,e)})),e=Ht(J.global,J[n.config.type],e),n.options=n.config.options=e,n.ensureScalesHaveIDs(),n.buildOrUpdateScales(),n.tooltip._options=e.tooltips,n.tooltip.initialize()}function jt(n,e,t){var o,a=function(n){return n.id===o};do{o=e+t++}while(ln.findIndex(n,a)>=0);return o}function Gt(n){return"top"===n||"bottom"===n}function Yt(n,e){return function(t,o){return t[n]===o[n]?t[e]-o[e]:t[n]-o[n]}}J._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var Vt=function(n,e){return this.construct(n,e),this};ln.extend(Vt.prototype,{construct:function(n,e){var t=this;e=Nt(e);var o=vt.acquireContext(n,e),a=o&&o.canvas,r=a&&a.height,i=a&&a.width;t.id=ln.uid(),t.ctx=o,t.canvas=a,t.config=e,t.width=i,t.height=r,t.aspectRatio=r?i/r:null,t.options=e.options,t._bufferedRender=!1,t._layers=[],t.chart=t,t.controller=t,Vt.instances[t.id]=t,Object.defineProperty(t,"data",{get:function(){return t.config.data},set:function(n){t.config.data=n}}),o&&a?(t.initialize(),t.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var n=this;return xt.notify(n,"beforeInit"),ln.retinaScale(n,n.options.devicePixelRatio),n.bindEvents(),n.options.responsive&&n.resize(!0),n.initToolTip(),xt.notify(n,"afterInit"),n},clear:function(){return ln.canvas.clear(this),this},stop:function(){return hn.cancelAnimation(this),this},resize:function(n){var e=this,t=e.options,o=e.canvas,a=t.maintainAspectRatio&&e.aspectRatio||null,r=Math.max(0,Math.floor(ln.getMaximumWidth(o))),i=Math.max(0,Math.floor(a?r/a:ln.getMaximumHeight(o)));if((e.width!==r||e.height!==i)&&(o.width=e.width=r,o.height=e.height=i,o.style.width=r+"px",o.style.height=i+"px",ln.retinaScale(e,t.devicePixelRatio),!n)){var l={width:r,height:i};xt.notify(e,"resize",[l]),t.onResize&&t.onResize(e,l),e.stop(),e.update({duration:t.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var n=this.options,e=n.scales||{},t=n.scale;ln.each(e.xAxes,(function(n,t){n.id||(n.id=jt(e.xAxes,"x-axis-",t))})),ln.each(e.yAxes,(function(n,t){n.id||(n.id=jt(e.yAxes,"y-axis-",t))})),t&&(t.id=t.id||"scale")},buildOrUpdateScales:function(){var n=this,e=n.options,t=n.scales||{},o=[],a=Object.keys(t).reduce((function(n,e){return n[e]=!1,n}),{});e.scales&&(o=o.concat((e.scales.xAxes||[]).map((function(n){return{options:n,dtype:"category",dposition:"bottom"}})),(e.scales.yAxes||[]).map((function(n){return{options:n,dtype:"linear",dposition:"left"}})))),e.scale&&o.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),ln.each(o,(function(e){var o=e.options,r=o.id,i=At(o.type,e.dtype);Gt(o.position)!==Gt(e.dposition)&&(o.position=e.dposition),a[r]=!0;var l=null;if(r in t&&t[r].type===i)(l=t[r]).options=o,l.ctx=n.ctx,l.chart=n;else{var f=wt.getScaleConstructor(i);if(!f)return;l=new f({id:r,type:i,options:o,ctx:n.ctx,chart:n}),t[l.id]=l}l.mergeTicksOptions(),e.isDefault&&(n.scale=l)})),ln.each(a,(function(n,e){n||delete t[e]})),n.scales=t,wt.addScalesToLayout(this)},buildOrUpdateControllers:function(){var n,e,t=this,o=[],a=t.data.datasets;for(n=0,e=a.length;n<e;n++){var r=a[n],i=t.getDatasetMeta(n),l=r.type||t.config.type;if(i.type&&i.type!==l&&(t.destroyDatasetMeta(n),i=t.getDatasetMeta(n)),i.type=l,i.order=r.order||0,i.index=n,i.controller)i.controller.updateIndex(n),i.controller.linkScales();else{var f=Be[i.type];if(void 0===f)throw new Error('"'+i.type+'" is not a chart type.');i.controller=new f(t,n),o.push(i.controller)}}return o},resetElements:function(){var n=this;ln.each(n.data.datasets,(function(e,t){n.getDatasetMeta(t).controller.reset()}),n)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(n){var e,t,o=this;if(n&&"object"==typeof n||(n={duration:n,lazy:arguments[1]}),Et(o),xt._invalidate(o),!1!==xt.notify(o,"beforeUpdate")){o.tooltip._data=o.data;var a=o.buildOrUpdateControllers();for(e=0,t=o.data.datasets.length;e<t;e++)o.getDatasetMeta(e).controller.buildOrUpdateElements();o.updateLayout(),o.options.animation&&o.options.animation.duration&&ln.each(a,(function(n){n.reset()})),o.updateDatasets(),o.tooltip.initialize(),o.lastActive=[],xt.notify(o,"afterUpdate"),o._layers.sort(Yt("z","_idx")),o._bufferedRender?o._bufferedRequest={duration:n.duration,easing:n.easing,lazy:n.lazy}:o.render(n)}},updateLayout:function(){var n=this;!1!==xt.notify(n,"beforeLayout")&&(Ve.update(this,this.width,this.height),n._layers=[],ln.each(n.boxes,(function(e){e._configure&&e._configure(),n._layers.push.apply(n._layers,e._layers())}),n),n._layers.forEach((function(n,e){n._idx=e})),xt.notify(n,"afterScaleUpdate"),xt.notify(n,"afterLayout"))},updateDatasets:function(){var n=this;if(!1!==xt.notify(n,"beforeDatasetsUpdate")){for(var e=0,t=n.data.datasets.length;e<t;++e)n.updateDataset(e);xt.notify(n,"afterDatasetsUpdate")}},updateDataset:function(n){var e=this,t=e.getDatasetMeta(n),o={meta:t,index:n};!1!==xt.notify(e,"beforeDatasetUpdate",[o])&&(t.controller._update(),xt.notify(e,"afterDatasetUpdate",[o]))},render:function(n){var e=this;n&&"object"==typeof n||(n={duration:n,lazy:arguments[1]});var t=e.options.animation,o=At(n.duration,t&&t.duration),a=n.lazy;if(!1!==xt.notify(e,"beforeRender")){var r=function(n){xt.notify(e,"afterRender"),ln.callback(t&&t.onComplete,[n],e)};if(t&&o){var i=new _n({numSteps:o/16.66,easing:n.easing||t.easing,render:function(n,e){var t=ln.easing.effects[e.easing],o=e.currentStep,a=o/e.numSteps;n.draw(t(a),a,o)},onAnimationProgress:t.onProgress,onAnimationComplete:r});hn.addAnimation(e,i,o,a)}else e.draw(),r(new _n({numSteps:0,chart:e}));return e}},draw:function(n){var e,t,o=this;if(o.clear(),ln.isNullOrUndef(n)&&(n=1),o.transition(n),!(o.width<=0||o.height<=0)&&!1!==xt.notify(o,"beforeDraw",[n])){for(t=o._layers,e=0;e<t.length&&t[e].z<=0;++e)t[e].draw(o.chartArea);for(o.drawDatasets(n);e<t.length;++e)t[e].draw(o.chartArea);o._drawTooltip(n),xt.notify(o,"afterDraw",[n])}},transition:function(n){for(var e=this,t=0,o=(e.data.datasets||[]).length;t<o;++t)e.isDatasetVisible(t)&&e.getDatasetMeta(t).controller.transition(n);e.tooltip.transition(n)},_getSortedDatasetMetas:function(n){var e,t,o=this,a=[];for(e=0,t=(o.data.datasets||[]).length;e<t;++e)n&&!o.isDatasetVisible(e)||a.push(o.getDatasetMeta(e));return a.sort(Yt("order","index")),a},_getSortedVisibleDatasetMetas:function(){return this._getSortedDatasetMetas(!0)},drawDatasets:function(n){var e,t,o=this;if(!1!==xt.notify(o,"beforeDatasetsDraw",[n])){for(t=(e=o._getSortedVisibleDatasetMetas()).length-1;t>=0;--t)o.drawDataset(e[t],n);xt.notify(o,"afterDatasetsDraw",[n])}},drawDataset:function(n,e){var t=this,o={meta:n,index:n.index,easingValue:e};!1!==xt.notify(t,"beforeDatasetDraw",[o])&&(n.controller.draw(e),xt.notify(t,"afterDatasetDraw",[o]))},_drawTooltip:function(n){var e=this,t=e.tooltip,o={tooltip:t,easingValue:n};!1!==xt.notify(e,"beforeTooltipDraw",[o])&&(t.draw(),xt.notify(e,"afterTooltipDraw",[o]))},getElementAtEvent:function(n){return We.modes.single(this,n)},getElementsAtEvent:function(n){return We.modes.label(this,n,{intersect:!0})},getElementsAtXAxis:function(n){return We.modes["x-axis"](this,n,{intersect:!0})},getElementsAtEventForMode:function(n,e,t){var o=We.modes[e];return"function"==typeof o?o(this,n,t):[]},getDatasetAtEvent:function(n){return We.modes.dataset(this,n,{intersect:!0})},getDatasetMeta:function(n){var e=this,t=e.data.datasets[n];t._meta||(t._meta={});var o=t._meta[e.id];return o||(o=t._meta[e.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:t.order||0,index:n}),o},getVisibleDatasetCount:function(){for(var n=0,e=0,t=this.data.datasets.length;e<t;++e)this.isDatasetVisible(e)&&n++;return n},isDatasetVisible:function(n){var e=this.getDatasetMeta(n);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[n].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(n){var e=this.id,t=this.data.datasets[n],o=t._meta&&t._meta[e];o&&(o.controller.destroy(),delete t._meta[e])},destroy:function(){var n,e,t=this,o=t.canvas;for(t.stop(),n=0,e=t.data.datasets.length;n<e;++n)t.destroyDatasetMeta(n);o&&(t.unbindEvents(),ln.canvas.clear(t),vt.releaseContext(t.ctx),t.canvas=null,t.ctx=null),xt.notify(t,"destroy"),delete Vt.instances[t.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var n=this;n.tooltip=new Ot({_chart:n,_chartInstance:n,_data:n.data,_options:n.options.tooltips},n)},bindEvents:function(){var n=this,e=n._listeners={},t=function(){n.eventHandler.apply(n,arguments)};ln.each(n.options.events,(function(o){vt.addEventListener(n,o,t),e[o]=t})),n.options.responsive&&(t=function(){n.resize()},vt.addEventListener(n,"resize",t),e.resize=t)},unbindEvents:function(){var n=this,e=n._listeners;e&&(delete n._listeners,ln.each(e,(function(e,t){vt.removeEventListener(n,t,e)})))},updateHoverStyle:function(n,e,t){var o,a,r,i=t?"set":"remove";for(a=0,r=n.length;a<r;++a)(o=n[a])&&this.getDatasetMeta(o._datasetIndex).controller[i+"HoverStyle"](o);"dataset"===e&&this.getDatasetMeta(n[0]._datasetIndex).controller["_"+i+"DatasetHoverStyle"]()},eventHandler:function(n){var e=this,t=e.tooltip;if(!1!==xt.notify(e,"beforeEvent",[n])){e._bufferedRender=!0,e._bufferedRequest=null;var o=e.handleEvent(n);t&&(o=t._start?t.handleEvent(n):o|t.handleEvent(n)),xt.notify(e,"afterEvent",[n]);var a=e._bufferedRequest;return a?e.render(a):o&&!e.animating&&(e.stop(),e.render({duration:e.options.hover.animationDuration,lazy:!0})),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(n){var e=this,t=e.options||{},o=t.hover,a=!1;return e.lastActive=e.lastActive||[],"mouseout"===n.type?e.active=[]:e.active=e.getElementsAtEventForMode(n,o.mode,o),ln.callback(t.onHover||t.hover.onHover,[n.native,e.active],e),"mouseup"!==n.type&&"click"!==n.type||t.onClick&&t.onClick.call(e,n.native,e.active),e.lastActive.length&&e.updateHoverStyle(e.lastActive,o.mode,!1),e.active.length&&o.mode&&e.updateHoverStyle(e.active,o.mode,!0),a=!ln.arrayEquals(e.active,e.lastActive),e.lastActive=e.active,a}}),Vt.instances={};var qt=Vt;Vt.Controller=Vt,Vt.types={},ln.configMerge=Ht,ln.scaleMerge=It;var Ut=function(){function n(n,e,t){var o;return"string"==typeof n?(o=parseInt(n,10),-1!==n.indexOf("%")&&(o=o/100*e.parentNode[t])):o=n,o}function e(n){return null!=n&&"none"!==n}function t(t,o,a){var r=document.defaultView,i=ln._getParentNode(t),l=r.getComputedStyle(t)[o],f=r.getComputedStyle(i)[o],p=e(l),c=e(f),d=Number.POSITIVE_INFINITY;return p||c?Math.min(p?n(l,t,a):d,c?n(f,i,a):d):"none"}ln.where=function(n,e){if(ln.isArray(n)&&Array.prototype.filter)return n.filter(e);var t=[];return ln.each(n,(function(n){e(n)&&t.push(n)})),t},ln.findIndex=Array.prototype.findIndex?function(n,e,t){return n.findIndex(e,t)}:function(n,e,t){t=void 0===t?n:t;for(var o=0,a=n.length;o<a;++o)if(e.call(t,n[o],o,n))return o;return-1},ln.findNextWhere=function(n,e,t){ln.isNullOrUndef(t)&&(t=-1);for(var o=t+1;o<n.length;o++){var a=n[o];if(e(a))return a}},ln.findPreviousWhere=function(n,e,t){ln.isNullOrUndef(t)&&(t=n.length);for(var o=t-1;o>=0;o--){var a=n[o];if(e(a))return a}},ln.isNumber=function(n){return!isNaN(parseFloat(n))&&isFinite(n)},ln.almostEquals=function(n,e,t){return Math.abs(n-e)<t},ln.almostWhole=function(n,e){var t=Math.round(n);return t-e<=n&&t+e>=n},ln.max=function(n){return n.reduce((function(n,e){return isNaN(e)?n:Math.max(n,e)}),Number.NEGATIVE_INFINITY)},ln.min=function(n){return n.reduce((function(n,e){return isNaN(e)?n:Math.min(n,e)}),Number.POSITIVE_INFINITY)},ln.sign=Math.sign?function(n){return Math.sign(n)}:function(n){return 0==(n=+n)||isNaN(n)?n:n>0?1:-1},ln.toRadians=function(n){return n*(Math.PI/180)},ln.toDegrees=function(n){return n*(180/Math.PI)},ln._decimalPlaces=function(n){if(ln.isFinite(n)){for(var e=1,t=0;Math.round(n*e)/e!==n;)e*=10,t++;return t}},ln.getAngleFromPoint=function(n,e){var t=e.x-n.x,o=e.y-n.y,a=Math.sqrt(t*t+o*o),r=Math.atan2(o,t);return r<-.5*Math.PI&&(r+=2*Math.PI),{angle:r,distance:a}},ln.distanceBetweenPoints=function(n,e){return Math.sqrt(Math.pow(e.x-n.x,2)+Math.pow(e.y-n.y,2))},ln.aliasPixel=function(n){return n%2==0?0:.5},ln._alignPixel=function(n,e,t){var o=n.currentDevicePixelRatio,a=t/2;return Math.round((e-a)*o)/o+a},ln.splineCurve=function(n,e,t,o){var a=n.skip?e:n,r=e,i=t.skip?e:t,l=Math.sqrt(Math.pow(r.x-a.x,2)+Math.pow(r.y-a.y,2)),f=Math.sqrt(Math.pow(i.x-r.x,2)+Math.pow(i.y-r.y,2)),p=l/(l+f),c=f/(l+f),d=o*(p=isNaN(p)?0:p),s=o*(c=isNaN(c)?0:c);return{previous:{x:r.x-d*(i.x-a.x),y:r.y-d*(i.y-a.y)},next:{x:r.x+s*(i.x-a.x),y:r.y+s*(i.y-a.y)}}},ln.EPSILON=Number.EPSILON||1e-14,ln.splineCurveMonotone=function(n){var e,t,o,a,r,i,l,f,p,c=(n||[]).map((function(n){return{model:n._model,deltaK:0,mK:0}})),d=c.length;for(e=0;e<d;++e)if(!(o=c[e]).model.skip){if(t=e>0?c[e-1]:null,(a=e<d-1?c[e+1]:null)&&!a.model.skip){var s=a.model.x-o.model.x;o.deltaK=0!==s?(a.model.y-o.model.y)/s:0}!t||t.model.skip?o.mK=o.deltaK:!a||a.model.skip?o.mK=t.deltaK:this.sign(t.deltaK)!==this.sign(o.deltaK)?o.mK=0:o.mK=(t.deltaK+o.deltaK)/2}for(e=0;e<d-1;++e)o=c[e],a=c[e+1],o.model.skip||a.model.skip||(ln.almostEquals(o.deltaK,0,this.EPSILON)?o.mK=a.mK=0:(r=o.mK/o.deltaK,i=a.mK/o.deltaK,(f=Math.pow(r,2)+Math.pow(i,2))<=9||(l=3/Math.sqrt(f),o.mK=r*l*o.deltaK,a.mK=i*l*o.deltaK)));for(e=0;e<d;++e)(o=c[e]).model.skip||(t=e>0?c[e-1]:null,a=e<d-1?c[e+1]:null,t&&!t.model.skip&&(p=(o.model.x-t.model.x)/3,o.model.controlPointPreviousX=o.model.x-p,o.model.controlPointPreviousY=o.model.y-p*o.mK),a&&!a.model.skip&&(p=(a.model.x-o.model.x)/3,o.model.controlPointNextX=o.model.x+p,o.model.controlPointNextY=o.model.y+p*o.mK))},ln.nextItem=function(n,e,t){return t?e>=n.length-1?n[0]:n[e+1]:e>=n.length-1?n[n.length-1]:n[e+1]},ln.previousItem=function(n,e,t){return t?e<=0?n[n.length-1]:n[e-1]:e<=0?n[0]:n[e-1]},ln.niceNum=function(n,e){var t=Math.floor(ln.log10(n)),o=n/Math.pow(10,t);return(e?o<1.5?1:o<3?2:o<7?5:10:o<=1?1:o<=2?2:o<=5?5:10)*Math.pow(10,t)},ln.requestAnimFrame="undefined"==typeof window?function(n){n()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(n){return window.setTimeout(n,1e3/60)},ln.getRelativePosition=function(n,e){var t,o,a=n.originalEvent||n,r=n.target||n.srcElement,i=r.getBoundingClientRect(),l=a.touches;l&&l.length>0?(t=l[0].clientX,o=l[0].clientY):(t=a.clientX,o=a.clientY);var f=parseFloat(ln.getStyle(r,"padding-left")),p=parseFloat(ln.getStyle(r,"padding-top")),c=parseFloat(ln.getStyle(r,"padding-right")),d=parseFloat(ln.getStyle(r,"padding-bottom")),s=i.right-i.left-f-c,m=i.bottom-i.top-p-d;return{x:t=Math.round((t-i.left-f)/s*r.width/e.currentDevicePixelRatio),y:o=Math.round((o-i.top-p)/m*r.height/e.currentDevicePixelRatio)}},ln.getConstraintWidth=function(n){return t(n,"max-width","clientWidth")},ln.getConstraintHeight=function(n){return t(n,"max-height","clientHeight")},ln._calculatePadding=function(n,e,t){return(e=ln.getStyle(n,e)).indexOf("%")>-1?t*parseInt(e,10)/100:parseInt(e,10)},ln._getParentNode=function(n){var e=n.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},ln.getMaximumWidth=function(n){var e=ln._getParentNode(n);if(!e)return n.clientWidth;var t=e.clientWidth,o=t-ln._calculatePadding(e,"padding-left",t)-ln._calculatePadding(e,"padding-right",t),a=ln.getConstraintWidth(n);return isNaN(a)?o:Math.min(o,a)},ln.getMaximumHeight=function(n){var e=ln._getParentNode(n);if(!e)return n.clientHeight;var t=e.clientHeight,o=t-ln._calculatePadding(e,"padding-top",t)-ln._calculatePadding(e,"padding-bottom",t),a=ln.getConstraintHeight(n);return isNaN(a)?o:Math.min(o,a)},ln.getStyle=function(n,e){return n.currentStyle?n.currentStyle[e]:document.defaultView.getComputedStyle(n,null).getPropertyValue(e)},ln.retinaScale=function(n,e){var t=n.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==t){var o=n.canvas,a=n.height,r=n.width;o.height=a*t,o.width=r*t,n.ctx.scale(t,t),o.style.height||o.style.width||(o.style.height=a+"px",o.style.width=r+"px")}},ln.fontString=function(n,e,t){return e+" "+n+"px "+t},ln.longestText=function(n,e,t,o){var a=(o=o||{}).data=o.data||{},r=o.garbageCollect=o.garbageCollect||[];o.font!==e&&(a=o.data={},r=o.garbageCollect=[],o.font=e),n.font=e;var i,l,f,p,c,d=0,s=t.length;for(i=0;i<s;i++)if(null!=(p=t[i])&&!0!==ln.isArray(p))d=ln.measureText(n,a,r,d,p);else if(ln.isArray(p))for(l=0,f=p.length;l<f;l++)null==(c=p[l])||ln.isArray(c)||(d=ln.measureText(n,a,r,d,c));var m=r.length/2;if(m>t.length){for(i=0;i<m;i++)delete a[r[i]];r.splice(0,m)}return d},ln.measureText=function(n,e,t,o,a){var r=e[a];return r||(r=e[a]=n.measureText(a).width,t.push(a)),r>o&&(o=r),o},ln.numberOfLabelLines=function(n){var e=1;return ln.each(n,(function(n){ln.isArray(n)&&n.length>e&&(e=n.length)})),e},ln.color=O?function(n){return n instanceof CanvasGradient&&(n=J.global.defaultColor),O(n)}:function(n){return console.error("Color.js not found!"),n},ln.getHoverColor=function(n){return n instanceof CanvasPattern||n instanceof CanvasGradient?n:ln.color(n).saturate(.5).darken(.1).rgbString()}};function Xt(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function Zt(n){this.options=n||{}}ln.extend(Zt.prototype,{formats:Xt,parse:Xt,format:Xt,add:Xt,diff:Xt,startOf:Xt,endOf:Xt,_create:function(n){return n}}),Zt.override=function(n){ln.extend(Zt.prototype,n)};var $t={_date:Zt},Kt={formatters:{values:function(n){return ln.isArray(n)?n:""+n},linear:function(n,e,t){var o=t.length>3?t[2]-t[1]:t[1]-t[0];Math.abs(o)>1&&n!==Math.floor(n)&&(o=n-Math.floor(n));var a=ln.log10(Math.abs(o)),r="";if(0!==n)if(Math.max(Math.abs(t[0]),Math.abs(t[t.length-1]))<1e-4){var i=ln.log10(Math.abs(n)),l=Math.floor(i)-Math.floor(a);l=Math.max(Math.min(l,20),0),r=n.toExponential(l)}else{var f=-1*Math.floor(a);f=Math.max(Math.min(f,20),0),r=n.toFixed(f)}else r="0";return r},logarithmic:function(n,e,t){var o=n/Math.pow(10,Math.floor(ln.log10(n)));return 0===n?"0":1===o||2===o||5===o||0===e||e===t.length-1?n.toExponential():""}}},Jt=ln.isArray,Qt=ln.isNullOrUndef,no=ln.valueOrDefault,eo=ln.valueAtIndexOrDefault;function to(n,e){for(var t=[],o=n.length/e,a=0,r=n.length;a<r;a+=o)t.push(n[Math.floor(a)]);return t}function oo(n,e,t){var o,a=n.getTicks().length,r=Math.min(e,a-1),i=n.getPixelForTick(r),l=n._startPixel,f=n._endPixel,p=1e-6;if(!(t&&(o=1===a?Math.max(i-l,f-i):0===e?(n.getPixelForTick(1)-i)/2:(i-n.getPixelForTick(r-1))/2,(i+=r<e?o:-o)<l-p||i>f+p)))return i}function ao(n,e){ln.each(n,(function(n){var t,o=n.gc,a=o.length/2;if(a>e){for(t=0;t<a;++t)delete n.data[o[t]];o.splice(0,a)}}))}function ro(n,e,t,o){var a,r,i,l,f,p,c,d,s,m,g,b,u,_=t.length,h=[],v=[],x=[],w=0,y=0;for(a=0;a<_;++a){if(l=t[a].label,f=t[a].major?e.major:e.minor,n.font=p=f.string,c=o[p]=o[p]||{data:{},gc:[]},d=f.lineHeight,s=m=0,Qt(l)||Jt(l)){if(Jt(l))for(r=0,i=l.length;r<i;++r)g=l[r],Qt(g)||Jt(g)||(s=ln.measureText(n,c.data,c.gc,s,g),m+=d)}else s=ln.measureText(n,c.data,c.gc,s,l),m=d;h.push(s),v.push(m),x.push(d/2),w=Math.max(s,w),y=Math.max(m,y)}function k(n){return{width:h[n]||0,height:v[n]||0,offset:x[n]||0}}return ao(o,_),b=h.indexOf(w),u=v.indexOf(y),{first:k(0),last:k(_-1),widest:k(b),highest:k(u)}}function io(n){return n.drawTicks?n.tickMarkLength:0}function lo(n){var e,t;return n.display?(e=ln.options._parseFont(n),t=ln.options.toPadding(n.padding),e.lineHeight+t.height):0}function fo(n,e){return ln.extend(ln.options._parseFont({fontFamily:no(e.fontFamily,n.fontFamily),fontSize:no(e.fontSize,n.fontSize),fontStyle:no(e.fontStyle,n.fontStyle),lineHeight:no(e.lineHeight,n.lineHeight)}),{color:ln.options.resolve([e.fontColor,n.fontColor,J.global.defaultFontColor])})}function po(n){var e=fo(n,n.minor);return{minor:e,major:n.major.enabled?fo(n,n.major):e}}function co(n){var e,t,o,a=[];for(t=0,o=n.length;t<o;++t)void 0!==(e=n[t])._index&&a.push(e);return a}function so(n){var e,t,o=n.length;if(o<2)return!1;for(t=n[0],e=1;e<o;++e)if(n[e]-n[e-1]!==t)return!1;return t}function mo(n,e,t,o){var a,r,i,l,f=so(n),p=(e.length-1)/o;if(!f)return Math.max(p,1);for(i=0,l=(a=ln.math._factorize(f)).length-1;i<l;i++)if((r=a[i])>p)return r;return Math.max(p,1)}function go(n){var e,t,o=[];for(e=0,t=n.length;e<t;e++)n[e].major&&o.push(e);return o}function bo(n,e,t){var o,a,r=0,i=e[0];for(t=Math.ceil(t),o=0;o<n.length;o++)a=n[o],o===i?(a._index=o,i=e[++r*t]):delete a.label}function uo(n,e,t,o){var a,r,i,l,f=no(t,0),p=Math.min(no(o,n.length),n.length),c=0;for(e=Math.ceil(e),o&&(e=(a=o-t)/Math.floor(a/e)),l=f;l<0;)c++,l=Math.round(f+c*e);for(r=Math.max(f,0);r<p;r++)i=n[r],r===l?(i._index=r,c++,l=Math.round(f+c*e)):delete i.label}J._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:Kt.formatters.values,minor:{},major:{}}});var _o=bn.extend({zeroLineIndex:0,getPadding:function(){var n=this;return{left:n.paddingLeft||0,top:n.paddingTop||0,right:n.paddingRight||0,bottom:n.paddingBottom||0}},getTicks:function(){return this._ticks},_getLabels:function(){var n=this.chart.data;return this.options.labels||(this.isHorizontal()?n.xLabels:n.yLabels)||n.labels||[]},mergeTicksOptions:function(){},beforeUpdate:function(){ln.callback(this.options.beforeUpdate,[this])},update:function(n,e,t){var o,a,r,i,l,f=this,p=f.options.ticks,c=p.sampleSize;if(f.beforeUpdate(),f.maxWidth=n,f.maxHeight=e,f.margins=ln.extend({left:0,right:0,top:0,bottom:0},t),f._ticks=null,f.ticks=null,f._labelSizes=null,f._maxLabelLines=0,f.longestLabelWidth=0,f.longestTextCache=f.longestTextCache||{},f._gridLineItems=null,f._labelItems=null,f.beforeSetDimensions(),f.setDimensions(),f.afterSetDimensions(),f.beforeDataLimits(),f.determineDataLimits(),f.afterDataLimits(),f.beforeBuildTicks(),i=f.buildTicks()||[],(!(i=f.afterBuildTicks(i)||i)||!i.length)&&f.ticks)for(i=[],o=0,a=f.ticks.length;o<a;++o)i.push({value:f.ticks[o],major:!1});return f._ticks=i,l=c<i.length,r=f._convertTicksToLabels(l?to(i,c):i),f._configure(),f.beforeCalculateTickRotation(),f.calculateTickRotation(),f.afterCalculateTickRotation(),f.beforeFit(),f.fit(),f.afterFit(),f._ticksToDraw=p.display&&(p.autoSkip||"auto"===p.source)?f._autoSkip(i):i,l&&(r=f._convertTicksToLabels(f._ticksToDraw)),f.ticks=r,f.afterUpdate(),f.minSize},_configure:function(){var n,e,t=this,o=t.options.ticks.reverse;t.isHorizontal()?(n=t.left,e=t.right):(n=t.top,e=t.bottom,o=!o),t._startPixel=n,t._endPixel=e,t._reversePixels=o,t._length=e-n},afterUpdate:function(){ln.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){ln.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var n=this;n.isHorizontal()?(n.width=n.maxWidth,n.left=0,n.right=n.width):(n.height=n.maxHeight,n.top=0,n.bottom=n.height),n.paddingLeft=0,n.paddingTop=0,n.paddingRight=0,n.paddingBottom=0},afterSetDimensions:function(){ln.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){ln.callback(this.options.beforeDataLimits,[this])},determineDataLimits:ln.noop,afterDataLimits:function(){ln.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){ln.callback(this.options.beforeBuildTicks,[this])},buildTicks:ln.noop,afterBuildTicks:function(n){var e=this;return Jt(n)&&n.length?ln.callback(e.options.afterBuildTicks,[e,n]):(e.ticks=ln.callback(e.options.afterBuildTicks,[e,e.ticks])||e.ticks,n)},beforeTickToLabelConversion:function(){ln.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var n=this,e=n.options.ticks;n.ticks=n.ticks.map(e.userCallback||e.callback,this)},afterTickToLabelConversion:function(){ln.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){ln.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var n,e,t,o,a,r,i,l=this,f=l.options,p=f.ticks,c=l.getTicks().length,d=p.minRotation||0,s=p.maxRotation,m=d;!l._isVisible()||!p.display||d>=s||c<=1||!l.isHorizontal()?l.labelRotation=d:(e=(n=l._getLabelSizes()).widest.width,t=n.highest.height-n.highest.offset,o=Math.min(l.maxWidth,l.chart.width-e),e+6>(a=f.offset?l.maxWidth/c:o/(c-1))&&(a=o/(c-(f.offset?.5:1)),r=l.maxHeight-io(f.gridLines)-p.padding-lo(f.scaleLabel),i=Math.sqrt(e*e+t*t),m=ln.toDegrees(Math.min(Math.asin(Math.min((n.highest.height+6)/a,1)),Math.asin(Math.min(r/i,1))-Math.asin(t/i))),m=Math.max(d,Math.min(s,m))),l.labelRotation=m)},afterCalculateTickRotation:function(){ln.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){ln.callback(this.options.beforeFit,[this])},fit:function(){var n=this,e=n.minSize={width:0,height:0},t=n.chart,o=n.options,a=o.ticks,r=o.scaleLabel,i=o.gridLines,l=n._isVisible(),f="bottom"===o.position,p=n.isHorizontal();if(p?e.width=n.maxWidth:l&&(e.width=io(i)+lo(r)),p?l&&(e.height=io(i)+lo(r)):e.height=n.maxHeight,a.display&&l){var c=po(a),d=n._getLabelSizes(),s=d.first,m=d.last,g=d.widest,b=d.highest,u=.4*c.minor.lineHeight,_=a.padding;if(p){var h=0!==n.labelRotation,v=ln.toRadians(n.labelRotation),x=Math.cos(v),w=Math.sin(v),y=w*g.width+x*(b.height-(h?b.offset:0))+(h?0:u);e.height=Math.min(n.maxHeight,e.height+y+_);var k,C,B=n.getPixelForTick(0)-n.left,P=n.right-n.getPixelForTick(n.getTicks().length-1);h?(k=f?x*s.width+w*s.offset:w*(s.height-s.offset),C=f?w*(m.height-m.offset):x*m.width+w*m.offset):(k=s.width/2,C=m.width/2),n.paddingLeft=Math.max((k-B)*n.width/(n.width-B),0)+3,n.paddingRight=Math.max((C-P)*n.width/(n.width-P),0)+3}else{var S=a.mirror?0:g.width+_+u;e.width=Math.min(n.maxWidth,e.width+S),n.paddingTop=s.height/2,n.paddingBottom=m.height/2}}n.handleMargins(),p?(n.width=n._length=t.width-n.margins.left-n.margins.right,n.height=e.height):(n.width=e.width,n.height=n._length=t.height-n.margins.top-n.margins.bottom)},handleMargins:function(){var n=this;n.margins&&(n.margins.left=Math.max(n.paddingLeft,n.margins.left),n.margins.top=Math.max(n.paddingTop,n.margins.top),n.margins.right=Math.max(n.paddingRight,n.margins.right),n.margins.bottom=Math.max(n.paddingBottom,n.margins.bottom))},afterFit:function(){ln.callback(this.options.afterFit,[this])},isHorizontal:function(){var n=this.options.position;return"top"===n||"bottom"===n},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(n){if(Qt(n))return NaN;if(("number"==typeof n||n instanceof Number)&&!isFinite(n))return NaN;if(n)if(this.isHorizontal()){if(void 0!==n.x)return this.getRightValue(n.x)}else if(void 0!==n.y)return this.getRightValue(n.y);return n},_convertTicksToLabels:function(n){var e,t,o,a=this;for(a.ticks=n.map((function(n){return n.value})),a.beforeTickToLabelConversion(),e=a.convertTicksToLabels(n)||a.ticks,a.afterTickToLabelConversion(),t=0,o=n.length;t<o;++t)n[t].label=e[t];return e},_getLabelSizes:function(){var n=this,e=n._labelSizes;return e||(n._labelSizes=e=ro(n.ctx,po(n.options.ticks),n.getTicks(),n.longestTextCache),n.longestLabelWidth=e.widest.width),e},_parseValue:function(n){var e,t,o,a;return Jt(n)?(e=+this.getRightValue(n[0]),t=+this.getRightValue(n[1]),o=Math.min(e,t),a=Math.max(e,t)):(e=void 0,t=n=+this.getRightValue(n),o=n,a=n),{min:o,max:a,start:e,end:t}},_getScaleLabel:function(n){var e=this._parseValue(n);return void 0!==e.start?"["+e.start+", "+e.end+"]":+this.getRightValue(n)},getLabelForIndex:ln.noop,getPixelForValue:ln.noop,getValueForPixel:ln.noop,getPixelForTick:function(n){var e=this,t=e.options.offset,o=e._ticks.length,a=1/Math.max(o-(t?0:1),1);return n<0||n>o-1?null:e.getPixelForDecimal(n*a+(t?a/2:0))},getPixelForDecimal:function(n){var e=this;return e._reversePixels&&(n=1-n),e._startPixel+n*e._length},getDecimalForPixel:function(n){var e=(n-this._startPixel)/this._length;return this._reversePixels?1-e:e},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var n=this,e=n.min,t=n.max;return n.beginAtZero?0:e<0&&t<0?t:e>0&&t>0?e:0},_autoSkip:function(n){var e,t,o,a,r=this,i=r.options.ticks,l=r._length,f=i.maxTicksLimit||l/r._tickSize()+1,p=i.major.enabled?go(n):[],c=p.length,d=p[0],s=p[c-1];if(c>f)return bo(n,p,c/f),co(n);if(o=mo(p,n,l,f),c>0){for(e=0,t=c-1;e<t;e++)uo(n,o,p[e],p[e+1]);return a=c>1?(s-d)/(c-1):null,uo(n,o,ln.isNullOrUndef(a)?0:d-a,d),uo(n,o,s,ln.isNullOrUndef(a)?n.length:s+a),co(n)}return uo(n,o),co(n)},_tickSize:function(){var n=this,e=n.options.ticks,t=ln.toRadians(n.labelRotation),o=Math.abs(Math.cos(t)),a=Math.abs(Math.sin(t)),r=n._getLabelSizes(),i=e.autoSkipPadding||0,l=r?r.widest.width+i:0,f=r?r.highest.height+i:0;return n.isHorizontal()?f*o>l*a?l/o:f/a:f*a<l*o?f/o:l/a},_isVisible:function(){var n,e,t,o=this,a=o.chart,r=o.options.display;if("auto"!==r)return!!r;for(n=0,e=a.data.datasets.length;n<e;++n)if(a.isDatasetVisible(n)&&((t=a.getDatasetMeta(n)).xAxisID===o.id||t.yAxisID===o.id))return!0;return!1},_computeGridLineItems:function(n){var e,t,o,a,r,i,l,f,p,c,d,s,m,g,b,u,_,h=this,v=h.chart,x=h.options,w=x.gridLines,y=x.position,k=w.offsetGridLines,C=h.isHorizontal(),B=h._ticksToDraw,P=B.length+(k?1:0),S=io(w),T=[],M=w.drawBorder?eo(w.lineWidth,0,0):0,L=M/2,z=ln._alignPixel,W=function(n){return z(v,n,M)};for("top"===y?(e=W(h.bottom),l=h.bottom-S,p=e-L,d=W(n.top)+L,m=n.bottom):"bottom"===y?(e=W(h.top),d=n.top,m=W(n.bottom)-L,l=e+L,p=h.top+S):"left"===y?(e=W(h.right),i=h.right-S,f=e-L,c=W(n.left)+L,s=n.right):(e=W(h.left),c=n.left,s=W(n.right)-L,i=e+L,f=h.left+S),t=0;t<P;++t)o=B[t]||{},Qt(o.label)&&t<B.length||(t===h.zeroLineIndex&&x.offset===k?(g=w.zeroLineWidth,b=w.zeroLineColor,u=w.zeroLineBorderDash||[],_=w.zeroLineBorderDashOffset||0):(g=eo(w.lineWidth,t,1),b=eo(w.color,t,"rgba(0,0,0,0.1)"),u=w.borderDash||[],_=w.borderDashOffset||0),void 0!==(a=oo(h,o._index||t,k))&&(r=z(v,a,g),C?i=f=c=s=r:l=p=d=m=r,T.push({tx1:i,ty1:l,tx2:f,ty2:p,x1:c,y1:d,x2:s,y2:m,width:g,color:b,borderDash:u,borderDashOffset:_})));return T.ticksLength=P,T.borderValue=e,T},_computeLabelItems:function(){var n,e,t,o,a,r,i,l,f,p,c,d,s=this,m=s.options,g=m.ticks,b=m.position,u=g.mirror,_=s.isHorizontal(),h=s._ticksToDraw,v=po(g),x=g.padding,w=io(m.gridLines),y=-ln.toRadians(s.labelRotation),k=[];for("top"===b?(r=s.bottom-w-x,i=y?"left":"center"):"bottom"===b?(r=s.top+w+x,i=y?"right":"center"):"left"===b?(a=s.right-(u?0:w)-x,i=u?"left":"right"):(a=s.left+(u?0:w)+x,i=u?"right":"left"),n=0,e=h.length;n<e;++n)o=(t=h[n]).label,Qt(o)||(l=s.getPixelForTick(t._index||n)+g.labelOffset,p=(f=t.major?v.major:v.minor).lineHeight,c=Jt(o)?o.length:1,_?(a=l,d="top"===b?((y?1:.5)-c)*p:(y?0:.5)*p):(r=l,d=(1-c)*p/2),k.push({x:a,y:r,rotation:y,label:o,font:f,textOffset:d,textAlign:i}));return k},_drawGrid:function(n){var e=this,t=e.options.gridLines;if(t.display){var o,a,r,i,l,f=e.ctx,p=e.chart,c=ln._alignPixel,d=t.drawBorder?eo(t.lineWidth,0,0):0,s=e._gridLineItems||(e._gridLineItems=e._computeGridLineItems(n));for(r=0,i=s.length;r<i;++r)o=(l=s[r]).width,a=l.color,o&&a&&(f.save(),f.lineWidth=o,f.strokeStyle=a,f.setLineDash&&(f.setLineDash(l.borderDash),f.lineDashOffset=l.borderDashOffset),f.beginPath(),t.drawTicks&&(f.moveTo(l.tx1,l.ty1),f.lineTo(l.tx2,l.ty2)),t.drawOnChartArea&&(f.moveTo(l.x1,l.y1),f.lineTo(l.x2,l.y2)),f.stroke(),f.restore());if(d){var m,g,b,u,_=d,h=eo(t.lineWidth,s.ticksLength-1,1),v=s.borderValue;e.isHorizontal()?(m=c(p,e.left,_)-_/2,g=c(p,e.right,h)+h/2,b=u=v):(b=c(p,e.top,_)-_/2,u=c(p,e.bottom,h)+h/2,m=g=v),f.lineWidth=d,f.strokeStyle=eo(t.color,0),f.beginPath(),f.moveTo(m,b),f.lineTo(g,u),f.stroke()}}},_drawLabels:function(){var n=this;if(n.options.ticks.display){var e,t,o,a,r,i,l,f,p=n.ctx,c=n._labelItems||(n._labelItems=n._computeLabelItems());for(e=0,o=c.length;e<o;++e){if(i=(r=c[e]).font,p.save(),p.translate(r.x,r.y),p.rotate(r.rotation),p.font=i.string,p.fillStyle=i.color,p.textBaseline="middle",p.textAlign=r.textAlign,l=r.label,f=r.textOffset,Jt(l))for(t=0,a=l.length;t<a;++t)p.fillText(""+l[t],0,f),f+=i.lineHeight;else p.fillText(l,0,f);p.restore()}}},_drawTitle:function(){var n=this,e=n.ctx,t=n.options,o=t.scaleLabel;if(o.display){var a,r,i=no(o.fontColor,J.global.defaultFontColor),l=ln.options._parseFont(o),f=ln.options.toPadding(o.padding),p=l.lineHeight/2,c=t.position,d=0;if(n.isHorizontal())a=n.left+n.width/2,r="bottom"===c?n.bottom-p-f.bottom:n.top+p+f.top;else{var s="left"===c;a=s?n.left+p+f.top:n.right-p-f.top,r=n.top+n.height/2,d=s?-.5*Math.PI:.5*Math.PI}e.save(),e.translate(a,r),e.rotate(d),e.textAlign="center",e.textBaseline="middle",e.fillStyle=i,e.font=l.string,e.fillText(o.labelString,0,0),e.restore()}},draw:function(n){var e=this;e._isVisible()&&(e._drawGrid(n),e._drawTitle(),e._drawLabels())},_layers:function(){var n=this,e=n.options,t=e.ticks&&e.ticks.z||0,o=e.gridLines&&e.gridLines.z||0;return n._isVisible()&&t!==o&&n.draw===n._draw?[{z:o,draw:function(){n._drawGrid.apply(n,arguments),n._drawTitle.apply(n,arguments)}},{z:t,draw:function(){n._drawLabels.apply(n,arguments)}}]:[{z:t,draw:function(){n.draw.apply(n,arguments)}}]},_getMatchingVisibleMetas:function(n){var e=this,t=e.isHorizontal();return e.chart._getSortedVisibleDatasetMetas().filter((function(o){return(!n||o.type===n)&&(t?o.xAxisID===e.id:o.yAxisID===e.id)}))}});_o.prototype._draw=_o.prototype.draw;var ho=_o,vo=ln.isNullOrUndef,xo={position:"bottom"},wo=ho.extend({determineDataLimits:function(){var n,e=this,t=e._getLabels(),o=e.options.ticks,a=o.min,r=o.max,i=0,l=t.length-1;void 0!==a&&(n=t.indexOf(a))>=0&&(i=n),void 0!==r&&(n=t.indexOf(r))>=0&&(l=n),e.minIndex=i,e.maxIndex=l,e.min=t[i],e.max=t[l]},buildTicks:function(){var n=this,e=n._getLabels(),t=n.minIndex,o=n.maxIndex;n.ticks=0===t&&o===e.length-1?e:e.slice(t,o+1)},getLabelForIndex:function(n,e){var t=this,o=t.chart;return o.getDatasetMeta(e).controller._getValueScaleId()===t.id?t.getRightValue(o.data.datasets[e].data[n]):t._getLabels()[n]},_configure:function(){var n=this,e=n.options.offset,t=n.ticks;ho.prototype._configure.call(n),n.isHorizontal()||(n._reversePixels=!n._reversePixels),t&&(n._startValue=n.minIndex-(e?.5:0),n._valueRange=Math.max(t.length-(e?0:1),1))},getPixelForValue:function(n,e,t){var o,a,r,i=this;return vo(e)||vo(t)||(n=i.chart.data.datasets[t].data[e]),vo(n)||(o=i.isHorizontal()?n.x:n.y),(void 0!==o||void 0!==n&&isNaN(e))&&(a=i._getLabels(),n=ln.valueOrDefault(o,n),e=-1!==(r=a.indexOf(n))?r:e,isNaN(e)&&(e=n)),i.getPixelForDecimal((e-i._startValue)/i._valueRange)},getPixelForTick:function(n){var e=this.ticks;return n<0||n>e.length-1?null:this.getPixelForValue(e[n],n+this.minIndex)},getValueForPixel:function(n){var e=this,t=Math.round(e._startValue+e.getDecimalForPixel(n)*e._valueRange);return Math.min(Math.max(t,0),e.ticks.length-1)},getBasePixel:function(){return this.bottom}}),yo=xo;wo._defaults=yo;var ko=ln.noop,Co=ln.isNullOrUndef;function Bo(n,e){var t,o,a,r,i=[],l=1e-14,f=n.stepSize,p=f||1,c=n.maxTicks-1,d=n.min,s=n.max,m=n.precision,g=e.min,b=e.max,u=ln.niceNum((b-g)/c/p)*p;if(u<l&&Co(d)&&Co(s))return[g,b];(r=Math.ceil(b/u)-Math.floor(g/u))>c&&(u=ln.niceNum(r*u/c/p)*p),f||Co(m)?t=Math.pow(10,ln._decimalPlaces(u)):(t=Math.pow(10,m),u=Math.ceil(u*t)/t),o=Math.floor(g/u)*u,a=Math.ceil(b/u)*u,f&&(!Co(d)&&ln.almostWhole(d/u,u/1e3)&&(o=d),!Co(s)&&ln.almostWhole(s/u,u/1e3)&&(a=s)),r=(a-o)/u,r=ln.almostEquals(r,Math.round(r),u/1e3)?Math.round(r):Math.ceil(r),o=Math.round(o*t)/t,a=Math.round(a*t)/t,i.push(Co(d)?o:d);for(var _=1;_<r;++_)i.push(Math.round((o+_*u)*t)/t);return i.push(Co(s)?a:s),i}var Po=ho.extend({getRightValue:function(n){return"string"==typeof n?+n:ho.prototype.getRightValue.call(this,n)},handleTickRangeOptions:function(){var n=this,e=n.options.ticks;if(e.beginAtZero){var t=ln.sign(n.min),o=ln.sign(n.max);t<0&&o<0?n.max=0:t>0&&o>0&&(n.min=0)}var a=void 0!==e.min||void 0!==e.suggestedMin,r=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?n.min=e.min:void 0!==e.suggestedMin&&(null===n.min?n.min=e.suggestedMin:n.min=Math.min(n.min,e.suggestedMin)),void 0!==e.max?n.max=e.max:void 0!==e.suggestedMax&&(null===n.max?n.max=e.suggestedMax:n.max=Math.max(n.max,e.suggestedMax)),a!==r&&n.min>=n.max&&(a?n.max=n.min+1:n.min=n.max-1),n.min===n.max&&(n.max++,e.beginAtZero||n.min--)},getTickLimit:function(){var n,e=this,t=e.options.ticks,o=t.stepSize,a=t.maxTicksLimit;return o?n=Math.ceil(e.max/o)-Math.floor(e.min/o)+1:(n=e._computeTickLimit(),a=a||11),a&&(n=Math.min(a,n)),n},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:ko,buildTicks:function(){var n=this,e=n.options.ticks,t=n.getTickLimit(),o={maxTicks:t=Math.max(2,t),min:e.min,max:e.max,precision:e.precision,stepSize:ln.valueOrDefault(e.fixedStepSize,e.stepSize)},a=n.ticks=Bo(o,n);n.handleDirectionalChanges(),n.max=ln.max(a),n.min=ln.min(a),e.reverse?(a.reverse(),n.start=n.max,n.end=n.min):(n.start=n.min,n.end=n.max)},convertTicksToLabels:function(){var n=this;n.ticksAsNumbers=n.ticks.slice(),n.zeroLineIndex=n.ticks.indexOf(0),ho.prototype.convertTicksToLabels.call(n)},_configure:function(){var n,e=this,t=e.getTicks(),o=e.min,a=e.max;ho.prototype._configure.call(e),e.options.offset&&t.length&&(o-=n=(a-o)/Math.max(t.length-1,1)/2,a+=n),e._startValue=o,e._endValue=a,e._valueRange=a-o}}),So={position:"left",ticks:{callback:Kt.formatters.linear}},To=0,Mo=1;function Lo(n,e,t){var o=[t.type,void 0===e&&void 0===t.stack?t.index:"",t.stack].join(".");return void 0===n[o]&&(n[o]={pos:[],neg:[]}),n[o]}function zo(n,e,t,o){var a,r,i=n.options,l=Lo(e,i.stacked,t),f=l.pos,p=l.neg,c=o.length;for(a=0;a<c;++a)r=n._parseValue(o[a]),isNaN(r.min)||isNaN(r.max)||t.data[a].hidden||(f[a]=f[a]||0,p[a]=p[a]||0,i.relativePoints?f[a]=100:r.min<0||r.max<0?p[a]+=r.min:f[a]+=r.max)}function Wo(n,e,t){var o,a,r=t.length;for(o=0;o<r;++o)a=n._parseValue(t[o]),isNaN(a.min)||isNaN(a.max)||e.data[o].hidden||(n.min=Math.min(n.min,a.min),n.max=Math.max(n.max,a.max))}var Ro=Po.extend({determineDataLimits:function(){var n,e,t,o,a=this,r=a.options,i=a.chart.data.datasets,l=a._getMatchingVisibleMetas(),f=r.stacked,p={},c=l.length;if(a.min=Number.POSITIVE_INFINITY,a.max=Number.NEGATIVE_INFINITY,void 0===f)for(n=0;!f&&n<c;++n)f=void 0!==(e=l[n]).stack;for(n=0;n<c;++n)t=i[(e=l[n]).index].data,f?zo(a,p,e,t):Wo(a,e,t);ln.each(p,(function(n){o=n.pos.concat(n.neg),a.min=Math.min(a.min,ln.min(o)),a.max=Math.max(a.max,ln.max(o))})),a.min=ln.isFinite(a.min)&&!isNaN(a.min)?a.min:To,a.max=ln.isFinite(a.max)&&!isNaN(a.max)?a.max:Mo,a.handleTickRangeOptions()},_computeTickLimit:function(){var n,e=this;return e.isHorizontal()?Math.ceil(e.width/40):(n=ln.options._parseFont(e.options.ticks),Math.ceil(e.height/n.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(n,e){return this._getScaleLabel(this.chart.data.datasets[e].data[n])},getPixelForValue:function(n){var e=this;return e.getPixelForDecimal((+e.getRightValue(n)-e._startValue)/e._valueRange)},getValueForPixel:function(n){return this._startValue+this.getDecimalForPixel(n)*this._valueRange},getPixelForTick:function(n){var e=this.ticksAsNumbers;return n<0||n>e.length-1?null:this.getPixelForValue(e[n])}}),Fo=So;Ro._defaults=Fo;var Do=ln.valueOrDefault,Oo=ln.math.log10;function Ao(n,e){var t,o,a=[],r=Do(n.min,Math.pow(10,Math.floor(Oo(e.min)))),i=Math.floor(Oo(e.max)),l=Math.ceil(e.max/Math.pow(10,i));0===r?(t=Math.floor(Oo(e.minNotZero)),o=Math.floor(e.minNotZero/Math.pow(10,t)),a.push(r),r=o*Math.pow(10,t)):(t=Math.floor(Oo(r)),o=Math.floor(r/Math.pow(10,t)));var f=t<0?Math.pow(10,Math.abs(t)):1;do{a.push(r),10==++o&&(o=1,f=++t>=0?1:f),r=Math.round(o*Math.pow(10,t)*f)/f}while(t<i||t===i&&o<l);var p=Do(n.max,r);return a.push(p),a}var Io={position:"left",ticks:{callback:Kt.formatters.logarithmic}};function Ho(n,e){return ln.isFinite(n)&&n>=0?n:e}var No=ho.extend({determineDataLimits:function(){var n,e,t,o,a,r,i=this,l=i.options,f=i.chart,p=f.data.datasets,c=i.isHorizontal();function d(n){return c?n.xAxisID===i.id:n.yAxisID===i.id}i.min=Number.POSITIVE_INFINITY,i.max=Number.NEGATIVE_INFINITY,i.minNotZero=Number.POSITIVE_INFINITY;var s=l.stacked;if(void 0===s)for(n=0;n<p.length;n++)if(e=f.getDatasetMeta(n),f.isDatasetVisible(n)&&d(e)&&void 0!==e.stack){s=!0;break}if(l.stacked||s){var m={};for(n=0;n<p.length;n++){var g=[(e=f.getDatasetMeta(n)).type,void 0===l.stacked&&void 0===e.stack?n:"",e.stack].join(".");if(f.isDatasetVisible(n)&&d(e))for(void 0===m[g]&&(m[g]=[]),a=0,r=(o=p[n].data).length;a<r;a++){var b=m[g];t=i._parseValue(o[a]),isNaN(t.min)||isNaN(t.max)||e.data[a].hidden||t.min<0||t.max<0||(b[a]=b[a]||0,b[a]+=t.max)}}ln.each(m,(function(n){if(n.length>0){var e=ln.min(n),t=ln.max(n);i.min=Math.min(i.min,e),i.max=Math.max(i.max,t)}}))}else for(n=0;n<p.length;n++)if(e=f.getDatasetMeta(n),f.isDatasetVisible(n)&&d(e))for(a=0,r=(o=p[n].data).length;a<r;a++)t=i._parseValue(o[a]),isNaN(t.min)||isNaN(t.max)||e.data[a].hidden||t.min<0||t.max<0||(i.min=Math.min(t.min,i.min),i.max=Math.max(t.max,i.max),0!==t.min&&(i.minNotZero=Math.min(t.min,i.minNotZero)));i.min=ln.isFinite(i.min)?i.min:null,i.max=ln.isFinite(i.max)?i.max:null,i.minNotZero=ln.isFinite(i.minNotZero)?i.minNotZero:null,this.handleTickRangeOptions()},handleTickRangeOptions:function(){var n=this,e=n.options.ticks,t=1,o=10;n.min=Ho(e.min,n.min),n.max=Ho(e.max,n.max),n.min===n.max&&(0!==n.min&&null!==n.min?(n.min=Math.pow(10,Math.floor(Oo(n.min))-1),n.max=Math.pow(10,Math.floor(Oo(n.max))+1)):(n.min=t,n.max=o)),null===n.min&&(n.min=Math.pow(10,Math.floor(Oo(n.max))-1)),null===n.max&&(n.max=0!==n.min?Math.pow(10,Math.floor(Oo(n.min))+1):o),null===n.minNotZero&&(n.min>0?n.minNotZero=n.min:n.max<1?n.minNotZero=Math.pow(10,Math.floor(Oo(n.max))):n.minNotZero=t)},buildTicks:function(){var n=this,e=n.options.ticks,t=!n.isHorizontal(),o={min:Ho(e.min),max:Ho(e.max)},a=n.ticks=Ao(o,n);n.max=ln.max(a),n.min=ln.min(a),e.reverse?(t=!t,n.start=n.max,n.end=n.min):(n.start=n.min,n.end=n.max),t&&a.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),ho.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(n,e){return this._getScaleLabel(this.chart.data.datasets[e].data[n])},getPixelForTick:function(n){var e=this.tickValues;return n<0||n>e.length-1?null:this.getPixelForValue(e[n])},_getFirstTickValue:function(n){var e=Math.floor(Oo(n));return Math.floor(n/Math.pow(10,e))*Math.pow(10,e)},_configure:function(){var n=this,e=n.min,t=0;ho.prototype._configure.call(n),0===e&&(e=n._getFirstTickValue(n.minNotZero),t=Do(n.options.ticks.fontSize,J.global.defaultFontSize)/n._length),n._startValue=Oo(e),n._valueOffset=t,n._valueRange=(Oo(n.max)-Oo(e))/(1-t)},getPixelForValue:function(n){var e=this,t=0;return(n=+e.getRightValue(n))>e.min&&n>0&&(t=(Oo(n)-e._startValue)/e._valueRange+e._valueOffset),e.getPixelForDecimal(t)},getValueForPixel:function(n){var e=this,t=e.getDecimalForPixel(n);return 0===t&&0===e.min?0:Math.pow(10,e._startValue+(t-e._valueOffset)*e._valueRange)}}),Eo=Io;No._defaults=Eo;var jo=ln.valueOrDefault,Go=ln.valueAtIndexOrDefault,Yo=ln.options.resolve,Vo={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:Kt.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(n){return n}}};function qo(n){var e=n.ticks;return e.display&&n.display?jo(e.fontSize,J.global.defaultFontSize)+2*e.backdropPaddingY:0}function Uo(n,e,t){return ln.isArray(t)?{w:ln.longestText(n,n.font,t),h:t.length*e}:{w:n.measureText(t).width,h:e}}function Xo(n,e,t,o,a){return n===o||n===a?{start:e-t/2,end:e+t/2}:n<o||n>a?{start:e-t,end:e}:{start:e,end:e+t}}function Zo(n){var e,t,o,a=ln.options._parseFont(n.options.pointLabels),r={l:0,r:n.width,t:0,b:n.height-n.paddingTop},i={};n.ctx.font=a.string,n._pointLabelSizes=[];var l=n.chart.data.labels.length;for(e=0;e<l;e++){o=n.getPointPosition(e,n.drawingArea+5),t=Uo(n.ctx,a.lineHeight,n.pointLabels[e]),n._pointLabelSizes[e]=t;var f=n.getIndexAngle(e),p=ln.toDegrees(f)%360,c=Xo(p,o.x,t.w,0,180),d=Xo(p,o.y,t.h,90,270);c.start<r.l&&(r.l=c.start,i.l=f),c.end>r.r&&(r.r=c.end,i.r=f),d.start<r.t&&(r.t=d.start,i.t=f),d.end>r.b&&(r.b=d.end,i.b=f)}n.setReductions(n.drawingArea,r,i)}function $o(n){return 0===n||180===n?"center":n<180?"left":"right"}function Ko(n,e,t,o){var a,r,i=t.y+o/2;if(ln.isArray(e))for(a=0,r=e.length;a<r;++a)n.fillText(e[a],t.x,i),i+=o;else n.fillText(e,t.x,i)}function Jo(n,e,t){90===n||270===n?t.y-=e.h/2:(n>270||n<90)&&(t.y-=e.h)}function Qo(n){var e=n.ctx,t=n.options,o=t.pointLabels,a=qo(t),r=n.getDistanceFromCenterForValue(t.ticks.reverse?n.min:n.max),i=ln.options._parseFont(o);e.save(),e.font=i.string,e.textBaseline="middle";for(var l=n.chart.data.labels.length-1;l>=0;l--){var f=0===l?a/2:0,p=n.getPointPosition(l,r+f+5),c=Go(o.fontColor,l,J.global.defaultFontColor);e.fillStyle=c;var d=n.getIndexAngle(l),s=ln.toDegrees(d);e.textAlign=$o(s),Jo(s,n._pointLabelSizes[l],p),Ko(e,n.pointLabels[l],p,i.lineHeight)}e.restore()}function na(n,e,t,o){var a,r=n.ctx,i=e.circular,l=n.chart.data.labels.length,f=Go(e.color,o-1),p=Go(e.lineWidth,o-1);if((i||l)&&f&&p){if(r.save(),r.strokeStyle=f,r.lineWidth=p,r.setLineDash&&(r.setLineDash(e.borderDash||[]),r.lineDashOffset=e.borderDashOffset||0),r.beginPath(),i)r.arc(n.xCenter,n.yCenter,t,0,2*Math.PI);else{a=n.getPointPosition(0,t),r.moveTo(a.x,a.y);for(var c=1;c<l;c++)a=n.getPointPosition(c,t),r.lineTo(a.x,a.y)}r.closePath(),r.stroke(),r.restore()}}function ea(n){return ln.isNumber(n)?n:0}var ta=Po.extend({setDimensions:function(){var n=this;n.width=n.maxWidth,n.height=n.maxHeight,n.paddingTop=qo(n.options)/2,n.xCenter=Math.floor(n.width/2),n.yCenter=Math.floor((n.height-n.paddingTop)/2),n.drawingArea=Math.min(n.height-n.paddingTop,n.width)/2},determineDataLimits:function(){var n=this,e=n.chart,t=Number.POSITIVE_INFINITY,o=Number.NEGATIVE_INFINITY;ln.each(e.data.datasets,(function(a,r){if(e.isDatasetVisible(r)){var i=e.getDatasetMeta(r);ln.each(a.data,(function(e,a){var r=+n.getRightValue(e);isNaN(r)||i.data[a].hidden||(t=Math.min(r,t),o=Math.max(r,o))}))}})),n.min=t===Number.POSITIVE_INFINITY?0:t,n.max=o===Number.NEGATIVE_INFINITY?0:o,n.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/qo(this.options))},convertTicksToLabels:function(){var n=this;Po.prototype.convertTicksToLabels.call(n),n.pointLabels=n.chart.data.labels.map((function(){var e=ln.callback(n.options.pointLabels.callback,arguments,n);return e||0===e?e:""}))},getLabelForIndex:function(n,e){return+this.getRightValue(this.chart.data.datasets[e].data[n])},fit:function(){var n=this,e=n.options;e.display&&e.pointLabels.display?Zo(n):n.setCenterPoint(0,0,0,0)},setReductions:function(n,e,t){var o=this,a=e.l/Math.sin(t.l),r=Math.max(e.r-o.width,0)/Math.sin(t.r),i=-e.t/Math.cos(t.t),l=-Math.max(e.b-(o.height-o.paddingTop),0)/Math.cos(t.b);a=ea(a),r=ea(r),i=ea(i),l=ea(l),o.drawingArea=Math.min(Math.floor(n-(a+r)/2),Math.floor(n-(i+l)/2)),o.setCenterPoint(a,r,i,l)},setCenterPoint:function(n,e,t,o){var a=this,r=a.width-e-a.drawingArea,i=n+a.drawingArea,l=t+a.drawingArea,f=a.height-a.paddingTop-o-a.drawingArea;a.xCenter=Math.floor((i+r)/2+a.left),a.yCenter=Math.floor((l+f)/2+a.top+a.paddingTop)},getIndexAngle:function(n){var e=this.chart,t=(n*(360/e.data.labels.length)+((e.options||{}).startAngle||0))%360;return(t<0?t+360:t)*Math.PI*2/360},getDistanceFromCenterForValue:function(n){var e=this;if(ln.isNullOrUndef(n))return NaN;var t=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-n)*t:(n-e.min)*t},getPointPosition:function(n,e){var t=this,o=t.getIndexAngle(n)-Math.PI/2;return{x:Math.cos(o)*e+t.xCenter,y:Math.sin(o)*e+t.yCenter}},getPointPositionForValue:function(n,e){return this.getPointPosition(n,this.getDistanceFromCenterForValue(e))},getBasePosition:function(n){var e=this,t=e.min,o=e.max;return e.getPointPositionForValue(n||0,e.beginAtZero?0:t<0&&o<0?o:t>0&&o>0?t:0)},_drawGrid:function(){var n,e,t,o=this,a=o.ctx,r=o.options,i=r.gridLines,l=r.angleLines,f=jo(l.lineWidth,i.lineWidth),p=jo(l.color,i.color);if(r.pointLabels.display&&Qo(o),i.display&&ln.each(o.ticks,(function(n,t){0!==t&&(e=o.getDistanceFromCenterForValue(o.ticksAsNumbers[t]),na(o,i,e,t))})),l.display&&f&&p){for(a.save(),a.lineWidth=f,a.strokeStyle=p,a.setLineDash&&(a.setLineDash(Yo([l.borderDash,i.borderDash,[]])),a.lineDashOffset=Yo([l.borderDashOffset,i.borderDashOffset,0])),n=o.chart.data.labels.length-1;n>=0;n--)e=o.getDistanceFromCenterForValue(r.ticks.reverse?o.min:o.max),t=o.getPointPosition(n,e),a.beginPath(),a.moveTo(o.xCenter,o.yCenter),a.lineTo(t.x,t.y),a.stroke();a.restore()}},_drawLabels:function(){var n=this,e=n.ctx,t=n.options.ticks;if(t.display){var o,a,r=n.getIndexAngle(0),i=ln.options._parseFont(t),l=jo(t.fontColor,J.global.defaultFontColor);e.save(),e.font=i.string,e.translate(n.xCenter,n.yCenter),e.rotate(r),e.textAlign="center",e.textBaseline="middle",ln.each(n.ticks,(function(r,f){(0!==f||t.reverse)&&(o=n.getDistanceFromCenterForValue(n.ticksAsNumbers[f]),t.showLabelBackdrop&&(a=e.measureText(r).width,e.fillStyle=t.backdropColor,e.fillRect(-a/2-t.backdropPaddingX,-o-i.size/2-t.backdropPaddingY,a+2*t.backdropPaddingX,i.size+2*t.backdropPaddingY)),e.fillStyle=l,e.fillText(r,0,-o))})),e.restore()}},_drawTitle:ln.noop}),oa=Vo;ta._defaults=oa;var aa=ln._deprecated,ra=ln.options.resolve,ia=ln.valueOrDefault,la=Number.MIN_SAFE_INTEGER||-9007199254740991,fa=Number.MAX_SAFE_INTEGER||9007199254740991,pa={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ca=Object.keys(pa);function da(n,e){return n-e}function sa(n){var e,t,o,a={},r=[];for(e=0,t=n.length;e<t;++e)a[o=n[e]]||(a[o]=!0,r.push(o));return r}function ma(n){return ln.valueOrDefault(n.time.min,n.ticks.min)}function ga(n){return ln.valueOrDefault(n.time.max,n.ticks.max)}function ba(n,e,t,o){if("linear"===o||!n.length)return[{time:e,pos:0},{time:t,pos:1}];var a,r,i,l,f,p=[],c=[e];for(a=0,r=n.length;a<r;++a)(l=n[a])>e&&l<t&&c.push(l);for(c.push(t),a=0,r=c.length;a<r;++a)f=c[a+1],i=c[a-1],l=c[a],void 0!==i&&void 0!==f&&Math.round((f+i)/2)===l||p.push({time:l,pos:a/(r-1)});return p}function ua(n,e,t){for(var o,a,r,i=0,l=n.length-1;i>=0&&i<=l;){if(a=n[(o=i+l>>1)-1]||null,r=n[o],!a)return{lo:null,hi:r};if(r[e]<t)i=o+1;else{if(!(a[e]>t))return{lo:a,hi:r};l=o-1}}return{lo:r,hi:null}}function _a(n,e,t,o){var a=ua(n,e,t),r=a.lo?a.hi?a.lo:n[n.length-2]:n[0],i=a.lo?a.hi?a.hi:n[n.length-1]:n[1],l=i[e]-r[e],f=l?(t-r[e])/l:0,p=(i[o]-r[o])*f;return r[o]+p}function ha(n,e){var t=n._adapter,o=n.options.time,a=o.parser,r=a||o.format,i=e;return"function"==typeof a&&(i=a(i)),ln.isFinite(i)||(i="string"==typeof r?t.parse(i,r):t.parse(i)),null!==i?+i:(a||"function"!=typeof r||(i=r(e),ln.isFinite(i)||(i=t.parse(i))),i)}function va(n,e){if(ln.isNullOrUndef(e))return null;var t=n.options.time,o=ha(n,n.getRightValue(e));return null===o||t.round&&(o=+n._adapter.startOf(o,t.round)),o}function xa(n,e,t,o){var a,r,i,l=ca.length;for(a=ca.indexOf(n);a<l-1;++a)if(i=(r=pa[ca[a]]).steps?r.steps:fa,r.common&&Math.ceil((t-e)/(i*r.size))<=o)return ca[a];return ca[l-1]}function wa(n,e,t,o,a){var r,i;for(r=ca.length-1;r>=ca.indexOf(t);r--)if(i=ca[r],pa[i].common&&n._adapter.diff(a,o,i)>=e-1)return i;return ca[t?ca.indexOf(t):0]}function ya(n){for(var e=ca.indexOf(n)+1,t=ca.length;e<t;++e)if(pa[ca[e]].common)return ca[e]}function ka(n,e,t,o){var a,r=n._adapter,i=n.options,l=i.time,f=l.unit||xa(l.minUnit,e,t,o),p=ra([l.stepSize,l.unitStepSize,1]),c="week"===f&&l.isoWeekday,d=e,s=[];if(c&&(d=+r.startOf(d,"isoWeek",c)),d=+r.startOf(d,c?"day":f),r.diff(t,e,f)>1e5*p)throw e+" and "+t+" are too far apart with stepSize of "+p+" "+f;for(a=d;a<t;a=+r.add(a,p,f))s.push(a);return a!==t&&"ticks"!==i.bounds||s.push(a),s}function Ca(n,e,t,o,a){var r,i,l=0,f=0;return a.offset&&e.length&&(r=_a(n,"time",e[0],"pos"),l=1===e.length?1-r:(_a(n,"time",e[1],"pos")-r)/2,i=_a(n,"time",e[e.length-1],"pos"),f=1===e.length?i:(i-_a(n,"time",e[e.length-2],"pos"))/2),{start:l,end:f,factor:1/(l+1+f)}}function Ba(n,e,t,o){var a,r,i=n._adapter,l=+i.startOf(e[0].value,o),f=e[e.length-1].value;for(a=l;a<=f;a=+i.add(a,1,o))(r=t[a])>=0&&(e[r].major=!0);return e}function Pa(n,e,t){var o,a,r=[],i={},l=e.length;for(o=0;o<l;++o)i[a=e[o]]=o,r.push({value:a,major:!1});return 0!==l&&t?Ba(n,r,i,t):r}var Sa={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}},Ta=ho.extend({initialize:function(){this.mergeTicksOptions(),ho.prototype.initialize.call(this)},update:function(){var n=this,e=n.options,t=e.time||(e.time={}),o=n._adapter=new $t._date(e.adapters.date);return aa("time scale",t.format,"time.format","time.parser"),aa("time scale",t.min,"time.min","ticks.min"),aa("time scale",t.max,"time.max","ticks.max"),ln.mergeIf(t.displayFormats,o.formats()),ho.prototype.update.apply(n,arguments)},getRightValue:function(n){return n&&void 0!==n.t&&(n=n.t),ho.prototype.getRightValue.call(this,n)},determineDataLimits:function(){var n,e,t,o,a,r,i,l=this,f=l.chart,p=l._adapter,c=l.options,d=c.time.unit||"day",s=fa,m=la,g=[],b=[],u=[],_=l._getLabels();for(n=0,t=_.length;n<t;++n)u.push(va(l,_[n]));for(n=0,t=(f.data.datasets||[]).length;n<t;++n)if(f.isDatasetVisible(n))if(a=f.data.datasets[n].data,ln.isObject(a[0]))for(b[n]=[],e=0,o=a.length;e<o;++e)r=va(l,a[e]),g.push(r),b[n][e]=r;else b[n]=u.slice(0),i||(g=g.concat(u),i=!0);else b[n]=[];u.length&&(s=Math.min(s,u[0]),m=Math.max(m,u[u.length-1])),g.length&&(g=t>1?sa(g).sort(da):g.sort(da),s=Math.min(s,g[0]),m=Math.max(m,g[g.length-1])),s=va(l,ma(c))||s,m=va(l,ga(c))||m,s=s===fa?+p.startOf(Date.now(),d):s,m=m===la?+p.endOf(Date.now(),d)+1:m,l.min=Math.min(s,m),l.max=Math.max(s+1,m),l._table=[],l._timestamps={data:g,datasets:b,labels:u}},buildTicks:function(){var n,e,t,o=this,a=o.min,r=o.max,i=o.options,l=i.ticks,f=i.time,p=o._timestamps,c=[],d=o.getLabelCapacity(a),s=l.source,m=i.distribution;for(p="data"===s||"auto"===s&&"series"===m?p.data:"labels"===s?p.labels:ka(o,a,r,d),"ticks"===i.bounds&&p.length&&(a=p[0],r=p[p.length-1]),a=va(o,ma(i))||a,r=va(o,ga(i))||r,n=0,e=p.length;n<e;++n)(t=p[n])>=a&&t<=r&&c.push(t);return o.min=a,o.max=r,o._unit=f.unit||(l.autoSkip?xa(f.minUnit,o.min,o.max,d):wa(o,c.length,f.minUnit,o.min,o.max)),o._majorUnit=l.major.enabled&&"year"!==o._unit?ya(o._unit):void 0,o._table=ba(o._timestamps.data,a,r,m),o._offsets=Ca(o._table,c,a,r,i),l.reverse&&c.reverse(),Pa(o,c,o._majorUnit)},getLabelForIndex:function(n,e){var t=this,o=t._adapter,a=t.chart.data,r=t.options.time,i=a.labels&&n<a.labels.length?a.labels[n]:"",l=a.datasets[e].data[n];return ln.isObject(l)&&(i=t.getRightValue(l)),r.tooltipFormat?o.format(ha(t,i),r.tooltipFormat):"string"==typeof i?i:o.format(ha(t,i),r.displayFormats.datetime)},tickFormatFunction:function(n,e,t,o){var a=this,r=a._adapter,i=a.options,l=i.time.displayFormats,f=l[a._unit],p=a._majorUnit,c=l[p],d=t[e],s=i.ticks,m=p&&c&&d&&d.major,g=r.format(n,o||(m?c:f)),b=m?s.major:s.minor,u=ra([b.callback,b.userCallback,s.callback,s.userCallback]);return u?u(g,e,t):g},convertTicksToLabels:function(n){var e,t,o=[];for(e=0,t=n.length;e<t;++e)o.push(this.tickFormatFunction(n[e].value,e,n));return o},getPixelForOffset:function(n){var e=this,t=e._offsets,o=_a(e._table,"time",n,"pos");return e.getPixelForDecimal((t.start+o)*t.factor)},getPixelForValue:function(n,e,t){var o=this,a=null;if(void 0!==e&&void 0!==t&&(a=o._timestamps.datasets[t][e]),null===a&&(a=va(o,n)),null!==a)return o.getPixelForOffset(a)},getPixelForTick:function(n){var e=this.getTicks();return n>=0&&n<e.length?this.getPixelForOffset(e[n].value):null},getValueForPixel:function(n){var e=this,t=e._offsets,o=e.getDecimalForPixel(n)/t.factor-t.end,a=_a(e._table,"pos",o,"time");return e._adapter._create(a)},_getLabelSize:function(n){var e=this,t=e.options.ticks,o=e.ctx.measureText(n).width,a=ln.toRadians(e.isHorizontal()?t.maxRotation:t.minRotation),r=Math.cos(a),i=Math.sin(a),l=ia(t.fontSize,J.global.defaultFontSize);return{w:o*r+l*i,h:o*i+l*r}},getLabelWidth:function(n){return this._getLabelSize(n).w},getLabelCapacity:function(n){var e=this,t=e.options.time,o=t.displayFormats,a=o[t.unit]||o.millisecond,r=e.tickFormatFunction(n,0,Pa(e,[n],e._majorUnit),a),i=e._getLabelSize(r),l=Math.floor(e.isHorizontal()?e.width/i.w:e.height/i.h);return e.options.offset&&l--,l>0?l:1}}),Ma=Sa;Ta._defaults=Ma;var La={category:wo,linear:Ro,logarithmic:No,radialLinear:ta,time:Ta},za={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};$t._date.override("function"==typeof n?{_id:"moment",formats:function(){return za},parse:function(e,t){return"string"==typeof e&&"string"==typeof t?e=n(e,t):e instanceof n||(e=n(e)),e.isValid()?e.valueOf():null},format:function(e,t){return n(e).format(t)},add:function(e,t,o){return n(e).add(t,o).valueOf()},diff:function(e,t,o){return n(e).diff(n(t),o)},startOf:function(e,t,o){return e=n(e),"isoWeek"===t?e.isoWeekday(o).valueOf():e.startOf(t).valueOf()},endOf:function(e,t){return n(e).endOf(t).valueOf()},_create:function(e){return n(e)}}:{}),J._set("global",{plugins:{filler:{propagate:!0}}});var Wa={dataset:function(n){var e=n.fill,t=n.chart,o=t.getDatasetMeta(e),a=o&&t.isDatasetVisible(e)&&o.dataset._children||[],r=a.length||0;return r?function(n,e){return e<r&&a[e]._view||null}:null},boundary:function(n){var e=n.boundary,t=e?e.x:null,o=e?e.y:null;return ln.isArray(e)?function(n,t){return e[t]}:function(n){return{x:null===t?n.x:t,y:null===o?n.y:o}}}};function Ra(n,e,t){var o,a=n._model||{},r=a.fill;if(void 0===r&&(r=!!a.backgroundColor),!1===r||null===r)return!1;if(!0===r)return"origin";if(o=parseFloat(r,10),isFinite(o)&&Math.floor(o)===o)return"-"!==r[0]&&"+"!==r[0]||(o=e+o),!(o===e||o<0||o>=t)&&o;switch(r){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return r;default:return!1}}function Fa(n){var e,t=n.el._model||{},o=n.el._scale||{},a=n.fill,r=null;if(isFinite(a))return null;if("start"===a?r=void 0===t.scaleBottom?o.bottom:t.scaleBottom:"end"===a?r=void 0===t.scaleTop?o.top:t.scaleTop:void 0!==t.scaleZero?r=t.scaleZero:o.getBasePixel&&(r=o.getBasePixel()),null!=r){if(void 0!==r.x&&void 0!==r.y)return r;if(ln.isFinite(r))return{x:(e=o.isHorizontal())?r:null,y:e?null:r}}return null}function Da(n){var e,t,o,a,r,i=n.el._scale,l=i.options,f=i.chart.data.labels.length,p=n.fill,c=[];if(!f)return null;for(e=l.ticks.reverse?i.max:i.min,t=l.ticks.reverse?i.min:i.max,o=i.getPointPositionForValue(0,e),a=0;a<f;++a)r="start"===p||"end"===p?i.getPointPositionForValue(a,"start"===p?e:t):i.getBasePosition(a),l.gridLines.circular&&(r.cx=o.x,r.cy=o.y,r.angle=i.getIndexAngle(a)-Math.PI/2),c.push(r);return c}function Oa(n){return(n.el._scale||{}).getPointPositionForValue?Da(n):Fa(n)}function Aa(n,e,t){var o,a=n[e].fill,r=[e];if(!t)return a;for(;!1!==a&&-1===r.indexOf(a);){if(!isFinite(a))return a;if(!(o=n[a]))return!1;if(o.visible)return a;r.push(a),a=o.fill}return!1}function Ia(n){var e=n.fill,t="dataset";return!1===e?null:(isFinite(e)||(t="boundary"),Wa[t](n))}function Ha(n){return n&&!n.skip}function Na(n,e,t,o,a){var r,i,l,f;if(o&&a){for(n.moveTo(e[0].x,e[0].y),r=1;r<o;++r)ln.canvas.lineTo(n,e[r-1],e[r]);if(void 0===t[0].angle)for(n.lineTo(t[a-1].x,t[a-1].y),r=a-1;r>0;--r)ln.canvas.lineTo(n,t[r],t[r-1],!0);else for(i=t[0].cx,l=t[0].cy,f=Math.sqrt(Math.pow(t[0].x-i,2)+Math.pow(t[0].y-l,2)),r=a-1;r>0;--r)n.arc(i,l,f,t[r].angle,t[r-1].angle,!0)}}function Ea(n,e,t,o,a,r){var i,l,f,p,c,d,s,m,g=e.length,b=o.spanGaps,u=[],_=[],h=0,v=0;for(n.beginPath(),i=0,l=g;i<l;++i)c=t(p=e[f=i%g]._view,f,o),d=Ha(p),s=Ha(c),r&&void 0===m&&d&&(l=g+(m=i+1)),d&&s?(h=u.push(p),v=_.push(c)):h&&v&&(b?(d&&u.push(p),s&&_.push(c)):(Na(n,u,_,h,v),h=v=0,u=[],_=[]));Na(n,u,_,h,v),n.closePath(),n.fillStyle=a,n.fill()}var ja={id:"filler",afterDatasetsUpdate:function(n,e){var t,o,a,r,i=(n.data.datasets||[]).length,l=e.propagate,f=[];for(o=0;o<i;++o)r=null,(a=(t=n.getDatasetMeta(o)).dataset)&&a._model&&a instanceof Un.Line&&(r={visible:n.isDatasetVisible(o),fill:Ra(a,o,i),chart:n,el:a}),t.$filler=r,f.push(r);for(o=0;o<i;++o)(r=f[o])&&(r.fill=Aa(f,o,l),r.boundary=Oa(r),r.mapper=Ia(r))},beforeDatasetsDraw:function(n){var e,t,o,a,r,i,l,f=n._getSortedVisibleDatasetMetas(),p=n.ctx;for(t=f.length-1;t>=0;--t)(e=f[t].$filler)&&e.visible&&(a=(o=e.el)._view,r=o._children||[],i=e.mapper,l=a.backgroundColor||J.global.defaultColor,i&&l&&r.length&&(ln.canvas.clipArea(p,n.chartArea),Ea(p,r,i,a,l,o._loop),ln.canvas.unclipArea(p)))}},Ga=ln.rtl.getRtlAdapter,Ya=ln.noop,Va=ln.valueOrDefault;function qa(n,e){return n.usePointStyle&&n.boxWidth>e?e:n.boxWidth}J._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(n,e){var t=e.datasetIndex,o=this.chart,a=o.getDatasetMeta(t);a.hidden=null===a.hidden?!o.data.datasets[t].hidden:null,o.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(n){var e=n.data.datasets,t=n.options.legend||{},o=t.labels&&t.labels.usePointStyle;return n._getSortedDatasetMetas().map((function(t){var a=t.controller.getStyle(o?0:void 0);return{text:e[t.index].label,fillStyle:a.backgroundColor,hidden:!n.isDatasetVisible(t.index),lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:a.borderWidth,strokeStyle:a.borderColor,pointStyle:a.pointStyle,rotation:a.rotation,datasetIndex:t.index}}),this)}}},legendCallback:function(n){var e,t,o,a=document.createElement("ul"),r=n.data.datasets;for(a.setAttribute("class",n.id+"-legend"),e=0,t=r.length;e<t;e++)(o=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=r[e].backgroundColor,r[e].label&&o.appendChild(document.createTextNode(r[e].label));return a.outerHTML}});var Ua=bn.extend({initialize:function(n){var e=this;ln.extend(e,n),e.legendHitBoxes=[],e._hoveredItem=null,e.doughnutMode=!1},beforeUpdate:Ya,update:function(n,e,t){var o=this;return o.beforeUpdate(),o.maxWidth=n,o.maxHeight=e,o.margins=t,o.beforeSetDimensions(),o.setDimensions(),o.afterSetDimensions(),o.beforeBuildLabels(),o.buildLabels(),o.afterBuildLabels(),o.beforeFit(),o.fit(),o.afterFit(),o.afterUpdate(),o.minSize},afterUpdate:Ya,beforeSetDimensions:Ya,setDimensions:function(){var n=this;n.isHorizontal()?(n.width=n.maxWidth,n.left=0,n.right=n.width):(n.height=n.maxHeight,n.top=0,n.bottom=n.height),n.paddingLeft=0,n.paddingTop=0,n.paddingRight=0,n.paddingBottom=0,n.minSize={width:0,height:0}},afterSetDimensions:Ya,beforeBuildLabels:Ya,buildLabels:function(){var n=this,e=n.options.labels||{},t=ln.callback(e.generateLabels,[n.chart],n)||[];e.filter&&(t=t.filter((function(t){return e.filter(t,n.chart.data)}))),n.options.reverse&&t.reverse(),n.legendItems=t},afterBuildLabels:Ya,beforeFit:Ya,fit:function(){var n=this,e=n.options,t=e.labels,o=e.display,a=n.ctx,r=ln.options._parseFont(t),i=r.size,l=n.legendHitBoxes=[],f=n.minSize,p=n.isHorizontal();if(p?(f.width=n.maxWidth,f.height=o?10:0):(f.width=o?10:0,f.height=n.maxHeight),o){if(a.font=r.string,p){var c=n.lineWidths=[0],d=0;a.textAlign="left",a.textBaseline="middle",ln.each(n.legendItems,(function(n,e){var o=qa(t,i)+i/2+a.measureText(n.text).width;(0===e||c[c.length-1]+o+2*t.padding>f.width)&&(d+=i+t.padding,c[c.length-(e>0?0:1)]=0),l[e]={left:0,top:0,width:o,height:i},c[c.length-1]+=o+t.padding})),f.height+=d}else{var s=t.padding,m=n.columnWidths=[],g=n.columnHeights=[],b=t.padding,u=0,_=0;ln.each(n.legendItems,(function(n,e){var o=qa(t,i)+i/2+a.measureText(n.text).width;e>0&&_+i+2*s>f.height&&(b+=u+t.padding,m.push(u),g.push(_),u=0,_=0),u=Math.max(u,o),_+=i+s,l[e]={left:0,top:0,width:o,height:i}})),b+=u,m.push(u),g.push(_),f.width+=b}n.width=f.width,n.height=f.height}else n.width=f.width=n.height=f.height=0},afterFit:Ya,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var n=this,e=n.options,t=e.labels,o=J.global,a=o.defaultColor,r=o.elements.line,i=n.height,l=n.columnHeights,f=n.width,p=n.lineWidths;if(e.display){var c,d=Ga(e.rtl,n.left,n.minSize.width),s=n.ctx,m=Va(t.fontColor,o.defaultFontColor),g=ln.options._parseFont(t),b=g.size;s.textAlign=d.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.strokeStyle=m,s.fillStyle=m,s.font=g.string;var u=qa(t,b),_=n.legendHitBoxes,h=function(n,e,o){if(!(isNaN(u)||u<=0)){s.save();var i=Va(o.lineWidth,r.borderWidth);if(s.fillStyle=Va(o.fillStyle,a),s.lineCap=Va(o.lineCap,r.borderCapStyle),s.lineDashOffset=Va(o.lineDashOffset,r.borderDashOffset),s.lineJoin=Va(o.lineJoin,r.borderJoinStyle),s.lineWidth=i,s.strokeStyle=Va(o.strokeStyle,a),s.setLineDash&&s.setLineDash(Va(o.lineDash,r.borderDash)),t&&t.usePointStyle){var l=u*Math.SQRT2/2,f=d.xPlus(n,u/2),p=e+b/2;ln.canvas.drawPoint(s,o.pointStyle,l,f,p,o.rotation)}else s.fillRect(d.leftForLtr(n,u),e,u,b),0!==i&&s.strokeRect(d.leftForLtr(n,u),e,u,b);s.restore()}},v=function(n,e,t,o){var a=b/2,r=d.xPlus(n,u+a),i=e+a;s.fillText(t.text,r,i),t.hidden&&(s.beginPath(),s.lineWidth=2,s.moveTo(r,i),s.lineTo(d.xPlus(r,o),i),s.stroke())},x=function(n,o){switch(e.align){case"start":return t.padding;case"end":return n-o;default:return(n-o+t.padding)/2}},w=n.isHorizontal();c=w?{x:n.left+x(f,p[0]),y:n.top+t.padding,line:0}:{x:n.left+t.padding,y:n.top+x(i,l[0]),line:0},ln.rtl.overrideTextDirection(n.ctx,e.textDirection);var y=b+t.padding;ln.each(n.legendItems,(function(e,o){var a=s.measureText(e.text).width,r=u+b/2+a,m=c.x,g=c.y;d.setWidth(n.minSize.width),w?o>0&&m+r+t.padding>n.left+n.minSize.width&&(g=c.y+=y,c.line++,m=c.x=n.left+x(f,p[c.line])):o>0&&g+y>n.top+n.minSize.height&&(m=c.x=m+n.columnWidths[c.line]+t.padding,c.line++,g=c.y=n.top+x(i,l[c.line]));var k=d.x(m);h(k,g,e),_[o].left=d.leftForLtr(k,_[o].width),_[o].top=g,v(k,g,e,a),w?c.x+=r+t.padding:c.y+=y})),ln.rtl.restoreTextDirection(n.ctx,e.textDirection)}},_getLegendItemAt:function(n,e){var t,o,a,r=this;if(n>=r.left&&n<=r.right&&e>=r.top&&e<=r.bottom)for(a=r.legendHitBoxes,t=0;t<a.length;++t)if(n>=(o=a[t]).left&&n<=o.left+o.width&&e>=o.top&&e<=o.top+o.height)return r.legendItems[t];return null},handleEvent:function(n){var e,t=this,o=t.options,a="mouseup"===n.type?"click":n.type;if("mousemove"===a){if(!o.onHover&&!o.onLeave)return}else{if("click"!==a)return;if(!o.onClick)return}e=t._getLegendItemAt(n.x,n.y),"click"===a?e&&o.onClick&&o.onClick.call(t,n.native,e):(o.onLeave&&e!==t._hoveredItem&&(t._hoveredItem&&o.onLeave.call(t,n.native,t._hoveredItem),t._hoveredItem=e),o.onHover&&e&&o.onHover.call(t,n.native,e))}});function Xa(n,e){var t=new Ua({ctx:n.ctx,options:e,chart:n});Ve.configure(n,t,e),Ve.addBox(n,t),n.legend=t}var Za={id:"legend",_element:Ua,beforeInit:function(n){var e=n.options.legend;e&&Xa(n,e)},beforeUpdate:function(n){var e=n.options.legend,t=n.legend;e?(ln.mergeIf(e,J.global.legend),t?(Ve.configure(n,t,e),t.options=e):Xa(n,e)):t&&(Ve.removeBox(n,t),delete n.legend)},afterEvent:function(n,e){var t=n.legend;t&&t.handleEvent(e)}},$a=ln.noop;J._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var Ka=bn.extend({initialize:function(n){var e=this;ln.extend(e,n),e.legendHitBoxes=[]},beforeUpdate:$a,update:function(n,e,t){var o=this;return o.beforeUpdate(),o.maxWidth=n,o.maxHeight=e,o.margins=t,o.beforeSetDimensions(),o.setDimensions(),o.afterSetDimensions(),o.beforeBuildLabels(),o.buildLabels(),o.afterBuildLabels(),o.beforeFit(),o.fit(),o.afterFit(),o.afterUpdate(),o.minSize},afterUpdate:$a,beforeSetDimensions:$a,setDimensions:function(){var n=this;n.isHorizontal()?(n.width=n.maxWidth,n.left=0,n.right=n.width):(n.height=n.maxHeight,n.top=0,n.bottom=n.height),n.paddingLeft=0,n.paddingTop=0,n.paddingRight=0,n.paddingBottom=0,n.minSize={width:0,height:0}},afterSetDimensions:$a,beforeBuildLabels:$a,buildLabels:$a,afterBuildLabels:$a,beforeFit:$a,fit:function(){var n,e=this,t=e.options,o=e.minSize={},a=e.isHorizontal();t.display?(n=(ln.isArray(t.text)?t.text.length:1)*ln.options._parseFont(t).lineHeight+2*t.padding,e.width=o.width=a?e.maxWidth:n,e.height=o.height=a?n:e.maxHeight):e.width=o.width=e.height=o.height=0},afterFit:$a,isHorizontal:function(){var n=this.options.position;return"top"===n||"bottom"===n},draw:function(){var n=this,e=n.ctx,t=n.options;if(t.display){var o,a,r,i=ln.options._parseFont(t),l=i.lineHeight,f=l/2+t.padding,p=0,c=n.top,d=n.left,s=n.bottom,m=n.right;e.fillStyle=ln.valueOrDefault(t.fontColor,J.global.defaultFontColor),e.font=i.string,n.isHorizontal()?(a=d+(m-d)/2,r=c+f,o=m-d):(a="left"===t.position?d+f:m-f,r=c+(s-c)/2,o=s-c,p=Math.PI*("left"===t.position?-.5:.5)),e.save(),e.translate(a,r),e.rotate(p),e.textAlign="center",e.textBaseline="middle";var g=t.text;if(ln.isArray(g))for(var b=0,u=0;u<g.length;++u)e.fillText(g[u],0,b,o),b+=l;else e.fillText(g,0,0,o);e.restore()}}});function Ja(n,e){var t=new Ka({ctx:n.ctx,options:e,chart:n});Ve.configure(n,t,e),Ve.addBox(n,t),n.titleBlock=t}var Qa={},nr=ja,er=Za,tr={id:"title",_element:Ka,beforeInit:function(n){var e=n.options.title;e&&Ja(n,e)},beforeUpdate:function(n){var e=n.options.title,t=n.titleBlock;e?(ln.mergeIf(e,J.global.title),t?(Ve.configure(n,t,e),t.options=e):Ja(n,e)):t&&(Ve.removeBox(n,t),delete n.titleBlock)}};for(var or in Qa.filler=nr,Qa.legend=er,Qa.title=tr,qt.helpers=ln,Ut(),qt._adapters=$t,qt.Animation=_n,qt.animationService=hn,qt.controllers=Be,qt.DatasetController=Cn,qt.defaults=J,qt.Element=bn,qt.elements=Un,qt.Interaction=We,qt.layouts=Ve,qt.platform=vt,qt.plugins=xt,qt.Scale=ho,qt.scaleService=wt,qt.Ticks=Kt,qt.Tooltip=Ot,qt.helpers.each(La,(function(n,e){qt.scaleService.registerScaleType(e,n,n._defaults)})),Qa)Qa.hasOwnProperty(or)&&qt.plugins.register(Qa[or]);qt.platform.initialize();var ar=qt;return"undefined"!=typeof window&&(window.Chart=qt),qt.Chart=qt,qt.Legend=Qa.legend._element,qt.Title=Qa.title._element,qt.pluginService=qt.plugins,qt.PluginBase=qt.Element.extend({}),qt.canvasHelpers=qt.helpers.canvas,qt.layoutService=qt.layouts,qt.LinearScaleBase=Po,qt.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],(function(n){qt[n]=function(e,t){return new qt(e,qt.helpers.merge(t||{},{type:n.charAt(0).toLowerCase()+n.slice(1)}))}})),ar}(function(){try{return In}catch(n){}}())}));let Nn=class extends tn{constructor(){super(),this.url="",window.addEventListener("resize",(()=>{this.chart&&this.chart.resize()}))}static get styles(){return nn`:host{position:relative;height:100%;width:100%;display:block;min-height:25rem}canvas{width:100px;height:100px}`}firstUpdated(){fetch(this.url).then((n=>n.json())).catch((n=>console.error(n))).then((n=>{var e;let t=(null===(e=this.shadowRoot)||void 0===e?void 0:e.querySelector("canvas")).getContext("2d");this.chart=new Hn(t,{type:"bar",data:{datasets:[{label:"Failed Logins",backgroundColor:"rgba(201, 25, 11, .5)",spanGaps:!0,data:n.logins_failed_per_1h},{label:"Successful Logins",backgroundColor:"rgba(189, 229, 184, .5)",spanGaps:!0,data:n.logins_per_1h}]},options:{maintainAspectRatio:!1,spanGaps:!0,scales:{xAxes:[{stacked:!0,gridLines:{color:"rgba(0, 0, 0, 0)"},type:"time",offset:!0,ticks:{callback:function(n,e,t){const o=t[e],a=Date.now()-o.value;return Math.round(a/1e3/3600)+" Hours ago"},autoSkip:!0,maxTicksLimit:8}}],yAxes:[{stacked:!0,gridLines:{color:"rgba(0, 0, 0, 0)"}}]}}})}))}render(){return A`<canvas></canvas>`}};n([$()],Nn.prototype,"url",void 0),Nn=n([X("pb-admin-logins-chart")],Nn);
+n.exports=function(n){function e(n,e){return n(e={exports:{}},e.exports),e.exports}function t(n){return n&&n.default||n}n=n&&n.hasOwnProperty("default")?n.default:n;var o={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},a=e((function(n){var e={};for(var t in o)o.hasOwnProperty(t)&&(e[o[t]]=t);var a=n.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var r in a)if(a.hasOwnProperty(r)){if(!("channels"in a[r]))throw new Error("missing channels property: "+r);if(!("labels"in a[r]))throw new Error("missing channel labels property: "+r);if(a[r].labels.length!==a[r].channels)throw new Error("channel and label counts mismatch: "+r);var i=a[r].channels,l=a[r].labels;delete a[r].channels,delete a[r].labels,Object.defineProperty(a[r],"channels",{value:i}),Object.defineProperty(a[r],"labels",{value:l})}function f(n,e){return Math.pow(n[0]-e[0],2)+Math.pow(n[1]-e[1],2)+Math.pow(n[2]-e[2],2)}a.rgb.hsl=function(n){var e,t,o=n[0]/255,a=n[1]/255,r=n[2]/255,i=Math.min(o,a,r),l=Math.max(o,a,r),f=l-i;return l===i?e=0:o===l?e=(a-r)/f:a===l?e=2+(r-o)/f:r===l&&(e=4+(o-a)/f),(e=Math.min(60*e,360))<0&&(e+=360),t=(i+l)/2,[e,100*(l===i?0:t<=.5?f/(l+i):f/(2-l-i)),100*t]},a.rgb.hsv=function(n){var e,t,o,a,r,i=n[0]/255,l=n[1]/255,f=n[2]/255,p=Math.max(i,l,f),c=p-Math.min(i,l,f),d=function(n){return(p-n)/6/c+.5};return 0===c?a=r=0:(r=c/p,e=d(i),t=d(l),o=d(f),i===p?a=o-t:l===p?a=1/3+e-o:f===p&&(a=2/3+t-e),a<0?a+=1:a>1&&(a-=1)),[360*a,100*r,100*p]},a.rgb.hwb=function(n){var e=n[0],t=n[1],o=n[2];return[a.rgb.hsl(n)[0],1/255*Math.min(e,Math.min(t,o))*100,100*(o=1-1/255*Math.max(e,Math.max(t,o)))]},a.rgb.cmyk=function(n){var e,t=n[0]/255,o=n[1]/255,a=n[2]/255;return[100*((1-t-(e=Math.min(1-t,1-o,1-a)))/(1-e)||0),100*((1-o-e)/(1-e)||0),100*((1-a-e)/(1-e)||0),100*e]},a.rgb.keyword=function(n){var t=e[n];if(t)return t;var a,r=1/0;for(var i in o)if(o.hasOwnProperty(i)){var l=f(n,o[i]);l<r&&(r=l,a=i)}return a},a.keyword.rgb=function(n){return o[n]},a.rgb.xyz=function(n){var e=n[0]/255,t=n[1]/255,o=n[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(o=o>.04045?Math.pow((o+.055)/1.055,2.4):o/12.92)),100*(.2126*e+.7152*t+.0722*o),100*(.0193*e+.1192*t+.9505*o)]},a.rgb.lab=function(n){var e=a.rgb.xyz(n),t=e[0],o=e[1],r=e[2];return o/=100,r/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116)-16,500*(t-o),200*(o-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},a.hsl.rgb=function(n){var e,t,o,a,r,i=n[0]/360,l=n[1]/100,f=n[2]/100;if(0===l)return[r=255*f,r,r];e=2*f-(t=f<.5?f*(1+l):f+l-f*l),a=[0,0,0];for(var p=0;p<3;p++)(o=i+1/3*-(p-1))<0&&o++,o>1&&o--,r=6*o<1?e+6*(t-e)*o:2*o<1?t:3*o<2?e+(t-e)*(2/3-o)*6:e,a[p]=255*r;return a},a.hsl.hsv=function(n){var e=n[0],t=n[1]/100,o=n[2]/100,a=t,r=Math.max(o,.01);return t*=(o*=2)<=1?o:2-o,a*=r<=1?r:2-r,[e,100*(0===o?2*a/(r+a):2*t/(o+t)),(o+t)/2*100]},a.hsv.rgb=function(n){var e=n[0]/60,t=n[1]/100,o=n[2]/100,a=Math.floor(e)%6,r=e-Math.floor(e),i=255*o*(1-t),l=255*o*(1-t*r),f=255*o*(1-t*(1-r));switch(o*=255,a){case 0:return[o,f,i];case 1:return[l,o,i];case 2:return[i,o,f];case 3:return[i,l,o];case 4:return[f,i,o];case 5:return[o,i,l]}},a.hsv.hsl=function(n){var e,t,o,a=n[0],r=n[1]/100,i=n[2]/100,l=Math.max(i,.01);return o=(2-r)*i,t=r*l,[a,100*(t=(t/=(e=(2-r)*l)<=1?e:2-e)||0),100*(o/=2)]},a.hwb.rgb=function(n){var e,t,o,a,r,i,l,f=n[0]/360,p=n[1]/100,c=n[2]/100,d=p+c;switch(d>1&&(p/=d,c/=d),o=6*f-(e=Math.floor(6*f)),0!=(1&e)&&(o=1-o),a=p+o*((t=1-c)-p),e){default:case 6:case 0:r=t,i=a,l=p;break;case 1:r=a,i=t,l=p;break;case 2:r=p,i=t,l=a;break;case 3:r=p,i=a,l=t;break;case 4:r=a,i=p,l=t;break;case 5:r=t,i=p,l=a}return[255*r,255*i,255*l]},a.cmyk.rgb=function(n){var e=n[0]/100,t=n[1]/100,o=n[2]/100,a=n[3]/100;return[255*(1-Math.min(1,e*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,o*(1-a)+a))]},a.xyz.rgb=function(n){var e,t,o,a=n[0]/100,r=n[1]/100,i=n[2]/100;return t=-.9689*a+1.8758*r+.0415*i,o=.0557*a+-.204*r+1.057*i,e=(e=3.2406*a+-1.5372*r+-.4986*i)>.0031308?1.055*Math.pow(e,1/2.4)-.055:12.92*e,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,o=o>.0031308?1.055*Math.pow(o,1/2.4)-.055:12.92*o,[255*(e=Math.min(Math.max(0,e),1)),255*(t=Math.min(Math.max(0,t),1)),255*(o=Math.min(Math.max(0,o),1))]},a.xyz.lab=function(n){var e=n[0],t=n[1],o=n[2];return t/=100,o/=108.883,e=(e/=95.047)>.008856?Math.pow(e,1/3):7.787*e+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(e-t),200*(t-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},a.lab.xyz=function(n){var e,t,o,a=n[0];e=n[1]/500+(t=(a+16)/116),o=t-n[2]/200;var r=Math.pow(t,3),i=Math.pow(e,3),l=Math.pow(o,3);return t=r>.008856?r:(t-16/116)/7.787,e=i>.008856?i:(e-16/116)/7.787,o=l>.008856?l:(o-16/116)/7.787,[e*=95.047,t*=100,o*=108.883]},a.lab.lch=function(n){var e,t=n[0],o=n[1],a=n[2];return(e=360*Math.atan2(a,o)/2/Math.PI)<0&&(e+=360),[t,Math.sqrt(o*o+a*a),e]},a.lch.lab=function(n){var e,t=n[0],o=n[1];return e=n[2]/360*2*Math.PI,[t,o*Math.cos(e),o*Math.sin(e)]},a.rgb.ansi16=function(n){var e=n[0],t=n[1],o=n[2],r=1 in arguments?arguments[1]:a.rgb.hsv(n)[2];if(0===(r=Math.round(r/50)))return 30;var i=30+(Math.round(o/255)<<2|Math.round(t/255)<<1|Math.round(e/255));return 2===r&&(i+=60),i},a.hsv.ansi16=function(n){return a.rgb.ansi16(a.hsv.rgb(n),n[2])},a.rgb.ansi256=function(n){var e=n[0],t=n[1],o=n[2];return e===t&&t===o?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(o/255*5)},a.ansi16.rgb=function(n){var e=n%10;if(0===e||7===e)return n>50&&(e+=3.5),[e=e/10.5*255,e,e];var t=.5*(1+~~(n>50));return[(1&e)*t*255,(e>>1&1)*t*255,(e>>2&1)*t*255]},a.ansi256.rgb=function(n){if(n>=232){var e=10*(n-232)+8;return[e,e,e]}var t;return n-=16,[Math.floor(n/36)/5*255,Math.floor((t=n%36)/6)/5*255,t%6/5*255]},a.rgb.hex=function(n){var e=(((255&Math.round(n[0]))<<16)+((255&Math.round(n[1]))<<8)+(255&Math.round(n[2]))).toString(16).toUpperCase();return"000000".substring(e.length)+e},a.hex.rgb=function(n){var e=n.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];var t=e[0];3===e[0].length&&(t=t.split("").map((function(n){return n+n})).join(""));var o=parseInt(t,16);return[o>>16&255,o>>8&255,255&o]},a.rgb.hcg=function(n){var e,t=n[0]/255,o=n[1]/255,a=n[2]/255,r=Math.max(Math.max(t,o),a),i=Math.min(Math.min(t,o),a),l=r-i;return e=l<=0?0:r===t?(o-a)/l%6:r===o?2+(a-t)/l:4+(t-o)/l+4,e/=6,[360*(e%=1),100*l,100*(l<1?i/(1-l):0)]},a.hsl.hcg=function(n){var e=n[1]/100,t=n[2]/100,o=1,a=0;return(o=t<.5?2*e*t:2*e*(1-t))<1&&(a=(t-.5*o)/(1-o)),[n[0],100*o,100*a]},a.hsv.hcg=function(n){var e=n[1]/100,t=n[2]/100,o=e*t,a=0;return o<1&&(a=(t-o)/(1-o)),[n[0],100*o,100*a]},a.hcg.rgb=function(n){var e=n[0]/360,t=n[1]/100,o=n[2]/100;if(0===t)return[255*o,255*o,255*o];var a=[0,0,0],r=e%1*6,i=r%1,l=1-i,f=0;switch(Math.floor(r)){case 0:a[0]=1,a[1]=i,a[2]=0;break;case 1:a[0]=l,a[1]=1,a[2]=0;break;case 2:a[0]=0,a[1]=1,a[2]=i;break;case 3:a[0]=0,a[1]=l,a[2]=1;break;case 4:a[0]=i,a[1]=0,a[2]=1;break;default:a[0]=1,a[1]=0,a[2]=l}return f=(1-t)*o,[255*(t*a[0]+f),255*(t*a[1]+f),255*(t*a[2]+f)]},a.hcg.hsv=function(n){var e=n[1]/100,t=e+n[2]/100*(1-e),o=0;return t>0&&(o=e/t),[n[0],100*o,100*t]},a.hcg.hsl=function(n){var e=n[1]/100,t=n[2]/100*(1-e)+.5*e,o=0;return t>0&&t<.5?o=e/(2*t):t>=.5&&t<1&&(o=e/(2*(1-t))),[n[0],100*o,100*t]},a.hcg.hwb=function(n){var e=n[1]/100,t=e+n[2]/100*(1-e);return[n[0],100*(t-e),100*(1-t)]},a.hwb.hcg=function(n){var e=n[1]/100,t=1-n[2]/100,o=t-e,a=0;return o<1&&(a=(t-o)/(1-o)),[n[0],100*o,100*a]},a.apple.rgb=function(n){return[n[0]/65535*255,n[1]/65535*255,n[2]/65535*255]},a.rgb.apple=function(n){return[n[0]/255*65535,n[1]/255*65535,n[2]/255*65535]},a.gray.rgb=function(n){return[n[0]/100*255,n[0]/100*255,n[0]/100*255]},a.gray.hsl=a.gray.hsv=function(n){return[0,0,n[0]]},a.gray.hwb=function(n){return[0,100,n[0]]},a.gray.cmyk=function(n){return[0,0,0,n[0]]},a.gray.lab=function(n){return[n[0],0,0]},a.gray.hex=function(n){var e=255&Math.round(n[0]/100*255),t=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(t.length)+t},a.rgb.gray=function(n){return[(n[0]+n[1]+n[2])/3/255*100]}}));function r(){for(var n={},e=Object.keys(a),t=e.length,o=0;o<t;o++)n[e[o]]={distance:-1,parent:null};return n}function i(n){var e=r(),t=[n];for(e[n].distance=0;t.length;)for(var o=t.pop(),i=Object.keys(a[o]),l=i.length,f=0;f<l;f++){var p=i[f],c=e[p];-1===c.distance&&(c.distance=e[o].distance+1,c.parent=o,t.unshift(p))}return e}function l(n,e){return function(t){return e(n(t))}}function f(n,e){for(var t=[e[n].parent,n],o=a[e[n].parent][n],r=e[n].parent;e[r].parent;)t.unshift(e[r].parent),o=l(a[e[r].parent][r],o),r=e[r].parent;return o.conversion=t,o}a.rgb,a.hsl,a.hsv,a.hwb,a.cmyk,a.xyz,a.lab,a.lch,a.hex,a.keyword,a.ansi16,a.ansi256,a.hcg,a.apple,a.gray;var p=function(n){for(var e=i(n),t={},o=Object.keys(e),a=o.length,r=0;r<a;r++){var l=o[r];null!==e[l].parent&&(t[l]=f(l,e))}return t},c={};function d(n){var e=function(e){return null==e?e:(arguments.length>1&&(e=Array.prototype.slice.call(arguments)),n(e))};return"conversion"in n&&(e.conversion=n.conversion),e}function s(n){var e=function(e){if(null==e)return e;arguments.length>1&&(e=Array.prototype.slice.call(arguments));var t=n(e);if("object"==typeof t)for(var o=t.length,a=0;a<o;a++)t[a]=Math.round(t[a]);return t};return"conversion"in n&&(e.conversion=n.conversion),e}Object.keys(a).forEach((function(n){c[n]={},Object.defineProperty(c[n],"channels",{value:a[n].channels}),Object.defineProperty(c[n],"labels",{value:a[n].labels});var e=p(n);Object.keys(e).forEach((function(t){var o=e[t];c[n][t]=s(o),c[n][t].raw=d(o)}))}));var m=c,g={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},b={getRgba:u,getHsla:_,getRgb:v,getHsl:x,getHwb:h,getAlpha:w,hexString:y,rgbString:k,rgbaString:C,percentString:B,percentaString:P,hslString:S,hslaString:T,hwbString:M,keyword:L};function u(n){if(n){var e=/^#([a-fA-F0-9]{3,4})$/i,t=/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i,o=/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i,a=/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i,r=/(\w+)/,i=[0,0,0],l=1,f=n.match(e),p="";if(f){p=(f=f[1])[3];for(var c=0;c<i.length;c++)i[c]=parseInt(f[c]+f[c],16);p&&(l=Math.round(parseInt(p+p,16)/255*100)/100)}else if(f=n.match(t)){for(p=f[2],f=f[1],c=0;c<i.length;c++)i[c]=parseInt(f.slice(2*c,2*c+2),16);p&&(l=Math.round(parseInt(p,16)/255*100)/100)}else if(f=n.match(o)){for(c=0;c<i.length;c++)i[c]=parseInt(f[c+1]);l=parseFloat(f[4])}else if(f=n.match(a)){for(c=0;c<i.length;c++)i[c]=Math.round(2.55*parseFloat(f[c+1]));l=parseFloat(f[4])}else if(f=n.match(r)){if("transparent"==f[1])return[0,0,0,0];if(!(i=g[f[1]]))return}for(c=0;c<i.length;c++)i[c]=z(i[c],0,255);return l=l||0==l?z(l,0,1):1,i[3]=l,i}}function _(n){if(n){var e=/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/,t=n.match(e);if(t){var o=parseFloat(t[4]);return[z(parseInt(t[1]),0,360),z(parseFloat(t[2]),0,100),z(parseFloat(t[3]),0,100),z(isNaN(o)?1:o,0,1)]}}}function h(n){if(n){var e=/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/,t=n.match(e);if(t){var o=parseFloat(t[4]);return[z(parseInt(t[1]),0,360),z(parseFloat(t[2]),0,100),z(parseFloat(t[3]),0,100),z(isNaN(o)?1:o,0,1)]}}}function v(n){var e=u(n);return e&&e.slice(0,3)}function x(n){var e=_(n);return e&&e.slice(0,3)}function w(n){var e=u(n);return e||(e=_(n))||(e=h(n))?e[3]:void 0}function y(n,e){return e=void 0!==e&&3===n.length?e:n[3],"#"+W(n[0])+W(n[1])+W(n[2])+(e>=0&&e<1?W(Math.round(255*e)):"")}function k(n,e){return e<1||n[3]&&n[3]<1?C(n,e):"rgb("+n[0]+", "+n[1]+", "+n[2]+")"}function C(n,e){return void 0===e&&(e=void 0!==n[3]?n[3]:1),"rgba("+n[0]+", "+n[1]+", "+n[2]+", "+e+")"}function B(n,e){return e<1||n[3]&&n[3]<1?P(n,e):"rgb("+Math.round(n[0]/255*100)+"%, "+Math.round(n[1]/255*100)+"%, "+Math.round(n[2]/255*100)+"%)"}function P(n,e){return"rgba("+Math.round(n[0]/255*100)+"%, "+Math.round(n[1]/255*100)+"%, "+Math.round(n[2]/255*100)+"%, "+(e||n[3]||1)+")"}function S(n,e){return e<1||n[3]&&n[3]<1?T(n,e):"hsl("+n[0]+", "+n[1]+"%, "+n[2]+"%)"}function T(n,e){return void 0===e&&(e=void 0!==n[3]?n[3]:1),"hsla("+n[0]+", "+n[1]+"%, "+n[2]+"%, "+e+")"}function M(n,e){return void 0===e&&(e=void 0!==n[3]?n[3]:1),"hwb("+n[0]+", "+n[1]+"%, "+n[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"}function L(n){return R[n.slice(0,3)]}function z(n,e,t){return Math.min(Math.max(e,n),t)}function W(n){var e=n.toString(16).toUpperCase();return e.length<2?"0"+e:e}var R={};for(var F in g)R[g[F]]=F;var D=function(n){return n instanceof D?n:this instanceof D?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof n?(e=b.getRgba(n))?this.setValues("rgb",e):(e=b.getHsla(n))?this.setValues("hsl",e):(e=b.getHwb(n))&&this.setValues("hwb",e):"object"==typeof n&&(void 0!==(e=n).r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e)))):new D(n);var e};D.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var n=this.values;return 1!==n.alpha?n.hwb.concat([n.alpha]):n.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var n=this.values;return n.rgb.concat([n.alpha])},hslaArray:function(){var n=this.values;return n.hsl.concat([n.alpha])},alpha:function(n){return void 0===n?this.values.alpha:(this.setValues("alpha",n),this)},red:function(n){return this.setChannel("rgb",0,n)},green:function(n){return this.setChannel("rgb",1,n)},blue:function(n){return this.setChannel("rgb",2,n)},hue:function(n){return n&&(n=(n%=360)<0?360+n:n),this.setChannel("hsl",0,n)},saturation:function(n){return this.setChannel("hsl",1,n)},lightness:function(n){return this.setChannel("hsl",2,n)},saturationv:function(n){return this.setChannel("hsv",1,n)},whiteness:function(n){return this.setChannel("hwb",1,n)},blackness:function(n){return this.setChannel("hwb",2,n)},value:function(n){return this.setChannel("hsv",2,n)},cyan:function(n){return this.setChannel("cmyk",0,n)},magenta:function(n){return this.setChannel("cmyk",1,n)},yellow:function(n){return this.setChannel("cmyk",2,n)},black:function(n){return this.setChannel("cmyk",3,n)},hexString:function(){return b.hexString(this.values.rgb)},rgbString:function(){return b.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return b.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return b.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return b.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return b.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return b.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return b.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var n=this.values.rgb;return n[0]<<16|n[1]<<8|n[2]},luminosity:function(){for(var n=this.values.rgb,e=[],t=0;t<n.length;t++){var o=n[t]/255;e[t]=o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(n){var e=this.luminosity(),t=n.luminosity();return e>t?(e+.05)/(t+.05):(t+.05)/(e+.05)},level:function(n){var e=this.contrast(n);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var n=this.values.rgb;return(299*n[0]+587*n[1]+114*n[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var n=[],e=0;e<3;e++)n[e]=255-this.values.rgb[e];return this.setValues("rgb",n),this},lighten:function(n){var e=this.values.hsl;return e[2]+=e[2]*n,this.setValues("hsl",e),this},darken:function(n){var e=this.values.hsl;return e[2]-=e[2]*n,this.setValues("hsl",e),this},saturate:function(n){var e=this.values.hsl;return e[1]+=e[1]*n,this.setValues("hsl",e),this},desaturate:function(n){var e=this.values.hsl;return e[1]-=e[1]*n,this.setValues("hsl",e),this},whiten:function(n){var e=this.values.hwb;return e[1]+=e[1]*n,this.setValues("hwb",e),this},blacken:function(n){var e=this.values.hwb;return e[2]+=e[2]*n,this.setValues("hwb",e),this},greyscale:function(){var n=this.values.rgb,e=.3*n[0]+.59*n[1]+.11*n[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(n){var e=this.values.alpha;return this.setValues("alpha",e-e*n),this},opaquer:function(n){var e=this.values.alpha;return this.setValues("alpha",e+e*n),this},rotate:function(n){var e=this.values.hsl,t=(e[0]+n)%360;return e[0]=t<0?360+t:t,this.setValues("hsl",e),this},mix:function(n,e){var t=this,o=n,a=void 0===e?.5:e,r=2*a-1,i=t.alpha()-o.alpha(),l=((r*i==-1?r:(r+i)/(1+r*i))+1)/2,f=1-l;return this.rgb(l*t.red()+f*o.red(),l*t.green()+f*o.green(),l*t.blue()+f*o.blue()).alpha(t.alpha()*a+o.alpha()*(1-a))},toJSON:function(){return this.rgb()},clone:function(){var n,e,t=new D,o=this.values,a=t.values;for(var r in o)o.hasOwnProperty(r)&&(n=o[r],"[object Array]"===(e={}.toString.call(n))?a[r]=n.slice(0):"[object Number]"===e?a[r]=n:console.error("unexpected color value:",n));return t}},D.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},D.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},D.prototype.getValues=function(n){for(var e=this.values,t={},o=0;o<n.length;o++)t[n.charAt(o)]=e[n][o];return 1!==e.alpha&&(t.a=e.alpha),t},D.prototype.setValues=function(n,e){var t,o,a=this.values,r=this.spaces,i=this.maxes,l=1;if(this.valid=!0,"alpha"===n)l=e;else if(e.length)a[n]=e.slice(0,n.length),l=e[n.length];else if(void 0!==e[n.charAt(0)]){for(t=0;t<n.length;t++)a[n][t]=e[n.charAt(t)];l=e.a}else if(void 0!==e[r[n][0]]){var f=r[n];for(t=0;t<n.length;t++)a[n][t]=e[f[t]];l=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===l?a.alpha:l)),"alpha"===n)return!1;for(t=0;t<n.length;t++)o=Math.max(0,Math.min(i[n][t],a[n][t])),a[n][t]=Math.round(o);for(var p in r)p!==n&&(a[p]=m[n][p](a[n]));return!0},D.prototype.setSpace=function(n,e){var t=e[0];return void 0===t?this.getValues(n):("number"==typeof t&&(t=Array.prototype.slice.call(e)),this.setValues(n,t),this)},D.prototype.setChannel=function(n,e,t){var o=this.values[n];return void 0===t?o[e]:(t===o[e]||(o[e]=t,this.setValues(n,o)),this)},"undefined"!=typeof window&&(window.Color=D);var O=D;function A(n){return-1===["__proto__","prototype","constructor"].indexOf(n)}var I,H={noop:function(){},uid:(I=0,function(){return I++}),isNullOrUndef:function(n){return null==n},isArray:function(n){if(Array.isArray&&Array.isArray(n))return!0;var e=Object.prototype.toString.call(n);return"[object"===e.substr(0,7)&&"Array]"===e.substr(-6)},isObject:function(n){return null!==n&&"[object Object]"===Object.prototype.toString.call(n)},isFinite:function(n){return("number"==typeof n||n instanceof Number)&&isFinite(n)},valueOrDefault:function(n,e){return void 0===n?e:n},valueAtIndexOrDefault:function(n,e,t){return H.valueOrDefault(H.isArray(n)?n[e]:n,t)},callback:function(n,e,t){if(n&&"function"==typeof n.call)return n.apply(t,e)},each:function(n,e,t,o){var a,r,i;if(H.isArray(n))if(r=n.length,o)for(a=r-1;a>=0;a--)e.call(t,n[a],a);else for(a=0;a<r;a++)e.call(t,n[a],a);else if(H.isObject(n))for(r=(i=Object.keys(n)).length,a=0;a<r;a++)e.call(t,n[i[a]],i[a])},arrayEquals:function(n,e){var t,o,a,r;if(!n||!e||n.length!==e.length)return!1;for(t=0,o=n.length;t<o;++t)if(a=n[t],r=e[t],a instanceof Array&&r instanceof Array){if(!H.arrayEquals(a,r))return!1}else if(a!==r)return!1;return!0},clone:function(n){if(H.isArray(n))return n.map(H.clone);if(H.isObject(n)){for(var e=Object.create(n),t=Object.keys(n),o=t.length,a=0;a<o;++a)e[t[a]]=H.clone(n[t[a]]);return e}return n},_merger:function(n,e,t,o){if(A(n)){var a=e[n],r=t[n];H.isObject(a)&&H.isObject(r)?H.merge(a,r,o):e[n]=H.clone(r)}},_mergerIf:function(n,e,t){if(A(n)){var o=e[n],a=t[n];H.isObject(o)&&H.isObject(a)?H.mergeIf(o,a):e.hasOwnProperty(n)||(e[n]=H.clone(a))}},merge:function(n,e,t){var o,a,r,i,l,f=H.isArray(e)?e:[e],p=f.length;if(!H.isObject(n))return n;for(o=(t=t||{}).merger||H._merger,a=0;a<p;++a)if(e=f[a],H.isObject(e))for(l=0,i=(r=Object.keys(e)).length;l<i;++l)o(r[l],n,e,t);return n},mergeIf:function(n,e){return H.merge(n,e,{merger:H._mergerIf})},extend:Object.assign||function(n){return H.merge(n,[].slice.call(arguments,1),{merger:function(n,e,t){e[n]=t[n]}})},inherits:function(n){var e=this,t=n&&n.hasOwnProperty("constructor")?n.constructor:function(){return e.apply(this,arguments)},o=function(){this.constructor=t};return o.prototype=e.prototype,t.prototype=new o,t.extend=H.inherits,n&&H.extend(t.prototype,n),t.__super__=e.prototype,t},_deprecated:function(n,e,t,o){void 0!==e&&console.warn(n+': "'+t+'" is deprecated. Please use "'+o+'" instead')}},N=H;H.callCallback=H.callback,H.indexOf=function(n,e,t){return Array.prototype.indexOf.call(n,e,t)},H.getValueOrDefault=H.valueOrDefault,H.getValueAtIndexOrDefault=H.valueAtIndexOrDefault;var E={linear:function(n){return n},easeInQuad:function(n){return n*n},easeOutQuad:function(n){return-n*(n-2)},easeInOutQuad:function(n){return(n/=.5)<1?.5*n*n:-.5*(--n*(n-2)-1)},easeInCubic:function(n){return n*n*n},easeOutCubic:function(n){return(n-=1)*n*n+1},easeInOutCubic:function(n){return(n/=.5)<1?.5*n*n*n:.5*((n-=2)*n*n+2)},easeInQuart:function(n){return n*n*n*n},easeOutQuart:function(n){return-((n-=1)*n*n*n-1)},easeInOutQuart:function(n){return(n/=.5)<1?.5*n*n*n*n:-.5*((n-=2)*n*n*n-2)},easeInQuint:function(n){return n*n*n*n*n},easeOutQuint:function(n){return(n-=1)*n*n*n*n+1},easeInOutQuint:function(n){return(n/=.5)<1?.5*n*n*n*n*n:.5*((n-=2)*n*n*n*n+2)},easeInSine:function(n){return 1-Math.cos(n*(Math.PI/2))},easeOutSine:function(n){return Math.sin(n*(Math.PI/2))},easeInOutSine:function(n){return-.5*(Math.cos(Math.PI*n)-1)},easeInExpo:function(n){return 0===n?0:Math.pow(2,10*(n-1))},easeOutExpo:function(n){return 1===n?1:1-Math.pow(2,-10*n)},easeInOutExpo:function(n){return 0===n?0:1===n?1:(n/=.5)<1?.5*Math.pow(2,10*(n-1)):.5*(2-Math.pow(2,-10*--n))},easeInCirc:function(n){return n>=1?n:-(Math.sqrt(1-n*n)-1)},easeOutCirc:function(n){return Math.sqrt(1-(n-=1)*n)},easeInOutCirc:function(n){return(n/=.5)<1?-.5*(Math.sqrt(1-n*n)-1):.5*(Math.sqrt(1-(n-=2)*n)+1)},easeInElastic:function(n){var e=1.70158,t=0,o=1;return 0===n?0:1===n?1:(t||(t=.3),e=t/(2*Math.PI)*Math.asin(1/o),-o*Math.pow(2,10*(n-=1))*Math.sin((n-e)*(2*Math.PI)/t))},easeOutElastic:function(n){var e=1.70158,t=0,o=1;return 0===n?0:1===n?1:(t||(t=.3),e=t/(2*Math.PI)*Math.asin(1/o),o*Math.pow(2,-10*n)*Math.sin((n-e)*(2*Math.PI)/t)+1)},easeInOutElastic:function(n){var e=1.70158,t=0,o=1;return 0===n?0:2==(n/=.5)?1:(t||(t=.45),e=t/(2*Math.PI)*Math.asin(1/o),n<1?o*Math.pow(2,10*(n-=1))*Math.sin((n-e)*(2*Math.PI)/t)*-.5:o*Math.pow(2,-10*(n-=1))*Math.sin((n-e)*(2*Math.PI)/t)*.5+1)},easeInBack:function(n){var e=1.70158;return n*n*((e+1)*n-e)},easeOutBack:function(n){var e=1.70158;return(n-=1)*n*((e+1)*n+e)+1},easeInOutBack:function(n){var e=1.70158;return(n/=.5)<1?n*n*((1+(e*=1.525))*n-e)*.5:.5*((n-=2)*n*((1+(e*=1.525))*n+e)+2)},easeInBounce:function(n){return 1-E.easeOutBounce(1-n)},easeOutBounce:function(n){return n<1/2.75?7.5625*n*n:n<2/2.75?7.5625*(n-=1.5/2.75)*n+.75:n<2.5/2.75?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375},easeInOutBounce:function(n){return n<.5?.5*E.easeInBounce(2*n):.5*E.easeOutBounce(2*n-1)+.5}},j={effects:E};N.easingEffects=E;var G=Math.PI,Y=G/180,V=2*G,q=G/2,U=G/4,X=2*G/3,Z={clear:function(n){n.ctx.clearRect(0,0,n.width,n.height)},roundedRect:function(n,e,t,o,a,r){if(r){var i=Math.min(r,a/2,o/2),l=e+i,f=t+i,p=e+o-i,c=t+a-i;n.moveTo(e,f),l<p&&f<c?(n.arc(l,f,i,-G,-q),n.arc(p,f,i,-q,0),n.arc(p,c,i,0,q),n.arc(l,c,i,q,G)):l<p?(n.moveTo(l,t),n.arc(p,f,i,-q,q),n.arc(l,f,i,q,G+q)):f<c?(n.arc(l,f,i,-G,0),n.arc(l,c,i,0,G)):n.arc(l,f,i,-G,G),n.closePath(),n.moveTo(e,t)}else n.rect(e,t,o,a)},drawPoint:function(n,e,t,o,a,r){var i,l,f,p,c,d=(r||0)*Y;if(e&&"object"==typeof e&&("[object HTMLImageElement]"===(i=e.toString())||"[object HTMLCanvasElement]"===i))return n.save(),n.translate(o,a),n.rotate(d),n.drawImage(e,-e.width/2,-e.height/2,e.width,e.height),void n.restore();if(!(isNaN(t)||t<=0)){switch(n.beginPath(),e){default:n.arc(o,a,t,0,V),n.closePath();break;case"triangle":n.moveTo(o+Math.sin(d)*t,a-Math.cos(d)*t),d+=X,n.lineTo(o+Math.sin(d)*t,a-Math.cos(d)*t),d+=X,n.lineTo(o+Math.sin(d)*t,a-Math.cos(d)*t),n.closePath();break;case"rectRounded":p=t-(c=.516*t),l=Math.cos(d+U)*p,f=Math.sin(d+U)*p,n.arc(o-l,a-f,c,d-G,d-q),n.arc(o+f,a-l,c,d-q,d),n.arc(o+l,a+f,c,d,d+q),n.arc(o-f,a+l,c,d+q,d+G),n.closePath();break;case"rect":if(!r){p=Math.SQRT1_2*t,n.rect(o-p,a-p,2*p,2*p);break}d+=U;case"rectRot":l=Math.cos(d)*t,f=Math.sin(d)*t,n.moveTo(o-l,a-f),n.lineTo(o+f,a-l),n.lineTo(o+l,a+f),n.lineTo(o-f,a+l),n.closePath();break;case"crossRot":d+=U;case"cross":l=Math.cos(d)*t,f=Math.sin(d)*t,n.moveTo(o-l,a-f),n.lineTo(o+l,a+f),n.moveTo(o+f,a-l),n.lineTo(o-f,a+l);break;case"star":l=Math.cos(d)*t,f=Math.sin(d)*t,n.moveTo(o-l,a-f),n.lineTo(o+l,a+f),n.moveTo(o+f,a-l),n.lineTo(o-f,a+l),d+=U,l=Math.cos(d)*t,f=Math.sin(d)*t,n.moveTo(o-l,a-f),n.lineTo(o+l,a+f),n.moveTo(o+f,a-l),n.lineTo(o-f,a+l);break;case"line":l=Math.cos(d)*t,f=Math.sin(d)*t,n.moveTo(o-l,a-f),n.lineTo(o+l,a+f);break;case"dash":n.moveTo(o,a),n.lineTo(o+Math.cos(d)*t,a+Math.sin(d)*t)}n.fill(),n.stroke()}},_isPointInArea:function(n,e){var t=1e-6;return n.x>e.left-t&&n.x<e.right+t&&n.y>e.top-t&&n.y<e.bottom+t},clipArea:function(n,e){n.save(),n.beginPath(),n.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),n.clip()},unclipArea:function(n){n.restore()},lineTo:function(n,e,t,o){var a=t.steppedLine;if(a){if("middle"===a){var r=(e.x+t.x)/2;n.lineTo(r,o?t.y:e.y),n.lineTo(r,o?e.y:t.y)}else"after"===a&&!o||"after"!==a&&o?n.lineTo(e.x,t.y):n.lineTo(t.x,e.y);n.lineTo(t.x,t.y)}else t.tension?n.bezierCurveTo(o?e.controlPointPreviousX:e.controlPointNextX,o?e.controlPointPreviousY:e.controlPointNextY,o?t.controlPointNextX:t.controlPointPreviousX,o?t.controlPointNextY:t.controlPointPreviousY,t.x,t.y):n.lineTo(t.x,t.y)}},$=Z;N.clear=Z.clear,N.drawRoundedRectangle=function(n){n.beginPath(),Z.roundedRect.apply(Z,arguments)};var K={_set:function(n,e){return N.merge(this[n]||(this[n]={}),e)}};K._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var J=K,Q=N.valueOrDefault;function nn(n){return!n||N.isNullOrUndef(n.size)||N.isNullOrUndef(n.family)?null:(n.style?n.style+" ":"")+(n.weight?n.weight+" ":"")+n.size+"px "+n.family}var en={toLineHeight:function(n,e){var t=(""+n).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!t||"normal"===t[1])return 1.2*e;switch(n=+t[2],t[3]){case"px":return n;case"%":n/=100}return e*n},toPadding:function(n){var e,t,o,a;return N.isObject(n)?(e=+n.top||0,t=+n.right||0,o=+n.bottom||0,a=+n.left||0):e=t=o=a=+n||0,{top:e,right:t,bottom:o,left:a,height:e+o,width:a+t}},_parseFont:function(n){var e=J.global,t=Q(n.fontSize,e.defaultFontSize),o={family:Q(n.fontFamily,e.defaultFontFamily),lineHeight:N.options.toLineHeight(Q(n.lineHeight,e.defaultLineHeight),t),size:t,style:Q(n.fontStyle,e.defaultFontStyle),weight:null,string:""};return o.string=nn(o),o},resolve:function(n,e,t,o){var a,r,i,l=!0;for(a=0,r=n.length;a<r;++a)if(void 0!==(i=n[a])&&(void 0!==e&&"function"==typeof i&&(i=i(e),l=!1),void 0!==t&&N.isArray(i)&&(i=i[t],l=!1),void 0!==i))return o&&!l&&(o.cacheable=!1),i}},tn={_factorize:function(n){var e,t=[],o=Math.sqrt(n);for(e=1;e<o;e++)n%e==0&&(t.push(e),t.push(n/e));return o===(0|o)&&t.push(o),t.sort((function(n,e){return n-e})).pop(),t},log10:Math.log10||function(n){var e=Math.log(n)*Math.LOG10E,t=Math.round(e);return n===Math.pow(10,t)?t:e}},on=tn;N.log10=tn.log10;var an=function(n,e){return{x:function(t){return n+n+e-t},setWidth:function(n){e=n},textAlign:function(n){return"center"===n?n:"right"===n?"left":"right"},xPlus:function(n,e){return n-e},leftForLtr:function(n,e){return n-e}}},rn=function(){return{x:function(n){return n},setWidth:function(n){},textAlign:function(n){return n},xPlus:function(n,e){return n+e},leftForLtr:function(n,e){return n}}},ln=N,fn=j,pn=$,cn=en,dn=on,sn={getRtlAdapter:function(n,e,t){return n?an(e,t):rn()},overrideTextDirection:function(n,e){var t,o;"ltr"!==e&&"rtl"!==e||(o=[(t=n.canvas.style).getPropertyValue("direction"),t.getPropertyPriority("direction")],t.setProperty("direction",e,"important"),n.prevTextDirection=o)},restoreTextDirection:function(n){var e=n.prevTextDirection;void 0!==e&&(delete n.prevTextDirection,n.canvas.style.setProperty("direction",e[0],e[1]))}};function mn(n,e,t,o){var a,r,i,l,f,p,c,d,s,m=Object.keys(t);for(a=0,r=m.length;a<r;++a)if(p=t[i=m[a]],e.hasOwnProperty(i)||(e[i]=p),(l=e[i])!==p&&"_"!==i[0]){if(n.hasOwnProperty(i)||(n[i]=l),(c=typeof p)==typeof(f=n[i]))if("string"===c){if((d=O(f)).valid&&(s=O(p)).valid){e[i]=s.mix(d,o).rgbString();continue}}else if(ln.isFinite(f)&&ln.isFinite(p)){e[i]=f+(p-f)*o;continue}e[i]=p}}ln.easing=fn,ln.canvas=pn,ln.options=cn,ln.math=dn,ln.rtl=sn;var gn=function(n){ln.extend(this,n),this.initialize.apply(this,arguments)};ln.extend(gn.prototype,{_type:void 0,initialize:function(){this.hidden=!1},pivot:function(){var n=this;return n._view||(n._view=ln.extend({},n._model)),n._start={},n},transition:function(n){var e=this,t=e._model,o=e._start,a=e._view;return t&&1!==n?(a||(a=e._view={}),o||(o=e._start={}),mn(o,a,t,n),e):(e._view=ln.extend({},t),e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return ln.isNumber(this._model.x)&&ln.isNumber(this._model.y)}}),gn.extend=ln.inherits;var bn=gn,un=bn.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),_n=un;Object.defineProperty(un.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(un.prototype,"chartInstance",{get:function(){return this.chart},set:function(n){this.chart=n}}),J._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:ln.noop,onComplete:ln.noop}});var hn={animations:[],request:null,addAnimation:function(n,e,t,o){var a,r,i=this.animations;for(e.chart=n,e.startTime=Date.now(),e.duration=t,o||(n.animating=!0),a=0,r=i.length;a<r;++a)if(i[a].chart===n)return void(i[a]=e);i.push(e),1===i.length&&this.requestAnimationFrame()},cancelAnimation:function(n){var e=ln.findIndex(this.animations,(function(e){return e.chart===n}));-1!==e&&(this.animations.splice(e,1),n.animating=!1)},requestAnimationFrame:function(){var n=this;null===n.request&&(n.request=ln.requestAnimFrame.call(window,(function(){n.request=null,n.startDigest()})))},startDigest:function(){var n=this;n.advance(),n.animations.length>0&&n.requestAnimationFrame()},advance:function(){for(var n,e,t,o,a=this.animations,r=0;r<a.length;)e=(n=a[r]).chart,t=n.numSteps,o=Math.floor((Date.now()-n.startTime)/n.duration*t)+1,n.currentStep=Math.min(o,t),ln.callback(n.render,[e,n],e),ln.callback(n.onAnimationProgress,[n],e),n.currentStep>=t?(ln.callback(n.onAnimationComplete,[n],e),e.animating=!1,a.splice(r,1)):++r}},vn=ln.options.resolve,xn=["push","pop","shift","splice","unshift"];function wn(n,e){n._chartjs?n._chartjs.listeners.push(e):(Object.defineProperty(n,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),xn.forEach((function(e){var t="onData"+e.charAt(0).toUpperCase()+e.slice(1),o=n[e];Object.defineProperty(n,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),a=o.apply(this,e);return ln.each(n._chartjs.listeners,(function(n){"function"==typeof n[t]&&n[t].apply(n,e)})),a}})})))}function yn(n,e){var t=n._chartjs;if(t){var o=t.listeners,a=o.indexOf(e);-1!==a&&o.splice(a,1),o.length>0||(xn.forEach((function(e){delete n[e]})),delete n._chartjs)}}var kn=function(n,e){this.initialize(n,e)};ln.extend(kn.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(n,e){var t=this;t.chart=n,t.index=e,t.linkScales(),t.addElements(),t._type=t.getMeta().type},updateIndex:function(n){this.index=n},linkScales:function(){var n=this,e=n.getMeta(),t=n.chart,o=t.scales,a=n.getDataset(),r=t.options.scales;null!==e.xAxisID&&e.xAxisID in o&&!a.xAxisID||(e.xAxisID=a.xAxisID||r.xAxes[0].id),null!==e.yAxisID&&e.yAxisID in o&&!a.yAxisID||(e.yAxisID=a.yAxisID||r.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(n){return this.chart.scales[n]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&yn(this._data,this)},createMetaDataset:function(){var n=this,e=n.datasetElementType;return e&&new e({_chart:n.chart,_datasetIndex:n.index})},createMetaData:function(n){var e=this,t=e.dataElementType;return t&&new t({_chart:e.chart,_datasetIndex:e.index,_index:n})},addElements:function(){var n,e,t=this,o=t.getMeta(),a=t.getDataset().data||[],r=o.data;for(n=0,e=a.length;n<e;++n)r[n]=r[n]||t.createMetaData(n);o.dataset=o.dataset||t.createMetaDataset()},addElementAndReset:function(n){var e=this.createMetaData(n);this.getMeta().data.splice(n,0,e),this.updateElement(e,n,!0)},buildOrUpdateElements:function(){var n=this,e=n.getDataset(),t=e.data||(e.data=[]);n._data!==t&&(n._data&&yn(n._data,n),t&&Object.isExtensible(t)&&wn(t,n),n._data=t),n.resyncElements()},_configure:function(){var n=this;n._config=ln.merge(Object.create(null),[n.chart.options.datasets[n._type],n.getDataset()],{merger:function(n,e,t){"_meta"!==n&&"data"!==n&&ln._merger(n,e,t)}})},_update:function(n){var e=this;e._configure(),e._cachedDataOpts=null,e.update(n)},update:ln.noop,transition:function(n){for(var e=this.getMeta(),t=e.data||[],o=t.length,a=0;a<o;++a)t[a].transition(n);e.dataset&&e.dataset.transition(n)},draw:function(){var n=this.getMeta(),e=n.data||[],t=e.length,o=0;for(n.dataset&&n.dataset.draw();o<t;++o)e[o].draw()},getStyle:function(n){var e,t=this,o=t.getMeta(),a=o.dataset;return t._configure(),a&&void 0===n?e=t._resolveDatasetElementOptions(a||{}):(n=n||0,e=t._resolveDataElementOptions(o.data[n]||{},n)),!1!==e.fill&&null!==e.fill||(e.backgroundColor=e.borderColor),e},_resolveDatasetElementOptions:function(n,e){var t,o,a,r,i=this,l=i.chart,f=i._config,p=n.custom||{},c=l.options.elements[i.datasetElementType.prototype._type]||{},d=i._datasetElementOptions,s={},m={chart:l,dataset:i.getDataset(),datasetIndex:i.index,hover:e};for(t=0,o=d.length;t<o;++t)a=d[t],r=e?"hover"+a.charAt(0).toUpperCase()+a.slice(1):a,s[a]=vn([p[r],f[r],c[r]],m);return s},_resolveDataElementOptions:function(n,e){var t=this,o=n&&n.custom,a=t._cachedDataOpts;if(a&&!o)return a;var r,i,l,f,p=t.chart,c=t._config,d=p.options.elements[t.dataElementType.prototype._type]||{},s=t._dataElementOptions,m={},g={chart:p,dataIndex:e,dataset:t.getDataset(),datasetIndex:t.index},b={cacheable:!o};if(o=o||{},ln.isArray(s))for(i=0,l=s.length;i<l;++i)m[f=s[i]]=vn([o[f],c[f],d[f]],g,e,b);else for(i=0,l=(r=Object.keys(s)).length;i<l;++i)m[f=r[i]]=vn([o[f],c[s[f]],c[f],d[f]],g,e,b);return b.cacheable&&(t._cachedDataOpts=Object.freeze(m)),m},removeHoverStyle:function(n){ln.merge(n._model,n.$previousStyle||{}),delete n.$previousStyle},setHoverStyle:function(n){var e=this.chart.data.datasets[n._datasetIndex],t=n._index,o=n.custom||{},a=n._model,r=ln.getHoverColor;n.$previousStyle={backgroundColor:a.backgroundColor,borderColor:a.borderColor,borderWidth:a.borderWidth},a.backgroundColor=vn([o.hoverBackgroundColor,e.hoverBackgroundColor,r(a.backgroundColor)],void 0,t),a.borderColor=vn([o.hoverBorderColor,e.hoverBorderColor,r(a.borderColor)],void 0,t),a.borderWidth=vn([o.hoverBorderWidth,e.hoverBorderWidth,a.borderWidth],void 0,t)},_removeDatasetHoverStyle:function(){var n=this.getMeta().dataset;n&&this.removeHoverStyle(n)},_setDatasetHoverStyle:function(){var n,e,t,o,a,r,i=this.getMeta().dataset,l={};if(i){for(r=i._model,a=this._resolveDatasetElementOptions(i,!0),n=0,e=(o=Object.keys(a)).length;n<e;++n)l[t=o[n]]=r[t],r[t]=a[t];i.$previousStyle=l}},resyncElements:function(){var n=this,e=n.getMeta(),t=n.getDataset().data,o=e.data.length,a=t.length;a<o?e.data.splice(a,o-a):a>o&&n.insertElements(o,a-o)},insertElements:function(n,e){for(var t=0;t<e;++t)this.addElementAndReset(n+t)},onDataPush:function(){var n=arguments.length;this.insertElements(this.getDataset().data.length-n,n)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(n,e){this.getMeta().data.splice(n,e),this.insertElements(n,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),kn.extend=ln.inherits;var Cn=kn,Bn=2*Math.PI;function Pn(n,e){var t=e.startAngle,o=e.endAngle,a=e.pixelMargin,r=a/e.outerRadius,i=e.x,l=e.y;n.beginPath(),n.arc(i,l,e.outerRadius,t-r,o+r),e.innerRadius>a?(r=a/e.innerRadius,n.arc(i,l,e.innerRadius-a,o+r,t-r,!0)):n.arc(i,l,a,o+Math.PI/2,t-Math.PI/2),n.closePath(),n.clip()}function Sn(n,e,t,o){var a,r=t.endAngle;for(o&&(t.endAngle=t.startAngle+Bn,Pn(n,t),t.endAngle=r,t.endAngle===t.startAngle&&t.fullCircles&&(t.endAngle+=Bn,t.fullCircles--)),n.beginPath(),n.arc(t.x,t.y,t.innerRadius,t.startAngle+Bn,t.startAngle,!0),a=0;a<t.fullCircles;++a)n.stroke();for(n.beginPath(),n.arc(t.x,t.y,e.outerRadius,t.startAngle,t.startAngle+Bn),a=0;a<t.fullCircles;++a)n.stroke()}function Tn(n,e,t){var o="inner"===e.borderAlign;o?(n.lineWidth=2*e.borderWidth,n.lineJoin="round"):(n.lineWidth=e.borderWidth,n.lineJoin="bevel"),t.fullCircles&&Sn(n,e,t,o),o&&Pn(n,t),n.beginPath(),n.arc(t.x,t.y,e.outerRadius,t.startAngle,t.endAngle),n.arc(t.x,t.y,t.innerRadius,t.endAngle,t.startAngle,!0),n.closePath(),n.stroke()}J._set("global",{elements:{arc:{backgroundColor:J.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var Mn=bn.extend({_type:"arc",inLabelRange:function(n){var e=this._view;return!!e&&Math.pow(n-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(n,e){var t=this._view;if(t){for(var o=ln.getAngleFromPoint(t,{x:n,y:e}),a=o.angle,r=o.distance,i=t.startAngle,l=t.endAngle;l<i;)l+=Bn;for(;a>l;)a-=Bn;for(;a<i;)a+=Bn;var f=a>=i&&a<=l,p=r>=t.innerRadius&&r<=t.outerRadius;return f&&p}return!1},getCenterPoint:function(){var n=this._view,e=(n.startAngle+n.endAngle)/2,t=(n.innerRadius+n.outerRadius)/2;return{x:n.x+Math.cos(e)*t,y:n.y+Math.sin(e)*t}},getArea:function(){var n=this._view;return Math.PI*((n.endAngle-n.startAngle)/(2*Math.PI))*(Math.pow(n.outerRadius,2)-Math.pow(n.innerRadius,2))},tooltipPosition:function(){var n=this._view,e=n.startAngle+(n.endAngle-n.startAngle)/2,t=(n.outerRadius-n.innerRadius)/2+n.innerRadius;return{x:n.x+Math.cos(e)*t,y:n.y+Math.sin(e)*t}},draw:function(){var n,e=this._chart.ctx,t=this._view,o="inner"===t.borderAlign?.33:0,a={x:t.x,y:t.y,innerRadius:t.innerRadius,outerRadius:Math.max(t.outerRadius-o,0),pixelMargin:o,startAngle:t.startAngle,endAngle:t.endAngle,fullCircles:Math.floor(t.circumference/Bn)};if(e.save(),e.fillStyle=t.backgroundColor,e.strokeStyle=t.borderColor,a.fullCircles){for(a.endAngle=a.startAngle+Bn,e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),n=0;n<a.fullCircles;++n)e.fill();a.endAngle=a.startAngle+t.circumference%Bn}e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),e.fill(),t.borderWidth&&Tn(e,t,a),e.restore()}}),Ln=ln.valueOrDefault,zn=J.global.defaultColor;J._set("global",{elements:{line:{tension:.4,backgroundColor:zn,borderWidth:3,borderColor:zn,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var Wn=bn.extend({_type:"line",draw:function(){var n,e,t,o=this,a=o._view,r=o._chart.ctx,i=a.spanGaps,l=o._children.slice(),f=J.global,p=f.elements.line,c=-1,d=o._loop;if(l.length){if(o._loop){for(n=0;n<l.length;++n)if(e=ln.previousItem(l,n),!l[n]._view.skip&&e._view.skip){l=l.slice(n).concat(l.slice(0,n)),d=i;break}d&&l.push(l[0])}for(r.save(),r.lineCap=a.borderCapStyle||p.borderCapStyle,r.setLineDash&&r.setLineDash(a.borderDash||p.borderDash),r.lineDashOffset=Ln(a.borderDashOffset,p.borderDashOffset),r.lineJoin=a.borderJoinStyle||p.borderJoinStyle,r.lineWidth=Ln(a.borderWidth,p.borderWidth),r.strokeStyle=a.borderColor||f.defaultColor,r.beginPath(),(t=l[0]._view).skip||(r.moveTo(t.x,t.y),c=0),n=1;n<l.length;++n)t=l[n]._view,e=-1===c?ln.previousItem(l,n):l[c],t.skip||(c!==n-1&&!i||-1===c?r.moveTo(t.x,t.y):ln.canvas.lineTo(r,e._view,t),c=n);d&&r.closePath(),r.stroke(),r.restore()}}}),Rn=ln.valueOrDefault,Fn=J.global.defaultColor;function Dn(n){var e=this._view;return!!e&&Math.abs(n-e.x)<e.radius+e.hitRadius}function On(n){var e=this._view;return!!e&&Math.abs(n-e.y)<e.radius+e.hitRadius}J._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:Fn,borderColor:Fn,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var An=bn.extend({_type:"point",inRange:function(n,e){var t=this._view;return!!t&&Math.pow(n-t.x,2)+Math.pow(e-t.y,2)<Math.pow(t.hitRadius+t.radius,2)},inLabelRange:Dn,inXRange:Dn,inYRange:On,getCenterPoint:function(){var n=this._view;return{x:n.x,y:n.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var n=this._view;return{x:n.x,y:n.y,padding:n.radius+n.borderWidth}},draw:function(n){var e=this._view,t=this._chart.ctx,o=e.pointStyle,a=e.rotation,r=e.radius,i=e.x,l=e.y,f=J.global,p=f.defaultColor;e.skip||(void 0===n||ln.canvas._isPointInArea(e,n))&&(t.strokeStyle=e.borderColor||p,t.lineWidth=Rn(e.borderWidth,f.elements.point.borderWidth),t.fillStyle=e.backgroundColor||p,ln.canvas.drawPoint(t,o,r,i,l,a))}}),In=J.global.defaultColor;function Hn(n){return n&&void 0!==n.width}function Nn(n){var e,t,o,a,r;return Hn(n)?(r=n.width/2,e=n.x-r,t=n.x+r,o=Math.min(n.y,n.base),a=Math.max(n.y,n.base)):(r=n.height/2,e=Math.min(n.x,n.base),t=Math.max(n.x,n.base),o=n.y-r,a=n.y+r),{left:e,top:o,right:t,bottom:a}}function En(n,e,t){return n===e?t:n===t?e:n}function jn(n){var e=n.borderSkipped,t={};return e?(n.horizontal?n.base>n.x&&(e=En(e,"left","right")):n.base<n.y&&(e=En(e,"bottom","top")),t[e]=!0,t):t}function Gn(n,e,t){var o,a,r,i,l=n.borderWidth,f=jn(n);return ln.isObject(l)?(o=+l.top||0,a=+l.right||0,r=+l.bottom||0,i=+l.left||0):o=a=r=i=+l||0,{t:f.top||o<0?0:o>t?t:o,r:f.right||a<0?0:a>e?e:a,b:f.bottom||r<0?0:r>t?t:r,l:f.left||i<0?0:i>e?e:i}}function Yn(n){var e=Nn(n),t=e.right-e.left,o=e.bottom-e.top,a=Gn(n,t/2,o/2);return{outer:{x:e.left,y:e.top,w:t,h:o},inner:{x:e.left+a.l,y:e.top+a.t,w:t-a.l-a.r,h:o-a.t-a.b}}}function Vn(n,e,t){var o=null===e,a=null===t,r=!(!n||o&&a)&&Nn(n);return r&&(o||e>=r.left&&e<=r.right)&&(a||t>=r.top&&t<=r.bottom)}J._set("global",{elements:{rectangle:{backgroundColor:In,borderColor:In,borderSkipped:"bottom",borderWidth:0}}});var qn=bn.extend({_type:"rectangle",draw:function(){var n=this._chart.ctx,e=this._view,t=Yn(e),o=t.outer,a=t.inner;n.fillStyle=e.backgroundColor,n.fillRect(o.x,o.y,o.w,o.h),o.w===a.w&&o.h===a.h||(n.save(),n.beginPath(),n.rect(o.x,o.y,o.w,o.h),n.clip(),n.fillStyle=e.borderColor,n.rect(a.x,a.y,a.w,a.h),n.fill("evenodd"),n.restore())},height:function(){var n=this._view;return n.base-n.y},inRange:function(n,e){return Vn(this._view,n,e)},inLabelRange:function(n,e){var t=this._view;return Hn(t)?Vn(t,n,null):Vn(t,null,e)},inXRange:function(n){return Vn(this._view,n,null)},inYRange:function(n){return Vn(this._view,null,n)},getCenterPoint:function(){var n,e,t=this._view;return Hn(t)?(n=t.x,e=(t.y+t.base)/2):(n=(t.x+t.base)/2,e=t.y),{x:n,y:e}},getArea:function(){var n=this._view;return Hn(n)?n.width*Math.abs(n.y-n.base):n.height*Math.abs(n.x-n.base)},tooltipPosition:function(){var n=this._view;return{x:n.x,y:n.y}}}),Un={},Xn=Mn,Zn=Wn,$n=An,Kn=qn;Un.Arc=Xn,Un.Line=Zn,Un.Point=$n,Un.Rectangle=Kn;var Jn=ln._deprecated,Qn=ln.valueOrDefault;function ne(n,e){var t,o,a,r,i=n._length;for(a=1,r=e.length;a<r;++a)i=Math.min(i,Math.abs(e[a]-e[a-1]));for(a=0,r=n.getTicks().length;a<r;++a)o=n.getPixelForTick(a),i=a>0?Math.min(i,Math.abs(o-t)):i,t=o;return i}function ee(n,e,t){var o,a,r=t.barThickness,i=e.stackCount,l=e.pixels[n],f=ln.isNullOrUndef(r)?ne(e.scale,e.pixels):-1;return ln.isNullOrUndef(r)?(o=f*t.categoryPercentage,a=t.barPercentage):(o=r*i,a=1),{chunk:o/i,ratio:a,start:l-o/2}}function te(n,e,t){var o,a=e.pixels,r=a[n],i=n>0?a[n-1]:null,l=n<a.length-1?a[n+1]:null,f=t.categoryPercentage;return null===i&&(i=r-(null===l?e.end-e.start:l-r)),null===l&&(l=r+r-i),o=r-(r-Math.min(i,l))/2*f,{chunk:Math.abs(l-i)/2*f/e.stackCount,ratio:t.barPercentage,start:o}}J._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),J._set("global",{datasets:{bar:{categoryPercentage:.8,barPercentage:.9}}});var oe=Cn.extend({dataElementType:Un.Rectangle,_dataElementOptions:["backgroundColor","borderColor","borderSkipped","borderWidth","barPercentage","barThickness","categoryPercentage","maxBarThickness","minBarLength"],initialize:function(){var n,e,t=this;Cn.prototype.initialize.apply(t,arguments),(n=t.getMeta()).stack=t.getDataset().stack,n.bar=!0,e=t._getIndexScale().options,Jn("bar chart",e.barPercentage,"scales.[x/y]Axes.barPercentage","dataset.barPercentage"),Jn("bar chart",e.barThickness,"scales.[x/y]Axes.barThickness","dataset.barThickness"),Jn("bar chart",e.categoryPercentage,"scales.[x/y]Axes.categoryPercentage","dataset.categoryPercentage"),Jn("bar chart",t._getValueScale().options.minBarLength,"scales.[x/y]Axes.minBarLength","dataset.minBarLength"),Jn("bar chart",e.maxBarThickness,"scales.[x/y]Axes.maxBarThickness","dataset.maxBarThickness")},update:function(n){var e,t,o=this,a=o.getMeta().data;for(o._ruler=o.getRuler(),e=0,t=a.length;e<t;++e)o.updateElement(a[e],e,n)},updateElement:function(n,e,t){var o=this,a=o.getMeta(),r=o.getDataset(),i=o._resolveDataElementOptions(n,e);n._xScale=o.getScaleForId(a.xAxisID),n._yScale=o.getScaleForId(a.yAxisID),n._datasetIndex=o.index,n._index=e,n._model={backgroundColor:i.backgroundColor,borderColor:i.borderColor,borderSkipped:i.borderSkipped,borderWidth:i.borderWidth,datasetLabel:r.label,label:o.chart.data.labels[e]},ln.isArray(r.data[e])&&(n._model.borderSkipped=null),o._updateElementGeometry(n,e,t,i),n.pivot()},_updateElementGeometry:function(n,e,t,o){var a=this,r=n._model,i=a._getValueScale(),l=i.getBasePixel(),f=i.isHorizontal(),p=a._ruler||a.getRuler(),c=a.calculateBarValuePixels(a.index,e,o),d=a.calculateBarIndexPixels(a.index,e,p,o);r.horizontal=f,r.base=t?l:c.base,r.x=f?t?l:c.head:d.center,r.y=f?d.center:t?l:c.head,r.height=f?d.size:void 0,r.width=f?void 0:d.size},_getStacks:function(n){var e,t,o=this,a=o._getIndexScale(),r=a._getMatchingVisibleMetas(o._type),i=a.options.stacked,l=r.length,f=[];for(e=0;e<l&&(t=r[e],(!1===i||-1===f.indexOf(t.stack)||void 0===i&&void 0===t.stack)&&f.push(t.stack),t.index!==n);++e);return f},getStackCount:function(){return this._getStacks().length},getStackIndex:function(n,e){var t=this._getStacks(n),o=void 0!==e?t.indexOf(e):-1;return-1===o?t.length-1:o},getRuler:function(){var n,e,t=this,o=t._getIndexScale(),a=[];for(n=0,e=t.getMeta().data.length;n<e;++n)a.push(o.getPixelForValue(null,n,t.index));return{pixels:a,start:o._startPixel,end:o._endPixel,stackCount:t.getStackCount(),scale:o}},calculateBarValuePixels:function(n,e,t){var o,a,r,i,l,f,p,c=this,d=c.chart,s=c._getValueScale(),m=s.isHorizontal(),g=d.data.datasets,b=s._getMatchingVisibleMetas(c._type),u=s._parseValue(g[n].data[e]),_=t.minBarLength,h=s.options.stacked,v=c.getMeta().stack,x=void 0===u.start?0:u.max>=0&&u.min>=0?u.min:u.max,w=void 0===u.start?u.end:u.max>=0&&u.min>=0?u.max-u.min:u.min-u.max,y=b.length;if(h||void 0===h&&void 0!==v)for(o=0;o<y&&(a=b[o]).index!==n;++o)a.stack===v&&(r=void 0===(p=s._parseValue(g[a.index].data[e])).start?p.end:p.min>=0&&p.max>=0?p.max:p.min,(u.min<0&&r<0||u.max>=0&&r>0)&&(x+=r));return i=s.getPixelForValue(x),f=(l=s.getPixelForValue(x+w))-i,void 0!==_&&Math.abs(f)<_&&(f=_,l=w>=0&&!m||w<0&&m?i-_:i+_),{size:f,base:i,head:l,center:l+f/2}},calculateBarIndexPixels:function(n,e,t,o){var a=this,r="flex"===o.barThickness?te(e,t,o):ee(e,t,o),i=a.getStackIndex(n,a.getMeta().stack),l=r.start+r.chunk*i+r.chunk/2,f=Math.min(Qn(o.maxBarThickness,1/0),r.chunk*r.ratio);return{base:l-f/2,head:l+f/2,center:l,size:f}},draw:function(){var n=this,e=n.chart,t=n._getValueScale(),o=n.getMeta().data,a=n.getDataset(),r=o.length,i=0;for(ln.canvas.clipArea(e.ctx,e.chartArea);i<r;++i){var l=t._parseValue(a.data[i]);isNaN(l.min)||isNaN(l.max)||o[i].draw()}ln.canvas.unclipArea(e.ctx)},_resolveDataElementOptions:function(){var n=this,e=ln.extend({},Cn.prototype._resolveDataElementOptions.apply(n,arguments)),t=n._getIndexScale().options,o=n._getValueScale().options;return e.barPercentage=Qn(t.barPercentage,e.barPercentage),e.barThickness=Qn(t.barThickness,e.barThickness),e.categoryPercentage=Qn(t.categoryPercentage,e.categoryPercentage),e.maxBarThickness=Qn(t.maxBarThickness,e.maxBarThickness),e.minBarLength=Qn(o.minBarLength,e.minBarLength),e}}),ae=ln.valueOrDefault,re=ln.options.resolve;J._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(n,e){var t=e.datasets[n.datasetIndex].label||"",o=e.datasets[n.datasetIndex].data[n.index];return t+": ("+n.xLabel+", "+n.yLabel+", "+o.r+")"}}}});var ie=Cn.extend({dataElementType:Un.Point,_dataElementOptions:["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"],update:function(n){var e=this,t=e.getMeta().data;ln.each(t,(function(t,o){e.updateElement(t,o,n)}))},updateElement:function(n,e,t){var o=this,a=o.getMeta(),r=n.custom||{},i=o.getScaleForId(a.xAxisID),l=o.getScaleForId(a.yAxisID),f=o._resolveDataElementOptions(n,e),p=o.getDataset().data[e],c=o.index,d=t?i.getPixelForDecimal(.5):i.getPixelForValue("object"==typeof p?p:NaN,e,c),s=t?l.getBasePixel():l.getPixelForValue(p,e,c);n._xScale=i,n._yScale=l,n._options=f,n._datasetIndex=c,n._index=e,n._model={backgroundColor:f.backgroundColor,borderColor:f.borderColor,borderWidth:f.borderWidth,hitRadius:f.hitRadius,pointStyle:f.pointStyle,rotation:f.rotation,radius:t?0:f.radius,skip:r.skip||isNaN(d)||isNaN(s),x:d,y:s},n.pivot()},setHoverStyle:function(n){var e=n._model,t=n._options,o=ln.getHoverColor;n.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=ae(t.hoverBackgroundColor,o(t.backgroundColor)),e.borderColor=ae(t.hoverBorderColor,o(t.borderColor)),e.borderWidth=ae(t.hoverBorderWidth,t.borderWidth),e.radius=t.radius+t.hoverRadius},_resolveDataElementOptions:function(n,e){var t=this,o=t.chart,a=t.getDataset(),r=n.custom||{},i=a.data[e]||{},l=Cn.prototype._resolveDataElementOptions.apply(t,arguments),f={chart:o,dataIndex:e,dataset:a,datasetIndex:t.index};return t._cachedDataOpts===l&&(l=ln.extend({},l)),l.radius=re([r.radius,i.r,t._config.radius,o.options.elements.point.radius],f,e),l}}),le=ln.valueOrDefault,fe=Math.PI,pe=2*fe,ce=fe/2;J._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(n){var e,t,o,a=document.createElement("ul"),r=n.data,i=r.datasets,l=r.labels;if(a.setAttribute("class",n.id+"-legend"),i.length)for(e=0,t=i[0].data.length;e<t;++e)(o=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=i[0].backgroundColor[e],l[e]&&o.appendChild(document.createTextNode(l[e]));return a.outerHTML},legend:{labels:{generateLabels:function(n){var e=n.data;return e.labels.length&&e.datasets.length?e.labels.map((function(t,o){var a=n.getDatasetMeta(0),r=a.controller.getStyle(o);return{text:t,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[o])||a.data[o].hidden,index:o}})):[]}},onClick:function(n,e){var t,o,a,r=e.index,i=this.chart;for(t=0,o=(i.data.datasets||[]).length;t<o;++t)(a=i.getDatasetMeta(t)).data[r]&&(a.data[r].hidden=!a.data[r].hidden);i.update()}},cutoutPercentage:50,rotation:-ce,circumference:pe,tooltips:{callbacks:{title:function(){return""},label:function(n,e){var t=e.labels[n.index],o=": "+e.datasets[n.datasetIndex].data[n.index];return ln.isArray(t)?(t=t.slice())[0]+=o:t+=o,t}}}});var de=Cn.extend({dataElementType:Un.Arc,linkScales:ln.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],getRingIndex:function(n){for(var e=0,t=0;t<n;++t)this.chart.isDatasetVisible(t)&&++e;return e},update:function(n){var e,t,o,a,r=this,i=r.chart,l=i.chartArea,f=i.options,p=1,c=1,d=0,s=0,m=r.getMeta(),g=m.data,b=f.cutoutPercentage/100||0,u=f.circumference,_=r._getRingWeight(r.index);if(u<pe){var h=f.rotation%pe,v=(h+=h>=fe?-pe:h<-fe?pe:0)+u,x=Math.cos(h),w=Math.sin(h),y=Math.cos(v),k=Math.sin(v),C=h<=0&&v>=0||v>=pe,B=h<=ce&&v>=ce||v>=pe+ce,P=h<=-ce&&v>=-ce||v>=fe+ce,S=h===-fe||v>=fe?-1:Math.min(x,x*b,y,y*b),T=P?-1:Math.min(w,w*b,k,k*b),M=C?1:Math.max(x,x*b,y,y*b),L=B?1:Math.max(w,w*b,k,k*b);p=(M-S)/2,c=(L-T)/2,d=-(M+S)/2,s=-(L+T)/2}for(o=0,a=g.length;o<a;++o)g[o]._options=r._resolveDataElementOptions(g[o],o);for(i.borderWidth=r.getMaxBorderWidth(),e=(l.right-l.left-i.borderWidth)/p,t=(l.bottom-l.top-i.borderWidth)/c,i.outerRadius=Math.max(Math.min(e,t)/2,0),i.innerRadius=Math.max(i.outerRadius*b,0),i.radiusLength=(i.outerRadius-i.innerRadius)/(r._getVisibleDatasetWeightTotal()||1),i.offsetX=d*i.outerRadius,i.offsetY=s*i.outerRadius,m.total=r.calculateTotal(),r.outerRadius=i.outerRadius-i.radiusLength*r._getRingWeightOffset(r.index),r.innerRadius=Math.max(r.outerRadius-i.radiusLength*_,0),o=0,a=g.length;o<a;++o)r.updateElement(g[o],o,n)},updateElement:function(n,e,t){var o=this,a=o.chart,r=a.chartArea,i=a.options,l=i.animation,f=(r.left+r.right)/2,p=(r.top+r.bottom)/2,c=i.rotation,d=i.rotation,s=o.getDataset(),m=t&&l.animateRotate||n.hidden?0:o.calculateCircumference(s.data[e])*(i.circumference/pe),g=t&&l.animateScale?0:o.innerRadius,b=t&&l.animateScale?0:o.outerRadius,u=n._options||{};ln.extend(n,{_datasetIndex:o.index,_index:e,_model:{backgroundColor:u.backgroundColor,borderColor:u.borderColor,borderWidth:u.borderWidth,borderAlign:u.borderAlign,x:f+a.offsetX,y:p+a.offsetY,startAngle:c,endAngle:d,circumference:m,outerRadius:b,innerRadius:g,label:ln.valueAtIndexOrDefault(s.label,e,a.data.labels[e])}});var _=n._model;t&&l.animateRotate||(_.startAngle=0===e?i.rotation:o.getMeta().data[e-1]._model.endAngle,_.endAngle=_.startAngle+_.circumference),n.pivot()},calculateTotal:function(){var n,e=this.getDataset(),t=this.getMeta(),o=0;return ln.each(t.data,(function(t,a){n=e.data[a],isNaN(n)||t.hidden||(o+=Math.abs(n))})),o},calculateCircumference:function(n){var e=this.getMeta().total;return e>0&&!isNaN(n)?pe*(Math.abs(n)/e):0},getMaxBorderWidth:function(n){var e,t,o,a,r,i,l,f,p=this,c=0,d=p.chart;if(!n)for(e=0,t=d.data.datasets.length;e<t;++e)if(d.isDatasetVisible(e)){n=(o=d.getDatasetMeta(e)).data,e!==p.index&&(r=o.controller);break}if(!n)return 0;for(e=0,t=n.length;e<t;++e)a=n[e],r?(r._configure(),i=r._resolveDataElementOptions(a,e)):i=a._options,"inner"!==i.borderAlign&&(l=i.borderWidth,c=(f=i.hoverBorderWidth)>(c=l>c?l:c)?f:c);return c},setHoverStyle:function(n){var e=n._model,t=n._options,o=ln.getHoverColor;n.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=le(t.hoverBackgroundColor,o(t.backgroundColor)),e.borderColor=le(t.hoverBorderColor,o(t.borderColor)),e.borderWidth=le(t.hoverBorderWidth,t.borderWidth)},_getRingWeightOffset:function(n){for(var e=0,t=0;t<n;++t)this.chart.isDatasetVisible(t)&&(e+=this._getRingWeight(t));return e},_getRingWeight:function(n){return Math.max(le(this.chart.data.datasets[n].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});J._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}}),J._set("global",{datasets:{horizontalBar:{categoryPercentage:.8,barPercentage:.9}}});var se=oe.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),me=ln.valueOrDefault,ge=ln.options.resolve,be=ln.canvas._isPointInArea;function ue(n,e){var t=n&&n.options.ticks||{},o=t.reverse,a=void 0===t.min?e:0,r=void 0===t.max?e:0;return{start:o?r:a,end:o?a:r}}function _e(n,e,t){var o=t/2,a=ue(n,o),r=ue(e,o);return{top:r.end,right:a.end,bottom:r.start,left:a.start}}function he(n){var e,t,o,a;return ln.isObject(n)?(e=n.top,t=n.right,o=n.bottom,a=n.left):e=t=o=a=n,{top:e,right:t,bottom:o,left:a}}J._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var ve=Cn.extend({datasetElementType:Un.Line,dataElementType:Un.Point,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth","cubicInterpolationMode","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},update:function(n){var e,t,o=this,a=o.getMeta(),r=a.dataset,i=a.data||[],l=o.chart.options,f=o._config,p=o._showLine=me(f.showLine,l.showLines);for(o._xScale=o.getScaleForId(a.xAxisID),o._yScale=o.getScaleForId(a.yAxisID),p&&(void 0!==f.tension&&void 0===f.lineTension&&(f.lineTension=f.tension),r._scale=o._yScale,r._datasetIndex=o.index,r._children=i,r._model=o._resolveDatasetElementOptions(r),r.pivot()),e=0,t=i.length;e<t;++e)o.updateElement(i[e],e,n);for(p&&0!==r._model.tension&&o.updateBezierControlPoints(),e=0,t=i.length;e<t;++e)i[e].pivot()},updateElement:function(n,e,t){var o,a,r=this,i=r.getMeta(),l=n.custom||{},f=r.getDataset(),p=r.index,c=f.data[e],d=r._xScale,s=r._yScale,m=i.dataset._model,g=r._resolveDataElementOptions(n,e);o=d.getPixelForValue("object"==typeof c?c:NaN,e,p),a=t?s.getBasePixel():r.calculatePointY(c,e,p),n._xScale=d,n._yScale=s,n._options=g,n._datasetIndex=p,n._index=e,n._model={x:o,y:a,skip:l.skip||isNaN(o)||isNaN(a),radius:g.radius,pointStyle:g.pointStyle,rotation:g.rotation,backgroundColor:g.backgroundColor,borderColor:g.borderColor,borderWidth:g.borderWidth,tension:me(l.tension,m?m.tension:0),steppedLine:!!m&&m.steppedLine,hitRadius:g.hitRadius}},_resolveDatasetElementOptions:function(n){var e=this,t=e._config,o=n.custom||{},a=e.chart.options,r=a.elements.line,i=Cn.prototype._resolveDatasetElementOptions.apply(e,arguments);return i.spanGaps=me(t.spanGaps,a.spanGaps),i.tension=me(t.lineTension,r.tension),i.steppedLine=ge([o.steppedLine,t.steppedLine,r.stepped]),i.clip=he(me(t.clip,_e(e._xScale,e._yScale,i.borderWidth))),i},calculatePointY:function(n,e,t){var o,a,r,i,l,f,p,c=this,d=c.chart,s=c._yScale,m=0,g=0;if(s.options.stacked){for(l=+s.getRightValue(n),p=(f=d._getSortedVisibleDatasetMetas()).length,o=0;o<p&&(r=f[o]).index!==t;++o)a=d.data.datasets[r.index],"line"===r.type&&r.yAxisID===s.id&&((i=+s.getRightValue(a.data[e]))<0?g+=i||0:m+=i||0);return l<0?s.getPixelForValue(g+l):s.getPixelForValue(m+l)}return s.getPixelForValue(n)},updateBezierControlPoints:function(){var n,e,t,o,a=this,r=a.chart,i=a.getMeta(),l=i.dataset._model,f=r.chartArea,p=i.data||[];function c(n,e,t){return Math.max(Math.min(n,t),e)}if(l.spanGaps&&(p=p.filter((function(n){return!n._model.skip}))),"monotone"===l.cubicInterpolationMode)ln.splineCurveMonotone(p);else for(n=0,e=p.length;n<e;++n)t=p[n]._model,o=ln.splineCurve(ln.previousItem(p,n)._model,t,ln.nextItem(p,n)._model,l.tension),t.controlPointPreviousX=o.previous.x,t.controlPointPreviousY=o.previous.y,t.controlPointNextX=o.next.x,t.controlPointNextY=o.next.y;if(r.options.elements.line.capBezierPoints)for(n=0,e=p.length;n<e;++n)t=p[n]._model,be(t,f)&&(n>0&&be(p[n-1]._model,f)&&(t.controlPointPreviousX=c(t.controlPointPreviousX,f.left,f.right),t.controlPointPreviousY=c(t.controlPointPreviousY,f.top,f.bottom)),n<p.length-1&&be(p[n+1]._model,f)&&(t.controlPointNextX=c(t.controlPointNextX,f.left,f.right),t.controlPointNextY=c(t.controlPointNextY,f.top,f.bottom)))},draw:function(){var n,e=this,t=e.chart,o=e.getMeta(),a=o.data||[],r=t.chartArea,i=t.canvas,l=0,f=a.length;for(e._showLine&&(n=o.dataset._model.clip,ln.canvas.clipArea(t.ctx,{left:!1===n.left?0:r.left-n.left,right:!1===n.right?i.width:r.right+n.right,top:!1===n.top?0:r.top-n.top,bottom:!1===n.bottom?i.height:r.bottom+n.bottom}),o.dataset.draw(),ln.canvas.unclipArea(t.ctx));l<f;++l)a[l].draw(r)},setHoverStyle:function(n){var e=n._model,t=n._options,o=ln.getHoverColor;n.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=me(t.hoverBackgroundColor,o(t.backgroundColor)),e.borderColor=me(t.hoverBorderColor,o(t.borderColor)),e.borderWidth=me(t.hoverBorderWidth,t.borderWidth),e.radius=me(t.hoverRadius,t.radius)}}),xe=ln.options.resolve;J._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(n){var e,t,o,a=document.createElement("ul"),r=n.data,i=r.datasets,l=r.labels;if(a.setAttribute("class",n.id+"-legend"),i.length)for(e=0,t=i[0].data.length;e<t;++e)(o=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=i[0].backgroundColor[e],l[e]&&o.appendChild(document.createTextNode(l[e]));return a.outerHTML},legend:{labels:{generateLabels:function(n){var e=n.data;return e.labels.length&&e.datasets.length?e.labels.map((function(t,o){var a=n.getDatasetMeta(0),r=a.controller.getStyle(o);return{text:t,fillStyle:r.backgroundColor,strokeStyle:r.borderColor,lineWidth:r.borderWidth,hidden:isNaN(e.datasets[0].data[o])||a.data[o].hidden,index:o}})):[]}},onClick:function(n,e){var t,o,a,r=e.index,i=this.chart;for(t=0,o=(i.data.datasets||[]).length;t<o;++t)(a=i.getDatasetMeta(t)).data[r].hidden=!a.data[r].hidden;i.update()}},tooltips:{callbacks:{title:function(){return""},label:function(n,e){return e.labels[n.index]+": "+n.yLabel}}}});var we=Cn.extend({dataElementType:Un.Arc,linkScales:ln.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(n){var e,t,o,a=this,r=a.getDataset(),i=a.getMeta(),l=a.chart.options.startAngle||0,f=a._starts=[],p=a._angles=[],c=i.data;for(a._updateRadius(),i.count=a.countVisibleElements(),e=0,t=r.data.length;e<t;e++)f[e]=l,o=a._computeAngle(e),p[e]=o,l+=o;for(e=0,t=c.length;e<t;++e)c[e]._options=a._resolveDataElementOptions(c[e],e),a.updateElement(c[e],e,n)},_updateRadius:function(){var n=this,e=n.chart,t=e.chartArea,o=e.options,a=Math.min(t.right-t.left,t.bottom-t.top);e.outerRadius=Math.max(a/2,0),e.innerRadius=Math.max(o.cutoutPercentage?e.outerRadius/100*o.cutoutPercentage:1,0),e.radiusLength=(e.outerRadius-e.innerRadius)/e.getVisibleDatasetCount(),n.outerRadius=e.outerRadius-e.radiusLength*n.index,n.innerRadius=n.outerRadius-e.radiusLength},updateElement:function(n,e,t){var o=this,a=o.chart,r=o.getDataset(),i=a.options,l=i.animation,f=a.scale,p=a.data.labels,c=f.xCenter,d=f.yCenter,s=i.startAngle,m=n.hidden?0:f.getDistanceFromCenterForValue(r.data[e]),g=o._starts[e],b=g+(n.hidden?0:o._angles[e]),u=l.animateScale?0:f.getDistanceFromCenterForValue(r.data[e]),_=n._options||{};ln.extend(n,{_datasetIndex:o.index,_index:e,_scale:f,_model:{backgroundColor:_.backgroundColor,borderColor:_.borderColor,borderWidth:_.borderWidth,borderAlign:_.borderAlign,x:c,y:d,innerRadius:0,outerRadius:t?u:m,startAngle:t&&l.animateRotate?s:g,endAngle:t&&l.animateRotate?s:b,label:ln.valueAtIndexOrDefault(p,e,p[e])}}),n.pivot()},countVisibleElements:function(){var n=this.getDataset(),e=this.getMeta(),t=0;return ln.each(e.data,(function(e,o){isNaN(n.data[o])||e.hidden||t++})),t},setHoverStyle:function(n){var e=n._model,t=n._options,o=ln.getHoverColor,a=ln.valueOrDefault;n.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth},e.backgroundColor=a(t.hoverBackgroundColor,o(t.backgroundColor)),e.borderColor=a(t.hoverBorderColor,o(t.borderColor)),e.borderWidth=a(t.hoverBorderWidth,t.borderWidth)},_computeAngle:function(n){var e=this,t=this.getMeta().count,o=e.getDataset(),a=e.getMeta();if(isNaN(o.data[n])||a.data[n].hidden)return 0;var r={chart:e.chart,dataIndex:n,dataset:o,datasetIndex:e.index};return xe([e.chart.options.elements.arc.angle,2*Math.PI/t],r,n)}});J._set("pie",ln.clone(J.doughnut)),J._set("pie",{cutoutPercentage:0});var ye=de,ke=ln.valueOrDefault;J._set("radar",{spanGaps:!1,scale:{type:"radialLinear"},elements:{line:{fill:"start",tension:0}}});var Ce=Cn.extend({datasetElementType:Un.Line,dataElementType:Un.Point,linkScales:ln.noop,_datasetElementOptions:["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(n){var e,t,o=this,a=o.getMeta(),r=a.dataset,i=a.data||[],l=o.chart.scale,f=o._config;for(void 0!==f.tension&&void 0===f.lineTension&&(f.lineTension=f.tension),r._scale=l,r._datasetIndex=o.index,r._children=i,r._loop=!0,r._model=o._resolveDatasetElementOptions(r),r.pivot(),e=0,t=i.length;e<t;++e)o.updateElement(i[e],e,n);for(o.updateBezierControlPoints(),e=0,t=i.length;e<t;++e)i[e].pivot()},updateElement:function(n,e,t){var o=this,a=n.custom||{},r=o.getDataset(),i=o.chart.scale,l=i.getPointPositionForValue(e,r.data[e]),f=o._resolveDataElementOptions(n,e),p=o.getMeta().dataset._model,c=t?i.xCenter:l.x,d=t?i.yCenter:l.y;n._scale=i,n._options=f,n._datasetIndex=o.index,n._index=e,n._model={x:c,y:d,skip:a.skip||isNaN(c)||isNaN(d),radius:f.radius,pointStyle:f.pointStyle,rotation:f.rotation,backgroundColor:f.backgroundColor,borderColor:f.borderColor,borderWidth:f.borderWidth,tension:ke(a.tension,p?p.tension:0),hitRadius:f.hitRadius}},_resolveDatasetElementOptions:function(){var n=this,e=n._config,t=n.chart.options,o=Cn.prototype._resolveDatasetElementOptions.apply(n,arguments);return o.spanGaps=ke(e.spanGaps,t.spanGaps),o.tension=ke(e.lineTension,t.elements.line.tension),o},updateBezierControlPoints:function(){var n,e,t,o,a=this,r=a.getMeta(),i=a.chart.chartArea,l=r.data||[];function f(n,e,t){return Math.max(Math.min(n,t),e)}for(r.dataset._model.spanGaps&&(l=l.filter((function(n){return!n._model.skip}))),n=0,e=l.length;n<e;++n)t=l[n]._model,o=ln.splineCurve(ln.previousItem(l,n,!0)._model,t,ln.nextItem(l,n,!0)._model,t.tension),t.controlPointPreviousX=f(o.previous.x,i.left,i.right),t.controlPointPreviousY=f(o.previous.y,i.top,i.bottom),t.controlPointNextX=f(o.next.x,i.left,i.right),t.controlPointNextY=f(o.next.y,i.top,i.bottom)},setHoverStyle:function(n){var e=n._model,t=n._options,o=ln.getHoverColor;n.$previousStyle={backgroundColor:e.backgroundColor,borderColor:e.borderColor,borderWidth:e.borderWidth,radius:e.radius},e.backgroundColor=ke(t.hoverBackgroundColor,o(t.backgroundColor)),e.borderColor=ke(t.hoverBorderColor,o(t.borderColor)),e.borderWidth=ke(t.hoverBorderWidth,t.borderWidth),e.radius=ke(t.hoverRadius,t.radius)}});J._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},tooltips:{callbacks:{title:function(){return""},label:function(n){return"("+n.xLabel+", "+n.yLabel+")"}}}}),J._set("global",{datasets:{scatter:{showLine:!1}}});var Be={bar:oe,bubble:ie,doughnut:de,horizontalBar:se,line:ve,polarArea:we,pie:ye,radar:Ce,scatter:ve};function Pe(n,e){return n.native?{x:n.x,y:n.y}:ln.getRelativePosition(n,e)}function Se(n,e){var t,o,a,r,i,l,f=n._getSortedVisibleDatasetMetas();for(o=0,r=f.length;o<r;++o)for(a=0,i=(t=f[o].data).length;a<i;++a)(l=t[a])._view.skip||e(l)}function Te(n,e){var t=[];return Se(n,(function(n){n.inRange(e.x,e.y)&&t.push(n)})),t}function Me(n,e,t,o){var a=Number.POSITIVE_INFINITY,r=[];return Se(n,(function(n){if(!t||n.inRange(e.x,e.y)){var i=n.getCenterPoint(),l=o(e,i);l<a?(r=[n],a=l):l===a&&r.push(n)}})),r}function Le(n){var e=-1!==n.indexOf("x"),t=-1!==n.indexOf("y");return function(n,o){var a=e?Math.abs(n.x-o.x):0,r=t?Math.abs(n.y-o.y):0;return Math.sqrt(Math.pow(a,2)+Math.pow(r,2))}}function ze(n,e,t){var o=Pe(e,n);t.axis=t.axis||"x";var a=Le(t.axis),r=t.intersect?Te(n,o):Me(n,o,!1,a),i=[];return r.length?(n._getSortedVisibleDatasetMetas().forEach((function(n){var e=n.data[r[0]._index];e&&!e._view.skip&&i.push(e)})),i):[]}var We={modes:{single:function(n,e){var t=Pe(e,n),o=[];return Se(n,(function(n){if(n.inRange(t.x,t.y))return o.push(n),o})),o.slice(0,1)},label:ze,index:ze,dataset:function(n,e,t){var o=Pe(e,n);t.axis=t.axis||"xy";var a=Le(t.axis),r=t.intersect?Te(n,o):Me(n,o,!1,a);return r.length>0&&(r=n.getDatasetMeta(r[0]._datasetIndex).data),r},"x-axis":function(n,e){return ze(n,e,{intersect:!1})},point:function(n,e){return Te(n,Pe(e,n))},nearest:function(n,e,t){var o=Pe(e,n);t.axis=t.axis||"xy";var a=Le(t.axis);return Me(n,o,t.intersect,a)},x:function(n,e,t){var o=Pe(e,n),a=[],r=!1;return Se(n,(function(n){n.inXRange(o.x)&&a.push(n),n.inRange(o.x,o.y)&&(r=!0)})),t.intersect&&!r&&(a=[]),a},y:function(n,e,t){var o=Pe(e,n),a=[],r=!1;return Se(n,(function(n){n.inYRange(o.y)&&a.push(n),n.inRange(o.x,o.y)&&(r=!0)})),t.intersect&&!r&&(a=[]),a}}},Re=ln.extend;function Fe(n,e){return ln.where(n,(function(n){return n.pos===e}))}function De(n,e){return n.sort((function(n,t){var o=e?t:n,a=e?n:t;return o.weight===a.weight?o.index-a.index:o.weight-a.weight}))}function Oe(n){var e,t,o,a=[];for(e=0,t=(n||[]).length;e<t;++e)o=n[e],a.push({index:e,box:o,pos:o.position,horizontal:o.isHorizontal(),weight:o.weight});return a}function Ae(n,e){var t,o,a;for(t=0,o=n.length;t<o;++t)(a=n[t]).width=a.horizontal?a.box.fullWidth&&e.availableWidth:e.vBoxMaxWidth,a.height=a.horizontal&&e.hBoxMaxHeight}function Ie(n){var e=Oe(n),t=De(Fe(e,"left"),!0),o=De(Fe(e,"right")),a=De(Fe(e,"top"),!0),r=De(Fe(e,"bottom"));return{leftAndTop:t.concat(a),rightAndBottom:o.concat(r),chartArea:Fe(e,"chartArea"),vertical:t.concat(o),horizontal:a.concat(r)}}function He(n,e,t,o){return Math.max(n[t],e[t])+Math.max(n[o],e[o])}function Ne(n,e,t){var o,a,r=t.box,i=n.maxPadding;if(t.size&&(n[t.pos]-=t.size),t.size=t.horizontal?r.height:r.width,n[t.pos]+=t.size,r.getPadding){var l=r.getPadding();i.top=Math.max(i.top,l.top),i.left=Math.max(i.left,l.left),i.bottom=Math.max(i.bottom,l.bottom),i.right=Math.max(i.right,l.right)}if(o=e.outerWidth-He(i,n,"left","right"),a=e.outerHeight-He(i,n,"top","bottom"),o!==n.w||a!==n.h){n.w=o,n.h=a;var f=t.horizontal?[o,n.w]:[a,n.h];return!(f[0]===f[1]||isNaN(f[0])&&isNaN(f[1]))}}function Ee(n){var e=n.maxPadding;function t(t){var o=Math.max(e[t]-n[t],0);return n[t]+=o,o}n.y+=t("top"),n.x+=t("left"),t("right"),t("bottom")}function je(n,e){var t=e.maxPadding;function o(n){var o={left:0,top:0,right:0,bottom:0};return n.forEach((function(n){o[n]=Math.max(e[n],t[n])})),o}return o(n?["left","right"]:["top","bottom"])}function Ge(n,e,t){var o,a,r,i,l,f,p=[];for(o=0,a=n.length;o<a;++o)(i=(r=n[o]).box).update(r.width||e.w,r.height||e.h,je(r.horizontal,e)),Ne(e,t,r)&&(f=!0,p.length&&(l=!0)),i.fullWidth||p.push(r);return l&&Ge(p,e,t)||f}function Ye(n,e,t){var o,a,r,i,l=t.padding,f=e.x,p=e.y;for(o=0,a=n.length;o<a;++o)i=(r=n[o]).box,r.horizontal?(i.left=i.fullWidth?l.left:e.left,i.right=i.fullWidth?t.outerWidth-l.right:e.left+e.w,i.top=p,i.bottom=p+i.height,i.width=i.right-i.left,p=i.bottom):(i.left=f,i.right=f+i.width,i.top=e.top,i.bottom=e.top+e.h,i.height=i.bottom-i.top,f=i.right);e.x=f,e.y=p}J._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var Ve={defaults:{},addBox:function(n,e){n.boxes||(n.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw:function(){e.draw.apply(e,arguments)}}]},n.boxes.push(e)},removeBox:function(n,e){var t=n.boxes?n.boxes.indexOf(e):-1;-1!==t&&n.boxes.splice(t,1)},configure:function(n,e,t){for(var o,a=["fullWidth","position","weight"],r=a.length,i=0;i<r;++i)o=a[i],t.hasOwnProperty(o)&&(e[o]=t[o])},update:function(n,e,t){if(n){var o=n.options.layout||{},a=ln.options.toPadding(o.padding),r=e-a.width,i=t-a.height,l=Ie(n.boxes),f=l.vertical,p=l.horizontal,c=Object.freeze({outerWidth:e,outerHeight:t,padding:a,availableWidth:r,vBoxMaxWidth:r/2/f.length,hBoxMaxHeight:i/2}),d=Re({maxPadding:Re({},a),w:r,h:i,x:a.left,y:a.top},a);Ae(f.concat(p),c),Ge(f,d,c),Ge(p,d,c)&&Ge(f,d,c),Ee(d),Ye(l.leftAndTop,d,c),d.x+=d.w,d.y+=d.h,Ye(l.rightAndBottom,d,c),n.chartArea={left:d.left,top:d.top,right:d.left+d.w,bottom:d.top+d.h},ln.each(l.chartArea,(function(e){var t=e.box;Re(t,n.chartArea),t.update(d.w,d.h)}))}}},qe={acquireContext:function(n){return n&&n.canvas&&(n=n.canvas),n&&n.getContext("2d")||null}},Ue="/*\r\n * DOM element rendering detection\r\n * https://davidwalsh.name/detect-node-insertion\r\n */\r\n@keyframes chartjs-render-animation {\r\n\tfrom { opacity: 0.99; }\r\n\tto { opacity: 1; }\r\n}\r\n\r\n.chartjs-render-monitor {\r\n\tanimation: chartjs-render-animation 0.001s;\r\n}\r\n\r\n/*\r\n * DOM element resizing detection\r\n * https://github.com/marcj/css-element-queries\r\n */\r\n.chartjs-size-monitor,\r\n.chartjs-size-monitor-expand,\r\n.chartjs-size-monitor-shrink {\r\n\tposition: absolute;\r\n\tdirection: ltr;\r\n\tleft: 0;\r\n\ttop: 0;\r\n\tright: 0;\r\n\tbottom: 0;\r\n\toverflow: hidden;\r\n\tpointer-events: none;\r\n\tvisibility: hidden;\r\n\tz-index: -1;\r\n}\r\n\r\n.chartjs-size-monitor-expand > div {\r\n\tposition: absolute;\r\n\twidth: 1000000px;\r\n\theight: 1000000px;\r\n\tleft: 0;\r\n\ttop: 0;\r\n}\r\n\r\n.chartjs-size-monitor-shrink > div {\r\n\tposition: absolute;\r\n\twidth: 200%;\r\n\theight: 200%;\r\n\tleft: 0;\r\n\ttop: 0;\r\n}\r\n",Xe=t(Object.freeze({__proto__:null,default:Ue})),Ze="$chartjs",$e="chartjs-",Ke=$e+"size-monitor",Je=$e+"render-monitor",Qe=$e+"render-animation",nt=["animationstart","webkitAnimationStart"],et={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function tt(n,e){var t=ln.getStyle(n,e),o=t&&t.match(/^(\d+)(\.\d+)?px$/);return o?Number(o[1]):void 0}function ot(n,e){var t=n.style,o=n.getAttribute("height"),a=n.getAttribute("width");if(n[Ze]={initial:{height:o,width:a,style:{display:t.display,height:t.height,width:t.width}}},t.display=t.display||"block",null===a||""===a){var r=tt(n,"width");void 0!==r&&(n.width=r)}if(null===o||""===o)if(""===n.style.height)n.height=n.width/(e.options.aspectRatio||2);else{var i=tt(n,"height");void 0!==r&&(n.height=i)}return n}var at=!!function(){var n=!1;try{var e=Object.defineProperty({},"passive",{get:function(){n=!0}});window.addEventListener("e",null,e)}catch(n){}return n}()&&{passive:!0};function rt(n,e,t){n.addEventListener(e,t,at)}function it(n,e,t){n.removeEventListener(e,t,at)}function lt(n,e,t,o,a){return{type:n,chart:e,native:a||null,x:void 0!==t?t:null,y:void 0!==o?o:null}}function ft(n,e){var t=et[n.type]||n.type,o=ln.getRelativePosition(n,e);return lt(t,e,o.x,o.y,n)}function pt(n,e){var t=!1,o=[];return function(){o=Array.prototype.slice.call(arguments),e=e||this,t||(t=!0,ln.requestAnimFrame.call(window,(function(){t=!1,n.apply(e,o)})))}}function ct(n){var e=document.createElement("div");return e.className=n||"",e}function dt(n){var e=1e6,t=ct(Ke),o=ct(Ke+"-expand"),a=ct(Ke+"-shrink");o.appendChild(ct()),a.appendChild(ct()),t.appendChild(o),t.appendChild(a),t._reset=function(){o.scrollLeft=e,o.scrollTop=e,a.scrollLeft=e,a.scrollTop=e};var r=function(){t._reset(),n()};return rt(o,"scroll",r.bind(o,"expand")),rt(a,"scroll",r.bind(a,"shrink")),t}function st(n,e){var t=n[Ze]||(n[Ze]={}),o=t.renderProxy=function(n){n.animationName===Qe&&e()};ln.each(nt,(function(e){rt(n,e,o)})),t.reflow=!!n.offsetParent,n.classList.add(Je)}function mt(n){var e=n[Ze]||{},t=e.renderProxy;t&&(ln.each(nt,(function(e){it(n,e,t)})),delete e.renderProxy),n.classList.remove(Je)}function gt(n,e,t){var o=n[Ze]||(n[Ze]={}),a=o.resizer=dt(pt((function(){if(o.resizer){var a=t.options.maintainAspectRatio&&n.parentNode,r=a?a.clientWidth:0;e(lt("resize",t)),a&&a.clientWidth<r&&t.canvas&&e(lt("resize",t))}})));st(n,(function(){if(o.resizer){var e=n.parentNode;e&&e!==a.parentNode&&e.insertBefore(a,e.firstChild),a._reset()}}))}function bt(n){var e=n[Ze]||{},t=e.resizer;delete e.resizer,mt(n),t&&t.parentNode&&t.parentNode.removeChild(t)}function ut(n,e){var t=n[Ze]||(n[Ze]={});if(!t.containsStyles){t.containsStyles=!0,e="/* Chart.js */\n"+e;var o=document.createElement("style");o.setAttribute("type","text/css"),o.appendChild(document.createTextNode(e)),n.appendChild(o)}}var _t={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(n){if(!this.disableCSSInjection){var e=n.getRootNode?n.getRootNode():document;ut(e.host?e:document.head,Xe)}},acquireContext:function(n,e){"string"==typeof n?n=document.getElementById(n):n.length&&(n=n[0]),n&&n.canvas&&(n=n.canvas);var t=n&&n.getContext&&n.getContext("2d");return t&&t.canvas===n?(this._ensureLoaded(n),ot(n,e),t):null},releaseContext:function(n){var e=n.canvas;if(e[Ze]){var t=e[Ze].initial;["height","width"].forEach((function(n){var o=t[n];ln.isNullOrUndef(o)?e.removeAttribute(n):e.setAttribute(n,o)})),ln.each(t.style||{},(function(n,t){e.style[t]=n})),e.width=e.width,delete e[Ze]}},addEventListener:function(n,e,t){var o=n.canvas;if("resize"!==e){var a=t[Ze]||(t[Ze]={});rt(o,e,(a.proxies||(a.proxies={}))[n.id+"_"+e]=function(e){t(ft(e,n))})}else gt(o,t,n)},removeEventListener:function(n,e,t){var o=n.canvas;if("resize"!==e){var a=((t[Ze]||{}).proxies||{})[n.id+"_"+e];a&&it(o,e,a)}else bt(o)}};ln.addEvent=rt,ln.removeEvent=it;var ht=_t._enabled?_t:qe,vt=ln.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},ht);J._set("global",{plugins:{}});var xt={_plugins:[],_cacheId:0,register:function(n){var e=this._plugins;[].concat(n).forEach((function(n){-1===e.indexOf(n)&&e.push(n)})),this._cacheId++},unregister:function(n){var e=this._plugins;[].concat(n).forEach((function(n){var t=e.indexOf(n);-1!==t&&e.splice(t,1)})),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(n,e,t){var o,a,r,i,l,f=this.descriptors(n),p=f.length;for(o=0;o<p;++o)if("function"==typeof(l=(r=(a=f[o]).plugin)[e])&&((i=[n].concat(t||[])).push(a.options),!1===l.apply(r,i)))return!1;return!0},descriptors:function(n){var e=n.$plugins||(n.$plugins={});if(e.id===this._cacheId)return e.descriptors;var t=[],o=[],a=n&&n.config||{},r=a.options&&a.options.plugins||{};return this._plugins.concat(a.plugins||[]).forEach((function(n){if(-1===t.indexOf(n)){var e=n.id,a=r[e];!1!==a&&(!0===a&&(a=ln.clone(J.global.plugins[e])),t.push(n),o.push({plugin:n,options:a||{}}))}})),e.descriptors=o,e.id=this._cacheId,o},_invalidate:function(n){delete n.$plugins}},wt={constructors:{},defaults:{},registerScaleType:function(n,e,t){this.constructors[n]=e,this.defaults[n]=ln.clone(t)},getScaleConstructor:function(n){return this.constructors.hasOwnProperty(n)?this.constructors[n]:void 0},getScaleDefaults:function(n){return this.defaults.hasOwnProperty(n)?ln.merge(Object.create(null),[J.scale,this.defaults[n]]):{}},updateScaleDefaults:function(n,e){var t=this;t.defaults.hasOwnProperty(n)&&(t.defaults[n]=ln.extend(t.defaults[n],e))},addScalesToLayout:function(n){ln.each(n.scales,(function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,Ve.addBox(n,e)}))}},yt=ln.valueOrDefault,kt=ln.rtl.getRtlAdapter;J._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:ln.noop,title:function(n,e){var t="",o=e.labels,a=o?o.length:0;if(n.length>0){var r=n[0];r.label?t=r.label:r.xLabel?t=r.xLabel:a>0&&r.index<a&&(t=o[r.index])}return t},afterTitle:ln.noop,beforeBody:ln.noop,beforeLabel:ln.noop,label:function(n,e){var t=e.datasets[n.datasetIndex].label||"";return t&&(t+=": "),ln.isNullOrUndef(n.value)?t+=n.yLabel:t+=n.value,t},labelColor:function(n,e){var t=e.getDatasetMeta(n.datasetIndex).data[n.index]._view;return{borderColor:t.borderColor,backgroundColor:t.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:ln.noop,afterBody:ln.noop,beforeFooter:ln.noop,footer:ln.noop,afterFooter:ln.noop}}});var Ct={average:function(n){if(!n.length)return!1;var e,t,o=0,a=0,r=0;for(e=0,t=n.length;e<t;++e){var i=n[e];if(i&&i.hasValue()){var l=i.tooltipPosition();o+=l.x,a+=l.y,++r}}return{x:o/r,y:a/r}},nearest:function(n,e){var t,o,a,r=e.x,i=e.y,l=Number.POSITIVE_INFINITY;for(t=0,o=n.length;t<o;++t){var f=n[t];if(f&&f.hasValue()){var p=f.getCenterPoint(),c=ln.distanceBetweenPoints(e,p);c<l&&(l=c,a=f)}}if(a){var d=a.tooltipPosition();r=d.x,i=d.y}return{x:r,y:i}}};function Bt(n,e){return e&&(ln.isArray(e)?Array.prototype.push.apply(n,e):n.push(e)),n}function Pt(n){return("string"==typeof n||n instanceof String)&&n.indexOf("\n")>-1?n.split("\n"):n}function St(n){var e=n._xScale,t=n._yScale||n._scale,o=n._index,a=n._datasetIndex,r=n._chart.getDatasetMeta(a).controller,i=r._getIndexScale(),l=r._getValueScale();return{xLabel:e?e.getLabelForIndex(o,a):"",yLabel:t?t.getLabelForIndex(o,a):"",label:i?""+i.getLabelForIndex(o,a):"",value:l?""+l.getLabelForIndex(o,a):"",index:o,datasetIndex:a,x:n._model.x,y:n._model.y}}function Tt(n){var e=J.global;return{xPadding:n.xPadding,yPadding:n.yPadding,xAlign:n.xAlign,yAlign:n.yAlign,rtl:n.rtl,textDirection:n.textDirection,bodyFontColor:n.bodyFontColor,_bodyFontFamily:yt(n.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:yt(n.bodyFontStyle,e.defaultFontStyle),_bodyAlign:n.bodyAlign,bodyFontSize:yt(n.bodyFontSize,e.defaultFontSize),bodySpacing:n.bodySpacing,titleFontColor:n.titleFontColor,_titleFontFamily:yt(n.titleFontFamily,e.defaultFontFamily),_titleFontStyle:yt(n.titleFontStyle,e.defaultFontStyle),titleFontSize:yt(n.titleFontSize,e.defaultFontSize),_titleAlign:n.titleAlign,titleSpacing:n.titleSpacing,titleMarginBottom:n.titleMarginBottom,footerFontColor:n.footerFontColor,_footerFontFamily:yt(n.footerFontFamily,e.defaultFontFamily),_footerFontStyle:yt(n.footerFontStyle,e.defaultFontStyle),footerFontSize:yt(n.footerFontSize,e.defaultFontSize),_footerAlign:n.footerAlign,footerSpacing:n.footerSpacing,footerMarginTop:n.footerMarginTop,caretSize:n.caretSize,cornerRadius:n.cornerRadius,backgroundColor:n.backgroundColor,opacity:0,legendColorBackground:n.multiKeyBackground,displayColors:n.displayColors,borderColor:n.borderColor,borderWidth:n.borderWidth}}function Mt(n,e){var t=n._chart.ctx,o=2*e.yPadding,a=0,r=e.body,i=r.reduce((function(n,e){return n+e.before.length+e.lines.length+e.after.length}),0);i+=e.beforeBody.length+e.afterBody.length;var l=e.title.length,f=e.footer.length,p=e.titleFontSize,c=e.bodyFontSize,d=e.footerFontSize;o+=l*p,o+=l?(l-1)*e.titleSpacing:0,o+=l?e.titleMarginBottom:0,o+=i*c,o+=i?(i-1)*e.bodySpacing:0,o+=f?e.footerMarginTop:0,o+=f*d,o+=f?(f-1)*e.footerSpacing:0;var s=0,m=function(n){a=Math.max(a,t.measureText(n).width+s)};return t.font=ln.fontString(p,e._titleFontStyle,e._titleFontFamily),ln.each(e.title,m),t.font=ln.fontString(c,e._bodyFontStyle,e._bodyFontFamily),ln.each(e.beforeBody.concat(e.afterBody),m),s=e.displayColors?c+2:0,ln.each(r,(function(n){ln.each(n.before,m),ln.each(n.lines,m),ln.each(n.after,m)})),s=0,t.font=ln.fontString(d,e._footerFontStyle,e._footerFontFamily),ln.each(e.footer,m),{width:a+=2*e.xPadding,height:o}}function Lt(n,e){var t,o,a,r,i,l=n._model,f=n._chart,p=n._chart.chartArea,c="center",d="center";l.y<e.height?d="top":l.y>f.height-e.height&&(d="bottom");var s=(p.left+p.right)/2,m=(p.top+p.bottom)/2;"center"===d?(t=function(n){return n<=s},o=function(n){return n>s}):(t=function(n){return n<=e.width/2},o=function(n){return n>=f.width-e.width/2}),a=function(n){return n+e.width+l.caretSize+l.caretPadding>f.width},r=function(n){return n-e.width-l.caretSize-l.caretPadding<0},i=function(n){return n<=m?"top":"bottom"},t(l.x)?(c="left",a(l.x)&&(c="center",d=i(l.y))):o(l.x)&&(c="right",r(l.x)&&(c="center",d=i(l.y)));var g=n._options;return{xAlign:g.xAlign?g.xAlign:c,yAlign:g.yAlign?g.yAlign:d}}function zt(n,e,t,o){var a=n.x,r=n.y,i=n.caretSize,l=n.caretPadding,f=n.cornerRadius,p=t.xAlign,c=t.yAlign,d=i+l,s=f+l;return"right"===p?a-=e.width:"center"===p&&((a-=e.width/2)+e.width>o.width&&(a=o.width-e.width),a<0&&(a=0)),"top"===c?r+=d:r-="bottom"===c?e.height+d:e.height/2,"center"===c?"left"===p?a+=d:"right"===p&&(a-=d):"left"===p?a-=s:"right"===p&&(a+=s),{x:a,y:r}}function Wt(n,e){return"center"===e?n.x+n.width/2:"right"===e?n.x+n.width-n.xPadding:n.x+n.xPadding}function Rt(n){return Bt([],Pt(n))}var Ft=bn.extend({initialize:function(){this._model=Tt(this._options),this._lastActive=[]},getTitle:function(){var n=this,e=n._options.callbacks,t=e.beforeTitle.apply(n,arguments),o=e.title.apply(n,arguments),a=e.afterTitle.apply(n,arguments),r=[];return r=Bt(r,Pt(t)),r=Bt(r,Pt(o)),r=Bt(r,Pt(a))},getBeforeBody:function(){return Rt(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(n,e){var t=this,o=t._options.callbacks,a=[];return ln.each(n,(function(n){var r={before:[],lines:[],after:[]};Bt(r.before,Pt(o.beforeLabel.call(t,n,e))),Bt(r.lines,o.label.call(t,n,e)),Bt(r.after,Pt(o.afterLabel.call(t,n,e))),a.push(r)})),a},getAfterBody:function(){return Rt(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var n=this,e=n._options.callbacks,t=e.beforeFooter.apply(n,arguments),o=e.footer.apply(n,arguments),a=e.afterFooter.apply(n,arguments),r=[];return r=Bt(r,Pt(t)),r=Bt(r,Pt(o)),r=Bt(r,Pt(a))},update:function(n){var e,t,o=this,a=o._options,r=o._model,i=o._model=Tt(a),l=o._active,f=o._data,p={xAlign:r.xAlign,yAlign:r.yAlign},c={x:r.x,y:r.y},d={width:r.width,height:r.height},s={x:r.caretX,y:r.caretY};if(l.length){i.opacity=1;var m=[],g=[];s=Ct[a.position].call(o,l,o._eventPosition);var b=[];for(e=0,t=l.length;e<t;++e)b.push(St(l[e]));a.filter&&(b=b.filter((function(n){return a.filter(n,f)}))),a.itemSort&&(b=b.sort((function(n,e){return a.itemSort(n,e,f)}))),ln.each(b,(function(n){m.push(a.callbacks.labelColor.call(o,n,o._chart)),g.push(a.callbacks.labelTextColor.call(o,n,o._chart))})),i.title=o.getTitle(b,f),i.beforeBody=o.getBeforeBody(b,f),i.body=o.getBody(b,f),i.afterBody=o.getAfterBody(b,f),i.footer=o.getFooter(b,f),i.x=s.x,i.y=s.y,i.caretPadding=a.caretPadding,i.labelColors=m,i.labelTextColors=g,i.dataPoints=b,c=zt(i,d=Mt(this,i),p=Lt(this,d),o._chart)}else i.opacity=0;return i.xAlign=p.xAlign,i.yAlign=p.yAlign,i.x=c.x,i.y=c.y,i.width=d.width,i.height=d.height,i.caretX=s.x,i.caretY=s.y,o._model=i,n&&a.custom&&a.custom.call(o,i),o},drawCaret:function(n,e){var t=this._chart.ctx,o=this._view,a=this.getCaretPosition(n,e,o);t.lineTo(a.x1,a.y1),t.lineTo(a.x2,a.y2),t.lineTo(a.x3,a.y3)},getCaretPosition:function(n,e,t){var o,a,r,i,l,f,p=t.caretSize,c=t.cornerRadius,d=t.xAlign,s=t.yAlign,m=n.x,g=n.y,b=e.width,u=e.height;if("center"===s)l=g+u/2,"left"===d?(a=(o=m)-p,r=o,i=l+p,f=l-p):(a=(o=m+b)+p,r=o,i=l-p,f=l+p);else if("left"===d?(o=(a=m+c+p)-p,r=a+p):"right"===d?(o=(a=m+b-c-p)-p,r=a+p):(o=(a=t.caretX)-p,r=a+p),"top"===s)l=(i=g)-p,f=i;else{l=(i=g+u)+p,f=i;var _=r;r=o,o=_}return{x1:o,x2:a,x3:r,y1:i,y2:l,y3:f}},drawTitle:function(n,e,t){var o,a,r,i=e.title,l=i.length;if(l){var f=kt(e.rtl,e.x,e.width);for(n.x=Wt(e,e._titleAlign),t.textAlign=f.textAlign(e._titleAlign),t.textBaseline="middle",o=e.titleFontSize,a=e.titleSpacing,t.fillStyle=e.titleFontColor,t.font=ln.fontString(o,e._titleFontStyle,e._titleFontFamily),r=0;r<l;++r)t.fillText(i[r],f.x(n.x),n.y+o/2),n.y+=o+a,r+1===l&&(n.y+=e.titleMarginBottom-a)}},drawBody:function(n,e,t){var o,a,r,i,l,f,p,c,d=e.bodyFontSize,s=e.bodySpacing,m=e._bodyAlign,g=e.body,b=e.displayColors,u=0,_=b?Wt(e,"left"):0,h=kt(e.rtl,e.x,e.width),v=function(e){t.fillText(e,h.x(n.x+u),n.y+d/2),n.y+=d+s},x=h.textAlign(m);for(t.textAlign=m,t.textBaseline="middle",t.font=ln.fontString(d,e._bodyFontStyle,e._bodyFontFamily),n.x=Wt(e,x),t.fillStyle=e.bodyFontColor,ln.each(e.beforeBody,v),u=b&&"right"!==x?"center"===m?d/2+1:d+2:0,l=0,p=g.length;l<p;++l){for(o=g[l],a=e.labelTextColors[l],r=e.labelColors[l],t.fillStyle=a,ln.each(o.before,v),f=0,c=(i=o.lines).length;f<c;++f){if(b){var w=h.x(_);t.fillStyle=e.legendColorBackground,t.fillRect(h.leftForLtr(w,d),n.y,d,d),t.lineWidth=1,t.strokeStyle=r.borderColor,t.strokeRect(h.leftForLtr(w,d),n.y,d,d),t.fillStyle=r.backgroundColor,t.fillRect(h.leftForLtr(h.xPlus(w,1),d-2),n.y+1,d-2,d-2),t.fillStyle=a}v(i[f])}ln.each(o.after,v)}u=0,ln.each(e.afterBody,v),n.y-=s},drawFooter:function(n,e,t){var o,a,r=e.footer,i=r.length;if(i){var l=kt(e.rtl,e.x,e.width);for(n.x=Wt(e,e._footerAlign),n.y+=e.footerMarginTop,t.textAlign=l.textAlign(e._footerAlign),t.textBaseline="middle",o=e.footerFontSize,t.fillStyle=e.footerFontColor,t.font=ln.fontString(o,e._footerFontStyle,e._footerFontFamily),a=0;a<i;++a)t.fillText(r[a],l.x(n.x),n.y+o/2),n.y+=o+e.footerSpacing}},drawBackground:function(n,e,t,o){t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor,t.lineWidth=e.borderWidth;var a=e.xAlign,r=e.yAlign,i=n.x,l=n.y,f=o.width,p=o.height,c=e.cornerRadius;t.beginPath(),t.moveTo(i+c,l),"top"===r&&this.drawCaret(n,o),t.lineTo(i+f-c,l),t.quadraticCurveTo(i+f,l,i+f,l+c),"center"===r&&"right"===a&&this.drawCaret(n,o),t.lineTo(i+f,l+p-c),t.quadraticCurveTo(i+f,l+p,i+f-c,l+p),"bottom"===r&&this.drawCaret(n,o),t.lineTo(i+c,l+p),t.quadraticCurveTo(i,l+p,i,l+p-c),"center"===r&&"left"===a&&this.drawCaret(n,o),t.lineTo(i,l+c),t.quadraticCurveTo(i,l,i+c,l),t.closePath(),t.fill(),e.borderWidth>0&&t.stroke()},draw:function(){var n=this._chart.ctx,e=this._view;if(0!==e.opacity){var t={width:e.width,height:e.height},o={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,r=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&r&&(n.save(),n.globalAlpha=a,this.drawBackground(o,e,n,t),o.y+=e.yPadding,ln.rtl.overrideTextDirection(n,e.textDirection),this.drawTitle(o,e,n),this.drawBody(o,e,n),this.drawFooter(o,e,n),ln.rtl.restoreTextDirection(n,e.textDirection),n.restore())}},handleEvent:function(n){var e=this,t=e._options,o=!1;return e._lastActive=e._lastActive||[],"mouseout"===n.type?e._active=[]:(e._active=e._chart.getElementsAtEventForMode(n,t.mode,t),t.reverse&&e._active.reverse()),(o=!ln.arrayEquals(e._active,e._lastActive))&&(e._lastActive=e._active,(t.enabled||t.custom)&&(e._eventPosition={x:n.x,y:n.y},e.update(!0),e.pivot())),o}}),Dt=Ct,Ot=Ft;Ot.positioners=Dt;var At=ln.valueOrDefault;function It(){return ln.merge(Object.create(null),[].slice.call(arguments),{merger:function(n,e,t,o){if("xAxes"===n||"yAxes"===n){var a,r,i,l=t[n].length;for(e[n]||(e[n]=[]),a=0;a<l;++a)i=t[n][a],r=At(i.type,"xAxes"===n?"category":"linear"),a>=e[n].length&&e[n].push({}),!e[n][a].type||i.type&&i.type!==e[n][a].type?ln.merge(e[n][a],[wt.getScaleDefaults(r),i]):ln.merge(e[n][a],i)}else ln._merger(n,e,t,o)}})}function Ht(){return ln.merge(Object.create(null),[].slice.call(arguments),{merger:function(n,e,t,o){var a=e[n]||Object.create(null),r=t[n];"scales"===n?e[n]=It(a,r):"scale"===n?e[n]=ln.merge(a,[wt.getScaleDefaults(r.type),r]):ln._merger(n,e,t,o)}})}function Nt(n){var e=(n=n||Object.create(null)).data=n.data||{};return e.datasets=e.datasets||[],e.labels=e.labels||[],n.options=Ht(J.global,J[n.type],n.options||{}),n}function Et(n){var e=n.options;ln.each(n.scales,(function(e){Ve.removeBox(n,e)})),e=Ht(J.global,J[n.config.type],e),n.options=n.config.options=e,n.ensureScalesHaveIDs(),n.buildOrUpdateScales(),n.tooltip._options=e.tooltips,n.tooltip.initialize()}function jt(n,e,t){var o,a=function(n){return n.id===o};do{o=e+t++}while(ln.findIndex(n,a)>=0);return o}function Gt(n){return"top"===n||"bottom"===n}function Yt(n,e){return function(t,o){return t[n]===o[n]?t[e]-o[e]:t[n]-o[n]}}J._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var Vt=function(n,e){return this.construct(n,e),this};ln.extend(Vt.prototype,{construct:function(n,e){var t=this;e=Nt(e);var o=vt.acquireContext(n,e),a=o&&o.canvas,r=a&&a.height,i=a&&a.width;t.id=ln.uid(),t.ctx=o,t.canvas=a,t.config=e,t.width=i,t.height=r,t.aspectRatio=r?i/r:null,t.options=e.options,t._bufferedRender=!1,t._layers=[],t.chart=t,t.controller=t,Vt.instances[t.id]=t,Object.defineProperty(t,"data",{get:function(){return t.config.data},set:function(n){t.config.data=n}}),o&&a?(t.initialize(),t.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var n=this;return xt.notify(n,"beforeInit"),ln.retinaScale(n,n.options.devicePixelRatio),n.bindEvents(),n.options.responsive&&n.resize(!0),n.initToolTip(),xt.notify(n,"afterInit"),n},clear:function(){return ln.canvas.clear(this),this},stop:function(){return hn.cancelAnimation(this),this},resize:function(n){var e=this,t=e.options,o=e.canvas,a=t.maintainAspectRatio&&e.aspectRatio||null,r=Math.max(0,Math.floor(ln.getMaximumWidth(o))),i=Math.max(0,Math.floor(a?r/a:ln.getMaximumHeight(o)));if((e.width!==r||e.height!==i)&&(o.width=e.width=r,o.height=e.height=i,o.style.width=r+"px",o.style.height=i+"px",ln.retinaScale(e,t.devicePixelRatio),!n)){var l={width:r,height:i};xt.notify(e,"resize",[l]),t.onResize&&t.onResize(e,l),e.stop(),e.update({duration:t.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var n=this.options,e=n.scales||{},t=n.scale;ln.each(e.xAxes,(function(n,t){n.id||(n.id=jt(e.xAxes,"x-axis-",t))})),ln.each(e.yAxes,(function(n,t){n.id||(n.id=jt(e.yAxes,"y-axis-",t))})),t&&(t.id=t.id||"scale")},buildOrUpdateScales:function(){var n=this,e=n.options,t=n.scales||{},o=[],a=Object.keys(t).reduce((function(n,e){return n[e]=!1,n}),{});e.scales&&(o=o.concat((e.scales.xAxes||[]).map((function(n){return{options:n,dtype:"category",dposition:"bottom"}})),(e.scales.yAxes||[]).map((function(n){return{options:n,dtype:"linear",dposition:"left"}})))),e.scale&&o.push({options:e.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),ln.each(o,(function(e){var o=e.options,r=o.id,i=At(o.type,e.dtype);Gt(o.position)!==Gt(e.dposition)&&(o.position=e.dposition),a[r]=!0;var l=null;if(r in t&&t[r].type===i)(l=t[r]).options=o,l.ctx=n.ctx,l.chart=n;else{var f=wt.getScaleConstructor(i);if(!f)return;l=new f({id:r,type:i,options:o,ctx:n.ctx,chart:n}),t[l.id]=l}l.mergeTicksOptions(),e.isDefault&&(n.scale=l)})),ln.each(a,(function(n,e){n||delete t[e]})),n.scales=t,wt.addScalesToLayout(this)},buildOrUpdateControllers:function(){var n,e,t=this,o=[],a=t.data.datasets;for(n=0,e=a.length;n<e;n++){var r=a[n],i=t.getDatasetMeta(n),l=r.type||t.config.type;if(i.type&&i.type!==l&&(t.destroyDatasetMeta(n),i=t.getDatasetMeta(n)),i.type=l,i.order=r.order||0,i.index=n,i.controller)i.controller.updateIndex(n),i.controller.linkScales();else{var f=Be[i.type];if(void 0===f)throw new Error('"'+i.type+'" is not a chart type.');i.controller=new f(t,n),o.push(i.controller)}}return o},resetElements:function(){var n=this;ln.each(n.data.datasets,(function(e,t){n.getDatasetMeta(t).controller.reset()}),n)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(n){var e,t,o=this;if(n&&"object"==typeof n||(n={duration:n,lazy:arguments[1]}),Et(o),xt._invalidate(o),!1!==xt.notify(o,"beforeUpdate")){o.tooltip._data=o.data;var a=o.buildOrUpdateControllers();for(e=0,t=o.data.datasets.length;e<t;e++)o.getDatasetMeta(e).controller.buildOrUpdateElements();o.updateLayout(),o.options.animation&&o.options.animation.duration&&ln.each(a,(function(n){n.reset()})),o.updateDatasets(),o.tooltip.initialize(),o.lastActive=[],xt.notify(o,"afterUpdate"),o._layers.sort(Yt("z","_idx")),o._bufferedRender?o._bufferedRequest={duration:n.duration,easing:n.easing,lazy:n.lazy}:o.render(n)}},updateLayout:function(){var n=this;!1!==xt.notify(n,"beforeLayout")&&(Ve.update(this,this.width,this.height),n._layers=[],ln.each(n.boxes,(function(e){e._configure&&e._configure(),n._layers.push.apply(n._layers,e._layers())}),n),n._layers.forEach((function(n,e){n._idx=e})),xt.notify(n,"afterScaleUpdate"),xt.notify(n,"afterLayout"))},updateDatasets:function(){var n=this;if(!1!==xt.notify(n,"beforeDatasetsUpdate")){for(var e=0,t=n.data.datasets.length;e<t;++e)n.updateDataset(e);xt.notify(n,"afterDatasetsUpdate")}},updateDataset:function(n){var e=this,t=e.getDatasetMeta(n),o={meta:t,index:n};!1!==xt.notify(e,"beforeDatasetUpdate",[o])&&(t.controller._update(),xt.notify(e,"afterDatasetUpdate",[o]))},render:function(n){var e=this;n&&"object"==typeof n||(n={duration:n,lazy:arguments[1]});var t=e.options.animation,o=At(n.duration,t&&t.duration),a=n.lazy;if(!1!==xt.notify(e,"beforeRender")){var r=function(n){xt.notify(e,"afterRender"),ln.callback(t&&t.onComplete,[n],e)};if(t&&o){var i=new _n({numSteps:o/16.66,easing:n.easing||t.easing,render:function(n,e){var t=ln.easing.effects[e.easing],o=e.currentStep,a=o/e.numSteps;n.draw(t(a),a,o)},onAnimationProgress:t.onProgress,onAnimationComplete:r});hn.addAnimation(e,i,o,a)}else e.draw(),r(new _n({numSteps:0,chart:e}));return e}},draw:function(n){var e,t,o=this;if(o.clear(),ln.isNullOrUndef(n)&&(n=1),o.transition(n),!(o.width<=0||o.height<=0)&&!1!==xt.notify(o,"beforeDraw",[n])){for(t=o._layers,e=0;e<t.length&&t[e].z<=0;++e)t[e].draw(o.chartArea);for(o.drawDatasets(n);e<t.length;++e)t[e].draw(o.chartArea);o._drawTooltip(n),xt.notify(o,"afterDraw",[n])}},transition:function(n){for(var e=this,t=0,o=(e.data.datasets||[]).length;t<o;++t)e.isDatasetVisible(t)&&e.getDatasetMeta(t).controller.transition(n);e.tooltip.transition(n)},_getSortedDatasetMetas:function(n){var e,t,o=this,a=[];for(e=0,t=(o.data.datasets||[]).length;e<t;++e)n&&!o.isDatasetVisible(e)||a.push(o.getDatasetMeta(e));return a.sort(Yt("order","index")),a},_getSortedVisibleDatasetMetas:function(){return this._getSortedDatasetMetas(!0)},drawDatasets:function(n){var e,t,o=this;if(!1!==xt.notify(o,"beforeDatasetsDraw",[n])){for(t=(e=o._getSortedVisibleDatasetMetas()).length-1;t>=0;--t)o.drawDataset(e[t],n);xt.notify(o,"afterDatasetsDraw",[n])}},drawDataset:function(n,e){var t=this,o={meta:n,index:n.index,easingValue:e};!1!==xt.notify(t,"beforeDatasetDraw",[o])&&(n.controller.draw(e),xt.notify(t,"afterDatasetDraw",[o]))},_drawTooltip:function(n){var e=this,t=e.tooltip,o={tooltip:t,easingValue:n};!1!==xt.notify(e,"beforeTooltipDraw",[o])&&(t.draw(),xt.notify(e,"afterTooltipDraw",[o]))},getElementAtEvent:function(n){return We.modes.single(this,n)},getElementsAtEvent:function(n){return We.modes.label(this,n,{intersect:!0})},getElementsAtXAxis:function(n){return We.modes["x-axis"](this,n,{intersect:!0})},getElementsAtEventForMode:function(n,e,t){var o=We.modes[e];return"function"==typeof o?o(this,n,t):[]},getDatasetAtEvent:function(n){return We.modes.dataset(this,n,{intersect:!0})},getDatasetMeta:function(n){var e=this,t=e.data.datasets[n];t._meta||(t._meta={});var o=t._meta[e.id];return o||(o=t._meta[e.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:t.order||0,index:n}),o},getVisibleDatasetCount:function(){for(var n=0,e=0,t=this.data.datasets.length;e<t;++e)this.isDatasetVisible(e)&&n++;return n},isDatasetVisible:function(n){var e=this.getDatasetMeta(n);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[n].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(n){var e=this.id,t=this.data.datasets[n],o=t._meta&&t._meta[e];o&&(o.controller.destroy(),delete t._meta[e])},destroy:function(){var n,e,t=this,o=t.canvas;for(t.stop(),n=0,e=t.data.datasets.length;n<e;++n)t.destroyDatasetMeta(n);o&&(t.unbindEvents(),ln.canvas.clear(t),vt.releaseContext(t.ctx),t.canvas=null,t.ctx=null),xt.notify(t,"destroy"),delete Vt.instances[t.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var n=this;n.tooltip=new Ot({_chart:n,_chartInstance:n,_data:n.data,_options:n.options.tooltips},n)},bindEvents:function(){var n=this,e=n._listeners={},t=function(){n.eventHandler.apply(n,arguments)};ln.each(n.options.events,(function(o){vt.addEventListener(n,o,t),e[o]=t})),n.options.responsive&&(t=function(){n.resize()},vt.addEventListener(n,"resize",t),e.resize=t)},unbindEvents:function(){var n=this,e=n._listeners;e&&(delete n._listeners,ln.each(e,(function(e,t){vt.removeEventListener(n,t,e)})))},updateHoverStyle:function(n,e,t){var o,a,r,i=t?"set":"remove";for(a=0,r=n.length;a<r;++a)(o=n[a])&&this.getDatasetMeta(o._datasetIndex).controller[i+"HoverStyle"](o);"dataset"===e&&this.getDatasetMeta(n[0]._datasetIndex).controller["_"+i+"DatasetHoverStyle"]()},eventHandler:function(n){var e=this,t=e.tooltip;if(!1!==xt.notify(e,"beforeEvent",[n])){e._bufferedRender=!0,e._bufferedRequest=null;var o=e.handleEvent(n);t&&(o=t._start?t.handleEvent(n):o|t.handleEvent(n)),xt.notify(e,"afterEvent",[n]);var a=e._bufferedRequest;return a?e.render(a):o&&!e.animating&&(e.stop(),e.render({duration:e.options.hover.animationDuration,lazy:!0})),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(n){var e=this,t=e.options||{},o=t.hover,a=!1;return e.lastActive=e.lastActive||[],"mouseout"===n.type?e.active=[]:e.active=e.getElementsAtEventForMode(n,o.mode,o),ln.callback(t.onHover||t.hover.onHover,[n.native,e.active],e),"mouseup"!==n.type&&"click"!==n.type||t.onClick&&t.onClick.call(e,n.native,e.active),e.lastActive.length&&e.updateHoverStyle(e.lastActive,o.mode,!1),e.active.length&&o.mode&&e.updateHoverStyle(e.active,o.mode,!0),a=!ln.arrayEquals(e.active,e.lastActive),e.lastActive=e.active,a}}),Vt.instances={};var qt=Vt;Vt.Controller=Vt,Vt.types={},ln.configMerge=Ht,ln.scaleMerge=It;var Ut=function(){function n(n,e,t){var o;return"string"==typeof n?(o=parseInt(n,10),-1!==n.indexOf("%")&&(o=o/100*e.parentNode[t])):o=n,o}function e(n){return null!=n&&"none"!==n}function t(t,o,a){var r=document.defaultView,i=ln._getParentNode(t),l=r.getComputedStyle(t)[o],f=r.getComputedStyle(i)[o],p=e(l),c=e(f),d=Number.POSITIVE_INFINITY;return p||c?Math.min(p?n(l,t,a):d,c?n(f,i,a):d):"none"}ln.where=function(n,e){if(ln.isArray(n)&&Array.prototype.filter)return n.filter(e);var t=[];return ln.each(n,(function(n){e(n)&&t.push(n)})),t},ln.findIndex=Array.prototype.findIndex?function(n,e,t){return n.findIndex(e,t)}:function(n,e,t){t=void 0===t?n:t;for(var o=0,a=n.length;o<a;++o)if(e.call(t,n[o],o,n))return o;return-1},ln.findNextWhere=function(n,e,t){ln.isNullOrUndef(t)&&(t=-1);for(var o=t+1;o<n.length;o++){var a=n[o];if(e(a))return a}},ln.findPreviousWhere=function(n,e,t){ln.isNullOrUndef(t)&&(t=n.length);for(var o=t-1;o>=0;o--){var a=n[o];if(e(a))return a}},ln.isNumber=function(n){return!isNaN(parseFloat(n))&&isFinite(n)},ln.almostEquals=function(n,e,t){return Math.abs(n-e)<t},ln.almostWhole=function(n,e){var t=Math.round(n);return t-e<=n&&t+e>=n},ln.max=function(n){return n.reduce((function(n,e){return isNaN(e)?n:Math.max(n,e)}),Number.NEGATIVE_INFINITY)},ln.min=function(n){return n.reduce((function(n,e){return isNaN(e)?n:Math.min(n,e)}),Number.POSITIVE_INFINITY)},ln.sign=Math.sign?function(n){return Math.sign(n)}:function(n){return 0==(n=+n)||isNaN(n)?n:n>0?1:-1},ln.toRadians=function(n){return n*(Math.PI/180)},ln.toDegrees=function(n){return n*(180/Math.PI)},ln._decimalPlaces=function(n){if(ln.isFinite(n)){for(var e=1,t=0;Math.round(n*e)/e!==n;)e*=10,t++;return t}},ln.getAngleFromPoint=function(n,e){var t=e.x-n.x,o=e.y-n.y,a=Math.sqrt(t*t+o*o),r=Math.atan2(o,t);return r<-.5*Math.PI&&(r+=2*Math.PI),{angle:r,distance:a}},ln.distanceBetweenPoints=function(n,e){return Math.sqrt(Math.pow(e.x-n.x,2)+Math.pow(e.y-n.y,2))},ln.aliasPixel=function(n){return n%2==0?0:.5},ln._alignPixel=function(n,e,t){var o=n.currentDevicePixelRatio,a=t/2;return Math.round((e-a)*o)/o+a},ln.splineCurve=function(n,e,t,o){var a=n.skip?e:n,r=e,i=t.skip?e:t,l=Math.sqrt(Math.pow(r.x-a.x,2)+Math.pow(r.y-a.y,2)),f=Math.sqrt(Math.pow(i.x-r.x,2)+Math.pow(i.y-r.y,2)),p=l/(l+f),c=f/(l+f),d=o*(p=isNaN(p)?0:p),s=o*(c=isNaN(c)?0:c);return{previous:{x:r.x-d*(i.x-a.x),y:r.y-d*(i.y-a.y)},next:{x:r.x+s*(i.x-a.x),y:r.y+s*(i.y-a.y)}}},ln.EPSILON=Number.EPSILON||1e-14,ln.splineCurveMonotone=function(n){var e,t,o,a,r,i,l,f,p,c=(n||[]).map((function(n){return{model:n._model,deltaK:0,mK:0}})),d=c.length;for(e=0;e<d;++e)if(!(o=c[e]).model.skip){if(t=e>0?c[e-1]:null,(a=e<d-1?c[e+1]:null)&&!a.model.skip){var s=a.model.x-o.model.x;o.deltaK=0!==s?(a.model.y-o.model.y)/s:0}!t||t.model.skip?o.mK=o.deltaK:!a||a.model.skip?o.mK=t.deltaK:this.sign(t.deltaK)!==this.sign(o.deltaK)?o.mK=0:o.mK=(t.deltaK+o.deltaK)/2}for(e=0;e<d-1;++e)o=c[e],a=c[e+1],o.model.skip||a.model.skip||(ln.almostEquals(o.deltaK,0,this.EPSILON)?o.mK=a.mK=0:(r=o.mK/o.deltaK,i=a.mK/o.deltaK,(f=Math.pow(r,2)+Math.pow(i,2))<=9||(l=3/Math.sqrt(f),o.mK=r*l*o.deltaK,a.mK=i*l*o.deltaK)));for(e=0;e<d;++e)(o=c[e]).model.skip||(t=e>0?c[e-1]:null,a=e<d-1?c[e+1]:null,t&&!t.model.skip&&(p=(o.model.x-t.model.x)/3,o.model.controlPointPreviousX=o.model.x-p,o.model.controlPointPreviousY=o.model.y-p*o.mK),a&&!a.model.skip&&(p=(a.model.x-o.model.x)/3,o.model.controlPointNextX=o.model.x+p,o.model.controlPointNextY=o.model.y+p*o.mK))},ln.nextItem=function(n,e,t){return t?e>=n.length-1?n[0]:n[e+1]:e>=n.length-1?n[n.length-1]:n[e+1]},ln.previousItem=function(n,e,t){return t?e<=0?n[n.length-1]:n[e-1]:e<=0?n[0]:n[e-1]},ln.niceNum=function(n,e){var t=Math.floor(ln.log10(n)),o=n/Math.pow(10,t);return(e?o<1.5?1:o<3?2:o<7?5:10:o<=1?1:o<=2?2:o<=5?5:10)*Math.pow(10,t)},ln.requestAnimFrame="undefined"==typeof window?function(n){n()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(n){return window.setTimeout(n,1e3/60)},ln.getRelativePosition=function(n,e){var t,o,a=n.originalEvent||n,r=n.target||n.srcElement,i=r.getBoundingClientRect(),l=a.touches;l&&l.length>0?(t=l[0].clientX,o=l[0].clientY):(t=a.clientX,o=a.clientY);var f=parseFloat(ln.getStyle(r,"padding-left")),p=parseFloat(ln.getStyle(r,"padding-top")),c=parseFloat(ln.getStyle(r,"padding-right")),d=parseFloat(ln.getStyle(r,"padding-bottom")),s=i.right-i.left-f-c,m=i.bottom-i.top-p-d;return{x:t=Math.round((t-i.left-f)/s*r.width/e.currentDevicePixelRatio),y:o=Math.round((o-i.top-p)/m*r.height/e.currentDevicePixelRatio)}},ln.getConstraintWidth=function(n){return t(n,"max-width","clientWidth")},ln.getConstraintHeight=function(n){return t(n,"max-height","clientHeight")},ln._calculatePadding=function(n,e,t){return(e=ln.getStyle(n,e)).indexOf("%")>-1?t*parseInt(e,10)/100:parseInt(e,10)},ln._getParentNode=function(n){var e=n.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e},ln.getMaximumWidth=function(n){var e=ln._getParentNode(n);if(!e)return n.clientWidth;var t=e.clientWidth,o=t-ln._calculatePadding(e,"padding-left",t)-ln._calculatePadding(e,"padding-right",t),a=ln.getConstraintWidth(n);return isNaN(a)?o:Math.min(o,a)},ln.getMaximumHeight=function(n){var e=ln._getParentNode(n);if(!e)return n.clientHeight;var t=e.clientHeight,o=t-ln._calculatePadding(e,"padding-top",t)-ln._calculatePadding(e,"padding-bottom",t),a=ln.getConstraintHeight(n);return isNaN(a)?o:Math.min(o,a)},ln.getStyle=function(n,e){return n.currentStyle?n.currentStyle[e]:document.defaultView.getComputedStyle(n,null).getPropertyValue(e)},ln.retinaScale=function(n,e){var t=n.currentDevicePixelRatio=e||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==t){var o=n.canvas,a=n.height,r=n.width;o.height=a*t,o.width=r*t,n.ctx.scale(t,t),o.style.height||o.style.width||(o.style.height=a+"px",o.style.width=r+"px")}},ln.fontString=function(n,e,t){return e+" "+n+"px "+t},ln.longestText=function(n,e,t,o){var a=(o=o||{}).data=o.data||{},r=o.garbageCollect=o.garbageCollect||[];o.font!==e&&(a=o.data={},r=o.garbageCollect=[],o.font=e),n.font=e;var i,l,f,p,c,d=0,s=t.length;for(i=0;i<s;i++)if(null!=(p=t[i])&&!0!==ln.isArray(p))d=ln.measureText(n,a,r,d,p);else if(ln.isArray(p))for(l=0,f=p.length;l<f;l++)null==(c=p[l])||ln.isArray(c)||(d=ln.measureText(n,a,r,d,c));var m=r.length/2;if(m>t.length){for(i=0;i<m;i++)delete a[r[i]];r.splice(0,m)}return d},ln.measureText=function(n,e,t,o,a){var r=e[a];return r||(r=e[a]=n.measureText(a).width,t.push(a)),r>o&&(o=r),o},ln.numberOfLabelLines=function(n){var e=1;return ln.each(n,(function(n){ln.isArray(n)&&n.length>e&&(e=n.length)})),e},ln.color=O?function(n){return n instanceof CanvasGradient&&(n=J.global.defaultColor),O(n)}:function(n){return console.error("Color.js not found!"),n},ln.getHoverColor=function(n){return n instanceof CanvasPattern||n instanceof CanvasGradient?n:ln.color(n).saturate(.5).darken(.1).rgbString()}};function Xt(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function Zt(n){this.options=n||{}}ln.extend(Zt.prototype,{formats:Xt,parse:Xt,format:Xt,add:Xt,diff:Xt,startOf:Xt,endOf:Xt,_create:function(n){return n}}),Zt.override=function(n){ln.extend(Zt.prototype,n)};var $t={_date:Zt},Kt={formatters:{values:function(n){return ln.isArray(n)?n:""+n},linear:function(n,e,t){var o=t.length>3?t[2]-t[1]:t[1]-t[0];Math.abs(o)>1&&n!==Math.floor(n)&&(o=n-Math.floor(n));var a=ln.log10(Math.abs(o)),r="";if(0!==n)if(Math.max(Math.abs(t[0]),Math.abs(t[t.length-1]))<1e-4){var i=ln.log10(Math.abs(n)),l=Math.floor(i)-Math.floor(a);l=Math.max(Math.min(l,20),0),r=n.toExponential(l)}else{var f=-1*Math.floor(a);f=Math.max(Math.min(f,20),0),r=n.toFixed(f)}else r="0";return r},logarithmic:function(n,e,t){var o=n/Math.pow(10,Math.floor(ln.log10(n)));return 0===n?"0":1===o||2===o||5===o||0===e||e===t.length-1?n.toExponential():""}}},Jt=ln.isArray,Qt=ln.isNullOrUndef,no=ln.valueOrDefault,eo=ln.valueAtIndexOrDefault;function to(n,e){for(var t=[],o=n.length/e,a=0,r=n.length;a<r;a+=o)t.push(n[Math.floor(a)]);return t}function oo(n,e,t){var o,a=n.getTicks().length,r=Math.min(e,a-1),i=n.getPixelForTick(r),l=n._startPixel,f=n._endPixel,p=1e-6;if(!(t&&(o=1===a?Math.max(i-l,f-i):0===e?(n.getPixelForTick(1)-i)/2:(i-n.getPixelForTick(r-1))/2,(i+=r<e?o:-o)<l-p||i>f+p)))return i}function ao(n,e){ln.each(n,(function(n){var t,o=n.gc,a=o.length/2;if(a>e){for(t=0;t<a;++t)delete n.data[o[t]];o.splice(0,a)}}))}function ro(n,e,t,o){var a,r,i,l,f,p,c,d,s,m,g,b,u,_=t.length,h=[],v=[],x=[],w=0,y=0;for(a=0;a<_;++a){if(l=t[a].label,f=t[a].major?e.major:e.minor,n.font=p=f.string,c=o[p]=o[p]||{data:{},gc:[]},d=f.lineHeight,s=m=0,Qt(l)||Jt(l)){if(Jt(l))for(r=0,i=l.length;r<i;++r)g=l[r],Qt(g)||Jt(g)||(s=ln.measureText(n,c.data,c.gc,s,g),m+=d)}else s=ln.measureText(n,c.data,c.gc,s,l),m=d;h.push(s),v.push(m),x.push(d/2),w=Math.max(s,w),y=Math.max(m,y)}function k(n){return{width:h[n]||0,height:v[n]||0,offset:x[n]||0}}return ao(o,_),b=h.indexOf(w),u=v.indexOf(y),{first:k(0),last:k(_-1),widest:k(b),highest:k(u)}}function io(n){return n.drawTicks?n.tickMarkLength:0}function lo(n){var e,t;return n.display?(e=ln.options._parseFont(n),t=ln.options.toPadding(n.padding),e.lineHeight+t.height):0}function fo(n,e){return ln.extend(ln.options._parseFont({fontFamily:no(e.fontFamily,n.fontFamily),fontSize:no(e.fontSize,n.fontSize),fontStyle:no(e.fontStyle,n.fontStyle),lineHeight:no(e.lineHeight,n.lineHeight)}),{color:ln.options.resolve([e.fontColor,n.fontColor,J.global.defaultFontColor])})}function po(n){var e=fo(n,n.minor);return{minor:e,major:n.major.enabled?fo(n,n.major):e}}function co(n){var e,t,o,a=[];for(t=0,o=n.length;t<o;++t)void 0!==(e=n[t])._index&&a.push(e);return a}function so(n){var e,t,o=n.length;if(o<2)return!1;for(t=n[0],e=1;e<o;++e)if(n[e]-n[e-1]!==t)return!1;return t}function mo(n,e,t,o){var a,r,i,l,f=so(n),p=(e.length-1)/o;if(!f)return Math.max(p,1);for(i=0,l=(a=ln.math._factorize(f)).length-1;i<l;i++)if((r=a[i])>p)return r;return Math.max(p,1)}function go(n){var e,t,o=[];for(e=0,t=n.length;e<t;e++)n[e].major&&o.push(e);return o}function bo(n,e,t){var o,a,r=0,i=e[0];for(t=Math.ceil(t),o=0;o<n.length;o++)a=n[o],o===i?(a._index=o,i=e[++r*t]):delete a.label}function uo(n,e,t,o){var a,r,i,l,f=no(t,0),p=Math.min(no(o,n.length),n.length),c=0;for(e=Math.ceil(e),o&&(e=(a=o-t)/Math.floor(a/e)),l=f;l<0;)c++,l=Math.round(f+c*e);for(r=Math.max(f,0);r<p;r++)i=n[r],r===l?(i._index=r,c++,l=Math.round(f+c*e)):delete i.label}J._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:Kt.formatters.values,minor:{},major:{}}});var _o=bn.extend({zeroLineIndex:0,getPadding:function(){var n=this;return{left:n.paddingLeft||0,top:n.paddingTop||0,right:n.paddingRight||0,bottom:n.paddingBottom||0}},getTicks:function(){return this._ticks},_getLabels:function(){var n=this.chart.data;return this.options.labels||(this.isHorizontal()?n.xLabels:n.yLabels)||n.labels||[]},mergeTicksOptions:function(){},beforeUpdate:function(){ln.callback(this.options.beforeUpdate,[this])},update:function(n,e,t){var o,a,r,i,l,f=this,p=f.options.ticks,c=p.sampleSize;if(f.beforeUpdate(),f.maxWidth=n,f.maxHeight=e,f.margins=ln.extend({left:0,right:0,top:0,bottom:0},t),f._ticks=null,f.ticks=null,f._labelSizes=null,f._maxLabelLines=0,f.longestLabelWidth=0,f.longestTextCache=f.longestTextCache||{},f._gridLineItems=null,f._labelItems=null,f.beforeSetDimensions(),f.setDimensions(),f.afterSetDimensions(),f.beforeDataLimits(),f.determineDataLimits(),f.afterDataLimits(),f.beforeBuildTicks(),i=f.buildTicks()||[],(!(i=f.afterBuildTicks(i)||i)||!i.length)&&f.ticks)for(i=[],o=0,a=f.ticks.length;o<a;++o)i.push({value:f.ticks[o],major:!1});return f._ticks=i,l=c<i.length,r=f._convertTicksToLabels(l?to(i,c):i),f._configure(),f.beforeCalculateTickRotation(),f.calculateTickRotation(),f.afterCalculateTickRotation(),f.beforeFit(),f.fit(),f.afterFit(),f._ticksToDraw=p.display&&(p.autoSkip||"auto"===p.source)?f._autoSkip(i):i,l&&(r=f._convertTicksToLabels(f._ticksToDraw)),f.ticks=r,f.afterUpdate(),f.minSize},_configure:function(){var n,e,t=this,o=t.options.ticks.reverse;t.isHorizontal()?(n=t.left,e=t.right):(n=t.top,e=t.bottom,o=!o),t._startPixel=n,t._endPixel=e,t._reversePixels=o,t._length=e-n},afterUpdate:function(){ln.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){ln.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var n=this;n.isHorizontal()?(n.width=n.maxWidth,n.left=0,n.right=n.width):(n.height=n.maxHeight,n.top=0,n.bottom=n.height),n.paddingLeft=0,n.paddingTop=0,n.paddingRight=0,n.paddingBottom=0},afterSetDimensions:function(){ln.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){ln.callback(this.options.beforeDataLimits,[this])},determineDataLimits:ln.noop,afterDataLimits:function(){ln.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){ln.callback(this.options.beforeBuildTicks,[this])},buildTicks:ln.noop,afterBuildTicks:function(n){var e=this;return Jt(n)&&n.length?ln.callback(e.options.afterBuildTicks,[e,n]):(e.ticks=ln.callback(e.options.afterBuildTicks,[e,e.ticks])||e.ticks,n)},beforeTickToLabelConversion:function(){ln.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var n=this,e=n.options.ticks;n.ticks=n.ticks.map(e.userCallback||e.callback,this)},afterTickToLabelConversion:function(){ln.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){ln.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var n,e,t,o,a,r,i,l=this,f=l.options,p=f.ticks,c=l.getTicks().length,d=p.minRotation||0,s=p.maxRotation,m=d;!l._isVisible()||!p.display||d>=s||c<=1||!l.isHorizontal()?l.labelRotation=d:(e=(n=l._getLabelSizes()).widest.width,t=n.highest.height-n.highest.offset,o=Math.min(l.maxWidth,l.chart.width-e),e+6>(a=f.offset?l.maxWidth/c:o/(c-1))&&(a=o/(c-(f.offset?.5:1)),r=l.maxHeight-io(f.gridLines)-p.padding-lo(f.scaleLabel),i=Math.sqrt(e*e+t*t),m=ln.toDegrees(Math.min(Math.asin(Math.min((n.highest.height+6)/a,1)),Math.asin(Math.min(r/i,1))-Math.asin(t/i))),m=Math.max(d,Math.min(s,m))),l.labelRotation=m)},afterCalculateTickRotation:function(){ln.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){ln.callback(this.options.beforeFit,[this])},fit:function(){var n=this,e=n.minSize={width:0,height:0},t=n.chart,o=n.options,a=o.ticks,r=o.scaleLabel,i=o.gridLines,l=n._isVisible(),f="bottom"===o.position,p=n.isHorizontal();if(p?e.width=n.maxWidth:l&&(e.width=io(i)+lo(r)),p?l&&(e.height=io(i)+lo(r)):e.height=n.maxHeight,a.display&&l){var c=po(a),d=n._getLabelSizes(),s=d.first,m=d.last,g=d.widest,b=d.highest,u=.4*c.minor.lineHeight,_=a.padding;if(p){var h=0!==n.labelRotation,v=ln.toRadians(n.labelRotation),x=Math.cos(v),w=Math.sin(v),y=w*g.width+x*(b.height-(h?b.offset:0))+(h?0:u);e.height=Math.min(n.maxHeight,e.height+y+_);var k,C,B=n.getPixelForTick(0)-n.left,P=n.right-n.getPixelForTick(n.getTicks().length-1);h?(k=f?x*s.width+w*s.offset:w*(s.height-s.offset),C=f?w*(m.height-m.offset):x*m.width+w*m.offset):(k=s.width/2,C=m.width/2),n.paddingLeft=Math.max((k-B)*n.width/(n.width-B),0)+3,n.paddingRight=Math.max((C-P)*n.width/(n.width-P),0)+3}else{var S=a.mirror?0:g.width+_+u;e.width=Math.min(n.maxWidth,e.width+S),n.paddingTop=s.height/2,n.paddingBottom=m.height/2}}n.handleMargins(),p?(n.width=n._length=t.width-n.margins.left-n.margins.right,n.height=e.height):(n.width=e.width,n.height=n._length=t.height-n.margins.top-n.margins.bottom)},handleMargins:function(){var n=this;n.margins&&(n.margins.left=Math.max(n.paddingLeft,n.margins.left),n.margins.top=Math.max(n.paddingTop,n.margins.top),n.margins.right=Math.max(n.paddingRight,n.margins.right),n.margins.bottom=Math.max(n.paddingBottom,n.margins.bottom))},afterFit:function(){ln.callback(this.options.afterFit,[this])},isHorizontal:function(){var n=this.options.position;return"top"===n||"bottom"===n},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(n){if(Qt(n))return NaN;if(("number"==typeof n||n instanceof Number)&&!isFinite(n))return NaN;if(n)if(this.isHorizontal()){if(void 0!==n.x)return this.getRightValue(n.x)}else if(void 0!==n.y)return this.getRightValue(n.y);return n},_convertTicksToLabels:function(n){var e,t,o,a=this;for(a.ticks=n.map((function(n){return n.value})),a.beforeTickToLabelConversion(),e=a.convertTicksToLabels(n)||a.ticks,a.afterTickToLabelConversion(),t=0,o=n.length;t<o;++t)n[t].label=e[t];return e},_getLabelSizes:function(){var n=this,e=n._labelSizes;return e||(n._labelSizes=e=ro(n.ctx,po(n.options.ticks),n.getTicks(),n.longestTextCache),n.longestLabelWidth=e.widest.width),e},_parseValue:function(n){var e,t,o,a;return Jt(n)?(e=+this.getRightValue(n[0]),t=+this.getRightValue(n[1]),o=Math.min(e,t),a=Math.max(e,t)):(e=void 0,t=n=+this.getRightValue(n),o=n,a=n),{min:o,max:a,start:e,end:t}},_getScaleLabel:function(n){var e=this._parseValue(n);return void 0!==e.start?"["+e.start+", "+e.end+"]":+this.getRightValue(n)},getLabelForIndex:ln.noop,getPixelForValue:ln.noop,getValueForPixel:ln.noop,getPixelForTick:function(n){var e=this,t=e.options.offset,o=e._ticks.length,a=1/Math.max(o-(t?0:1),1);return n<0||n>o-1?null:e.getPixelForDecimal(n*a+(t?a/2:0))},getPixelForDecimal:function(n){var e=this;return e._reversePixels&&(n=1-n),e._startPixel+n*e._length},getDecimalForPixel:function(n){var e=(n-this._startPixel)/this._length;return this._reversePixels?1-e:e},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var n=this,e=n.min,t=n.max;return n.beginAtZero?0:e<0&&t<0?t:e>0&&t>0?e:0},_autoSkip:function(n){var e,t,o,a,r=this,i=r.options.ticks,l=r._length,f=i.maxTicksLimit||l/r._tickSize()+1,p=i.major.enabled?go(n):[],c=p.length,d=p[0],s=p[c-1];if(c>f)return bo(n,p,c/f),co(n);if(o=mo(p,n,l,f),c>0){for(e=0,t=c-1;e<t;e++)uo(n,o,p[e],p[e+1]);return a=c>1?(s-d)/(c-1):null,uo(n,o,ln.isNullOrUndef(a)?0:d-a,d),uo(n,o,s,ln.isNullOrUndef(a)?n.length:s+a),co(n)}return uo(n,o),co(n)},_tickSize:function(){var n=this,e=n.options.ticks,t=ln.toRadians(n.labelRotation),o=Math.abs(Math.cos(t)),a=Math.abs(Math.sin(t)),r=n._getLabelSizes(),i=e.autoSkipPadding||0,l=r?r.widest.width+i:0,f=r?r.highest.height+i:0;return n.isHorizontal()?f*o>l*a?l/o:f/a:f*a<l*o?f/o:l/a},_isVisible:function(){var n,e,t,o=this,a=o.chart,r=o.options.display;if("auto"!==r)return!!r;for(n=0,e=a.data.datasets.length;n<e;++n)if(a.isDatasetVisible(n)&&((t=a.getDatasetMeta(n)).xAxisID===o.id||t.yAxisID===o.id))return!0;return!1},_computeGridLineItems:function(n){var e,t,o,a,r,i,l,f,p,c,d,s,m,g,b,u,_,h=this,v=h.chart,x=h.options,w=x.gridLines,y=x.position,k=w.offsetGridLines,C=h.isHorizontal(),B=h._ticksToDraw,P=B.length+(k?1:0),S=io(w),T=[],M=w.drawBorder?eo(w.lineWidth,0,0):0,L=M/2,z=ln._alignPixel,W=function(n){return z(v,n,M)};for("top"===y?(e=W(h.bottom),l=h.bottom-S,p=e-L,d=W(n.top)+L,m=n.bottom):"bottom"===y?(e=W(h.top),d=n.top,m=W(n.bottom)-L,l=e+L,p=h.top+S):"left"===y?(e=W(h.right),i=h.right-S,f=e-L,c=W(n.left)+L,s=n.right):(e=W(h.left),c=n.left,s=W(n.right)-L,i=e+L,f=h.left+S),t=0;t<P;++t)o=B[t]||{},Qt(o.label)&&t<B.length||(t===h.zeroLineIndex&&x.offset===k?(g=w.zeroLineWidth,b=w.zeroLineColor,u=w.zeroLineBorderDash||[],_=w.zeroLineBorderDashOffset||0):(g=eo(w.lineWidth,t,1),b=eo(w.color,t,"rgba(0,0,0,0.1)"),u=w.borderDash||[],_=w.borderDashOffset||0),void 0!==(a=oo(h,o._index||t,k))&&(r=z(v,a,g),C?i=f=c=s=r:l=p=d=m=r,T.push({tx1:i,ty1:l,tx2:f,ty2:p,x1:c,y1:d,x2:s,y2:m,width:g,color:b,borderDash:u,borderDashOffset:_})));return T.ticksLength=P,T.borderValue=e,T},_computeLabelItems:function(){var n,e,t,o,a,r,i,l,f,p,c,d,s=this,m=s.options,g=m.ticks,b=m.position,u=g.mirror,_=s.isHorizontal(),h=s._ticksToDraw,v=po(g),x=g.padding,w=io(m.gridLines),y=-ln.toRadians(s.labelRotation),k=[];for("top"===b?(r=s.bottom-w-x,i=y?"left":"center"):"bottom"===b?(r=s.top+w+x,i=y?"right":"center"):"left"===b?(a=s.right-(u?0:w)-x,i=u?"left":"right"):(a=s.left+(u?0:w)+x,i=u?"right":"left"),n=0,e=h.length;n<e;++n)o=(t=h[n]).label,Qt(o)||(l=s.getPixelForTick(t._index||n)+g.labelOffset,p=(f=t.major?v.major:v.minor).lineHeight,c=Jt(o)?o.length:1,_?(a=l,d="top"===b?((y?1:.5)-c)*p:(y?0:.5)*p):(r=l,d=(1-c)*p/2),k.push({x:a,y:r,rotation:y,label:o,font:f,textOffset:d,textAlign:i}));return k},_drawGrid:function(n){var e=this,t=e.options.gridLines;if(t.display){var o,a,r,i,l,f=e.ctx,p=e.chart,c=ln._alignPixel,d=t.drawBorder?eo(t.lineWidth,0,0):0,s=e._gridLineItems||(e._gridLineItems=e._computeGridLineItems(n));for(r=0,i=s.length;r<i;++r)o=(l=s[r]).width,a=l.color,o&&a&&(f.save(),f.lineWidth=o,f.strokeStyle=a,f.setLineDash&&(f.setLineDash(l.borderDash),f.lineDashOffset=l.borderDashOffset),f.beginPath(),t.drawTicks&&(f.moveTo(l.tx1,l.ty1),f.lineTo(l.tx2,l.ty2)),t.drawOnChartArea&&(f.moveTo(l.x1,l.y1),f.lineTo(l.x2,l.y2)),f.stroke(),f.restore());if(d){var m,g,b,u,_=d,h=eo(t.lineWidth,s.ticksLength-1,1),v=s.borderValue;e.isHorizontal()?(m=c(p,e.left,_)-_/2,g=c(p,e.right,h)+h/2,b=u=v):(b=c(p,e.top,_)-_/2,u=c(p,e.bottom,h)+h/2,m=g=v),f.lineWidth=d,f.strokeStyle=eo(t.color,0),f.beginPath(),f.moveTo(m,b),f.lineTo(g,u),f.stroke()}}},_drawLabels:function(){var n=this;if(n.options.ticks.display){var e,t,o,a,r,i,l,f,p=n.ctx,c=n._labelItems||(n._labelItems=n._computeLabelItems());for(e=0,o=c.length;e<o;++e){if(i=(r=c[e]).font,p.save(),p.translate(r.x,r.y),p.rotate(r.rotation),p.font=i.string,p.fillStyle=i.color,p.textBaseline="middle",p.textAlign=r.textAlign,l=r.label,f=r.textOffset,Jt(l))for(t=0,a=l.length;t<a;++t)p.fillText(""+l[t],0,f),f+=i.lineHeight;else p.fillText(l,0,f);p.restore()}}},_drawTitle:function(){var n=this,e=n.ctx,t=n.options,o=t.scaleLabel;if(o.display){var a,r,i=no(o.fontColor,J.global.defaultFontColor),l=ln.options._parseFont(o),f=ln.options.toPadding(o.padding),p=l.lineHeight/2,c=t.position,d=0;if(n.isHorizontal())a=n.left+n.width/2,r="bottom"===c?n.bottom-p-f.bottom:n.top+p+f.top;else{var s="left"===c;a=s?n.left+p+f.top:n.right-p-f.top,r=n.top+n.height/2,d=s?-.5*Math.PI:.5*Math.PI}e.save(),e.translate(a,r),e.rotate(d),e.textAlign="center",e.textBaseline="middle",e.fillStyle=i,e.font=l.string,e.fillText(o.labelString,0,0),e.restore()}},draw:function(n){var e=this;e._isVisible()&&(e._drawGrid(n),e._drawTitle(),e._drawLabels())},_layers:function(){var n=this,e=n.options,t=e.ticks&&e.ticks.z||0,o=e.gridLines&&e.gridLines.z||0;return n._isVisible()&&t!==o&&n.draw===n._draw?[{z:o,draw:function(){n._drawGrid.apply(n,arguments),n._drawTitle.apply(n,arguments)}},{z:t,draw:function(){n._drawLabels.apply(n,arguments)}}]:[{z:t,draw:function(){n.draw.apply(n,arguments)}}]},_getMatchingVisibleMetas:function(n){var e=this,t=e.isHorizontal();return e.chart._getSortedVisibleDatasetMetas().filter((function(o){return(!n||o.type===n)&&(t?o.xAxisID===e.id:o.yAxisID===e.id)}))}});_o.prototype._draw=_o.prototype.draw;var ho=_o,vo=ln.isNullOrUndef,xo={position:"bottom"},wo=ho.extend({determineDataLimits:function(){var n,e=this,t=e._getLabels(),o=e.options.ticks,a=o.min,r=o.max,i=0,l=t.length-1;void 0!==a&&(n=t.indexOf(a))>=0&&(i=n),void 0!==r&&(n=t.indexOf(r))>=0&&(l=n),e.minIndex=i,e.maxIndex=l,e.min=t[i],e.max=t[l]},buildTicks:function(){var n=this,e=n._getLabels(),t=n.minIndex,o=n.maxIndex;n.ticks=0===t&&o===e.length-1?e:e.slice(t,o+1)},getLabelForIndex:function(n,e){var t=this,o=t.chart;return o.getDatasetMeta(e).controller._getValueScaleId()===t.id?t.getRightValue(o.data.datasets[e].data[n]):t._getLabels()[n]},_configure:function(){var n=this,e=n.options.offset,t=n.ticks;ho.prototype._configure.call(n),n.isHorizontal()||(n._reversePixels=!n._reversePixels),t&&(n._startValue=n.minIndex-(e?.5:0),n._valueRange=Math.max(t.length-(e?0:1),1))},getPixelForValue:function(n,e,t){var o,a,r,i=this;return vo(e)||vo(t)||(n=i.chart.data.datasets[t].data[e]),vo(n)||(o=i.isHorizontal()?n.x:n.y),(void 0!==o||void 0!==n&&isNaN(e))&&(a=i._getLabels(),n=ln.valueOrDefault(o,n),e=-1!==(r=a.indexOf(n))?r:e,isNaN(e)&&(e=n)),i.getPixelForDecimal((e-i._startValue)/i._valueRange)},getPixelForTick:function(n){var e=this.ticks;return n<0||n>e.length-1?null:this.getPixelForValue(e[n],n+this.minIndex)},getValueForPixel:function(n){var e=this,t=Math.round(e._startValue+e.getDecimalForPixel(n)*e._valueRange);return Math.min(Math.max(t,0),e.ticks.length-1)},getBasePixel:function(){return this.bottom}}),yo=xo;wo._defaults=yo;var ko=ln.noop,Co=ln.isNullOrUndef;function Bo(n,e){var t,o,a,r,i=[],l=1e-14,f=n.stepSize,p=f||1,c=n.maxTicks-1,d=n.min,s=n.max,m=n.precision,g=e.min,b=e.max,u=ln.niceNum((b-g)/c/p)*p;if(u<l&&Co(d)&&Co(s))return[g,b];(r=Math.ceil(b/u)-Math.floor(g/u))>c&&(u=ln.niceNum(r*u/c/p)*p),f||Co(m)?t=Math.pow(10,ln._decimalPlaces(u)):(t=Math.pow(10,m),u=Math.ceil(u*t)/t),o=Math.floor(g/u)*u,a=Math.ceil(b/u)*u,f&&(!Co(d)&&ln.almostWhole(d/u,u/1e3)&&(o=d),!Co(s)&&ln.almostWhole(s/u,u/1e3)&&(a=s)),r=(a-o)/u,r=ln.almostEquals(r,Math.round(r),u/1e3)?Math.round(r):Math.ceil(r),o=Math.round(o*t)/t,a=Math.round(a*t)/t,i.push(Co(d)?o:d);for(var _=1;_<r;++_)i.push(Math.round((o+_*u)*t)/t);return i.push(Co(s)?a:s),i}var Po=ho.extend({getRightValue:function(n){return"string"==typeof n?+n:ho.prototype.getRightValue.call(this,n)},handleTickRangeOptions:function(){var n=this,e=n.options.ticks;if(e.beginAtZero){var t=ln.sign(n.min),o=ln.sign(n.max);t<0&&o<0?n.max=0:t>0&&o>0&&(n.min=0)}var a=void 0!==e.min||void 0!==e.suggestedMin,r=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?n.min=e.min:void 0!==e.suggestedMin&&(null===n.min?n.min=e.suggestedMin:n.min=Math.min(n.min,e.suggestedMin)),void 0!==e.max?n.max=e.max:void 0!==e.suggestedMax&&(null===n.max?n.max=e.suggestedMax:n.max=Math.max(n.max,e.suggestedMax)),a!==r&&n.min>=n.max&&(a?n.max=n.min+1:n.min=n.max-1),n.min===n.max&&(n.max++,e.beginAtZero||n.min--)},getTickLimit:function(){var n,e=this,t=e.options.ticks,o=t.stepSize,a=t.maxTicksLimit;return o?n=Math.ceil(e.max/o)-Math.floor(e.min/o)+1:(n=e._computeTickLimit(),a=a||11),a&&(n=Math.min(a,n)),n},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:ko,buildTicks:function(){var n=this,e=n.options.ticks,t=n.getTickLimit(),o={maxTicks:t=Math.max(2,t),min:e.min,max:e.max,precision:e.precision,stepSize:ln.valueOrDefault(e.fixedStepSize,e.stepSize)},a=n.ticks=Bo(o,n);n.handleDirectionalChanges(),n.max=ln.max(a),n.min=ln.min(a),e.reverse?(a.reverse(),n.start=n.max,n.end=n.min):(n.start=n.min,n.end=n.max)},convertTicksToLabels:function(){var n=this;n.ticksAsNumbers=n.ticks.slice(),n.zeroLineIndex=n.ticks.indexOf(0),ho.prototype.convertTicksToLabels.call(n)},_configure:function(){var n,e=this,t=e.getTicks(),o=e.min,a=e.max;ho.prototype._configure.call(e),e.options.offset&&t.length&&(o-=n=(a-o)/Math.max(t.length-1,1)/2,a+=n),e._startValue=o,e._endValue=a,e._valueRange=a-o}}),So={position:"left",ticks:{callback:Kt.formatters.linear}},To=0,Mo=1;function Lo(n,e,t){var o=[t.type,void 0===e&&void 0===t.stack?t.index:"",t.stack].join(".");return void 0===n[o]&&(n[o]={pos:[],neg:[]}),n[o]}function zo(n,e,t,o){var a,r,i=n.options,l=Lo(e,i.stacked,t),f=l.pos,p=l.neg,c=o.length;for(a=0;a<c;++a)r=n._parseValue(o[a]),isNaN(r.min)||isNaN(r.max)||t.data[a].hidden||(f[a]=f[a]||0,p[a]=p[a]||0,i.relativePoints?f[a]=100:r.min<0||r.max<0?p[a]+=r.min:f[a]+=r.max)}function Wo(n,e,t){var o,a,r=t.length;for(o=0;o<r;++o)a=n._parseValue(t[o]),isNaN(a.min)||isNaN(a.max)||e.data[o].hidden||(n.min=Math.min(n.min,a.min),n.max=Math.max(n.max,a.max))}var Ro=Po.extend({determineDataLimits:function(){var n,e,t,o,a=this,r=a.options,i=a.chart.data.datasets,l=a._getMatchingVisibleMetas(),f=r.stacked,p={},c=l.length;if(a.min=Number.POSITIVE_INFINITY,a.max=Number.NEGATIVE_INFINITY,void 0===f)for(n=0;!f&&n<c;++n)f=void 0!==(e=l[n]).stack;for(n=0;n<c;++n)t=i[(e=l[n]).index].data,f?zo(a,p,e,t):Wo(a,e,t);ln.each(p,(function(n){o=n.pos.concat(n.neg),a.min=Math.min(a.min,ln.min(o)),a.max=Math.max(a.max,ln.max(o))})),a.min=ln.isFinite(a.min)&&!isNaN(a.min)?a.min:To,a.max=ln.isFinite(a.max)&&!isNaN(a.max)?a.max:Mo,a.handleTickRangeOptions()},_computeTickLimit:function(){var n,e=this;return e.isHorizontal()?Math.ceil(e.width/40):(n=ln.options._parseFont(e.options.ticks),Math.ceil(e.height/n.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(n,e){return this._getScaleLabel(this.chart.data.datasets[e].data[n])},getPixelForValue:function(n){var e=this;return e.getPixelForDecimal((+e.getRightValue(n)-e._startValue)/e._valueRange)},getValueForPixel:function(n){return this._startValue+this.getDecimalForPixel(n)*this._valueRange},getPixelForTick:function(n){var e=this.ticksAsNumbers;return n<0||n>e.length-1?null:this.getPixelForValue(e[n])}}),Fo=So;Ro._defaults=Fo;var Do=ln.valueOrDefault,Oo=ln.math.log10;function Ao(n,e){var t,o,a=[],r=Do(n.min,Math.pow(10,Math.floor(Oo(e.min)))),i=Math.floor(Oo(e.max)),l=Math.ceil(e.max/Math.pow(10,i));0===r?(t=Math.floor(Oo(e.minNotZero)),o=Math.floor(e.minNotZero/Math.pow(10,t)),a.push(r),r=o*Math.pow(10,t)):(t=Math.floor(Oo(r)),o=Math.floor(r/Math.pow(10,t)));var f=t<0?Math.pow(10,Math.abs(t)):1;do{a.push(r),10==++o&&(o=1,f=++t>=0?1:f),r=Math.round(o*Math.pow(10,t)*f)/f}while(t<i||t===i&&o<l);var p=Do(n.max,r);return a.push(p),a}var Io={position:"left",ticks:{callback:Kt.formatters.logarithmic}};function Ho(n,e){return ln.isFinite(n)&&n>=0?n:e}var No=ho.extend({determineDataLimits:function(){var n,e,t,o,a,r,i=this,l=i.options,f=i.chart,p=f.data.datasets,c=i.isHorizontal();function d(n){return c?n.xAxisID===i.id:n.yAxisID===i.id}i.min=Number.POSITIVE_INFINITY,i.max=Number.NEGATIVE_INFINITY,i.minNotZero=Number.POSITIVE_INFINITY;var s=l.stacked;if(void 0===s)for(n=0;n<p.length;n++)if(e=f.getDatasetMeta(n),f.isDatasetVisible(n)&&d(e)&&void 0!==e.stack){s=!0;break}if(l.stacked||s){var m={};for(n=0;n<p.length;n++){var g=[(e=f.getDatasetMeta(n)).type,void 0===l.stacked&&void 0===e.stack?n:"",e.stack].join(".");if(f.isDatasetVisible(n)&&d(e))for(void 0===m[g]&&(m[g]=[]),a=0,r=(o=p[n].data).length;a<r;a++){var b=m[g];t=i._parseValue(o[a]),isNaN(t.min)||isNaN(t.max)||e.data[a].hidden||t.min<0||t.max<0||(b[a]=b[a]||0,b[a]+=t.max)}}ln.each(m,(function(n){if(n.length>0){var e=ln.min(n),t=ln.max(n);i.min=Math.min(i.min,e),i.max=Math.max(i.max,t)}}))}else for(n=0;n<p.length;n++)if(e=f.getDatasetMeta(n),f.isDatasetVisible(n)&&d(e))for(a=0,r=(o=p[n].data).length;a<r;a++)t=i._parseValue(o[a]),isNaN(t.min)||isNaN(t.max)||e.data[a].hidden||t.min<0||t.max<0||(i.min=Math.min(t.min,i.min),i.max=Math.max(t.max,i.max),0!==t.min&&(i.minNotZero=Math.min(t.min,i.minNotZero)));i.min=ln.isFinite(i.min)?i.min:null,i.max=ln.isFinite(i.max)?i.max:null,i.minNotZero=ln.isFinite(i.minNotZero)?i.minNotZero:null,this.handleTickRangeOptions()},handleTickRangeOptions:function(){var n=this,e=n.options.ticks,t=1,o=10;n.min=Ho(e.min,n.min),n.max=Ho(e.max,n.max),n.min===n.max&&(0!==n.min&&null!==n.min?(n.min=Math.pow(10,Math.floor(Oo(n.min))-1),n.max=Math.pow(10,Math.floor(Oo(n.max))+1)):(n.min=t,n.max=o)),null===n.min&&(n.min=Math.pow(10,Math.floor(Oo(n.max))-1)),null===n.max&&(n.max=0!==n.min?Math.pow(10,Math.floor(Oo(n.min))+1):o),null===n.minNotZero&&(n.min>0?n.minNotZero=n.min:n.max<1?n.minNotZero=Math.pow(10,Math.floor(Oo(n.max))):n.minNotZero=t)},buildTicks:function(){var n=this,e=n.options.ticks,t=!n.isHorizontal(),o={min:Ho(e.min),max:Ho(e.max)},a=n.ticks=Ao(o,n);n.max=ln.max(a),n.min=ln.min(a),e.reverse?(t=!t,n.start=n.max,n.end=n.min):(n.start=n.min,n.end=n.max),t&&a.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),ho.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(n,e){return this._getScaleLabel(this.chart.data.datasets[e].data[n])},getPixelForTick:function(n){var e=this.tickValues;return n<0||n>e.length-1?null:this.getPixelForValue(e[n])},_getFirstTickValue:function(n){var e=Math.floor(Oo(n));return Math.floor(n/Math.pow(10,e))*Math.pow(10,e)},_configure:function(){var n=this,e=n.min,t=0;ho.prototype._configure.call(n),0===e&&(e=n._getFirstTickValue(n.minNotZero),t=Do(n.options.ticks.fontSize,J.global.defaultFontSize)/n._length),n._startValue=Oo(e),n._valueOffset=t,n._valueRange=(Oo(n.max)-Oo(e))/(1-t)},getPixelForValue:function(n){var e=this,t=0;return(n=+e.getRightValue(n))>e.min&&n>0&&(t=(Oo(n)-e._startValue)/e._valueRange+e._valueOffset),e.getPixelForDecimal(t)},getValueForPixel:function(n){var e=this,t=e.getDecimalForPixel(n);return 0===t&&0===e.min?0:Math.pow(10,e._startValue+(t-e._valueOffset)*e._valueRange)}}),Eo=Io;No._defaults=Eo;var jo=ln.valueOrDefault,Go=ln.valueAtIndexOrDefault,Yo=ln.options.resolve,Vo={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:Kt.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(n){return n}}};function qo(n){var e=n.ticks;return e.display&&n.display?jo(e.fontSize,J.global.defaultFontSize)+2*e.backdropPaddingY:0}function Uo(n,e,t){return ln.isArray(t)?{w:ln.longestText(n,n.font,t),h:t.length*e}:{w:n.measureText(t).width,h:e}}function Xo(n,e,t,o,a){return n===o||n===a?{start:e-t/2,end:e+t/2}:n<o||n>a?{start:e-t,end:e}:{start:e,end:e+t}}function Zo(n){var e,t,o,a=ln.options._parseFont(n.options.pointLabels),r={l:0,r:n.width,t:0,b:n.height-n.paddingTop},i={};n.ctx.font=a.string,n._pointLabelSizes=[];var l=n.chart.data.labels.length;for(e=0;e<l;e++){o=n.getPointPosition(e,n.drawingArea+5),t=Uo(n.ctx,a.lineHeight,n.pointLabels[e]),n._pointLabelSizes[e]=t;var f=n.getIndexAngle(e),p=ln.toDegrees(f)%360,c=Xo(p,o.x,t.w,0,180),d=Xo(p,o.y,t.h,90,270);c.start<r.l&&(r.l=c.start,i.l=f),c.end>r.r&&(r.r=c.end,i.r=f),d.start<r.t&&(r.t=d.start,i.t=f),d.end>r.b&&(r.b=d.end,i.b=f)}n.setReductions(n.drawingArea,r,i)}function $o(n){return 0===n||180===n?"center":n<180?"left":"right"}function Ko(n,e,t,o){var a,r,i=t.y+o/2;if(ln.isArray(e))for(a=0,r=e.length;a<r;++a)n.fillText(e[a],t.x,i),i+=o;else n.fillText(e,t.x,i)}function Jo(n,e,t){90===n||270===n?t.y-=e.h/2:(n>270||n<90)&&(t.y-=e.h)}function Qo(n){var e=n.ctx,t=n.options,o=t.pointLabels,a=qo(t),r=n.getDistanceFromCenterForValue(t.ticks.reverse?n.min:n.max),i=ln.options._parseFont(o);e.save(),e.font=i.string,e.textBaseline="middle";for(var l=n.chart.data.labels.length-1;l>=0;l--){var f=0===l?a/2:0,p=n.getPointPosition(l,r+f+5),c=Go(o.fontColor,l,J.global.defaultFontColor);e.fillStyle=c;var d=n.getIndexAngle(l),s=ln.toDegrees(d);e.textAlign=$o(s),Jo(s,n._pointLabelSizes[l],p),Ko(e,n.pointLabels[l],p,i.lineHeight)}e.restore()}function na(n,e,t,o){var a,r=n.ctx,i=e.circular,l=n.chart.data.labels.length,f=Go(e.color,o-1),p=Go(e.lineWidth,o-1);if((i||l)&&f&&p){if(r.save(),r.strokeStyle=f,r.lineWidth=p,r.setLineDash&&(r.setLineDash(e.borderDash||[]),r.lineDashOffset=e.borderDashOffset||0),r.beginPath(),i)r.arc(n.xCenter,n.yCenter,t,0,2*Math.PI);else{a=n.getPointPosition(0,t),r.moveTo(a.x,a.y);for(var c=1;c<l;c++)a=n.getPointPosition(c,t),r.lineTo(a.x,a.y)}r.closePath(),r.stroke(),r.restore()}}function ea(n){return ln.isNumber(n)?n:0}var ta=Po.extend({setDimensions:function(){var n=this;n.width=n.maxWidth,n.height=n.maxHeight,n.paddingTop=qo(n.options)/2,n.xCenter=Math.floor(n.width/2),n.yCenter=Math.floor((n.height-n.paddingTop)/2),n.drawingArea=Math.min(n.height-n.paddingTop,n.width)/2},determineDataLimits:function(){var n=this,e=n.chart,t=Number.POSITIVE_INFINITY,o=Number.NEGATIVE_INFINITY;ln.each(e.data.datasets,(function(a,r){if(e.isDatasetVisible(r)){var i=e.getDatasetMeta(r);ln.each(a.data,(function(e,a){var r=+n.getRightValue(e);isNaN(r)||i.data[a].hidden||(t=Math.min(r,t),o=Math.max(r,o))}))}})),n.min=t===Number.POSITIVE_INFINITY?0:t,n.max=o===Number.NEGATIVE_INFINITY?0:o,n.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/qo(this.options))},convertTicksToLabels:function(){var n=this;Po.prototype.convertTicksToLabels.call(n),n.pointLabels=n.chart.data.labels.map((function(){var e=ln.callback(n.options.pointLabels.callback,arguments,n);return e||0===e?e:""}))},getLabelForIndex:function(n,e){return+this.getRightValue(this.chart.data.datasets[e].data[n])},fit:function(){var n=this,e=n.options;e.display&&e.pointLabels.display?Zo(n):n.setCenterPoint(0,0,0,0)},setReductions:function(n,e,t){var o=this,a=e.l/Math.sin(t.l),r=Math.max(e.r-o.width,0)/Math.sin(t.r),i=-e.t/Math.cos(t.t),l=-Math.max(e.b-(o.height-o.paddingTop),0)/Math.cos(t.b);a=ea(a),r=ea(r),i=ea(i),l=ea(l),o.drawingArea=Math.min(Math.floor(n-(a+r)/2),Math.floor(n-(i+l)/2)),o.setCenterPoint(a,r,i,l)},setCenterPoint:function(n,e,t,o){var a=this,r=a.width-e-a.drawingArea,i=n+a.drawingArea,l=t+a.drawingArea,f=a.height-a.paddingTop-o-a.drawingArea;a.xCenter=Math.floor((i+r)/2+a.left),a.yCenter=Math.floor((l+f)/2+a.top+a.paddingTop)},getIndexAngle:function(n){var e=this.chart,t=(n*(360/e.data.labels.length)+((e.options||{}).startAngle||0))%360;return(t<0?t+360:t)*Math.PI*2/360},getDistanceFromCenterForValue:function(n){var e=this;if(ln.isNullOrUndef(n))return NaN;var t=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-n)*t:(n-e.min)*t},getPointPosition:function(n,e){var t=this,o=t.getIndexAngle(n)-Math.PI/2;return{x:Math.cos(o)*e+t.xCenter,y:Math.sin(o)*e+t.yCenter}},getPointPositionForValue:function(n,e){return this.getPointPosition(n,this.getDistanceFromCenterForValue(e))},getBasePosition:function(n){var e=this,t=e.min,o=e.max;return e.getPointPositionForValue(n||0,e.beginAtZero?0:t<0&&o<0?o:t>0&&o>0?t:0)},_drawGrid:function(){var n,e,t,o=this,a=o.ctx,r=o.options,i=r.gridLines,l=r.angleLines,f=jo(l.lineWidth,i.lineWidth),p=jo(l.color,i.color);if(r.pointLabels.display&&Qo(o),i.display&&ln.each(o.ticks,(function(n,t){0!==t&&(e=o.getDistanceFromCenterForValue(o.ticksAsNumbers[t]),na(o,i,e,t))})),l.display&&f&&p){for(a.save(),a.lineWidth=f,a.strokeStyle=p,a.setLineDash&&(a.setLineDash(Yo([l.borderDash,i.borderDash,[]])),a.lineDashOffset=Yo([l.borderDashOffset,i.borderDashOffset,0])),n=o.chart.data.labels.length-1;n>=0;n--)e=o.getDistanceFromCenterForValue(r.ticks.reverse?o.min:o.max),t=o.getPointPosition(n,e),a.beginPath(),a.moveTo(o.xCenter,o.yCenter),a.lineTo(t.x,t.y),a.stroke();a.restore()}},_drawLabels:function(){var n=this,e=n.ctx,t=n.options.ticks;if(t.display){var o,a,r=n.getIndexAngle(0),i=ln.options._parseFont(t),l=jo(t.fontColor,J.global.defaultFontColor);e.save(),e.font=i.string,e.translate(n.xCenter,n.yCenter),e.rotate(r),e.textAlign="center",e.textBaseline="middle",ln.each(n.ticks,(function(r,f){(0!==f||t.reverse)&&(o=n.getDistanceFromCenterForValue(n.ticksAsNumbers[f]),t.showLabelBackdrop&&(a=e.measureText(r).width,e.fillStyle=t.backdropColor,e.fillRect(-a/2-t.backdropPaddingX,-o-i.size/2-t.backdropPaddingY,a+2*t.backdropPaddingX,i.size+2*t.backdropPaddingY)),e.fillStyle=l,e.fillText(r,0,-o))})),e.restore()}},_drawTitle:ln.noop}),oa=Vo;ta._defaults=oa;var aa=ln._deprecated,ra=ln.options.resolve,ia=ln.valueOrDefault,la=Number.MIN_SAFE_INTEGER||-9007199254740991,fa=Number.MAX_SAFE_INTEGER||9007199254740991,pa={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ca=Object.keys(pa);function da(n,e){return n-e}function sa(n){var e,t,o,a={},r=[];for(e=0,t=n.length;e<t;++e)a[o=n[e]]||(a[o]=!0,r.push(o));return r}function ma(n){return ln.valueOrDefault(n.time.min,n.ticks.min)}function ga(n){return ln.valueOrDefault(n.time.max,n.ticks.max)}function ba(n,e,t,o){if("linear"===o||!n.length)return[{time:e,pos:0},{time:t,pos:1}];var a,r,i,l,f,p=[],c=[e];for(a=0,r=n.length;a<r;++a)(l=n[a])>e&&l<t&&c.push(l);for(c.push(t),a=0,r=c.length;a<r;++a)f=c[a+1],i=c[a-1],l=c[a],void 0!==i&&void 0!==f&&Math.round((f+i)/2)===l||p.push({time:l,pos:a/(r-1)});return p}function ua(n,e,t){for(var o,a,r,i=0,l=n.length-1;i>=0&&i<=l;){if(a=n[(o=i+l>>1)-1]||null,r=n[o],!a)return{lo:null,hi:r};if(r[e]<t)i=o+1;else{if(!(a[e]>t))return{lo:a,hi:r};l=o-1}}return{lo:r,hi:null}}function _a(n,e,t,o){var a=ua(n,e,t),r=a.lo?a.hi?a.lo:n[n.length-2]:n[0],i=a.lo?a.hi?a.hi:n[n.length-1]:n[1],l=i[e]-r[e],f=l?(t-r[e])/l:0,p=(i[o]-r[o])*f;return r[o]+p}function ha(n,e){var t=n._adapter,o=n.options.time,a=o.parser,r=a||o.format,i=e;return"function"==typeof a&&(i=a(i)),ln.isFinite(i)||(i="string"==typeof r?t.parse(i,r):t.parse(i)),null!==i?+i:(a||"function"!=typeof r||(i=r(e),ln.isFinite(i)||(i=t.parse(i))),i)}function va(n,e){if(ln.isNullOrUndef(e))return null;var t=n.options.time,o=ha(n,n.getRightValue(e));return null===o||t.round&&(o=+n._adapter.startOf(o,t.round)),o}function xa(n,e,t,o){var a,r,i,l=ca.length;for(a=ca.indexOf(n);a<l-1;++a)if(i=(r=pa[ca[a]]).steps?r.steps:fa,r.common&&Math.ceil((t-e)/(i*r.size))<=o)return ca[a];return ca[l-1]}function wa(n,e,t,o,a){var r,i;for(r=ca.length-1;r>=ca.indexOf(t);r--)if(i=ca[r],pa[i].common&&n._adapter.diff(a,o,i)>=e-1)return i;return ca[t?ca.indexOf(t):0]}function ya(n){for(var e=ca.indexOf(n)+1,t=ca.length;e<t;++e)if(pa[ca[e]].common)return ca[e]}function ka(n,e,t,o){var a,r=n._adapter,i=n.options,l=i.time,f=l.unit||xa(l.minUnit,e,t,o),p=ra([l.stepSize,l.unitStepSize,1]),c="week"===f&&l.isoWeekday,d=e,s=[];if(c&&(d=+r.startOf(d,"isoWeek",c)),d=+r.startOf(d,c?"day":f),r.diff(t,e,f)>1e5*p)throw e+" and "+t+" are too far apart with stepSize of "+p+" "+f;for(a=d;a<t;a=+r.add(a,p,f))s.push(a);return a!==t&&"ticks"!==i.bounds||s.push(a),s}function Ca(n,e,t,o,a){var r,i,l=0,f=0;return a.offset&&e.length&&(r=_a(n,"time",e[0],"pos"),l=1===e.length?1-r:(_a(n,"time",e[1],"pos")-r)/2,i=_a(n,"time",e[e.length-1],"pos"),f=1===e.length?i:(i-_a(n,"time",e[e.length-2],"pos"))/2),{start:l,end:f,factor:1/(l+1+f)}}function Ba(n,e,t,o){var a,r,i=n._adapter,l=+i.startOf(e[0].value,o),f=e[e.length-1].value;for(a=l;a<=f;a=+i.add(a,1,o))(r=t[a])>=0&&(e[r].major=!0);return e}function Pa(n,e,t){var o,a,r=[],i={},l=e.length;for(o=0;o<l;++o)i[a=e[o]]=o,r.push({value:a,major:!1});return 0!==l&&t?Ba(n,r,i,t):r}var Sa={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}},Ta=ho.extend({initialize:function(){this.mergeTicksOptions(),ho.prototype.initialize.call(this)},update:function(){var n=this,e=n.options,t=e.time||(e.time={}),o=n._adapter=new $t._date(e.adapters.date);return aa("time scale",t.format,"time.format","time.parser"),aa("time scale",t.min,"time.min","ticks.min"),aa("time scale",t.max,"time.max","ticks.max"),ln.mergeIf(t.displayFormats,o.formats()),ho.prototype.update.apply(n,arguments)},getRightValue:function(n){return n&&void 0!==n.t&&(n=n.t),ho.prototype.getRightValue.call(this,n)},determineDataLimits:function(){var n,e,t,o,a,r,i,l=this,f=l.chart,p=l._adapter,c=l.options,d=c.time.unit||"day",s=fa,m=la,g=[],b=[],u=[],_=l._getLabels();for(n=0,t=_.length;n<t;++n)u.push(va(l,_[n]));for(n=0,t=(f.data.datasets||[]).length;n<t;++n)if(f.isDatasetVisible(n))if(a=f.data.datasets[n].data,ln.isObject(a[0]))for(b[n]=[],e=0,o=a.length;e<o;++e)r=va(l,a[e]),g.push(r),b[n][e]=r;else b[n]=u.slice(0),i||(g=g.concat(u),i=!0);else b[n]=[];u.length&&(s=Math.min(s,u[0]),m=Math.max(m,u[u.length-1])),g.length&&(g=t>1?sa(g).sort(da):g.sort(da),s=Math.min(s,g[0]),m=Math.max(m,g[g.length-1])),s=va(l,ma(c))||s,m=va(l,ga(c))||m,s=s===fa?+p.startOf(Date.now(),d):s,m=m===la?+p.endOf(Date.now(),d)+1:m,l.min=Math.min(s,m),l.max=Math.max(s+1,m),l._table=[],l._timestamps={data:g,datasets:b,labels:u}},buildTicks:function(){var n,e,t,o=this,a=o.min,r=o.max,i=o.options,l=i.ticks,f=i.time,p=o._timestamps,c=[],d=o.getLabelCapacity(a),s=l.source,m=i.distribution;for(p="data"===s||"auto"===s&&"series"===m?p.data:"labels"===s?p.labels:ka(o,a,r,d),"ticks"===i.bounds&&p.length&&(a=p[0],r=p[p.length-1]),a=va(o,ma(i))||a,r=va(o,ga(i))||r,n=0,e=p.length;n<e;++n)(t=p[n])>=a&&t<=r&&c.push(t);return o.min=a,o.max=r,o._unit=f.unit||(l.autoSkip?xa(f.minUnit,o.min,o.max,d):wa(o,c.length,f.minUnit,o.min,o.max)),o._majorUnit=l.major.enabled&&"year"!==o._unit?ya(o._unit):void 0,o._table=ba(o._timestamps.data,a,r,m),o._offsets=Ca(o._table,c,a,r,i),l.reverse&&c.reverse(),Pa(o,c,o._majorUnit)},getLabelForIndex:function(n,e){var t=this,o=t._adapter,a=t.chart.data,r=t.options.time,i=a.labels&&n<a.labels.length?a.labels[n]:"",l=a.datasets[e].data[n];return ln.isObject(l)&&(i=t.getRightValue(l)),r.tooltipFormat?o.format(ha(t,i),r.tooltipFormat):"string"==typeof i?i:o.format(ha(t,i),r.displayFormats.datetime)},tickFormatFunction:function(n,e,t,o){var a=this,r=a._adapter,i=a.options,l=i.time.displayFormats,f=l[a._unit],p=a._majorUnit,c=l[p],d=t[e],s=i.ticks,m=p&&c&&d&&d.major,g=r.format(n,o||(m?c:f)),b=m?s.major:s.minor,u=ra([b.callback,b.userCallback,s.callback,s.userCallback]);return u?u(g,e,t):g},convertTicksToLabels:function(n){var e,t,o=[];for(e=0,t=n.length;e<t;++e)o.push(this.tickFormatFunction(n[e].value,e,n));return o},getPixelForOffset:function(n){var e=this,t=e._offsets,o=_a(e._table,"time",n,"pos");return e.getPixelForDecimal((t.start+o)*t.factor)},getPixelForValue:function(n,e,t){var o=this,a=null;if(void 0!==e&&void 0!==t&&(a=o._timestamps.datasets[t][e]),null===a&&(a=va(o,n)),null!==a)return o.getPixelForOffset(a)},getPixelForTick:function(n){var e=this.getTicks();return n>=0&&n<e.length?this.getPixelForOffset(e[n].value):null},getValueForPixel:function(n){var e=this,t=e._offsets,o=e.getDecimalForPixel(n)/t.factor-t.end,a=_a(e._table,"pos",o,"time");return e._adapter._create(a)},_getLabelSize:function(n){var e=this,t=e.options.ticks,o=e.ctx.measureText(n).width,a=ln.toRadians(e.isHorizontal()?t.maxRotation:t.minRotation),r=Math.cos(a),i=Math.sin(a),l=ia(t.fontSize,J.global.defaultFontSize);return{w:o*r+l*i,h:o*i+l*r}},getLabelWidth:function(n){return this._getLabelSize(n).w},getLabelCapacity:function(n){var e=this,t=e.options.time,o=t.displayFormats,a=o[t.unit]||o.millisecond,r=e.tickFormatFunction(n,0,Pa(e,[n],e._majorUnit),a),i=e._getLabelSize(r),l=Math.floor(e.isHorizontal()?e.width/i.w:e.height/i.h);return e.options.offset&&l--,l>0?l:1}}),Ma=Sa;Ta._defaults=Ma;var La={category:wo,linear:Ro,logarithmic:No,radialLinear:ta,time:Ta},za={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};$t._date.override("function"==typeof n?{_id:"moment",formats:function(){return za},parse:function(e,t){return"string"==typeof e&&"string"==typeof t?e=n(e,t):e instanceof n||(e=n(e)),e.isValid()?e.valueOf():null},format:function(e,t){return n(e).format(t)},add:function(e,t,o){return n(e).add(t,o).valueOf()},diff:function(e,t,o){return n(e).diff(n(t),o)},startOf:function(e,t,o){return e=n(e),"isoWeek"===t?e.isoWeekday(o).valueOf():e.startOf(t).valueOf()},endOf:function(e,t){return n(e).endOf(t).valueOf()},_create:function(e){return n(e)}}:{}),J._set("global",{plugins:{filler:{propagate:!0}}});var Wa={dataset:function(n){var e=n.fill,t=n.chart,o=t.getDatasetMeta(e),a=o&&t.isDatasetVisible(e)&&o.dataset._children||[],r=a.length||0;return r?function(n,e){return e<r&&a[e]._view||null}:null},boundary:function(n){var e=n.boundary,t=e?e.x:null,o=e?e.y:null;return ln.isArray(e)?function(n,t){return e[t]}:function(n){return{x:null===t?n.x:t,y:null===o?n.y:o}}}};function Ra(n,e,t){var o,a=n._model||{},r=a.fill;if(void 0===r&&(r=!!a.backgroundColor),!1===r||null===r)return!1;if(!0===r)return"origin";if(o=parseFloat(r,10),isFinite(o)&&Math.floor(o)===o)return"-"!==r[0]&&"+"!==r[0]||(o=e+o),!(o===e||o<0||o>=t)&&o;switch(r){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return r;default:return!1}}function Fa(n){var e,t=n.el._model||{},o=n.el._scale||{},a=n.fill,r=null;if(isFinite(a))return null;if("start"===a?r=void 0===t.scaleBottom?o.bottom:t.scaleBottom:"end"===a?r=void 0===t.scaleTop?o.top:t.scaleTop:void 0!==t.scaleZero?r=t.scaleZero:o.getBasePixel&&(r=o.getBasePixel()),null!=r){if(void 0!==r.x&&void 0!==r.y)return r;if(ln.isFinite(r))return{x:(e=o.isHorizontal())?r:null,y:e?null:r}}return null}function Da(n){var e,t,o,a,r,i=n.el._scale,l=i.options,f=i.chart.data.labels.length,p=n.fill,c=[];if(!f)return null;for(e=l.ticks.reverse?i.max:i.min,t=l.ticks.reverse?i.min:i.max,o=i.getPointPositionForValue(0,e),a=0;a<f;++a)r="start"===p||"end"===p?i.getPointPositionForValue(a,"start"===p?e:t):i.getBasePosition(a),l.gridLines.circular&&(r.cx=o.x,r.cy=o.y,r.angle=i.getIndexAngle(a)-Math.PI/2),c.push(r);return c}function Oa(n){return(n.el._scale||{}).getPointPositionForValue?Da(n):Fa(n)}function Aa(n,e,t){var o,a=n[e].fill,r=[e];if(!t)return a;for(;!1!==a&&-1===r.indexOf(a);){if(!isFinite(a))return a;if(!(o=n[a]))return!1;if(o.visible)return a;r.push(a),a=o.fill}return!1}function Ia(n){var e=n.fill,t="dataset";return!1===e?null:(isFinite(e)||(t="boundary"),Wa[t](n))}function Ha(n){return n&&!n.skip}function Na(n,e,t,o,a){var r,i,l,f;if(o&&a){for(n.moveTo(e[0].x,e[0].y),r=1;r<o;++r)ln.canvas.lineTo(n,e[r-1],e[r]);if(void 0===t[0].angle)for(n.lineTo(t[a-1].x,t[a-1].y),r=a-1;r>0;--r)ln.canvas.lineTo(n,t[r],t[r-1],!0);else for(i=t[0].cx,l=t[0].cy,f=Math.sqrt(Math.pow(t[0].x-i,2)+Math.pow(t[0].y-l,2)),r=a-1;r>0;--r)n.arc(i,l,f,t[r].angle,t[r-1].angle,!0)}}function Ea(n,e,t,o,a,r){var i,l,f,p,c,d,s,m,g=e.length,b=o.spanGaps,u=[],_=[],h=0,v=0;for(n.beginPath(),i=0,l=g;i<l;++i)c=t(p=e[f=i%g]._view,f,o),d=Ha(p),s=Ha(c),r&&void 0===m&&d&&(l=g+(m=i+1)),d&&s?(h=u.push(p),v=_.push(c)):h&&v&&(b?(d&&u.push(p),s&&_.push(c)):(Na(n,u,_,h,v),h=v=0,u=[],_=[]));Na(n,u,_,h,v),n.closePath(),n.fillStyle=a,n.fill()}var ja={id:"filler",afterDatasetsUpdate:function(n,e){var t,o,a,r,i=(n.data.datasets||[]).length,l=e.propagate,f=[];for(o=0;o<i;++o)r=null,(a=(t=n.getDatasetMeta(o)).dataset)&&a._model&&a instanceof Un.Line&&(r={visible:n.isDatasetVisible(o),fill:Ra(a,o,i),chart:n,el:a}),t.$filler=r,f.push(r);for(o=0;o<i;++o)(r=f[o])&&(r.fill=Aa(f,o,l),r.boundary=Oa(r),r.mapper=Ia(r))},beforeDatasetsDraw:function(n){var e,t,o,a,r,i,l,f=n._getSortedVisibleDatasetMetas(),p=n.ctx;for(t=f.length-1;t>=0;--t)(e=f[t].$filler)&&e.visible&&(a=(o=e.el)._view,r=o._children||[],i=e.mapper,l=a.backgroundColor||J.global.defaultColor,i&&l&&r.length&&(ln.canvas.clipArea(p,n.chartArea),Ea(p,r,i,a,l,o._loop),ln.canvas.unclipArea(p)))}},Ga=ln.rtl.getRtlAdapter,Ya=ln.noop,Va=ln.valueOrDefault;function qa(n,e){return n.usePointStyle&&n.boxWidth>e?e:n.boxWidth}J._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(n,e){var t=e.datasetIndex,o=this.chart,a=o.getDatasetMeta(t);a.hidden=null===a.hidden?!o.data.datasets[t].hidden:null,o.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(n){var e=n.data.datasets,t=n.options.legend||{},o=t.labels&&t.labels.usePointStyle;return n._getSortedDatasetMetas().map((function(t){var a=t.controller.getStyle(o?0:void 0);return{text:e[t.index].label,fillStyle:a.backgroundColor,hidden:!n.isDatasetVisible(t.index),lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:a.borderWidth,strokeStyle:a.borderColor,pointStyle:a.pointStyle,rotation:a.rotation,datasetIndex:t.index}}),this)}}},legendCallback:function(n){var e,t,o,a=document.createElement("ul"),r=n.data.datasets;for(a.setAttribute("class",n.id+"-legend"),e=0,t=r.length;e<t;e++)(o=a.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=r[e].backgroundColor,r[e].label&&o.appendChild(document.createTextNode(r[e].label));return a.outerHTML}});var Ua=bn.extend({initialize:function(n){var e=this;ln.extend(e,n),e.legendHitBoxes=[],e._hoveredItem=null,e.doughnutMode=!1},beforeUpdate:Ya,update:function(n,e,t){var o=this;return o.beforeUpdate(),o.maxWidth=n,o.maxHeight=e,o.margins=t,o.beforeSetDimensions(),o.setDimensions(),o.afterSetDimensions(),o.beforeBuildLabels(),o.buildLabels(),o.afterBuildLabels(),o.beforeFit(),o.fit(),o.afterFit(),o.afterUpdate(),o.minSize},afterUpdate:Ya,beforeSetDimensions:Ya,setDimensions:function(){var n=this;n.isHorizontal()?(n.width=n.maxWidth,n.left=0,n.right=n.width):(n.height=n.maxHeight,n.top=0,n.bottom=n.height),n.paddingLeft=0,n.paddingTop=0,n.paddingRight=0,n.paddingBottom=0,n.minSize={width:0,height:0}},afterSetDimensions:Ya,beforeBuildLabels:Ya,buildLabels:function(){var n=this,e=n.options.labels||{},t=ln.callback(e.generateLabels,[n.chart],n)||[];e.filter&&(t=t.filter((function(t){return e.filter(t,n.chart.data)}))),n.options.reverse&&t.reverse(),n.legendItems=t},afterBuildLabels:Ya,beforeFit:Ya,fit:function(){var n=this,e=n.options,t=e.labels,o=e.display,a=n.ctx,r=ln.options._parseFont(t),i=r.size,l=n.legendHitBoxes=[],f=n.minSize,p=n.isHorizontal();if(p?(f.width=n.maxWidth,f.height=o?10:0):(f.width=o?10:0,f.height=n.maxHeight),o){if(a.font=r.string,p){var c=n.lineWidths=[0],d=0;a.textAlign="left",a.textBaseline="middle",ln.each(n.legendItems,(function(n,e){var o=qa(t,i)+i/2+a.measureText(n.text).width;(0===e||c[c.length-1]+o+2*t.padding>f.width)&&(d+=i+t.padding,c[c.length-(e>0?0:1)]=0),l[e]={left:0,top:0,width:o,height:i},c[c.length-1]+=o+t.padding})),f.height+=d}else{var s=t.padding,m=n.columnWidths=[],g=n.columnHeights=[],b=t.padding,u=0,_=0;ln.each(n.legendItems,(function(n,e){var o=qa(t,i)+i/2+a.measureText(n.text).width;e>0&&_+i+2*s>f.height&&(b+=u+t.padding,m.push(u),g.push(_),u=0,_=0),u=Math.max(u,o),_+=i+s,l[e]={left:0,top:0,width:o,height:i}})),b+=u,m.push(u),g.push(_),f.width+=b}n.width=f.width,n.height=f.height}else n.width=f.width=n.height=f.height=0},afterFit:Ya,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var n=this,e=n.options,t=e.labels,o=J.global,a=o.defaultColor,r=o.elements.line,i=n.height,l=n.columnHeights,f=n.width,p=n.lineWidths;if(e.display){var c,d=Ga(e.rtl,n.left,n.minSize.width),s=n.ctx,m=Va(t.fontColor,o.defaultFontColor),g=ln.options._parseFont(t),b=g.size;s.textAlign=d.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.strokeStyle=m,s.fillStyle=m,s.font=g.string;var u=qa(t,b),_=n.legendHitBoxes,h=function(n,e,o){if(!(isNaN(u)||u<=0)){s.save();var i=Va(o.lineWidth,r.borderWidth);if(s.fillStyle=Va(o.fillStyle,a),s.lineCap=Va(o.lineCap,r.borderCapStyle),s.lineDashOffset=Va(o.lineDashOffset,r.borderDashOffset),s.lineJoin=Va(o.lineJoin,r.borderJoinStyle),s.lineWidth=i,s.strokeStyle=Va(o.strokeStyle,a),s.setLineDash&&s.setLineDash(Va(o.lineDash,r.borderDash)),t&&t.usePointStyle){var l=u*Math.SQRT2/2,f=d.xPlus(n,u/2),p=e+b/2;ln.canvas.drawPoint(s,o.pointStyle,l,f,p,o.rotation)}else s.fillRect(d.leftForLtr(n,u),e,u,b),0!==i&&s.strokeRect(d.leftForLtr(n,u),e,u,b);s.restore()}},v=function(n,e,t,o){var a=b/2,r=d.xPlus(n,u+a),i=e+a;s.fillText(t.text,r,i),t.hidden&&(s.beginPath(),s.lineWidth=2,s.moveTo(r,i),s.lineTo(d.xPlus(r,o),i),s.stroke())},x=function(n,o){switch(e.align){case"start":return t.padding;case"end":return n-o;default:return(n-o+t.padding)/2}},w=n.isHorizontal();c=w?{x:n.left+x(f,p[0]),y:n.top+t.padding,line:0}:{x:n.left+t.padding,y:n.top+x(i,l[0]),line:0},ln.rtl.overrideTextDirection(n.ctx,e.textDirection);var y=b+t.padding;ln.each(n.legendItems,(function(e,o){var a=s.measureText(e.text).width,r=u+b/2+a,m=c.x,g=c.y;d.setWidth(n.minSize.width),w?o>0&&m+r+t.padding>n.left+n.minSize.width&&(g=c.y+=y,c.line++,m=c.x=n.left+x(f,p[c.line])):o>0&&g+y>n.top+n.minSize.height&&(m=c.x=m+n.columnWidths[c.line]+t.padding,c.line++,g=c.y=n.top+x(i,l[c.line]));var k=d.x(m);h(k,g,e),_[o].left=d.leftForLtr(k,_[o].width),_[o].top=g,v(k,g,e,a),w?c.x+=r+t.padding:c.y+=y})),ln.rtl.restoreTextDirection(n.ctx,e.textDirection)}},_getLegendItemAt:function(n,e){var t,o,a,r=this;if(n>=r.left&&n<=r.right&&e>=r.top&&e<=r.bottom)for(a=r.legendHitBoxes,t=0;t<a.length;++t)if(n>=(o=a[t]).left&&n<=o.left+o.width&&e>=o.top&&e<=o.top+o.height)return r.legendItems[t];return null},handleEvent:function(n){var e,t=this,o=t.options,a="mouseup"===n.type?"click":n.type;if("mousemove"===a){if(!o.onHover&&!o.onLeave)return}else{if("click"!==a)return;if(!o.onClick)return}e=t._getLegendItemAt(n.x,n.y),"click"===a?e&&o.onClick&&o.onClick.call(t,n.native,e):(o.onLeave&&e!==t._hoveredItem&&(t._hoveredItem&&o.onLeave.call(t,n.native,t._hoveredItem),t._hoveredItem=e),o.onHover&&e&&o.onHover.call(t,n.native,e))}});function Xa(n,e){var t=new Ua({ctx:n.ctx,options:e,chart:n});Ve.configure(n,t,e),Ve.addBox(n,t),n.legend=t}var Za={id:"legend",_element:Ua,beforeInit:function(n){var e=n.options.legend;e&&Xa(n,e)},beforeUpdate:function(n){var e=n.options.legend,t=n.legend;e?(ln.mergeIf(e,J.global.legend),t?(Ve.configure(n,t,e),t.options=e):Xa(n,e)):t&&(Ve.removeBox(n,t),delete n.legend)},afterEvent:function(n,e){var t=n.legend;t&&t.handleEvent(e)}},$a=ln.noop;J._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var Ka=bn.extend({initialize:function(n){var e=this;ln.extend(e,n),e.legendHitBoxes=[]},beforeUpdate:$a,update:function(n,e,t){var o=this;return o.beforeUpdate(),o.maxWidth=n,o.maxHeight=e,o.margins=t,o.beforeSetDimensions(),o.setDimensions(),o.afterSetDimensions(),o.beforeBuildLabels(),o.buildLabels(),o.afterBuildLabels(),o.beforeFit(),o.fit(),o.afterFit(),o.afterUpdate(),o.minSize},afterUpdate:$a,beforeSetDimensions:$a,setDimensions:function(){var n=this;n.isHorizontal()?(n.width=n.maxWidth,n.left=0,n.right=n.width):(n.height=n.maxHeight,n.top=0,n.bottom=n.height),n.paddingLeft=0,n.paddingTop=0,n.paddingRight=0,n.paddingBottom=0,n.minSize={width:0,height:0}},afterSetDimensions:$a,beforeBuildLabels:$a,buildLabels:$a,afterBuildLabels:$a,beforeFit:$a,fit:function(){var n,e=this,t=e.options,o=e.minSize={},a=e.isHorizontal();t.display?(n=(ln.isArray(t.text)?t.text.length:1)*ln.options._parseFont(t).lineHeight+2*t.padding,e.width=o.width=a?e.maxWidth:n,e.height=o.height=a?n:e.maxHeight):e.width=o.width=e.height=o.height=0},afterFit:$a,isHorizontal:function(){var n=this.options.position;return"top"===n||"bottom"===n},draw:function(){var n=this,e=n.ctx,t=n.options;if(t.display){var o,a,r,i=ln.options._parseFont(t),l=i.lineHeight,f=l/2+t.padding,p=0,c=n.top,d=n.left,s=n.bottom,m=n.right;e.fillStyle=ln.valueOrDefault(t.fontColor,J.global.defaultFontColor),e.font=i.string,n.isHorizontal()?(a=d+(m-d)/2,r=c+f,o=m-d):(a="left"===t.position?d+f:m-f,r=c+(s-c)/2,o=s-c,p=Math.PI*("left"===t.position?-.5:.5)),e.save(),e.translate(a,r),e.rotate(p),e.textAlign="center",e.textBaseline="middle";var g=t.text;if(ln.isArray(g))for(var b=0,u=0;u<g.length;++u)e.fillText(g[u],0,b,o),b+=l;else e.fillText(g,0,0,o);e.restore()}}});function Ja(n,e){var t=new Ka({ctx:n.ctx,options:e,chart:n});Ve.configure(n,t,e),Ve.addBox(n,t),n.titleBlock=t}var Qa={},nr=ja,er=Za,tr={id:"title",_element:Ka,beforeInit:function(n){var e=n.options.title;e&&Ja(n,e)},beforeUpdate:function(n){var e=n.options.title,t=n.titleBlock;e?(ln.mergeIf(e,J.global.title),t?(Ve.configure(n,t,e),t.options=e):Ja(n,e)):t&&(Ve.removeBox(n,t),delete n.titleBlock)}};for(var or in Qa.filler=nr,Qa.legend=er,Qa.title=tr,qt.helpers=ln,Ut(),qt._adapters=$t,qt.Animation=_n,qt.animationService=hn,qt.controllers=Be,qt.DatasetController=Cn,qt.defaults=J,qt.Element=bn,qt.elements=Un,qt.Interaction=We,qt.layouts=Ve,qt.platform=vt,qt.plugins=xt,qt.Scale=ho,qt.scaleService=wt,qt.Ticks=Kt,qt.Tooltip=Ot,qt.helpers.each(La,(function(n,e){qt.scaleService.registerScaleType(e,n,n._defaults)})),Qa)Qa.hasOwnProperty(or)&&qt.plugins.register(Qa[or]);qt.platform.initialize();var ar=qt;return"undefined"!=typeof window&&(window.Chart=qt),qt.Chart=qt,qt.Legend=Qa.legend._element,qt.Title=Qa.title._element,qt.pluginService=qt.plugins,qt.PluginBase=qt.Element.extend({}),qt.canvasHelpers=qt.helpers.canvas,qt.layoutService=qt.layouts,qt.LinearScaleBase=Po,qt.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],(function(n){qt[n]=function(e,t){return new qt(e,qt.helpers.merge(t||{},{type:n.charAt(0).toLowerCase()+n.slice(1)}))}})),ar}(function(){try{return Hn}catch(n){}}())}));let En=class extends tn{constructor(){super(),this.url="",window.addEventListener("resize",(()=>{this.chart&&this.chart.resize()}))}static get styles(){return nn`:host{position:relative;height:100%;width:100%;display:block;min-height:25rem}canvas{width:100px;height:100px}`}firstUpdated(){fetch(this.url).then((n=>n.json())).catch((n=>console.error(n))).then((n=>{var e;let t=(null===(e=this.shadowRoot)||void 0===e?void 0:e.querySelector("canvas")).getContext("2d");this.chart=new Nn(t,{type:"bar",data:{datasets:[{label:"Failed Logins",backgroundColor:"rgba(201, 25, 11, .5)",spanGaps:!0,data:n.logins_failed_per_1h},{label:"Successful Logins",backgroundColor:"rgba(189, 229, 184, .5)",spanGaps:!0,data:n.logins_per_1h}]},options:{maintainAspectRatio:!1,spanGaps:!0,scales:{xAxes:[{stacked:!0,gridLines:{color:"rgba(0, 0, 0, 0)"},type:"time",offset:!0,ticks:{callback:function(n,e,t){const o=t[e],a=Date.now()-o.value;return Math.round(a/1e3/3600)+" Hours ago"},autoSkip:!0,maxTicksLimit:8}}],yAxes:[{stacked:!0,gridLines:{color:"rgba(0, 0, 0, 0)"}}]}}})}))}render(){return A`<canvas></canvas>`}};n([$()],En.prototype,"url",void 0),En=n([X("pb-admin-logins-chart")],En);
 //# sourceMappingURL=main.js.map
diff --git a/passbook/static/static/dist/main.js.map b/passbook/static/static/dist/main.js.map
index bb7123618..1c67dccca 100644
--- a/passbook/static/static/dist/main.js.map
+++ b/passbook/static/static/dist/main.js.map
@@ -1 +1 @@
-{"version":3,"file":"main.js","sources":["../node_modules/tslib/tslib.es6.js","../src/legacy.js","../node_modules/lit-html/src/lib/dom.ts","../node_modules/lit-html/src/lib/template.ts","../node_modules/lit-html/src/lib/modify-template.ts","../node_modules/lit-html/src/lib/directive.ts","../node_modules/lit-html/src/lib/part.ts","../node_modules/lit-html/src/lib/template-instance.ts","../node_modules/lit-html/src/lib/template-result.ts","../node_modules/lit-html/src/lib/parts.ts","../node_modules/lit-html/src/lib/template-factory.ts","../node_modules/lit-html/src/lib/render.ts","../node_modules/lit-html/src/lib/default-template-processor.ts","../node_modules/lit-html/src/lit-html.ts","../node_modules/lit-html/src/lib/shady-render.ts","../node_modules/lit-element/src/lib/updating-element.ts","../node_modules/lit-element/src/lib/decorators.ts","../node_modules/lit-element/src/lib/css-tag.ts","../node_modules/lit-element/src/lit-element.ts","../src/elements/Messages.ts","../src/elements/ActionButton.ts","../src/utils.ts","../src/elements/Sidebar.ts","../src/api/user.ts","../src/elements/SidebarBrand.ts","../src/elements/SidebarUser.ts","../node_modules/codemirror/lib/codemirror.js","../node_modules/codemirror/addon/display/autorefresh.js","../node_modules/codemirror/mode/xml/xml.js","../node_modules/codemirror/mode/yaml/yaml.js","../node_modules/codemirror/mode/python/python.js","../src/elements/CodeMirror.ts","../src/elements/Dropdown.ts","../src/elements/FetchFillSlot.ts","../src/elements/ModalButton.ts","../src/elements/Tabs.ts","../src/pages/SiteShell.ts","../src/pages/FlowShellCard.ts","../src/pages/RouterOutlet.ts","../node_modules/moment/moment.js","../node_modules/chart.js/dist/Chart.js","../src/elements/AdminLoginsChart.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n};\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to get private field on non-instance\");\r\n    }\r\n    return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to set private field on non-instance\");\r\n    }\r\n    privateMap.set(receiver, value);\r\n    return value;\r\n}\r\n","// Fetch from data-attributes\ndocument.querySelectorAll(\"[data-pb-fetch-fill]\").forEach((el) => {\n    const url = el.dataset.pbFetchFill;\n    const key = el.dataset.pbFetchKey;\n    fetch(url)\n        .then((r) => r.json())\n        .then((r) => {\n            el.textContent = r[key];\n            el.value = r[key];\n        });\n});\n\n// Modal\ndocument.querySelectorAll(\"[data-target='modal']\").forEach((m) => {\n    m.addEventListener(\"click\", (e) => {\n        const parentContainer = e.target.closest('[data-target=\"modal\"]');\n        const modalId = parentContainer.attributes[\"data-modal\"].value;\n        document.querySelector(`#${modalId}`).removeAttribute(\"hidden\");\n    });\n});\ndocument.querySelectorAll(\".pf-c-modal-box [data-modal-close]\").forEach((b) => {\n    b.addEventListener(\"click\", (e) => {\n        const parentContainer = e.target.closest(\".pf-c-backdrop\");\n        parentContainer.setAttribute(\"hidden\", true);\n    });\n});\n\n// Make Checkbox label click trigger checkbox toggle\ndocument.querySelectorAll(\".pf-c-check__label\").forEach((checkLabel) => {\n    checkLabel.addEventListener(\"click\", (e) => {\n        const checkbox = e.target.parentElement.querySelector(\n            \"input[type=checkbox]\"\n        );\n        checkbox.checked = !checkbox.checked;\n    });\n});\n\n// Hamburger Menu\ndocument\n    .querySelectorAll(\".pf-c-page__header-brand-toggle>button\")\n    .forEach((toggle) => {\n        toggle.addEventListener(\"click\", (e) => {\n            const sidebar = document.querySelector(\".pf-c-page__sidebar\");\n            if (sidebar.classList.contains(\"pf-m-expanded\")) {\n                // Sidebar already expanded\n                sidebar.classList.remove(\"pf-m-expanded\");\n                sidebar.style.zIndex = 0;\n            } else {\n                // Sidebar not expanded yet\n                sidebar.classList.add(\"pf-m-expanded\");\n                sidebar.style.zIndex = 200;\n            }\n        });\n    });\n\n// Collapsable Menus in Sidebar\ndocument\n    .querySelectorAll(\".pf-m-expandable>.pf-c-nav__link\")\n    .forEach((menu) => {\n        menu.addEventListener(\"click\", (e) => {\n            e.preventDefault();\n            menu.parentElement.classList.toggle(\"pf-m-expanded\");\n        });\n    });\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\ninterface MaybePolyfilledCe extends CustomElementRegistry {\n  readonly polyfillWrapFlushCallback?: object;\n}\n\n/**\n * True if the custom elements polyfill is in use.\n */\nexport const isCEPolyfill = typeof window !== 'undefined' &&\n    window.customElements != null &&\n    (window.customElements as MaybePolyfilledCe).polyfillWrapFlushCallback !==\n        undefined;\n\n/**\n * Reparents nodes, starting from `start` (inclusive) to `end` (exclusive),\n * into another container (could be the same container), before `before`. If\n * `before` is null, it appends the nodes to the container.\n */\nexport const reparentNodes =\n    (container: Node,\n     start: Node|null,\n     end: Node|null = null,\n     before: Node|null = null): void => {\n      while (start !== end) {\n        const n = start!.nextSibling;\n        container.insertBefore(start!, before);\n        start = n;\n      }\n    };\n\n/**\n * Removes nodes, starting from `start` (inclusive) to `end` (exclusive), from\n * `container`.\n */\nexport const removeNodes =\n    (container: Node, start: Node|null, end: Node|null = null): void => {\n      while (start !== end) {\n        const n = start!.nextSibling;\n        container.removeChild(start!);\n        start = n;\n      }\n    };\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {TemplateResult} from './template-result.js';\n\n/**\n * An expression marker with embedded unique key to avoid collision with\n * possible text in templates.\n */\nexport const marker = `{{lit-${String(Math.random()).slice(2)}}}`;\n\n/**\n * An expression marker used text-positions, multi-binding attributes, and\n * attributes with markup-like text values.\n */\nexport const nodeMarker = `<!--${marker}-->`;\n\nexport const markerRegex = new RegExp(`${marker}|${nodeMarker}`);\n\n/**\n * Suffix appended to all bound attribute names.\n */\nexport const boundAttributeSuffix = '$lit$';\n\n/**\n * An updatable Template that tracks the location of dynamic parts.\n */\nexport class Template {\n  readonly parts: TemplatePart[] = [];\n  readonly element: HTMLTemplateElement;\n\n  constructor(result: TemplateResult, element: HTMLTemplateElement) {\n    this.element = element;\n\n    const nodesToRemove: Node[] = [];\n    const stack: Node[] = [];\n    // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n    const walker = document.createTreeWalker(\n        element.content,\n        133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */,\n        null,\n        false);\n    // Keeps track of the last index associated with a part. We try to delete\n    // unnecessary nodes, but we never want to associate two different parts\n    // to the same index. They must have a constant node between.\n    let lastPartIndex = 0;\n    let index = -1;\n    let partIndex = 0;\n    const {strings, values: {length}} = result;\n    while (partIndex < length) {\n      const node = walker.nextNode() as Element | Comment | Text | null;\n      if (node === null) {\n        // We've exhausted the content inside a nested template element.\n        // Because we still have parts (the outer for-loop), we know:\n        // - There is a template in the stack\n        // - The walker will find a nextNode outside the template\n        walker.currentNode = stack.pop()!;\n        continue;\n      }\n      index++;\n\n      if (node.nodeType === 1 /* Node.ELEMENT_NODE */) {\n        if ((node as Element).hasAttributes()) {\n          const attributes = (node as Element).attributes;\n          const {length} = attributes;\n          // Per\n          // https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap,\n          // attributes are not guaranteed to be returned in document order.\n          // In particular, Edge/IE can return them out of order, so we cannot\n          // assume a correspondence between part index and attribute index.\n          let count = 0;\n          for (let i = 0; i < length; i++) {\n            if (endsWith(attributes[i].name, boundAttributeSuffix)) {\n              count++;\n            }\n          }\n          while (count-- > 0) {\n            // Get the template literal section leading up to the first\n            // expression in this attribute\n            const stringForPart = strings[partIndex];\n            // Find the attribute name\n            const name = lastAttributeNameRegex.exec(stringForPart)![2];\n            // Find the corresponding attribute\n            // All bound attributes have had a suffix added in\n            // TemplateResult#getHTML to opt out of special attribute\n            // handling. To look up the attribute value we also need to add\n            // the suffix.\n            const attributeLookupName =\n                name.toLowerCase() + boundAttributeSuffix;\n            const attributeValue =\n                (node as Element).getAttribute(attributeLookupName)!;\n            (node as Element).removeAttribute(attributeLookupName);\n            const statics = attributeValue.split(markerRegex);\n            this.parts.push({type: 'attribute', index, name, strings: statics});\n            partIndex += statics.length - 1;\n          }\n        }\n        if ((node as Element).tagName === 'TEMPLATE') {\n          stack.push(node);\n          walker.currentNode = (node as HTMLTemplateElement).content;\n        }\n      } else if (node.nodeType === 3 /* Node.TEXT_NODE */) {\n        const data = (node as Text).data;\n        if (data.indexOf(marker) >= 0) {\n          const parent = node.parentNode!;\n          const strings = data.split(markerRegex);\n          const lastIndex = strings.length - 1;\n          // Generate a new text node for each literal section\n          // These nodes are also used as the markers for node parts\n          for (let i = 0; i < lastIndex; i++) {\n            let insert: Node;\n            let s = strings[i];\n            if (s === '') {\n              insert = createMarker();\n            } else {\n              const match = lastAttributeNameRegex.exec(s);\n              if (match !== null && endsWith(match[2], boundAttributeSuffix)) {\n                s = s.slice(0, match.index) + match[1] +\n                    match[2].slice(0, -boundAttributeSuffix.length) + match[3];\n              }\n              insert = document.createTextNode(s);\n            }\n            parent.insertBefore(insert, node);\n            this.parts.push({type: 'node', index: ++index});\n          }\n          // If there's no text, we must insert a comment to mark our place.\n          // Else, we can trust it will stick around after cloning.\n          if (strings[lastIndex] === '') {\n            parent.insertBefore(createMarker(), node);\n            nodesToRemove.push(node);\n          } else {\n            (node as Text).data = strings[lastIndex];\n          }\n          // We have a part for each match found\n          partIndex += lastIndex;\n        }\n      } else if (node.nodeType === 8 /* Node.COMMENT_NODE */) {\n        if ((node as Comment).data === marker) {\n          const parent = node.parentNode!;\n          // Add a new marker node to be the startNode of the Part if any of\n          // the following are true:\n          //  * We don't have a previousSibling\n          //  * The previousSibling is already the start of a previous part\n          if (node.previousSibling === null || index === lastPartIndex) {\n            index++;\n            parent.insertBefore(createMarker(), node);\n          }\n          lastPartIndex = index;\n          this.parts.push({type: 'node', index});\n          // If we don't have a nextSibling, keep this node so we have an end.\n          // Else, we can remove it to save future costs.\n          if (node.nextSibling === null) {\n            (node as Comment).data = '';\n          } else {\n            nodesToRemove.push(node);\n            index--;\n          }\n          partIndex++;\n        } else {\n          let i = -1;\n          while ((i = (node as Comment).data.indexOf(marker, i + 1)) !== -1) {\n            // Comment node has a binding marker inside, make an inactive part\n            // The binding won't work, but subsequent bindings will\n            // TODO (justinfagnani): consider whether it's even worth it to\n            // make bindings in comments work\n            this.parts.push({type: 'node', index: -1});\n            partIndex++;\n          }\n        }\n      }\n    }\n\n    // Remove text binding nodes after the walk to not disturb the TreeWalker\n    for (const n of nodesToRemove) {\n      n.parentNode!.removeChild(n);\n    }\n  }\n}\n\nconst endsWith = (str: string, suffix: string): boolean => {\n  const index = str.length - suffix.length;\n  return index >= 0 && str.slice(index) === suffix;\n};\n\n/**\n * A placeholder for a dynamic expression in an HTML template.\n *\n * There are two built-in part types: AttributePart and NodePart. NodeParts\n * always represent a single dynamic expression, while AttributeParts may\n * represent as many expressions are contained in the attribute.\n *\n * A Template's parts are mutable, so parts can be replaced or modified\n * (possibly to implement different template semantics). The contract is that\n * parts can only be replaced, not removed, added or reordered, and parts must\n * always consume the correct number of values in their `update()` method.\n *\n * TODO(justinfagnani): That requirement is a little fragile. A\n * TemplateInstance could instead be more careful about which values it gives\n * to Part.update().\n */\nexport type TemplatePart = {\n  readonly type: 'node'; index: number;\n}|{\n  readonly type: 'attribute';\n  index: number;\n  readonly name: string;\n  readonly strings: ReadonlyArray<string>;\n};\n\nexport const isTemplatePartActive = (part: TemplatePart) => part.index !== -1;\n\n// Allows `document.createComment('')` to be renamed for a\n// small manual size-savings.\nexport const createMarker = () => document.createComment('');\n\n/**\n * This regex extracts the attribute name preceding an attribute-position\n * expression. It does this by matching the syntax allowed for attributes\n * against the string literal directly preceding the expression, assuming that\n * the expression is in an attribute-value position.\n *\n * See attributes in the HTML spec:\n * https://www.w3.org/TR/html5/syntax.html#elements-attributes\n *\n * \" \\x09\\x0a\\x0c\\x0d\" are HTML space characters:\n * https://www.w3.org/TR/html5/infrastructure.html#space-characters\n *\n * \"\\0-\\x1F\\x7F-\\x9F\" are Unicode control characters, which includes every\n * space character except \" \".\n *\n * So an attribute is:\n *  * The name: any character except a control character, space character, ('),\n *    (\"), \">\", \"=\", or \"/\"\n *  * Followed by zero or more space characters\n *  * Followed by \"=\"\n *  * Followed by zero or more space characters\n *  * Followed by:\n *    * Any character except space, ('), (\"), \"<\", \">\", \"=\", (`), or\n *    * (\") then any non-(\"), or\n *    * (') then any non-(')\n */\nexport const lastAttributeNameRegex =\n    // eslint-disable-next-line no-control-regex\n    /([ \\x09\\x0a\\x0c\\x0d])([^\\0-\\x1F\\x7F-\\x9F \"'>=/]+)([ \\x09\\x0a\\x0c\\x0d]*=[ \\x09\\x0a\\x0c\\x0d]*(?:[^ \\x09\\x0a\\x0c\\x0d\"'`<>=]*|\"[^\"]*|'[^']*))$/;\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {isTemplatePartActive, Template, TemplatePart} from './template.js';\n\nconst walkerNodeFilter = 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */;\n\n/**\n * Removes the list of nodes from a Template safely. In addition to removing\n * nodes from the Template, the Template part indices are updated to match\n * the mutated Template DOM.\n *\n * As the template is walked the removal state is tracked and\n * part indices are adjusted as needed.\n *\n * div\n *   div#1 (remove) <-- start removing (removing node is div#1)\n *     div\n *       div#2 (remove)  <-- continue removing (removing node is still div#1)\n *         div\n * div <-- stop removing since previous sibling is the removing node (div#1,\n * removed 4 nodes)\n */\nexport function removeNodesFromTemplate(\n    template: Template, nodesToRemove: Set<Node>) {\n  const {element: {content}, parts} = template;\n  const walker =\n      document.createTreeWalker(content, walkerNodeFilter, null, false);\n  let partIndex = nextActiveIndexInTemplateParts(parts);\n  let part = parts[partIndex];\n  let nodeIndex = -1;\n  let removeCount = 0;\n  const nodesToRemoveInTemplate = [];\n  let currentRemovingNode: Node|null = null;\n  while (walker.nextNode()) {\n    nodeIndex++;\n    const node = walker.currentNode as Element;\n    // End removal if stepped past the removing node\n    if (node.previousSibling === currentRemovingNode) {\n      currentRemovingNode = null;\n    }\n    // A node to remove was found in the template\n    if (nodesToRemove.has(node)) {\n      nodesToRemoveInTemplate.push(node);\n      // Track node we're removing\n      if (currentRemovingNode === null) {\n        currentRemovingNode = node;\n      }\n    }\n    // When removing, increment count by which to adjust subsequent part indices\n    if (currentRemovingNode !== null) {\n      removeCount++;\n    }\n    while (part !== undefined && part.index === nodeIndex) {\n      // If part is in a removed node deactivate it by setting index to -1 or\n      // adjust the index as needed.\n      part.index = currentRemovingNode !== null ? -1 : part.index - removeCount;\n      // go to the next active part.\n      partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n      part = parts[partIndex];\n    }\n  }\n  nodesToRemoveInTemplate.forEach((n) => n.parentNode!.removeChild(n));\n}\n\nconst countNodes = (node: Node) => {\n  let count = (node.nodeType === 11 /* Node.DOCUMENT_FRAGMENT_NODE */) ? 0 : 1;\n  const walker = document.createTreeWalker(node, walkerNodeFilter, null, false);\n  while (walker.nextNode()) {\n    count++;\n  }\n  return count;\n};\n\nconst nextActiveIndexInTemplateParts =\n    (parts: TemplatePart[], startIndex = -1) => {\n      for (let i = startIndex + 1; i < parts.length; i++) {\n        const part = parts[i];\n        if (isTemplatePartActive(part)) {\n          return i;\n        }\n      }\n      return -1;\n    };\n\n/**\n * Inserts the given node into the Template, optionally before the given\n * refNode. In addition to inserting the node into the Template, the Template\n * part indices are updated to match the mutated Template DOM.\n */\nexport function insertNodeIntoTemplate(\n    template: Template, node: Node, refNode: Node|null = null) {\n  const {element: {content}, parts} = template;\n  // If there's no refNode, then put node at end of template.\n  // No part indices need to be shifted in this case.\n  if (refNode === null || refNode === undefined) {\n    content.appendChild(node);\n    return;\n  }\n  const walker =\n      document.createTreeWalker(content, walkerNodeFilter, null, false);\n  let partIndex = nextActiveIndexInTemplateParts(parts);\n  let insertCount = 0;\n  let walkerIndex = -1;\n  while (walker.nextNode()) {\n    walkerIndex++;\n    const walkerNode = walker.currentNode as Element;\n    if (walkerNode === refNode) {\n      insertCount = countNodes(node);\n      refNode.parentNode!.insertBefore(node, refNode);\n    }\n    while (partIndex !== -1 && parts[partIndex].index === walkerIndex) {\n      // If we've inserted the node, simply adjust all subsequent parts\n      if (insertCount > 0) {\n        while (partIndex !== -1) {\n          parts[partIndex].index += insertCount;\n          partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n        }\n        return;\n      }\n      partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n    }\n  }\n}\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {Part} from './part.js';\n\nconst directives = new WeakMap<object, true>();\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type DirectiveFactory = (...args: any[]) => object;\n\nexport type DirectiveFn = (part: Part) => void;\n\n/**\n * Brands a function as a directive factory function so that lit-html will call\n * the function during template rendering, rather than passing as a value.\n *\n * A _directive_ is a function that takes a Part as an argument. It has the\n * signature: `(part: Part) => void`.\n *\n * A directive _factory_ is a function that takes arguments for data and\n * configuration and returns a directive. Users of directive usually refer to\n * the directive factory as the directive. For example, \"The repeat directive\".\n *\n * Usually a template author will invoke a directive factory in their template\n * with relevant arguments, which will then return a directive function.\n *\n * Here's an example of using the `repeat()` directive factory that takes an\n * array and a function to render an item:\n *\n * ```js\n * html`<ul><${repeat(items, (item) => html`<li>${item}</li>`)}</ul>`\n * ```\n *\n * When `repeat` is invoked, it returns a directive function that closes over\n * `items` and the template function. When the outer template is rendered, the\n * return directive function is called with the Part for the expression.\n * `repeat` then performs it's custom logic to render multiple items.\n *\n * @param f The directive factory function. Must be a function that returns a\n * function of the signature `(part: Part) => void`. The returned function will\n * be called with the part object.\n *\n * @example\n *\n * import {directive, html} from 'lit-html';\n *\n * const immutable = directive((v) => (part) => {\n *   if (part.value !== v) {\n *     part.setValue(v)\n *   }\n * });\n */\nexport const directive = <F extends DirectiveFactory>(f: F): F =>\n    ((...args: unknown[]) => {\n      const d = f(...args);\n      directives.set(d, true);\n      return d;\n    }) as F;\n\nexport const isDirective = (o: unknown): o is DirectiveFn => {\n  return typeof o === 'function' && directives.has(o);\n};\n","/**\n * @license\n * Copyright (c) 2018 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * The Part interface represents a dynamic part of a template instance rendered\n * by lit-html.\n */\nexport interface Part {\n  readonly value: unknown;\n\n  /**\n   * Sets the current part value, but does not write it to the DOM.\n   * @param value The value that will be committed.\n   */\n  setValue(value: unknown): void;\n\n  /**\n   * Commits the current part value, causing it to actually be written to the\n   * DOM.\n   *\n   * Directives are run at the start of `commit`, so that if they call\n   * `part.setValue(...)` synchronously that value will be used in the current\n   * commit, and there's no need to call `part.commit()` within the directive.\n   * If directives set a part value asynchronously, then they must call\n   * `part.commit()` manually.\n   */\n  commit(): void;\n}\n\n/**\n * A sentinel value that signals that a value was handled by a directive and\n * should not be written to the DOM.\n */\nexport const noChange = {};\n\n/**\n * A sentinel value that signals a NodePart to fully clear its content.\n */\nexport const nothing = {};\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {isCEPolyfill} from './dom.js';\nimport {Part} from './part.js';\nimport {RenderOptions} from './render-options.js';\nimport {TemplateProcessor} from './template-processor.js';\nimport {isTemplatePartActive, Template, TemplatePart} from './template.js';\n\n/**\n * An instance of a `Template` that can be attached to the DOM and updated\n * with new values.\n */\nexport class TemplateInstance {\n  private readonly __parts: Array<Part|undefined> = [];\n  readonly processor: TemplateProcessor;\n  readonly options: RenderOptions;\n  readonly template: Template;\n\n  constructor(\n      template: Template, processor: TemplateProcessor,\n      options: RenderOptions) {\n    this.template = template;\n    this.processor = processor;\n    this.options = options;\n  }\n\n  update(values: readonly unknown[]) {\n    let i = 0;\n    for (const part of this.__parts) {\n      if (part !== undefined) {\n        part.setValue(values[i]);\n      }\n      i++;\n    }\n    for (const part of this.__parts) {\n      if (part !== undefined) {\n        part.commit();\n      }\n    }\n  }\n\n  _clone(): DocumentFragment {\n    // There are a number of steps in the lifecycle of a template instance's\n    // DOM fragment:\n    //  1. Clone - create the instance fragment\n    //  2. Adopt - adopt into the main document\n    //  3. Process - find part markers and create parts\n    //  4. Upgrade - upgrade custom elements\n    //  5. Update - set node, attribute, property, etc., values\n    //  6. Connect - connect to the document. Optional and outside of this\n    //     method.\n    //\n    // We have a few constraints on the ordering of these steps:\n    //  * We need to upgrade before updating, so that property values will pass\n    //    through any property setters.\n    //  * We would like to process before upgrading so that we're sure that the\n    //    cloned fragment is inert and not disturbed by self-modifying DOM.\n    //  * We want custom elements to upgrade even in disconnected fragments.\n    //\n    // Given these constraints, with full custom elements support we would\n    // prefer the order: Clone, Process, Adopt, Upgrade, Update, Connect\n    //\n    // But Safari does not implement CustomElementRegistry#upgrade, so we\n    // can not implement that order and still have upgrade-before-update and\n    // upgrade disconnected fragments. So we instead sacrifice the\n    // process-before-upgrade constraint, since in Custom Elements v1 elements\n    // must not modify their light DOM in the constructor. We still have issues\n    // when co-existing with CEv0 elements like Polymer 1, and with polyfills\n    // that don't strictly adhere to the no-modification rule because shadow\n    // DOM, which may be created in the constructor, is emulated by being placed\n    // in the light DOM.\n    //\n    // The resulting order is on native is: Clone, Adopt, Upgrade, Process,\n    // Update, Connect. document.importNode() performs Clone, Adopt, and Upgrade\n    // in one step.\n    //\n    // The Custom Elements v1 polyfill supports upgrade(), so the order when\n    // polyfilled is the more ideal: Clone, Process, Adopt, Upgrade, Update,\n    // Connect.\n\n    const fragment = isCEPolyfill ?\n        this.template.element.content.cloneNode(true) as DocumentFragment :\n        document.importNode(this.template.element.content, true);\n\n    const stack: Node[] = [];\n    const parts = this.template.parts;\n    // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n    const walker = document.createTreeWalker(\n        fragment,\n        133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */,\n        null,\n        false);\n    let partIndex = 0;\n    let nodeIndex = 0;\n    let part: TemplatePart;\n    let node = walker.nextNode();\n    // Loop through all the nodes and parts of a template\n    while (partIndex < parts.length) {\n      part = parts[partIndex];\n      if (!isTemplatePartActive(part)) {\n        this.__parts.push(undefined);\n        partIndex++;\n        continue;\n      }\n\n      // Progress the tree walker until we find our next part's node.\n      // Note that multiple parts may share the same node (attribute parts\n      // on a single element), so this loop may not run at all.\n      while (nodeIndex < part.index) {\n        nodeIndex++;\n        if (node!.nodeName === 'TEMPLATE') {\n          stack.push(node!);\n          walker.currentNode = (node as HTMLTemplateElement).content;\n        }\n        if ((node = walker.nextNode()) === null) {\n          // We've exhausted the content inside a nested template element.\n          // Because we still have parts (the outer for-loop), we know:\n          // - There is a template in the stack\n          // - The walker will find a nextNode outside the template\n          walker.currentNode = stack.pop()!;\n          node = walker.nextNode();\n        }\n      }\n\n      // We've arrived at our part's node.\n      if (part.type === 'node') {\n        const part = this.processor.handleTextExpression(this.options);\n        part.insertAfterNode(node!.previousSibling!);\n        this.__parts.push(part);\n      } else {\n        this.__parts.push(...this.processor.handleAttributeExpressions(\n            node as Element, part.name, part.strings, this.options));\n      }\n      partIndex++;\n    }\n\n    if (isCEPolyfill) {\n      document.adoptNode(fragment);\n      customElements.upgrade(fragment);\n    }\n    return fragment;\n  }\n}\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * @module lit-html\n */\n\nimport {reparentNodes} from './dom.js';\nimport {TemplateProcessor} from './template-processor.js';\nimport {boundAttributeSuffix, lastAttributeNameRegex, marker, nodeMarker} from './template.js';\n\ndeclare const trustedTypes: typeof window.trustedTypes;\n/**\n * Our TrustedTypePolicy for HTML which is declared using the html template\n * tag function.\n *\n * That HTML is a developer-authored constant, and is parsed with innerHTML\n * before any untrusted expressions have been mixed in. Therefor it is\n * considered safe by construction.\n */\nconst policy = window.trustedTypes &&\n    trustedTypes!.createPolicy('lit-html', {createHTML: (s) => s});\n\nconst commentMarker = ` ${marker} `;\n\n/**\n * The return type of `html`, which holds a Template and the values from\n * interpolated expressions.\n */\nexport class TemplateResult {\n  readonly strings: TemplateStringsArray;\n  readonly values: readonly unknown[];\n  readonly type: string;\n  readonly processor: TemplateProcessor;\n\n  constructor(\n      strings: TemplateStringsArray, values: readonly unknown[], type: string,\n      processor: TemplateProcessor) {\n    this.strings = strings;\n    this.values = values;\n    this.type = type;\n    this.processor = processor;\n  }\n\n  /**\n   * Returns a string of HTML used to create a `<template>` element.\n   */\n  getHTML(): string {\n    const l = this.strings.length - 1;\n    let html = '';\n    let isCommentBinding = false;\n\n    for (let i = 0; i < l; i++) {\n      const s = this.strings[i];\n      // For each binding we want to determine the kind of marker to insert\n      // into the template source before it's parsed by the browser's HTML\n      // parser. The marker type is based on whether the expression is in an\n      // attribute, text, or comment position.\n      //   * For node-position bindings we insert a comment with the marker\n      //     sentinel as its text content, like <!--{{lit-guid}}-->.\n      //   * For attribute bindings we insert just the marker sentinel for the\n      //     first binding, so that we support unquoted attribute bindings.\n      //     Subsequent bindings can use a comment marker because multi-binding\n      //     attributes must be quoted.\n      //   * For comment bindings we insert just the marker sentinel so we don't\n      //     close the comment.\n      //\n      // The following code scans the template source, but is *not* an HTML\n      // parser. We don't need to track the tree structure of the HTML, only\n      // whether a binding is inside a comment, and if not, if it appears to be\n      // the first binding in an attribute.\n      const commentOpen = s.lastIndexOf('<!--');\n      // We're in comment position if we have a comment open with no following\n      // comment close. Because <-- can appear in an attribute value there can\n      // be false positives.\n      isCommentBinding = (commentOpen > -1 || isCommentBinding) &&\n          s.indexOf('-->', commentOpen + 1) === -1;\n      // Check to see if we have an attribute-like sequence preceding the\n      // expression. This can match \"name=value\" like structures in text,\n      // comments, and attribute values, so there can be false-positives.\n      const attributeMatch = lastAttributeNameRegex.exec(s);\n      if (attributeMatch === null) {\n        // We're only in this branch if we don't have a attribute-like\n        // preceding sequence. For comments, this guards against unusual\n        // attribute values like <div foo=\"<!--${'bar'}\">. Cases like\n        // <!-- foo=${'bar'}--> are handled correctly in the attribute branch\n        // below.\n        html += s + (isCommentBinding ? commentMarker : nodeMarker);\n      } else {\n        // For attributes we use just a marker sentinel, and also append a\n        // $lit$ suffix to the name to opt-out of attribute-specific parsing\n        // that IE and Edge do for style and certain SVG attributes.\n        html += s.substr(0, attributeMatch.index) + attributeMatch[1] +\n            attributeMatch[2] + boundAttributeSuffix + attributeMatch[3] +\n            marker;\n      }\n    }\n    html += this.strings[l];\n    return html;\n  }\n\n  getTemplateElement(): HTMLTemplateElement {\n    const template = document.createElement('template');\n    let value = this.getHTML();\n    if (policy !== undefined) {\n      // this is secure because `this.strings` is a TemplateStringsArray.\n      // TODO: validate this when\n      // https://github.com/tc39/proposal-array-is-template-object is\n      // implemented.\n      value = policy.createHTML(value) as unknown as string;\n    }\n    template.innerHTML = value;\n    return template;\n  }\n}\n\n/**\n * A TemplateResult for SVG fragments.\n *\n * This class wraps HTML in an `<svg>` tag in order to parse its contents in the\n * SVG namespace, then modifies the template to remove the `<svg>` tag so that\n * clones only container the original fragment.\n */\nexport class SVGTemplateResult extends TemplateResult {\n  getHTML(): string {\n    return `<svg>${super.getHTML()}</svg>`;\n  }\n\n  getTemplateElement(): HTMLTemplateElement {\n    const template = super.getTemplateElement();\n    const content = template.content;\n    const svgElement = content.firstChild!;\n    content.removeChild(svgElement);\n    reparentNodes(content, svgElement.firstChild);\n    return template;\n  }\n}\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {isDirective} from './directive.js';\nimport {removeNodes} from './dom.js';\nimport {noChange, nothing, Part} from './part.js';\nimport {RenderOptions} from './render-options.js';\nimport {TemplateInstance} from './template-instance.js';\nimport {TemplateResult} from './template-result.js';\nimport {createMarker} from './template.js';\n\n// https://tc39.github.io/ecma262/#sec-typeof-operator\nexport type Primitive = null|undefined|boolean|number|string|symbol|bigint;\nexport const isPrimitive = (value: unknown): value is Primitive => {\n  return (\n      value === null ||\n      !(typeof value === 'object' || typeof value === 'function'));\n};\nexport const isIterable = (value: unknown): value is Iterable<unknown> => {\n  return Array.isArray(value) ||\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      !!(value && (value as any)[Symbol.iterator]);\n};\n\n/**\n * Writes attribute values to the DOM for a group of AttributeParts bound to a\n * single attribute. The value is only set once even if there are multiple parts\n * for an attribute.\n */\nexport class AttributeCommitter {\n  readonly element: Element;\n  readonly name: string;\n  readonly strings: ReadonlyArray<string>;\n  readonly parts: ReadonlyArray<AttributePart>;\n  dirty = true;\n\n  constructor(element: Element, name: string, strings: ReadonlyArray<string>) {\n    this.element = element;\n    this.name = name;\n    this.strings = strings;\n    this.parts = [];\n    for (let i = 0; i < strings.length - 1; i++) {\n      (this.parts as AttributePart[])[i] = this._createPart();\n    }\n  }\n\n  /**\n   * Creates a single part. Override this to create a differnt type of part.\n   */\n  protected _createPart(): AttributePart {\n    return new AttributePart(this);\n  }\n\n  protected _getValue(): unknown {\n    const strings = this.strings;\n    const l = strings.length - 1;\n    const parts = this.parts;\n\n    // If we're assigning an attribute via syntax like:\n    //    attr=\"${foo}\"  or  attr=${foo}\n    // but not\n    //    attr=\"${foo} ${bar}\" or attr=\"${foo} baz\"\n    // then we don't want to coerce the attribute value into one long\n    // string. Instead we want to just return the value itself directly,\n    // so that sanitizeDOMValue can get the actual value rather than\n    // String(value)\n    // The exception is if v is an array, in which case we do want to smash\n    // it together into a string without calling String() on the array.\n    //\n    // This also allows trusted values (when using TrustedTypes) being\n    // assigned to DOM sinks without being stringified in the process.\n    if (l === 1 && strings[0] === '' && strings[1] === '') {\n      const v = parts[0].value;\n      if (typeof v === 'symbol') {\n        return String(v);\n      }\n      if (typeof v === 'string' || !isIterable(v)) {\n        return v;\n      }\n    }\n    let text = '';\n\n    for (let i = 0; i < l; i++) {\n      text += strings[i];\n      const part = parts[i];\n      if (part !== undefined) {\n        const v = part.value;\n        if (isPrimitive(v) || !isIterable(v)) {\n          text += typeof v === 'string' ? v : String(v);\n        } else {\n          for (const t of v) {\n            text += typeof t === 'string' ? t : String(t);\n          }\n        }\n      }\n    }\n\n    text += strings[l];\n    return text;\n  }\n\n  commit(): void {\n    if (this.dirty) {\n      this.dirty = false;\n      this.element.setAttribute(this.name, this._getValue() as string);\n    }\n  }\n}\n\n/**\n * A Part that controls all or part of an attribute value.\n */\nexport class AttributePart implements Part {\n  readonly committer: AttributeCommitter;\n  value: unknown = undefined;\n\n  constructor(committer: AttributeCommitter) {\n    this.committer = committer;\n  }\n\n  setValue(value: unknown): void {\n    if (value !== noChange && (!isPrimitive(value) || value !== this.value)) {\n      this.value = value;\n      // If the value is a not a directive, dirty the committer so that it'll\n      // call setAttribute. If the value is a directive, it'll dirty the\n      // committer if it calls setValue().\n      if (!isDirective(value)) {\n        this.committer.dirty = true;\n      }\n    }\n  }\n\n  commit() {\n    while (isDirective(this.value)) {\n      const directive = this.value;\n      this.value = noChange;\n      directive(this);\n    }\n    if (this.value === noChange) {\n      return;\n    }\n    this.committer.commit();\n  }\n}\n\n/**\n * A Part that controls a location within a Node tree. Like a Range, NodePart\n * has start and end locations and can set and update the Nodes between those\n * locations.\n *\n * NodeParts support several value types: primitives, Nodes, TemplateResults,\n * as well as arrays and iterables of those types.\n */\nexport class NodePart implements Part {\n  readonly options: RenderOptions;\n  startNode!: Node;\n  endNode!: Node;\n  value: unknown = undefined;\n  private __pendingValue: unknown = undefined;\n\n  constructor(options: RenderOptions) {\n    this.options = options;\n  }\n\n  /**\n   * Appends this part into a container.\n   *\n   * This part must be empty, as its contents are not automatically moved.\n   */\n  appendInto(container: Node) {\n    this.startNode = container.appendChild(createMarker());\n    this.endNode = container.appendChild(createMarker());\n  }\n\n  /**\n   * Inserts this part after the `ref` node (between `ref` and `ref`'s next\n   * sibling). Both `ref` and its next sibling must be static, unchanging nodes\n   * such as those that appear in a literal section of a template.\n   *\n   * This part must be empty, as its contents are not automatically moved.\n   */\n  insertAfterNode(ref: Node) {\n    this.startNode = ref;\n    this.endNode = ref.nextSibling!;\n  }\n\n  /**\n   * Appends this part into a parent part.\n   *\n   * This part must be empty, as its contents are not automatically moved.\n   */\n  appendIntoPart(part: NodePart) {\n    part.__insert(this.startNode = createMarker());\n    part.__insert(this.endNode = createMarker());\n  }\n\n  /**\n   * Inserts this part after the `ref` part.\n   *\n   * This part must be empty, as its contents are not automatically moved.\n   */\n  insertAfterPart(ref: NodePart) {\n    ref.__insert(this.startNode = createMarker());\n    this.endNode = ref.endNode;\n    ref.endNode = this.startNode;\n  }\n\n  setValue(value: unknown): void {\n    this.__pendingValue = value;\n  }\n\n  commit() {\n    if (this.startNode.parentNode === null) {\n      return;\n    }\n    while (isDirective(this.__pendingValue)) {\n      const directive = this.__pendingValue;\n      this.__pendingValue = noChange;\n      directive(this);\n    }\n    const value = this.__pendingValue;\n    if (value === noChange) {\n      return;\n    }\n    if (isPrimitive(value)) {\n      if (value !== this.value) {\n        this.__commitText(value);\n      }\n    } else if (value instanceof TemplateResult) {\n      this.__commitTemplateResult(value);\n    } else if (value instanceof Node) {\n      this.__commitNode(value);\n    } else if (isIterable(value)) {\n      this.__commitIterable(value);\n    } else if (value === nothing) {\n      this.value = nothing;\n      this.clear();\n    } else {\n      // Fallback, will render the string representation\n      this.__commitText(value);\n    }\n  }\n\n  private __insert(node: Node) {\n    this.endNode.parentNode!.insertBefore(node, this.endNode);\n  }\n\n  private __commitNode(value: Node): void {\n    if (this.value === value) {\n      return;\n    }\n    this.clear();\n    this.__insert(value);\n    this.value = value;\n  }\n\n  private __commitText(value: unknown): void {\n    const node = this.startNode.nextSibling!;\n    value = value == null ? '' : value;\n    // If `value` isn't already a string, we explicitly convert it here in case\n    // it can't be implicitly converted - i.e. it's a symbol.\n    const valueAsString: string =\n        typeof value === 'string' ? value : String(value);\n    if (node === this.endNode.previousSibling &&\n        node.nodeType === 3 /* Node.TEXT_NODE */) {\n      // If we only have a single text node between the markers, we can just\n      // set its value, rather than replacing it.\n      // TODO(justinfagnani): Can we just check if this.value is primitive?\n      (node as Text).data = valueAsString;\n    } else {\n      this.__commitNode(document.createTextNode(valueAsString));\n    }\n    this.value = value;\n  }\n\n  private __commitTemplateResult(value: TemplateResult): void {\n    const template = this.options.templateFactory(value);\n    if (this.value instanceof TemplateInstance &&\n        this.value.template === template) {\n      this.value.update(value.values);\n    } else {\n      // Make sure we propagate the template processor from the TemplateResult\n      // so that we use its syntax extension, etc. The template factory comes\n      // from the render function options so that it can control template\n      // caching and preprocessing.\n      const instance =\n          new TemplateInstance(template, value.processor, this.options);\n      const fragment = instance._clone();\n      instance.update(value.values);\n      this.__commitNode(fragment);\n      this.value = instance;\n    }\n  }\n\n  private __commitIterable(value: Iterable<unknown>): void {\n    // For an Iterable, we create a new InstancePart per item, then set its\n    // value to the item. This is a little bit of overhead for every item in\n    // an Iterable, but it lets us recurse easily and efficiently update Arrays\n    // of TemplateResults that will be commonly returned from expressions like:\n    // array.map((i) => html`${i}`), by reusing existing TemplateInstances.\n\n    // If _value is an array, then the previous render was of an\n    // iterable and _value will contain the NodeParts from the previous\n    // render. If _value is not an array, clear this part and make a new\n    // array for NodeParts.\n    if (!Array.isArray(this.value)) {\n      this.value = [];\n      this.clear();\n    }\n\n    // Lets us keep track of how many items we stamped so we can clear leftover\n    // items from a previous render\n    const itemParts = this.value as NodePart[];\n    let partIndex = 0;\n    let itemPart: NodePart|undefined;\n\n    for (const item of value) {\n      // Try to reuse an existing part\n      itemPart = itemParts[partIndex];\n\n      // If no existing part, create a new one\n      if (itemPart === undefined) {\n        itemPart = new NodePart(this.options);\n        itemParts.push(itemPart);\n        if (partIndex === 0) {\n          itemPart.appendIntoPart(this);\n        } else {\n          itemPart.insertAfterPart(itemParts[partIndex - 1]);\n        }\n      }\n      itemPart.setValue(item);\n      itemPart.commit();\n      partIndex++;\n    }\n\n    if (partIndex < itemParts.length) {\n      // Truncate the parts array so _value reflects the current state\n      itemParts.length = partIndex;\n      this.clear(itemPart && itemPart.endNode);\n    }\n  }\n\n  clear(startNode: Node = this.startNode) {\n    removeNodes(\n        this.startNode.parentNode!, startNode.nextSibling!, this.endNode);\n  }\n}\n\n/**\n * Implements a boolean attribute, roughly as defined in the HTML\n * specification.\n *\n * If the value is truthy, then the attribute is present with a value of\n * ''. If the value is falsey, the attribute is removed.\n */\nexport class BooleanAttributePart implements Part {\n  readonly element: Element;\n  readonly name: string;\n  readonly strings: readonly string[];\n  value: unknown = undefined;\n  private __pendingValue: unknown = undefined;\n\n  constructor(element: Element, name: string, strings: readonly string[]) {\n    if (strings.length !== 2 || strings[0] !== '' || strings[1] !== '') {\n      throw new Error(\n          'Boolean attributes can only contain a single expression');\n    }\n    this.element = element;\n    this.name = name;\n    this.strings = strings;\n  }\n\n  setValue(value: unknown): void {\n    this.__pendingValue = value;\n  }\n\n  commit() {\n    while (isDirective(this.__pendingValue)) {\n      const directive = this.__pendingValue;\n      this.__pendingValue = noChange;\n      directive(this);\n    }\n    if (this.__pendingValue === noChange) {\n      return;\n    }\n    const value = !!this.__pendingValue;\n    if (this.value !== value) {\n      if (value) {\n        this.element.setAttribute(this.name, '');\n      } else {\n        this.element.removeAttribute(this.name);\n      }\n      this.value = value;\n    }\n    this.__pendingValue = noChange;\n  }\n}\n\n/**\n * Sets attribute values for PropertyParts, so that the value is only set once\n * even if there are multiple parts for a property.\n *\n * If an expression controls the whole property value, then the value is simply\n * assigned to the property under control. If there are string literals or\n * multiple expressions, then the strings are expressions are interpolated into\n * a string first.\n */\nexport class PropertyCommitter extends AttributeCommitter {\n  readonly single: boolean;\n\n  constructor(element: Element, name: string, strings: ReadonlyArray<string>) {\n    super(element, name, strings);\n    this.single =\n        (strings.length === 2 && strings[0] === '' && strings[1] === '');\n  }\n\n  protected _createPart(): PropertyPart {\n    return new PropertyPart(this);\n  }\n\n  protected _getValue() {\n    if (this.single) {\n      return this.parts[0].value;\n    }\n    return super._getValue();\n  }\n\n  commit(): void {\n    if (this.dirty) {\n      this.dirty = false;\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      (this.element as any)[this.name] = this._getValue();\n    }\n  }\n}\n\nexport class PropertyPart extends AttributePart {}\n\n// Detect event listener options support. If the `capture` property is read\n// from the options object, then options are supported. If not, then the third\n// argument to add/removeEventListener is interpreted as the boolean capture\n// value so we should only pass the `capture` property.\nlet eventOptionsSupported = false;\n\n// Wrap into an IIFE because MS Edge <= v41 does not support having try/catch\n// blocks right into the body of a module\n(() => {\n  try {\n    const options = {\n      get capture() {\n        eventOptionsSupported = true;\n        return false;\n      }\n    };\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    window.addEventListener('test', options as any, options);\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    window.removeEventListener('test', options as any, options);\n  } catch (_e) {\n    // event options not supported\n  }\n})();\n\ntype EventHandlerWithOptions =\n    EventListenerOrEventListenerObject&Partial<AddEventListenerOptions>;\nexport class EventPart implements Part {\n  readonly element: Element;\n  readonly eventName: string;\n  readonly eventContext?: EventTarget;\n  value: undefined|EventHandlerWithOptions = undefined;\n  private __options?: AddEventListenerOptions;\n  private __pendingValue: undefined|EventHandlerWithOptions = undefined;\n  private readonly __boundHandleEvent: (event: Event) => void;\n\n  constructor(element: Element, eventName: string, eventContext?: EventTarget) {\n    this.element = element;\n    this.eventName = eventName;\n    this.eventContext = eventContext;\n    this.__boundHandleEvent = (e) => this.handleEvent(e);\n  }\n\n  setValue(value: undefined|EventHandlerWithOptions): void {\n    this.__pendingValue = value;\n  }\n\n  commit() {\n    while (isDirective(this.__pendingValue)) {\n      const directive = this.__pendingValue;\n      this.__pendingValue = noChange as EventHandlerWithOptions;\n      directive(this);\n    }\n    if (this.__pendingValue === noChange) {\n      return;\n    }\n\n    const newListener = this.__pendingValue;\n    const oldListener = this.value;\n    const shouldRemoveListener = newListener == null ||\n        oldListener != null &&\n            (newListener.capture !== oldListener.capture ||\n             newListener.once !== oldListener.once ||\n             newListener.passive !== oldListener.passive);\n    const shouldAddListener =\n        newListener != null && (oldListener == null || shouldRemoveListener);\n\n    if (shouldRemoveListener) {\n      this.element.removeEventListener(\n          this.eventName, this.__boundHandleEvent, this.__options);\n    }\n    if (shouldAddListener) {\n      this.__options = getOptions(newListener);\n      this.element.addEventListener(\n          this.eventName, this.__boundHandleEvent, this.__options);\n    }\n    this.value = newListener;\n    this.__pendingValue = noChange as EventHandlerWithOptions;\n  }\n\n  handleEvent(event: Event) {\n    if (typeof this.value === 'function') {\n      this.value.call(this.eventContext || this.element, event);\n    } else {\n      (this.value as EventListenerObject).handleEvent(event);\n    }\n  }\n}\n\n// We copy options because of the inconsistent behavior of browsers when reading\n// the third argument of add/removeEventListener. IE11 doesn't support options\n// at all. Chrome 41 only reads `capture` if the argument is an object.\nconst getOptions = (o: AddEventListenerOptions|undefined) => o &&\n    (eventOptionsSupported ?\n         {capture: o.capture, passive: o.passive, once: o.once} :\n         o.capture as AddEventListenerOptions);\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {TemplateResult} from './template-result.js';\nimport {marker, Template} from './template.js';\n\n/**\n * A function type that creates a Template from a TemplateResult.\n *\n * This is a hook into the template-creation process for rendering that\n * requires some modification of templates before they're used, like ShadyCSS,\n * which must add classes to elements and remove styles.\n *\n * Templates should be cached as aggressively as possible, so that many\n * TemplateResults produced from the same expression only do the work of\n * creating the Template the first time.\n *\n * Templates are usually cached by TemplateResult.strings and\n * TemplateResult.type, but may be cached by other keys if this function\n * modifies the template.\n *\n * Note that currently TemplateFactories must not add, remove, or reorder\n * expressions, because there is no way to describe such a modification\n * to render() so that values are interpolated to the correct place in the\n * template instances.\n */\nexport type TemplateFactory = (result: TemplateResult) => Template;\n\n/**\n * The default TemplateFactory which caches Templates keyed on\n * result.type and result.strings.\n */\nexport function templateFactory(result: TemplateResult) {\n  let templateCache = templateCaches.get(result.type);\n  if (templateCache === undefined) {\n    templateCache = {\n      stringsArray: new WeakMap<TemplateStringsArray, Template>(),\n      keyString: new Map<string, Template>()\n    };\n    templateCaches.set(result.type, templateCache);\n  }\n\n  let template = templateCache.stringsArray.get(result.strings);\n  if (template !== undefined) {\n    return template;\n  }\n\n  // If the TemplateStringsArray is new, generate a key from the strings\n  // This key is shared between all templates with identical content\n  const key = result.strings.join(marker);\n\n  // Check if we already have a Template for this key\n  template = templateCache.keyString.get(key);\n  if (template === undefined) {\n    // If we have not seen this key before, create a new Template\n    template = new Template(result, result.getTemplateElement());\n    // Cache the Template for this key\n    templateCache.keyString.set(key, template);\n  }\n\n  // Cache all future queries for this TemplateStringsArray\n  templateCache.stringsArray.set(result.strings, template);\n  return template;\n}\n\n/**\n * The first argument to JS template tags retain identity across multiple\n * calls to a tag for the same literal, so we can cache work done per literal\n * in a Map.\n *\n * Safari currently has a bug which occasionally breaks this behavior, so we\n * need to cache the Template at two levels. We first cache the\n * TemplateStringsArray, and if that fails, we cache a key constructed by\n * joining the strings array.\n */\nexport interface TemplateCache {\n  readonly stringsArray: WeakMap<TemplateStringsArray, Template>;\n  readonly keyString: Map<string, Template>;\n}\n\nexport const templateCaches = new Map<string, TemplateCache>();\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {removeNodes} from './dom.js';\nimport {NodePart} from './parts.js';\nimport {RenderOptions} from './render-options.js';\nimport {templateFactory} from './template-factory.js';\n\nexport const parts = new WeakMap<Node, NodePart>();\n\n/**\n * Renders a template result or other value to a container.\n *\n * To update a container with new values, reevaluate the template literal and\n * call `render` with the new result.\n *\n * @param result Any value renderable by NodePart - typically a TemplateResult\n *     created by evaluating a template tag like `html` or `svg`.\n * @param container A DOM parent to render to. The entire contents are either\n *     replaced, or efficiently updated if the same result type was previous\n *     rendered there.\n * @param options RenderOptions for the entire render tree rendered to this\n *     container. Render options must *not* change between renders to the same\n *     container, as those changes will not effect previously rendered DOM.\n */\nexport const render =\n    (result: unknown,\n     container: Element|DocumentFragment,\n     options?: Partial<RenderOptions>) => {\n      let part = parts.get(container);\n      if (part === undefined) {\n        removeNodes(container, container.firstChild);\n        parts.set(container, part = new NodePart({\n                               templateFactory,\n                               ...options,\n                             }));\n        part.appendInto(container);\n      }\n      part.setValue(result);\n      part.commit();\n    };\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {Part} from './part.js';\nimport {AttributeCommitter, BooleanAttributePart, EventPart, NodePart, PropertyCommitter} from './parts.js';\nimport {RenderOptions} from './render-options.js';\nimport {TemplateProcessor} from './template-processor.js';\n\n/**\n * Creates Parts when a template is instantiated.\n */\nexport class DefaultTemplateProcessor implements TemplateProcessor {\n  /**\n   * Create parts for an attribute-position binding, given the event, attribute\n   * name, and string literals.\n   *\n   * @param element The element containing the binding\n   * @param name  The attribute name\n   * @param strings The string literals. There are always at least two strings,\n   *   event for fully-controlled bindings with a single expression.\n   */\n  handleAttributeExpressions(\n      element: Element, name: string, strings: string[],\n      options: RenderOptions): ReadonlyArray<Part> {\n    const prefix = name[0];\n    if (prefix === '.') {\n      const committer = new PropertyCommitter(element, name.slice(1), strings);\n      return committer.parts;\n    }\n    if (prefix === '@') {\n      return [new EventPart(element, name.slice(1), options.eventContext)];\n    }\n    if (prefix === '?') {\n      return [new BooleanAttributePart(element, name.slice(1), strings)];\n    }\n    const committer = new AttributeCommitter(element, name, strings);\n    return committer.parts;\n  }\n  /**\n   * Create parts for a text-position binding.\n   * @param templateFactory\n   */\n  handleTextExpression(options: RenderOptions) {\n    return new NodePart(options);\n  }\n}\n\nexport const defaultTemplateProcessor = new DefaultTemplateProcessor();\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n *\n * Main lit-html module.\n *\n * Main exports:\n *\n * -  [[html]]\n * -  [[svg]]\n * -  [[render]]\n *\n * @packageDocumentation\n */\n\n/**\n * Do not remove this comment; it keeps typedoc from misplacing the module\n * docs.\n */\nimport {defaultTemplateProcessor} from './lib/default-template-processor.js';\nimport {SVGTemplateResult, TemplateResult} from './lib/template-result.js';\n\nexport {DefaultTemplateProcessor, defaultTemplateProcessor} from './lib/default-template-processor.js';\nexport {directive, DirectiveFn, isDirective} from './lib/directive.js';\n// TODO(justinfagnani): remove line when we get NodePart moving methods\nexport {removeNodes, reparentNodes} from './lib/dom.js';\nexport {noChange, nothing, Part} from './lib/part.js';\nexport {AttributeCommitter, AttributePart, BooleanAttributePart, EventPart, isIterable, isPrimitive, NodePart, PropertyCommitter, PropertyPart} from './lib/parts.js';\nexport {RenderOptions} from './lib/render-options.js';\nexport {parts, render} from './lib/render.js';\nexport {templateCaches, templateFactory} from './lib/template-factory.js';\nexport {TemplateInstance} from './lib/template-instance.js';\nexport {TemplateProcessor} from './lib/template-processor.js';\nexport {SVGTemplateResult, TemplateResult} from './lib/template-result.js';\nexport {createMarker, isTemplatePartActive, Template} from './lib/template.js';\n\ndeclare global {\n  interface Window {\n    litHtmlVersions: string[];\n  }\n}\n\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for lit-html usage.\n// TODO(justinfagnani): inject version number at build time\nif (typeof window !== 'undefined') {\n  (window['litHtmlVersions'] || (window['litHtmlVersions'] = [])).push('1.3.0');\n}\n\n/**\n * Interprets a template literal as an HTML template that can efficiently\n * render to and update a container.\n */\nexport const html = (strings: TemplateStringsArray, ...values: unknown[]) =>\n    new TemplateResult(strings, values, 'html', defaultTemplateProcessor);\n\n/**\n * Interprets a template literal as an SVG template that can efficiently\n * render to and update a container.\n */\nexport const svg = (strings: TemplateStringsArray, ...values: unknown[]) =>\n    new SVGTemplateResult(strings, values, 'svg', defaultTemplateProcessor);\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * Module to add shady DOM/shady CSS polyfill support to lit-html template\n * rendering. See the [[render]] method for details.\n *\n * @packageDocumentation\n */\n\n/**\n * Do not remove this comment; it keeps typedoc from misplacing the module\n * docs.\n */\nimport {removeNodes} from './dom.js';\nimport {insertNodeIntoTemplate, removeNodesFromTemplate} from './modify-template.js';\nimport {RenderOptions} from './render-options.js';\nimport {parts, render as litRender} from './render.js';\nimport {templateCaches} from './template-factory.js';\nimport {TemplateInstance} from './template-instance.js';\nimport {TemplateResult} from './template-result.js';\nimport {marker, Template} from './template.js';\n\nexport {html, svg, TemplateResult} from '../lit-html.js';\n\n// Get a key to lookup in `templateCaches`.\nconst getTemplateCacheKey = (type: string, scopeName: string) =>\n    `${type}--${scopeName}`;\n\nlet compatibleShadyCSSVersion = true;\n\nif (typeof window.ShadyCSS === 'undefined') {\n  compatibleShadyCSSVersion = false;\n} else if (typeof window.ShadyCSS.prepareTemplateDom === 'undefined') {\n  console.warn(\n      `Incompatible ShadyCSS version detected. ` +\n      `Please update to at least @webcomponents/webcomponentsjs@2.0.2 and ` +\n      `@webcomponents/shadycss@1.3.1.`);\n  compatibleShadyCSSVersion = false;\n}\n\n/**\n * Template factory which scopes template DOM using ShadyCSS.\n * @param scopeName {string}\n */\nexport const shadyTemplateFactory = (scopeName: string) =>\n    (result: TemplateResult) => {\n      const cacheKey = getTemplateCacheKey(result.type, scopeName);\n      let templateCache = templateCaches.get(cacheKey);\n      if (templateCache === undefined) {\n        templateCache = {\n          stringsArray: new WeakMap<TemplateStringsArray, Template>(),\n          keyString: new Map<string, Template>()\n        };\n        templateCaches.set(cacheKey, templateCache);\n      }\n\n      let template = templateCache.stringsArray.get(result.strings);\n      if (template !== undefined) {\n        return template;\n      }\n\n      const key = result.strings.join(marker);\n      template = templateCache.keyString.get(key);\n      if (template === undefined) {\n        const element = result.getTemplateElement();\n        if (compatibleShadyCSSVersion) {\n          window.ShadyCSS!.prepareTemplateDom(element, scopeName);\n        }\n        template = new Template(result, element);\n        templateCache.keyString.set(key, template);\n      }\n      templateCache.stringsArray.set(result.strings, template);\n      return template;\n    };\n\nconst TEMPLATE_TYPES = ['html', 'svg'];\n\n/**\n * Removes all style elements from Templates for the given scopeName.\n */\nconst removeStylesFromLitTemplates = (scopeName: string) => {\n  TEMPLATE_TYPES.forEach((type) => {\n    const templates = templateCaches.get(getTemplateCacheKey(type, scopeName));\n    if (templates !== undefined) {\n      templates.keyString.forEach((template) => {\n        const {element: {content}} = template;\n        // IE 11 doesn't support the iterable param Set constructor\n        const styles = new Set<Element>();\n        Array.from(content.querySelectorAll('style')).forEach((s: Element) => {\n          styles.add(s);\n        });\n        removeNodesFromTemplate(template, styles);\n      });\n    }\n  });\n};\n\nconst shadyRenderSet = new Set<string>();\n\n/**\n * For the given scope name, ensures that ShadyCSS style scoping is performed.\n * This is done just once per scope name so the fragment and template cannot\n * be modified.\n * (1) extracts styles from the rendered fragment and hands them to ShadyCSS\n * to be scoped and appended to the document\n * (2) removes style elements from all lit-html Templates for this scope name.\n *\n * Note, <style> elements can only be placed into templates for the\n * initial rendering of the scope. If <style> elements are included in templates\n * dynamically rendered to the scope (after the first scope render), they will\n * not be scoped and the <style> will be left in the template and rendered\n * output.\n */\nconst prepareTemplateStyles =\n    (scopeName: string, renderedDOM: DocumentFragment, template?: Template) => {\n      shadyRenderSet.add(scopeName);\n      // If `renderedDOM` is stamped from a Template, then we need to edit that\n      // Template's underlying template element. Otherwise, we create one here\n      // to give to ShadyCSS, which still requires one while scoping.\n      const templateElement =\n          !!template ? template.element : document.createElement('template');\n      // Move styles out of rendered DOM and store.\n      const styles = renderedDOM.querySelectorAll('style');\n      const {length} = styles;\n      // If there are no styles, skip unnecessary work\n      if (length === 0) {\n        // Ensure prepareTemplateStyles is called to support adding\n        // styles via `prepareAdoptedCssText` since that requires that\n        // `prepareTemplateStyles` is called.\n        //\n        // ShadyCSS will only update styles containing @apply in the template\n        // given to `prepareTemplateStyles`. If no lit Template was given,\n        // ShadyCSS will not be able to update uses of @apply in any relevant\n        // template. However, this is not a problem because we only create the\n        // template for the purpose of supporting `prepareAdoptedCssText`,\n        // which doesn't support @apply at all.\n        window.ShadyCSS!.prepareTemplateStyles(templateElement, scopeName);\n        return;\n      }\n      const condensedStyle = document.createElement('style');\n      // Collect styles into a single style. This helps us make sure ShadyCSS\n      // manipulations will not prevent us from being able to fix up template\n      // part indices.\n      // NOTE: collecting styles is inefficient for browsers but ShadyCSS\n      // currently does this anyway. When it does not, this should be changed.\n      for (let i = 0; i < length; i++) {\n        const style = styles[i];\n        style.parentNode!.removeChild(style);\n        condensedStyle.textContent! += style.textContent;\n      }\n      // Remove styles from nested templates in this scope.\n      removeStylesFromLitTemplates(scopeName);\n      // And then put the condensed style into the \"root\" template passed in as\n      // `template`.\n      const content = templateElement.content;\n      if (!!template) {\n        insertNodeIntoTemplate(template, condensedStyle, content.firstChild);\n      } else {\n        content.insertBefore(condensedStyle, content.firstChild);\n      }\n      // Note, it's important that ShadyCSS gets the template that `lit-html`\n      // will actually render so that it can update the style inside when\n      // needed (e.g. @apply native Shadow DOM case).\n      window.ShadyCSS!.prepareTemplateStyles(templateElement, scopeName);\n      const style = content.querySelector('style');\n      if (window.ShadyCSS!.nativeShadow && style !== null) {\n        // When in native Shadow DOM, ensure the style created by ShadyCSS is\n        // included in initially rendered output (`renderedDOM`).\n        renderedDOM.insertBefore(style.cloneNode(true), renderedDOM.firstChild);\n      } else if (!!template) {\n        // When no style is left in the template, parts will be broken as a\n        // result. To fix this, we put back the style node ShadyCSS removed\n        // and then tell lit to remove that node from the template.\n        // There can be no style in the template in 2 cases (1) when Shady DOM\n        // is in use, ShadyCSS removes all styles, (2) when native Shadow DOM\n        // is in use ShadyCSS removes the style if it contains no content.\n        // NOTE, ShadyCSS creates its own style so we can safely add/remove\n        // `condensedStyle` here.\n        content.insertBefore(condensedStyle, content.firstChild);\n        const removes = new Set<Node>();\n        removes.add(condensedStyle);\n        removeNodesFromTemplate(template, removes);\n      }\n    };\n\nexport interface ShadyRenderOptions extends Partial<RenderOptions> {\n  scopeName: string;\n}\n\n/**\n * Extension to the standard `render` method which supports rendering\n * to ShadowRoots when the ShadyDOM (https://github.com/webcomponents/shadydom)\n * and ShadyCSS (https://github.com/webcomponents/shadycss) polyfills are used\n * or when the webcomponentsjs\n * (https://github.com/webcomponents/webcomponentsjs) polyfill is used.\n *\n * Adds a `scopeName` option which is used to scope element DOM and stylesheets\n * when native ShadowDOM is unavailable. The `scopeName` will be added to\n * the class attribute of all rendered DOM. In addition, any style elements will\n * be automatically re-written with this `scopeName` selector and moved out\n * of the rendered DOM and into the document `<head>`.\n *\n * It is common to use this render method in conjunction with a custom element\n * which renders a shadowRoot. When this is done, typically the element's\n * `localName` should be used as the `scopeName`.\n *\n * In addition to DOM scoping, ShadyCSS also supports a basic shim for css\n * custom properties (needed only on older browsers like IE11) and a shim for\n * a deprecated feature called `@apply` that supports applying a set of css\n * custom properties to a given location.\n *\n * Usage considerations:\n *\n * * Part values in `<style>` elements are only applied the first time a given\n * `scopeName` renders. Subsequent changes to parts in style elements will have\n * no effect. Because of this, parts in style elements should only be used for\n * values that will never change, for example parts that set scope-wide theme\n * values or parts which render shared style elements.\n *\n * * Note, due to a limitation of the ShadyDOM polyfill, rendering in a\n * custom element's `constructor` is not supported. Instead rendering should\n * either done asynchronously, for example at microtask timing (for example\n * `Promise.resolve()`), or be deferred until the first time the element's\n * `connectedCallback` runs.\n *\n * Usage considerations when using shimmed custom properties or `@apply`:\n *\n * * Whenever any dynamic changes are made which affect\n * css custom properties, `ShadyCSS.styleElement(element)` must be called\n * to update the element. There are two cases when this is needed:\n * (1) the element is connected to a new parent, (2) a class is added to the\n * element that causes it to match different custom properties.\n * To address the first case when rendering a custom element, `styleElement`\n * should be called in the element's `connectedCallback`.\n *\n * * Shimmed custom properties may only be defined either for an entire\n * shadowRoot (for example, in a `:host` rule) or via a rule that directly\n * matches an element with a shadowRoot. In other words, instead of flowing from\n * parent to child as do native css custom properties, shimmed custom properties\n * flow only from shadowRoots to nested shadowRoots.\n *\n * * When using `@apply` mixing css shorthand property names with\n * non-shorthand names (for example `border` and `border-width`) is not\n * supported.\n */\nexport const render =\n    (result: unknown,\n     container: Element|DocumentFragment|ShadowRoot,\n     options: ShadyRenderOptions) => {\n      if (!options || typeof options !== 'object' || !options.scopeName) {\n        throw new Error('The `scopeName` option is required.');\n      }\n      const scopeName = options.scopeName;\n      const hasRendered = parts.has(container);\n      const needsScoping = compatibleShadyCSSVersion &&\n          container.nodeType === 11 /* Node.DOCUMENT_FRAGMENT_NODE */ &&\n          !!(container as ShadowRoot).host;\n      // Handle first render to a scope specially...\n      const firstScopeRender = needsScoping && !shadyRenderSet.has(scopeName);\n      // On first scope render, render into a fragment; this cannot be a single\n      // fragment that is reused since nested renders can occur synchronously.\n      const renderContainer =\n          firstScopeRender ? document.createDocumentFragment() : container;\n      litRender(\n          result,\n          renderContainer,\n          {templateFactory: shadyTemplateFactory(scopeName), ...options} as\n              RenderOptions);\n      // When performing first scope render,\n      // (1) We've rendered into a fragment so that there's a chance to\n      // `prepareTemplateStyles` before sub-elements hit the DOM\n      // (which might cause them to render based on a common pattern of\n      // rendering in a custom element's `connectedCallback`);\n      // (2) Scope the template with ShadyCSS one time only for this scope.\n      // (3) Render the fragment into the container and make sure the\n      // container knows its `part` is the one we just rendered. This ensures\n      // DOM will be re-used on subsequent renders.\n      if (firstScopeRender) {\n        const part = parts.get(renderContainer)!;\n        parts.delete(renderContainer);\n        // ShadyCSS might have style sheets (e.g. from `prepareAdoptedCssText`)\n        // that should apply to `renderContainer` even if the rendered value is\n        // not a TemplateInstance. However, it will only insert scoped styles\n        // into the document if `prepareTemplateStyles` has already been called\n        // for the given scope name.\n        const template = part.value instanceof TemplateInstance ?\n            part.value.template :\n            undefined;\n        prepareTemplateStyles(\n            scopeName, renderContainer as DocumentFragment, template);\n        removeNodes(container, container.firstChild);\n        container.appendChild(renderContainer);\n        parts.set(container, part);\n      }\n      // After elements have hit the DOM, update styling if this is the\n      // initial render to this container.\n      // This is needed whenever dynamic changes are made so it would be\n      // safest to do every render; however, this would regress performance\n      // so we leave it up to the user to call `ShadyCSS.styleElement`\n      // for dynamic changes.\n      if (!hasRendered && needsScoping) {\n        window.ShadyCSS!.styleElement((container as ShadowRoot).host);\n      }\n    };\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * Use this module if you want to create your own base class extending\n * [[UpdatingElement]].\n * @packageDocumentation\n */\n\n/*\n * When using Closure Compiler, JSCompiler_renameProperty(property, object) is\n * replaced at compile time by the munged name for object[property]. We cannot\n * alias this function, so we have to use a small shim that has the same\n * behavior when not compiling.\n */\nwindow.JSCompiler_renameProperty =\n    <P extends PropertyKey>(prop: P, _obj: unknown): P => prop;\n\ndeclare global {\n  var JSCompiler_renameProperty: <P extends PropertyKey>(\n      prop: P, _obj: unknown) => P;\n\n  interface Window {\n    JSCompiler_renameProperty: typeof JSCompiler_renameProperty;\n  }\n}\n\n/**\n * Converts property values to and from attribute values.\n */\nexport interface ComplexAttributeConverter<Type = unknown, TypeHint = unknown> {\n  /**\n   * Function called to convert an attribute value to a property\n   * value.\n   */\n  fromAttribute?(value: string|null, type?: TypeHint): Type;\n\n  /**\n   * Function called to convert a property value to an attribute\n   * value.\n   *\n   * It returns unknown instead of string, to be compatible with\n   * https://github.com/WICG/trusted-types (and similar efforts).\n   */\n  toAttribute?(value: Type, type?: TypeHint): unknown;\n}\n\ntype AttributeConverter<Type = unknown, TypeHint = unknown> =\n    ComplexAttributeConverter<Type>|\n    ((value: string|null, type?: TypeHint) => Type);\n\n/**\n * Defines options for a property accessor.\n */\nexport interface PropertyDeclaration<Type = unknown, TypeHint = unknown> {\n  /**\n   * Indicates how and whether the property becomes an observed attribute.\n   * If the value is `false`, the property is not added to `observedAttributes`.\n   * If true or absent, the lowercased property name is observed (e.g. `fooBar`\n   * becomes `foobar`). If a string, the string value is observed (e.g\n   * `attribute: 'foo-bar'`).\n   */\n  readonly attribute?: boolean|string;\n\n  /**\n   * Indicates the type of the property. This is used only as a hint for the\n   * `converter` to determine how to convert the attribute\n   * to/from a property.\n   */\n  readonly type?: TypeHint;\n\n  /**\n   * Indicates how to convert the attribute to/from a property. If this value\n   * is a function, it is used to convert the attribute value a the property\n   * value. If it's an object, it can have keys for `fromAttribute` and\n   * `toAttribute`. If no `toAttribute` function is provided and\n   * `reflect` is set to `true`, the property value is set directly to the\n   * attribute. A default `converter` is used if none is provided; it supports\n   * `Boolean`, `String`, `Number`, `Object`, and `Array`. Note,\n   * when a property changes and the converter is used to update the attribute,\n   * the property is never updated again as a result of the attribute changing,\n   * and vice versa.\n   */\n  readonly converter?: AttributeConverter<Type, TypeHint>;\n\n  /**\n   * Indicates if the property should reflect to an attribute.\n   * If `true`, when the property is set, the attribute is set using the\n   * attribute name determined according to the rules for the `attribute`\n   * property option and the value of the property converted using the rules\n   * from the `converter` property option.\n   */\n  readonly reflect?: boolean;\n\n  /**\n   * A function that indicates if a property should be considered changed when\n   * it is set. The function should take the `newValue` and `oldValue` and\n   * return `true` if an update should be requested.\n   */\n  hasChanged?(value: Type, oldValue: Type): boolean;\n\n  /**\n   * Indicates whether an accessor will be created for this property. By\n   * default, an accessor will be generated for this property that requests an\n   * update when set. If this flag is `true`, no accessor will be created, and\n   * it will be the user's responsibility to call\n   * `this.requestUpdate(propertyName, oldValue)` to request an update when\n   * the property changes.\n   */\n  readonly noAccessor?: boolean;\n}\n\n/**\n * Map of properties to PropertyDeclaration options. For each property an\n * accessor is made, and the property is processed according to the\n * PropertyDeclaration options.\n */\nexport interface PropertyDeclarations {\n  readonly [key: string]: PropertyDeclaration;\n}\n\ntype PropertyDeclarationMap = Map<PropertyKey, PropertyDeclaration>;\n\ntype AttributeMap = Map<string, PropertyKey>;\n\n/**\n * Map of changed properties with old values. Takes an optional generic\n * interface corresponding to the declared element properties.\n */\n// tslint:disable-next-line:no-any\nexport type PropertyValues<T = any> =\n    keyof T extends PropertyKey ? Map<keyof T, unknown>: never;\n\nexport const defaultConverter: ComplexAttributeConverter = {\n\n  toAttribute(value: unknown, type?: unknown): unknown {\n    switch (type) {\n      case Boolean:\n        return value ? '' : null;\n      case Object:\n      case Array:\n        // if the value is `null` or `undefined` pass this through\n        // to allow removing/no change behavior.\n        return value == null ? value : JSON.stringify(value);\n    }\n    return value;\n  },\n\n  fromAttribute(value: string|null, type?: unknown) {\n    switch (type) {\n      case Boolean:\n        return value !== null;\n      case Number:\n        return value === null ? null : Number(value);\n      case Object:\n      case Array:\n        return JSON.parse(value!);\n    }\n    return value;\n  }\n\n};\n\nexport interface HasChanged {\n  (value: unknown, old: unknown): boolean;\n}\n\n/**\n * Change function that returns true if `value` is different from `oldValue`.\n * This method is used as the default for a property's `hasChanged` function.\n */\nexport const notEqual: HasChanged = (value: unknown, old: unknown): boolean => {\n  // This ensures (old==NaN, value==NaN) always returns false\n  return old !== value && (old === old || value === value);\n};\n\nconst defaultPropertyDeclaration: PropertyDeclaration = {\n  attribute: true,\n  type: String,\n  converter: defaultConverter,\n  reflect: false,\n  hasChanged: notEqual\n};\n\nconst STATE_HAS_UPDATED = 1;\nconst STATE_UPDATE_REQUESTED = 1 << 2;\nconst STATE_IS_REFLECTING_TO_ATTRIBUTE = 1 << 3;\nconst STATE_IS_REFLECTING_TO_PROPERTY = 1 << 4;\ntype UpdateState = typeof STATE_HAS_UPDATED|typeof STATE_UPDATE_REQUESTED|\n    typeof STATE_IS_REFLECTING_TO_ATTRIBUTE|\n    typeof STATE_IS_REFLECTING_TO_PROPERTY;\n\n/**\n * The Closure JS Compiler doesn't currently have good support for static\n * property semantics where \"this\" is dynamic (e.g.\n * https://github.com/google/closure-compiler/issues/3177 and others) so we use\n * this hack to bypass any rewriting by the compiler.\n */\nconst finalized = 'finalized';\n\n/**\n * Base element class which manages element properties and attributes. When\n * properties change, the `update` method is asynchronously called. This method\n * should be supplied by subclassers to render updates as desired.\n * @noInheritDoc\n */\nexport abstract class UpdatingElement extends HTMLElement {\n  /*\n   * Due to closure compiler ES6 compilation bugs, @nocollapse is required on\n   * all static methods and properties with initializers.  Reference:\n   * - https://github.com/google/closure-compiler/issues/1776\n   */\n\n  /**\n   * Maps attribute names to properties; for example `foobar` attribute to\n   * `fooBar` property. Created lazily on user subclasses when finalizing the\n   * class.\n   */\n  private static _attributeToPropertyMap: AttributeMap;\n\n  /**\n   * Marks class as having finished creating properties.\n   */\n  protected static[finalized] = true;\n\n  /**\n   * Memoized list of all class properties, including any superclass properties.\n   * Created lazily on user subclasses when finalizing the class.\n   */\n  private static _classProperties?: PropertyDeclarationMap;\n\n  /**\n   * User-supplied object that maps property names to `PropertyDeclaration`\n   * objects containing options for configuring the property.\n   */\n  static properties: PropertyDeclarations;\n\n  /**\n   * Returns a list of attributes corresponding to the registered properties.\n   * @nocollapse\n   */\n  static get observedAttributes() {\n    // note: piggy backing on this to ensure we're finalized.\n    this.finalize();\n    const attributes: string[] = [];\n    // Use forEach so this works even if for/of loops are compiled to for loops\n    // expecting arrays\n    this._classProperties!.forEach((v, p) => {\n      const attr = this._attributeNameForProperty(p, v);\n      if (attr !== undefined) {\n        this._attributeToPropertyMap.set(attr, p);\n        attributes.push(attr);\n      }\n    });\n    return attributes;\n  }\n\n  /**\n   * Ensures the private `_classProperties` property metadata is created.\n   * In addition to `finalize` this is also called in `createProperty` to\n   * ensure the `@property` decorator can add property metadata.\n   */\n  /** @nocollapse */\n  private static _ensureClassProperties() {\n    // ensure private storage for property declarations.\n    if (!this.hasOwnProperty(\n            JSCompiler_renameProperty('_classProperties', this))) {\n      this._classProperties = new Map();\n      // NOTE: Workaround IE11 not supporting Map constructor argument.\n      const superProperties: PropertyDeclarationMap =\n          Object.getPrototypeOf(this)._classProperties;\n      if (superProperties !== undefined) {\n        superProperties.forEach(\n            (v: PropertyDeclaration, k: PropertyKey) =>\n                this._classProperties!.set(k, v));\n      }\n    }\n  }\n\n  /**\n   * Creates a property accessor on the element prototype if one does not exist\n   * and stores a PropertyDeclaration for the property with the given options.\n   * The property setter calls the property's `hasChanged` property option\n   * or uses a strict identity check to determine whether or not to request\n   * an update.\n   *\n   * This method may be overridden to customize properties; however,\n   * when doing so, it's important to call `super.createProperty` to ensure\n   * the property is setup correctly. This method calls\n   * `getPropertyDescriptor` internally to get a descriptor to install.\n   * To customize what properties do when they are get or set, override\n   * `getPropertyDescriptor`. To customize the options for a property,\n   * implement `createProperty` like this:\n   *\n   * static createProperty(name, options) {\n   *   options = Object.assign(options, {myOption: true});\n   *   super.createProperty(name, options);\n   * }\n   *\n   * @nocollapse\n   */\n  static createProperty(\n      name: PropertyKey,\n      options: PropertyDeclaration = defaultPropertyDeclaration) {\n    // Note, since this can be called by the `@property` decorator which\n    // is called before `finalize`, we ensure storage exists for property\n    // metadata.\n    this._ensureClassProperties();\n    this._classProperties!.set(name, options);\n    // Do not generate an accessor if the prototype already has one, since\n    // it would be lost otherwise and that would never be the user's intention;\n    // Instead, we expect users to call `requestUpdate` themselves from\n    // user-defined accessors. Note that if the super has an accessor we will\n    // still overwrite it\n    if (options.noAccessor || this.prototype.hasOwnProperty(name)) {\n      return;\n    }\n    const key = typeof name === 'symbol' ? Symbol() : `__${name}`;\n    const descriptor = this.getPropertyDescriptor(name, key, options);\n    if (descriptor !== undefined) {\n      Object.defineProperty(this.prototype, name, descriptor);\n    }\n  }\n\n  /**\n   * Returns a property descriptor to be defined on the given named property.\n   * If no descriptor is returned, the property will not become an accessor.\n   * For example,\n   *\n   *   class MyElement extends LitElement {\n   *     static getPropertyDescriptor(name, key, options) {\n   *       const defaultDescriptor =\n   *           super.getPropertyDescriptor(name, key, options);\n   *       const setter = defaultDescriptor.set;\n   *       return {\n   *         get: defaultDescriptor.get,\n   *         set(value) {\n   *           setter.call(this, value);\n   *           // custom action.\n   *         },\n   *         configurable: true,\n   *         enumerable: true\n   *       }\n   *     }\n   *   }\n   *\n   * @nocollapse\n   */\n  protected static getPropertyDescriptor(\n      name: PropertyKey, key: string|symbol, options: PropertyDeclaration) {\n    return {\n      // tslint:disable-next-line:no-any no symbol in index\n      get(): any {\n        return (this as {[key: string]: unknown})[key as string];\n      },\n      set(this: UpdatingElement, value: unknown) {\n        const oldValue =\n            (this as {} as {[key: string]: unknown})[name as string];\n        (this as {} as {[key: string]: unknown})[key as string] = value;\n        (this as unknown as UpdatingElement)\n            .requestUpdateInternal(name, oldValue, options);\n      },\n      configurable: true,\n      enumerable: true\n    };\n  }\n\n  /**\n   * Returns the property options associated with the given property.\n   * These options are defined with a PropertyDeclaration via the `properties`\n   * object or the `@property` decorator and are registered in\n   * `createProperty(...)`.\n   *\n   * Note, this method should be considered \"final\" and not overridden. To\n   * customize the options for a given property, override `createProperty`.\n   *\n   * @nocollapse\n   * @final\n   */\n  protected static getPropertyOptions(name: PropertyKey) {\n    return this._classProperties && this._classProperties.get(name) ||\n        defaultPropertyDeclaration;\n  }\n\n  /**\n   * Creates property accessors for registered properties and ensures\n   * any superclasses are also finalized.\n   * @nocollapse\n   */\n  protected static finalize() {\n    // finalize any superclasses\n    const superCtor = Object.getPrototypeOf(this);\n    if (!superCtor.hasOwnProperty(finalized)) {\n      superCtor.finalize();\n    }\n    this[finalized] = true;\n    this._ensureClassProperties();\n    // initialize Map populated in observedAttributes\n    this._attributeToPropertyMap = new Map();\n    // make any properties\n    // Note, only process \"own\" properties since this element will inherit\n    // any properties defined on the superClass, and finalization ensures\n    // the entire prototype chain is finalized.\n    if (this.hasOwnProperty(JSCompiler_renameProperty('properties', this))) {\n      const props = this.properties;\n      // support symbols in properties (IE11 does not support this)\n      const propKeys = [\n        ...Object.getOwnPropertyNames(props),\n        ...(typeof Object.getOwnPropertySymbols === 'function') ?\n            Object.getOwnPropertySymbols(props) :\n            []\n      ];\n      // This for/of is ok because propKeys is an array\n      for (const p of propKeys) {\n        // note, use of `any` is due to TypeSript lack of support for symbol in\n        // index types\n        // tslint:disable-next-line:no-any no symbol in index\n        this.createProperty(p, (props as any)[p]);\n      }\n    }\n  }\n\n  /**\n   * Returns the property name for the given attribute `name`.\n   * @nocollapse\n   */\n  private static _attributeNameForProperty(\n      name: PropertyKey, options: PropertyDeclaration) {\n    const attribute = options.attribute;\n    return attribute === false ?\n        undefined :\n        (typeof attribute === 'string' ?\n             attribute :\n             (typeof name === 'string' ? name.toLowerCase() : undefined));\n  }\n\n  /**\n   * Returns true if a property should request an update.\n   * Called when a property value is set and uses the `hasChanged`\n   * option for the property if present or a strict identity check.\n   * @nocollapse\n   */\n  private static _valueHasChanged(\n      value: unknown, old: unknown, hasChanged: HasChanged = notEqual) {\n    return hasChanged(value, old);\n  }\n\n  /**\n   * Returns the property value for the given attribute value.\n   * Called via the `attributeChangedCallback` and uses the property's\n   * `converter` or `converter.fromAttribute` property option.\n   * @nocollapse\n   */\n  private static _propertyValueFromAttribute(\n      value: string|null, options: PropertyDeclaration) {\n    const type = options.type;\n    const converter = options.converter || defaultConverter;\n    const fromAttribute =\n        (typeof converter === 'function' ? converter : converter.fromAttribute);\n    return fromAttribute ? fromAttribute(value, type) : value;\n  }\n\n  /**\n   * Returns the attribute value for the given property value. If this\n   * returns undefined, the property will *not* be reflected to an attribute.\n   * If this returns null, the attribute will be removed, otherwise the\n   * attribute will be set to the value.\n   * This uses the property's `reflect` and `type.toAttribute` property options.\n   * @nocollapse\n   */\n  private static _propertyValueToAttribute(\n      value: unknown, options: PropertyDeclaration) {\n    if (options.reflect === undefined) {\n      return;\n    }\n    const type = options.type;\n    const converter = options.converter;\n    const toAttribute =\n        converter && (converter as ComplexAttributeConverter).toAttribute ||\n        defaultConverter.toAttribute;\n    return toAttribute!(value, type);\n  }\n\n  private _updateState!: UpdateState;\n  private _instanceProperties?: PropertyValues;\n  // Initialize to an unresolved Promise so we can make sure the element has\n  // connected before first update.\n  private _updatePromise!: Promise<unknown>;\n  private _enableUpdatingResolver: (() => void)|undefined;\n\n  /**\n   * Map with keys for any properties that have changed since the last\n   * update cycle with previous values.\n   */\n  private _changedProperties!: PropertyValues;\n\n  /**\n   * Map with keys of properties that should be reflected when updated.\n   */\n  private _reflectingProperties?: Map<PropertyKey, PropertyDeclaration>;\n\n  constructor() {\n    super();\n    this.initialize();\n  }\n\n  /**\n   * Performs element initialization. By default captures any pre-set values for\n   * registered properties.\n   */\n  protected initialize() {\n    this._updateState = 0;\n    this._updatePromise =\n        new Promise((res) => this._enableUpdatingResolver = res);\n    this._changedProperties = new Map();\n    this._saveInstanceProperties();\n    // ensures first update will be caught by an early access of\n    // `updateComplete`\n    this.requestUpdateInternal();\n  }\n\n  /**\n   * Fixes any properties set on the instance before upgrade time.\n   * Otherwise these would shadow the accessor and break these properties.\n   * The properties are stored in a Map which is played back after the\n   * constructor runs. Note, on very old versions of Safari (<=9) or Chrome\n   * (<=41), properties created for native platform properties like (`id` or\n   * `name`) may not have default values set in the element constructor. On\n   * these browsers native properties appear on instances and therefore their\n   * default value will overwrite any element default (e.g. if the element sets\n   * this.id = 'id' in the constructor, the 'id' will become '' since this is\n   * the native platform default).\n   */\n  private _saveInstanceProperties() {\n    // Use forEach so this works even if for/of loops are compiled to for loops\n    // expecting arrays\n    (this.constructor as typeof UpdatingElement)\n        ._classProperties!.forEach((_v, p) => {\n          if (this.hasOwnProperty(p)) {\n            const value = this[p as keyof this];\n            delete this[p as keyof this];\n            if (!this._instanceProperties) {\n              this._instanceProperties = new Map();\n            }\n            this._instanceProperties.set(p, value);\n          }\n        });\n  }\n\n  /**\n   * Applies previously saved instance properties.\n   */\n  private _applyInstanceProperties() {\n    // Use forEach so this works even if for/of loops are compiled to for loops\n    // expecting arrays\n    // tslint:disable-next-line:no-any\n    this._instanceProperties!.forEach((v, p) => (this as any)[p] = v);\n    this._instanceProperties = undefined;\n  }\n\n  connectedCallback() {\n    // Ensure first connection completes an update. Updates cannot complete\n    // before connection.\n    this.enableUpdating();\n  }\n\n  protected enableUpdating() {\n    if (this._enableUpdatingResolver !== undefined) {\n      this._enableUpdatingResolver();\n      this._enableUpdatingResolver = undefined;\n    }\n  }\n\n  /**\n   * Allows for `super.disconnectedCallback()` in extensions while\n   * reserving the possibility of making non-breaking feature additions\n   * when disconnecting at some point in the future.\n   */\n  disconnectedCallback() {\n  }\n\n  /**\n   * Synchronizes property values when attributes change.\n   */\n  attributeChangedCallback(name: string, old: string|null, value: string|null) {\n    if (old !== value) {\n      this._attributeToProperty(name, value);\n    }\n  }\n\n  private _propertyToAttribute(\n      name: PropertyKey, value: unknown,\n      options: PropertyDeclaration = defaultPropertyDeclaration) {\n    const ctor = (this.constructor as typeof UpdatingElement);\n    const attr = ctor._attributeNameForProperty(name, options);\n    if (attr !== undefined) {\n      const attrValue = ctor._propertyValueToAttribute(value, options);\n      // an undefined value does not change the attribute.\n      if (attrValue === undefined) {\n        return;\n      }\n      // Track if the property is being reflected to avoid\n      // setting the property again via `attributeChangedCallback`. Note:\n      // 1. this takes advantage of the fact that the callback is synchronous.\n      // 2. will behave incorrectly if multiple attributes are in the reaction\n      // stack at time of calling. However, since we process attributes\n      // in `update` this should not be possible (or an extreme corner case\n      // that we'd like to discover).\n      // mark state reflecting\n      this._updateState = this._updateState | STATE_IS_REFLECTING_TO_ATTRIBUTE;\n      if (attrValue == null) {\n        this.removeAttribute(attr);\n      } else {\n        this.setAttribute(attr, attrValue as string);\n      }\n      // mark state not reflecting\n      this._updateState = this._updateState & ~STATE_IS_REFLECTING_TO_ATTRIBUTE;\n    }\n  }\n\n  private _attributeToProperty(name: string, value: string|null) {\n    // Use tracking info to avoid deserializing attribute value if it was\n    // just set from a property setter.\n    if (this._updateState & STATE_IS_REFLECTING_TO_ATTRIBUTE) {\n      return;\n    }\n    const ctor = (this.constructor as typeof UpdatingElement);\n    // Note, hint this as an `AttributeMap` so closure clearly understands\n    // the type; it has issues with tracking types through statics\n    // tslint:disable-next-line:no-unnecessary-type-assertion\n    const propName = (ctor._attributeToPropertyMap as AttributeMap).get(name);\n    if (propName !== undefined) {\n      const options = ctor.getPropertyOptions(propName);\n      // mark state reflecting\n      this._updateState = this._updateState | STATE_IS_REFLECTING_TO_PROPERTY;\n      this[propName as keyof this] =\n          // tslint:disable-next-line:no-any\n          ctor._propertyValueFromAttribute(value, options) as any;\n      // mark state not reflecting\n      this._updateState = this._updateState & ~STATE_IS_REFLECTING_TO_PROPERTY;\n    }\n  }\n\n  /**\n   * This protected version of `requestUpdate` does not access or return the\n   * `updateComplete` promise. This promise can be overridden and is therefore\n   * not free to access.\n   */\n  protected requestUpdateInternal(\n      name?: PropertyKey, oldValue?: unknown, options?: PropertyDeclaration) {\n    let shouldRequestUpdate = true;\n    // If we have a property key, perform property update steps.\n    if (name !== undefined) {\n      const ctor = this.constructor as typeof UpdatingElement;\n      options = options || ctor.getPropertyOptions(name);\n      if (ctor._valueHasChanged(\n              this[name as keyof this], oldValue, options.hasChanged)) {\n        if (!this._changedProperties.has(name)) {\n          this._changedProperties.set(name, oldValue);\n        }\n        // Add to reflecting properties set.\n        // Note, it's important that every change has a chance to add the\n        // property to `_reflectingProperties`. This ensures setting\n        // attribute + property reflects correctly.\n        if (options.reflect === true &&\n            !(this._updateState & STATE_IS_REFLECTING_TO_PROPERTY)) {\n          if (this._reflectingProperties === undefined) {\n            this._reflectingProperties = new Map();\n          }\n          this._reflectingProperties.set(name, options);\n        }\n      } else {\n        // Abort the request if the property should not be considered changed.\n        shouldRequestUpdate = false;\n      }\n    }\n    if (!this._hasRequestedUpdate && shouldRequestUpdate) {\n      this._updatePromise = this._enqueueUpdate();\n    }\n  }\n\n  /**\n   * Requests an update which is processed asynchronously. This should\n   * be called when an element should update based on some state not triggered\n   * by setting a property. In this case, pass no arguments. It should also be\n   * called when manually implementing a property setter. In this case, pass the\n   * property `name` and `oldValue` to ensure that any configured property\n   * options are honored. Returns the `updateComplete` Promise which is resolved\n   * when the update completes.\n   *\n   * @param name {PropertyKey} (optional) name of requesting property\n   * @param oldValue {any} (optional) old value of requesting property\n   * @returns {Promise} A Promise that is resolved when the update completes.\n   */\n  requestUpdate(name?: PropertyKey, oldValue?: unknown) {\n    this.requestUpdateInternal(name, oldValue);\n    return this.updateComplete;\n  }\n\n  /**\n   * Sets up the element to asynchronously update.\n   */\n  private async _enqueueUpdate() {\n    this._updateState = this._updateState | STATE_UPDATE_REQUESTED;\n    try {\n      // Ensure any previous update has resolved before updating.\n      // This `await` also ensures that property changes are batched.\n      await this._updatePromise;\n    } catch (e) {\n      // Ignore any previous errors. We only care that the previous cycle is\n      // done. Any error should have been handled in the previous update.\n    }\n    const result = this.performUpdate();\n    // If `performUpdate` returns a Promise, we await it. This is done to\n    // enable coordinating updates with a scheduler. Note, the result is\n    // checked to avoid delaying an additional microtask unless we need to.\n    if (result != null) {\n      await result;\n    }\n    return !this._hasRequestedUpdate;\n  }\n\n  private get _hasRequestedUpdate() {\n    return (this._updateState & STATE_UPDATE_REQUESTED);\n  }\n\n  protected get hasUpdated() {\n    return (this._updateState & STATE_HAS_UPDATED);\n  }\n\n  /**\n   * Performs an element update. Note, if an exception is thrown during the\n   * update, `firstUpdated` and `updated` will not be called.\n   *\n   * You can override this method to change the timing of updates. If this\n   * method is overridden, `super.performUpdate()` must be called.\n   *\n   * For instance, to schedule updates to occur just before the next frame:\n   *\n   * ```\n   * protected async performUpdate(): Promise<unknown> {\n   *   await new Promise((resolve) => requestAnimationFrame(() => resolve()));\n   *   super.performUpdate();\n   * }\n   * ```\n   */\n  protected performUpdate(): void|Promise<unknown> {\n    // Abort any update if one is not pending when this is called.\n    // This can happen if `performUpdate` is called early to \"flush\"\n    // the update.\n    if (!this._hasRequestedUpdate) {\n      return;\n    }\n    // Mixin instance properties once, if they exist.\n    if (this._instanceProperties) {\n      this._applyInstanceProperties();\n    }\n    let shouldUpdate = false;\n    const changedProperties = this._changedProperties;\n    try {\n      shouldUpdate = this.shouldUpdate(changedProperties);\n      if (shouldUpdate) {\n        this.update(changedProperties);\n      } else {\n        this._markUpdated();\n      }\n    } catch (e) {\n      // Prevent `firstUpdated` and `updated` from running when there's an\n      // update exception.\n      shouldUpdate = false;\n      // Ensure element can accept additional updates after an exception.\n      this._markUpdated();\n      throw e;\n    }\n    if (shouldUpdate) {\n      if (!(this._updateState & STATE_HAS_UPDATED)) {\n        this._updateState = this._updateState | STATE_HAS_UPDATED;\n        this.firstUpdated(changedProperties);\n      }\n      this.updated(changedProperties);\n    }\n  }\n\n  private _markUpdated() {\n    this._changedProperties = new Map();\n    this._updateState = this._updateState & ~STATE_UPDATE_REQUESTED;\n  }\n\n  /**\n   * Returns a Promise that resolves when the element has completed updating.\n   * The Promise value is a boolean that is `true` if the element completed the\n   * update without triggering another update. The Promise result is `false` if\n   * a property was set inside `updated()`. If the Promise is rejected, an\n   * exception was thrown during the update.\n   *\n   * To await additional asynchronous work, override the `_getUpdateComplete`\n   * method. For example, it is sometimes useful to await a rendered element\n   * before fulfilling this Promise. To do this, first await\n   * `super._getUpdateComplete()`, then any subsequent state.\n   *\n   * @returns {Promise} The Promise returns a boolean that indicates if the\n   * update resolved without triggering another update.\n   */\n  get updateComplete() {\n    return this._getUpdateComplete();\n  }\n\n  /**\n   * Override point for the `updateComplete` promise.\n   *\n   * It is not safe to override the `updateComplete` getter directly due to a\n   * limitation in TypeScript which means it is not possible to call a\n   * superclass getter (e.g. `super.updateComplete.then(...)`) when the target\n   * language is ES5 (https://github.com/microsoft/TypeScript/issues/338).\n   * This method should be overridden instead. For example:\n   *\n   *   class MyElement extends LitElement {\n   *     async _getUpdateComplete() {\n   *       await super._getUpdateComplete();\n   *       await this._myChild.updateComplete;\n   *     }\n   *   }\n   */\n  protected _getUpdateComplete() {\n    return this._updatePromise;\n  }\n\n  /**\n   * Controls whether or not `update` should be called when the element requests\n   * an update. By default, this method always returns `true`, but this can be\n   * customized to control when to update.\n   *\n   * @param _changedProperties Map of changed properties with old values\n   */\n  protected shouldUpdate(_changedProperties: PropertyValues): boolean {\n    return true;\n  }\n\n  /**\n   * Updates the element. This method reflects property values to attributes.\n   * It can be overridden to render and keep updated element DOM.\n   * Setting properties inside this method will *not* trigger\n   * another update.\n   *\n   * @param _changedProperties Map of changed properties with old values\n   */\n  protected update(_changedProperties: PropertyValues) {\n    if (this._reflectingProperties !== undefined &&\n        this._reflectingProperties.size > 0) {\n      // Use forEach so this works even if for/of loops are compiled to for\n      // loops expecting arrays\n      this._reflectingProperties.forEach(\n          (v, k) => this._propertyToAttribute(k, this[k as keyof this], v));\n      this._reflectingProperties = undefined;\n    }\n    this._markUpdated();\n  }\n\n  /**\n   * Invoked whenever the element is updated. Implement to perform\n   * post-updating tasks via DOM APIs, for example, focusing an element.\n   *\n   * Setting properties inside this method will trigger the element to update\n   * again after this update cycle completes.\n   *\n   * @param _changedProperties Map of changed properties with old values\n   */\n  protected updated(_changedProperties: PropertyValues) {\n  }\n\n  /**\n   * Invoked when the element is first updated. Implement to perform one time\n   * work on the element after update.\n   *\n   * Setting properties inside this method will trigger the element to update\n   * again after this update cycle completes.\n   *\n   * @param _changedProperties Map of changed properties with old values\n   */\n  protected firstUpdated(_changedProperties: PropertyValues) {\n  }\n}\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/*\n * IMPORTANT: For compatibility with tsickle and the Closure JS compiler, all\n * property decorators (but not class decorators) in this file that have\n * an @ExportDecoratedItems annotation must be defined as a regular function,\n * not an arrow function.\n */\n\nimport {LitElement} from '../lit-element.js';\n\nimport {PropertyDeclaration, UpdatingElement} from './updating-element.js';\n\nexport type Constructor<T> = {\n  // tslint:disable-next-line:no-any\n  new (...args: any[]): T\n};\n\n// From the TC39 Decorators proposal\ninterface ClassDescriptor {\n  kind: 'class';\n  elements: ClassElement[];\n  finisher?: <T>(clazz: Constructor<T>) => undefined | Constructor<T>;\n}\n\n// From the TC39 Decorators proposal\ninterface ClassElement {\n  kind: 'field'|'method';\n  key: PropertyKey;\n  placement: 'static'|'prototype'|'own';\n  initializer?: Function;\n  extras?: ClassElement[];\n  finisher?: <T>(clazz: Constructor<T>) => undefined | Constructor<T>;\n  descriptor?: PropertyDescriptor;\n}\n\nconst legacyCustomElement =\n    (tagName: string, clazz: Constructor<HTMLElement>) => {\n      window.customElements.define(tagName, clazz);\n      // Cast as any because TS doesn't recognize the return type as being a\n      // subtype of the decorated class when clazz is typed as\n      // `Constructor<HTMLElement>` for some reason.\n      // `Constructor<HTMLElement>` is helpful to make sure the decorator is\n      // applied to elements however.\n      // tslint:disable-next-line:no-any\n      return clazz as any;\n    };\n\nconst standardCustomElement =\n    (tagName: string, descriptor: ClassDescriptor) => {\n      const {kind, elements} = descriptor;\n      return {\n        kind,\n        elements,\n        // This callback is called once the class is otherwise fully defined\n        finisher(clazz: Constructor<HTMLElement>) {\n          window.customElements.define(tagName, clazz);\n        }\n      };\n    };\n\n/**\n * Class decorator factory that defines the decorated class as a custom element.\n *\n * ```\n * @customElement('my-element')\n * class MyElement {\n *   render() {\n *     return html``;\n *   }\n * }\n * ```\n * @category Decorator\n * @param tagName The name of the custom element to define.\n */\nexport const customElement = (tagName: string) =>\n    (classOrDescriptor: Constructor<HTMLElement>|ClassDescriptor) =>\n        (typeof classOrDescriptor === 'function') ?\n    legacyCustomElement(tagName, classOrDescriptor) :\n    standardCustomElement(tagName, classOrDescriptor);\n\nconst standardProperty =\n    (options: PropertyDeclaration, element: ClassElement) => {\n      // When decorating an accessor, pass it through and add property metadata.\n      // Note, the `hasOwnProperty` check in `createProperty` ensures we don't\n      // stomp over the user's accessor.\n      if (element.kind === 'method' && element.descriptor &&\n          !('value' in element.descriptor)) {\n        return {\n          ...element,\n          finisher(clazz: typeof UpdatingElement) {\n            clazz.createProperty(element.key, options);\n          }\n        };\n      } else {\n        // createProperty() takes care of defining the property, but we still\n        // must return some kind of descriptor, so return a descriptor for an\n        // unused prototype field. The finisher calls createProperty().\n        return {\n          kind: 'field',\n          key: Symbol(),\n          placement: 'own',\n          descriptor: {},\n          // When @babel/plugin-proposal-decorators implements initializers,\n          // do this instead of the initializer below. See:\n          // https://github.com/babel/babel/issues/9260 extras: [\n          //   {\n          //     kind: 'initializer',\n          //     placement: 'own',\n          //     initializer: descriptor.initializer,\n          //   }\n          // ],\n          initializer(this: {[key: string]: unknown}) {\n            if (typeof element.initializer === 'function') {\n              this[element.key as string] = element.initializer.call(this);\n            }\n          },\n          finisher(clazz: typeof UpdatingElement) {\n            clazz.createProperty(element.key, options);\n          }\n        };\n      }\n    };\n\nconst legacyProperty =\n    (options: PropertyDeclaration, proto: Object, name: PropertyKey) => {\n      (proto.constructor as typeof UpdatingElement)\n          .createProperty(name, options);\n    };\n\n/**\n * A property decorator which creates a LitElement property which reflects a\n * corresponding attribute value. A [[`PropertyDeclaration`]] may optionally be\n * supplied to configure property features.\n *\n * This decorator should only be used for public fields. Private or protected\n * fields should use the [[`internalProperty`]] decorator.\n *\n * @example\n * ```ts\n * class MyElement {\n *   @property({ type: Boolean })\n *   clicked = false;\n * }\n * ```\n * @category Decorator\n * @ExportDecoratedItems\n */\nexport function property(options?: PropertyDeclaration) {\n  // tslint:disable-next-line:no-any decorator\n  return (protoOrDescriptor: Object|ClassElement, name?: PropertyKey): any =>\n             (name !== undefined) ?\n      legacyProperty(options!, protoOrDescriptor as Object, name) :\n      standardProperty(options!, protoOrDescriptor as ClassElement);\n}\n\nexport interface InternalPropertyDeclaration<Type = unknown> {\n  /**\n   * A function that indicates if a property should be considered changed when\n   * it is set. The function should take the `newValue` and `oldValue` and\n   * return `true` if an update should be requested.\n   */\n  hasChanged?(value: Type, oldValue: Type): boolean;\n}\n\n/**\n * Declares a private or protected property that still triggers updates to the\n * element when it changes.\n *\n * Properties declared this way must not be used from HTML or HTML templating\n * systems, they're solely for properties internal to the element. These\n * properties may be renamed by optimization tools like closure compiler.\n * @category Decorator\n */\nexport function internalProperty(options?: InternalPropertyDeclaration) {\n  return property({attribute: false, hasChanged: options?.hasChanged});\n}\n\n/**\n * A property decorator that converts a class property into a getter that\n * executes a querySelector on the element's renderRoot.\n *\n * @param selector A DOMString containing one or more selectors to match.\n * @param cache An optional boolean which when true performs the DOM query only\n * once and caches the result.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector\n *\n * @example\n *\n * ```ts\n * class MyElement {\n *   @query('#first')\n *   first;\n *\n *   render() {\n *     return html`\n *       <div id=\"first\"></div>\n *       <div id=\"second\"></div>\n *     `;\n *   }\n * }\n * ```\n * @category Decorator\n */\nexport function query(selector: string, cache?: boolean) {\n  return (protoOrDescriptor: Object|ClassElement,\n          // tslint:disable-next-line:no-any decorator\n          name?: PropertyKey): any => {\n    const descriptor = {\n      get(this: LitElement) {\n        return this.renderRoot.querySelector(selector);\n      },\n      enumerable: true,\n      configurable: true,\n    };\n    if (cache) {\n      const key = typeof name === 'symbol' ? Symbol() : `__${name}`;\n      descriptor.get = function(this: LitElement) {\n        if ((this as unknown as\n             {[key: string]: Element | null})[key as string] === undefined) {\n          ((this as unknown as {[key: string]: Element | null})[key as string] =\n               this.renderRoot.querySelector(selector));\n        }\n        return (\n            this as unknown as {[key: string]: Element | null})[key as string];\n      };\n    }\n    return (name !== undefined) ?\n        legacyQuery(descriptor, protoOrDescriptor as Object, name) :\n        standardQuery(descriptor, protoOrDescriptor as ClassElement);\n  };\n}\n\n// Note, in the future, we may extend this decorator to support the use case\n// where the queried element may need to do work to become ready to interact\n// with (e.g. load some implementation code). If so, we might elect to\n// add a second argument defining a function that can be run to make the\n// queried element loaded/updated/ready.\n/**\n * A property decorator that converts a class property into a getter that\n * returns a promise that resolves to the result of a querySelector on the\n * element's renderRoot done after the element's `updateComplete` promise\n * resolves. When the queried property may change with element state, this\n * decorator can be used instead of requiring users to await the\n * `updateComplete` before accessing the property.\n *\n * @param selector A DOMString containing one or more selectors to match.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector\n *\n * @example\n * ```ts\n * class MyElement {\n *   @queryAsync('#first')\n *   first;\n *\n *   render() {\n *     return html`\n *       <div id=\"first\"></div>\n *       <div id=\"second\"></div>\n *     `;\n *   }\n * }\n *\n * // external usage\n * async doSomethingWithFirst() {\n *  (await aMyElement.first).doSomething();\n * }\n * ```\n * @category Decorator\n */\nexport function queryAsync(selector: string) {\n  return (protoOrDescriptor: Object|ClassElement,\n          // tslint:disable-next-line:no-any decorator\n          name?: PropertyKey): any => {\n    const descriptor = {\n      async get(this: LitElement) {\n        await this.updateComplete;\n        return this.renderRoot.querySelector(selector);\n      },\n      enumerable: true,\n      configurable: true,\n    };\n    return (name !== undefined) ?\n        legacyQuery(descriptor, protoOrDescriptor as Object, name) :\n        standardQuery(descriptor, protoOrDescriptor as ClassElement);\n  };\n}\n\n/**\n * A property decorator that converts a class property into a getter\n * that executes a querySelectorAll on the element's renderRoot.\n *\n * @param selector A DOMString containing one or more selectors to match.\n *\n * See:\n * https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll\n *\n * @example\n * ```ts\n * class MyElement {\n *   @queryAll('div')\n *   divs;\n *\n *   render() {\n *     return html`\n *       <div id=\"first\"></div>\n *       <div id=\"second\"></div>\n *     `;\n *   }\n * }\n * ```\n * @category Decorator\n */\nexport function queryAll(selector: string) {\n  return (protoOrDescriptor: Object|ClassElement,\n          // tslint:disable-next-line:no-any decorator\n          name?: PropertyKey): any => {\n    const descriptor = {\n      get(this: LitElement) {\n        return this.renderRoot.querySelectorAll(selector);\n      },\n      enumerable: true,\n      configurable: true,\n    };\n    return (name !== undefined) ?\n        legacyQuery(descriptor, protoOrDescriptor as Object, name) :\n        standardQuery(descriptor, protoOrDescriptor as ClassElement);\n  };\n}\n\nconst legacyQuery =\n    (descriptor: PropertyDescriptor, proto: Object, name: PropertyKey) => {\n      Object.defineProperty(proto, name, descriptor);\n    };\n\nconst standardQuery = (descriptor: PropertyDescriptor, element: ClassElement) =>\n    ({\n      kind: 'method',\n      placement: 'prototype',\n      key: element.key,\n      descriptor,\n    });\n\nconst standardEventOptions =\n    (options: AddEventListenerOptions, element: ClassElement) => {\n      return {\n        ...element,\n        finisher(clazz: typeof UpdatingElement) {\n          Object.assign(\n              clazz.prototype[element.key as keyof UpdatingElement], options);\n        }\n      };\n    };\n\nconst legacyEventOptions =\n    // tslint:disable-next-line:no-any legacy decorator\n    (options: AddEventListenerOptions, proto: any, name: PropertyKey) => {\n      Object.assign(proto[name], options);\n    };\n\n/**\n * Adds event listener options to a method used as an event listener in a\n * lit-html template.\n *\n * @param options An object that specifies event listener options as accepted by\n * `EventTarget#addEventListener` and `EventTarget#removeEventListener`.\n *\n * Current browsers support the `capture`, `passive`, and `once` options. See:\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Parameters\n *\n * @example\n * ```ts\n * class MyElement {\n *   clicked = false;\n *\n *   render() {\n *     return html`\n *       <div @click=${this._onClick}`>\n *         <button></button>\n *       </div>\n *     `;\n *   }\n *\n *   @eventOptions({capture: true})\n *   _onClick(e) {\n *     this.clicked = true;\n *   }\n * }\n * ```\n * @category Decorator\n */\nexport function eventOptions(options: AddEventListenerOptions) {\n  // Return value typed as any to prevent TypeScript from complaining that\n  // standard decorator function signature does not match TypeScript decorator\n  // signature\n  // TODO(kschaaf): unclear why it was only failing on this decorator and not\n  // the others\n  return ((protoOrDescriptor: Object|ClassElement, name?: string) =>\n              (name !== undefined) ?\n              legacyEventOptions(options, protoOrDescriptor as Object, name) :\n              standardEventOptions(\n                  options, protoOrDescriptor as ClassElement)) as\n             // tslint:disable-next-line:no-any decorator\n             any;\n}\n\n// x-browser support for matches\n// tslint:disable-next-line:no-any\nconst ElementProto = Element.prototype as any;\nconst legacyMatches =\n    ElementProto.msMatchesSelector || ElementProto.webkitMatchesSelector;\n\n/**\n * A property decorator that converts a class property into a getter that\n * returns the `assignedNodes` of the given named `slot`. Note, the type of\n * this property should be annotated as `NodeListOf<HTMLElement>`.\n *\n * @param slotName A string name of the slot.\n * @param flatten A boolean which when true flattens the assigned nodes,\n * meaning any assigned nodes that are slot elements are replaced with their\n * assigned nodes.\n * @param selector A string which filters the results to elements that match\n * the given css selector.\n *\n * * @example\n * ```ts\n * class MyElement {\n *   @queryAssignedNodes('list', true, '.item')\n *   listItems;\n *\n *   render() {\n *     return html`\n *       <slot name=\"list\"></slot>\n *     `;\n *   }\n * }\n * ```\n * @category Decorator\n */\nexport function queryAssignedNodes(\n    slotName = '', flatten = false, selector = '') {\n  return (protoOrDescriptor: Object|ClassElement,\n          // tslint:disable-next-line:no-any decorator\n          name?: PropertyKey): any => {\n    const descriptor = {\n      get(this: LitElement) {\n        const slotSelector =\n            `slot${slotName ? `[name=${slotName}]` : ':not([name])'}`;\n        const slot = this.renderRoot.querySelector(slotSelector);\n        let nodes = slot && (slot as HTMLSlotElement).assignedNodes({flatten});\n        if (nodes && selector) {\n          nodes = nodes.filter(\n              (node) => node.nodeType === Node.ELEMENT_NODE &&\n                      (node as Element).matches ?\n                  (node as Element).matches(selector) :\n                  legacyMatches.call(node as Element, selector));\n        }\n        return nodes;\n      },\n      enumerable: true,\n      configurable: true,\n    };\n    return (name !== undefined) ?\n        legacyQuery(descriptor, protoOrDescriptor as Object, name) :\n        standardQuery(descriptor, protoOrDescriptor as ClassElement);\n  };\n}\n","/**\n@license\nCopyright (c) 2019 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\n\n/**\n * Whether the current browser supports `adoptedStyleSheets`.\n */\nexport const supportsAdoptingStyleSheets = (window.ShadowRoot) &&\n    (window.ShadyCSS === undefined || window.ShadyCSS.nativeShadow) &&\n    ('adoptedStyleSheets' in Document.prototype) &&\n    ('replace' in CSSStyleSheet.prototype);\n\nconst constructionToken = Symbol();\n\nexport class CSSResult {\n  _styleSheet?: CSSStyleSheet|null;\n\n  readonly cssText: string;\n\n  constructor(cssText: string, safeToken: symbol) {\n    if (safeToken !== constructionToken) {\n      throw new Error(\n          'CSSResult is not constructable. Use `unsafeCSS` or `css` instead.');\n    }\n\n    this.cssText = cssText;\n  }\n\n  // Note, this is a getter so that it's lazy. In practice, this means\n  // stylesheets are not created until the first element instance is made.\n  get styleSheet(): CSSStyleSheet|null {\n    if (this._styleSheet === undefined) {\n      // Note, if `supportsAdoptingStyleSheets` is true then we assume\n      // CSSStyleSheet is constructable.\n      if (supportsAdoptingStyleSheets) {\n        this._styleSheet = new CSSStyleSheet();\n        this._styleSheet.replaceSync(this.cssText);\n      } else {\n        this._styleSheet = null;\n      }\n    }\n    return this._styleSheet;\n  }\n\n  toString(): string {\n    return this.cssText;\n  }\n}\n\n/**\n * Wrap a value for interpolation in a [[`css`]] tagged template literal.\n *\n * This is unsafe because untrusted CSS text can be used to phone home\n * or exfiltrate data to an attacker controlled site. Take care to only use\n * this with trusted input.\n */\nexport const unsafeCSS = (value: unknown) => {\n  return new CSSResult(String(value), constructionToken);\n};\n\nconst textFromCSSResult = (value: CSSResult|number) => {\n  if (value instanceof CSSResult) {\n    return value.cssText;\n  } else if (typeof value === 'number') {\n    return value;\n  } else {\n    throw new Error(\n        `Value passed to 'css' function must be a 'css' function result: ${\n            value}. Use 'unsafeCSS' to pass non-literal values, but\n            take care to ensure page security.`);\n  }\n};\n\n/**\n * Template tag which which can be used with LitElement's [[LitElement.styles |\n * `styles`]] property to set element styles. For security reasons, only literal\n * string values may be used. To incorporate non-literal values [[`unsafeCSS`]]\n * may be used inside a template string part.\n */\nexport const css =\n    (strings: TemplateStringsArray, ...values: (CSSResult|number)[]) => {\n      const cssText = values.reduce(\n          (acc, v, idx) => acc + textFromCSSResult(v) + strings[idx + 1],\n          strings[0]);\n      return new CSSResult(cssText, constructionToken);\n    };\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * The main LitElement module, which defines the [[`LitElement`]] base class and\n * related APIs.\n *\n *  LitElement components can define a template and a set of observed\n * properties. Changing an observed property triggers a re-render of the\n * element.\n *\n *  Import [[`LitElement`]] and [[`html`]] from this module to create a\n * component:\n *\n *  ```js\n * import {LitElement, html} from 'lit-element';\n *\n * class MyElement extends LitElement {\n *\n *   // Declare observed properties\n *   static get properties() {\n *     return {\n *       adjective: {}\n *     }\n *   }\n *\n *   constructor() {\n *     this.adjective = 'awesome';\n *   }\n *\n *   // Define the element's template\n *   render() {\n *     return html`<p>your ${adjective} template here</p>`;\n *   }\n * }\n *\n * customElements.define('my-element', MyElement);\n * ```\n *\n * `LitElement` extends [[`UpdatingElement`]] and adds lit-html templating.\n * The `UpdatingElement` class is provided for users that want to build\n * their own custom element base classes that don't use lit-html.\n *\n * @packageDocumentation\n */\nimport {render, ShadyRenderOptions} from 'lit-html/lib/shady-render.js';\n\nimport {PropertyValues, UpdatingElement} from './lib/updating-element.js';\n\nexport * from './lib/updating-element.js';\nexport * from './lib/decorators.js';\nexport {html, svg, TemplateResult, SVGTemplateResult} from 'lit-html/lit-html.js';\nimport {supportsAdoptingStyleSheets, CSSResult, unsafeCSS} from './lib/css-tag.js';\nexport * from './lib/css-tag.js';\n\ndeclare global {\n  interface Window {\n    litElementVersions: string[];\n  }\n}\n\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for LitElement usage.\n// TODO(justinfagnani): inject version number at build time\n(window['litElementVersions'] || (window['litElementVersions'] = []))\n    .push('2.4.0');\n\nexport type CSSResultOrNative = CSSResult|CSSStyleSheet;\n\nexport interface CSSResultArray extends\n    Array<CSSResultOrNative|CSSResultArray> {}\n\n/**\n * Sentinal value used to avoid calling lit-html's render function when\n * subclasses do not implement `render`\n */\nconst renderNotImplemented = {};\n\n/**\n * Base element class that manages element properties and attributes, and\n * renders a lit-html template.\n *\n * To define a component, subclass `LitElement` and implement a\n * `render` method to provide the component's template. Define properties\n * using the [[`properties`]] property or the [[`property`]] decorator.\n */\nexport class LitElement extends UpdatingElement {\n  /**\n   * Ensure this class is marked as `finalized` as an optimization ensuring\n   * it will not needlessly try to `finalize`.\n   *\n   * Note this property name is a string to prevent breaking Closure JS Compiler\n   * optimizations. See updating-element.ts for more information.\n   */\n  protected static['finalized'] = true;\n\n  /**\n   * Reference to the underlying library method used to render the element's\n   * DOM. By default, points to the `render` method from lit-html's shady-render\n   * module.\n   *\n   * **Most users will never need to touch this property.**\n   *\n   * This  property should not be confused with the `render` instance method,\n   * which should be overridden to define a template for the element.\n   *\n   * Advanced users creating a new base class based on LitElement can override\n   * this property to point to a custom render method with a signature that\n   * matches [shady-render's `render`\n   * method](https://lit-html.polymer-project.org/api/modules/shady_render.html#render).\n   *\n   * @nocollapse\n   */\n  static render:\n      (result: unknown, container: Element|DocumentFragment,\n       options: ShadyRenderOptions) => void = render;\n\n  /**\n   * Array of styles to apply to the element. The styles should be defined\n   * using the [[`css`]] tag function or via constructible stylesheets.\n   */\n  static styles?: CSSResultOrNative|CSSResultArray;\n\n  private static _styles: Array<CSSResultOrNative|CSSResult>|undefined;\n\n  /**\n   * Return the array of styles to apply to the element.\n   * Override this method to integrate into a style management system.\n   *\n   * @nocollapse\n   */\n  static getStyles(): CSSResultOrNative|CSSResultArray|undefined {\n    return this.styles;\n  }\n\n  /** @nocollapse */\n  private static _getUniqueStyles() {\n    // Only gather styles once per class\n    if (this.hasOwnProperty(JSCompiler_renameProperty('_styles', this))) {\n      return;\n    }\n    // Take care not to call `this.getStyles()` multiple times since this\n    // generates new CSSResults each time.\n    // TODO(sorvell): Since we do not cache CSSResults by input, any\n    // shared styles will generate new stylesheet objects, which is wasteful.\n    // This should be addressed when a browser ships constructable\n    // stylesheets.\n    const userStyles = this.getStyles();\n\n    if (Array.isArray(userStyles)) {\n      // De-duplicate styles preserving the _last_ instance in the set.\n      // This is a performance optimization to avoid duplicated styles that can\n      // occur especially when composing via subclassing.\n      // The last item is kept to try to preserve the cascade order with the\n      // assumption that it's most important that last added styles override\n      // previous styles.\n      const addStyles = (styles: CSSResultArray, set: Set<CSSResultOrNative>):\n          Set<CSSResultOrNative> => styles.reduceRight(\n              (set: Set<CSSResultOrNative>, s) =>\n                  // Note: On IE set.add() does not return the set\n              Array.isArray(s) ? addStyles(s, set) : (set.add(s), set),\n              set);\n      // Array.from does not work on Set in IE, otherwise return\n      // Array.from(addStyles(userStyles, new Set<CSSResult>())).reverse()\n      const set = addStyles(userStyles, new Set<CSSResultOrNative>());\n      const styles: CSSResultOrNative[] = [];\n      set.forEach((v) => styles.unshift(v));\n      this._styles = styles;\n    } else {\n      this._styles = userStyles === undefined ? [] : [userStyles];\n    }\n\n    // Ensure that there are no invalid CSSStyleSheet instances here. They are\n    // invalid in two conditions.\n    // (1) the sheet is non-constructible (`sheet` of a HTMLStyleElement), but\n    //     this is impossible to check except via .replaceSync or use\n    // (2) the ShadyCSS polyfill is enabled (:. supportsAdoptingStyleSheets is\n    //     false)\n    this._styles = this._styles.map((s) => {\n      if (s instanceof CSSStyleSheet && !supportsAdoptingStyleSheets) {\n        // Flatten the cssText from the passed constructible stylesheet (or\n        // undetectable non-constructible stylesheet). The user might have\n        // expected to update their stylesheets over time, but the alternative\n        // is a crash.\n        const cssText = Array.prototype.slice.call(s.cssRules)\n                            .reduce((css, rule) => css + rule.cssText, '');\n        return unsafeCSS(cssText);\n      }\n      return s;\n    });\n  }\n\n  private _needsShimAdoptedStyleSheets?: boolean;\n\n  /**\n   * Node or ShadowRoot into which element DOM should be rendered. Defaults\n   * to an open shadowRoot.\n   */\n  readonly renderRoot!: Element|DocumentFragment;\n\n  /**\n   * Performs element initialization. By default this calls\n   * [[`createRenderRoot`]] to create the element [[`renderRoot`]] node and\n   * captures any pre-set values for registered properties.\n   */\n  protected initialize() {\n    super.initialize();\n    (this.constructor as typeof LitElement)._getUniqueStyles();\n    (this as {\n      renderRoot: Element|DocumentFragment;\n    }).renderRoot = this.createRenderRoot();\n    // Note, if renderRoot is not a shadowRoot, styles would/could apply to the\n    // element's getRootNode(). While this could be done, we're choosing not to\n    // support this now since it would require different logic around de-duping.\n    if (window.ShadowRoot && this.renderRoot instanceof window.ShadowRoot) {\n      this.adoptStyles();\n    }\n  }\n\n  /**\n   * Returns the node into which the element should render and by default\n   * creates and returns an open shadowRoot. Implement to customize where the\n   * element's DOM is rendered. For example, to render into the element's\n   * childNodes, return `this`.\n   * @returns {Element|DocumentFragment} Returns a node into which to render.\n   */\n  protected createRenderRoot(): Element|ShadowRoot {\n    return this.attachShadow({mode: 'open'});\n  }\n\n  /**\n   * Applies styling to the element shadowRoot using the [[`styles`]]\n   * property. Styling will apply using `shadowRoot.adoptedStyleSheets` where\n   * available and will fallback otherwise. When Shadow DOM is polyfilled,\n   * ShadyCSS scopes styles and adds them to the document. When Shadow DOM\n   * is available but `adoptedStyleSheets` is not, styles are appended to the\n   * end of the `shadowRoot` to [mimic spec\n   * behavior](https://wicg.github.io/construct-stylesheets/#using-constructed-stylesheets).\n   */\n  protected adoptStyles() {\n    const styles = (this.constructor as typeof LitElement)._styles!;\n    if (styles.length === 0) {\n      return;\n    }\n    // There are three separate cases here based on Shadow DOM support.\n    // (1) shadowRoot polyfilled: use ShadyCSS\n    // (2) shadowRoot.adoptedStyleSheets available: use it\n    // (3) shadowRoot.adoptedStyleSheets polyfilled: append styles after\n    // rendering\n    if (window.ShadyCSS !== undefined && !window.ShadyCSS.nativeShadow) {\n      window.ShadyCSS.ScopingShim!.prepareAdoptedCssText(\n          styles.map((s) => s.cssText), this.localName);\n    } else if (supportsAdoptingStyleSheets) {\n      (this.renderRoot as ShadowRoot).adoptedStyleSheets =\n          styles.map((s) => s instanceof CSSStyleSheet ? s : s.styleSheet!);\n    } else {\n      // This must be done after rendering so the actual style insertion is done\n      // in `update`.\n      this._needsShimAdoptedStyleSheets = true;\n    }\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n    // Note, first update/render handles styleElement so we only call this if\n    // connected after first update.\n    if (this.hasUpdated && window.ShadyCSS !== undefined) {\n      window.ShadyCSS.styleElement(this);\n    }\n  }\n\n  /**\n   * Updates the element. This method reflects property values to attributes\n   * and calls `render` to render DOM via lit-html. Setting properties inside\n   * this method will *not* trigger another update.\n   * @param _changedProperties Map of changed properties with old values\n   */\n  protected update(changedProperties: PropertyValues) {\n    // Setting properties in `render` should not trigger an update. Since\n    // updates are allowed after super.update, it's important to call `render`\n    // before that.\n    const templateResult = this.render();\n    super.update(changedProperties);\n    // If render is not implemented by the component, don't call lit-html render\n    if (templateResult !== renderNotImplemented) {\n      (this.constructor as typeof LitElement)\n          .render(\n              templateResult,\n              this.renderRoot,\n              {scopeName: this.localName, eventContext: this});\n    }\n    // When native Shadow DOM is used but adoptedStyles are not supported,\n    // insert styling after rendering to ensure adoptedStyles have highest\n    // priority.\n    if (this._needsShimAdoptedStyleSheets) {\n      this._needsShimAdoptedStyleSheets = false;\n      (this.constructor as typeof LitElement)._styles!.forEach((s) => {\n        const style = document.createElement('style');\n        style.textContent = s.cssText;\n        this.renderRoot.appendChild(style);\n      });\n    }\n  }\n\n  /**\n   * Invoked on each update to perform rendering tasks. This method may return\n   * any value renderable by lit-html's `NodePart` - typically a\n   * `TemplateResult`. Setting properties inside this method will *not* trigger\n   * the element to update.\n   */\n  protected render(): unknown {\n    return renderNotImplemented;\n  }\n}\n",null,null,null,null,null,null,null,"// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// This is CodeMirror (https://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = global || self, global.CodeMirror = factory());\n}(this, (function () { 'use strict';\n\n  // Kludges for bugs and behavior differences that can't be feature\n  // detected are enabled based on userAgent etc sniffing.\n  var userAgent = navigator.userAgent;\n  var platform = navigator.platform;\n\n  var gecko = /gecko\\/\\d/i.test(userAgent);\n  var ie_upto10 = /MSIE \\d/.test(userAgent);\n  var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n  var edge = /Edge\\/(\\d+)/.exec(userAgent);\n  var ie = ie_upto10 || ie_11up || edge;\n  var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\n  var webkit = !edge && /WebKit\\//.test(userAgent);\n  var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n  var chrome = !edge && /Chrome\\//.test(userAgent);\n  var presto = /Opera\\//.test(userAgent);\n  var safari = /Apple Computer/.test(navigator.vendor);\n  var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n  var phantom = /PhantomJS/.test(userAgent);\n\n  var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\\/\\w+/.test(userAgent);\n  var android = /Android/.test(userAgent);\n  // This is woefully incomplete. Suggestions for alternative methods welcome.\n  var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n  var mac = ios || /Mac/.test(platform);\n  var chromeOS = /\\bCrOS\\b/.test(userAgent);\n  var windows = /win/i.test(platform);\n\n  var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n  if (presto_version) { presto_version = Number(presto_version[1]); }\n  if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n  // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n  var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n  var captureRightClick = gecko || (ie && ie_version >= 9);\n\n  function classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\n  var rmClass = function(node, cls) {\n    var current = node.className;\n    var match = classTest(cls).exec(current);\n    if (match) {\n      var after = current.slice(match.index + match[0].length);\n      node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n    }\n  };\n\n  function removeChildren(e) {\n    for (var count = e.childNodes.length; count > 0; --count)\n      { e.removeChild(e.firstChild); }\n    return e\n  }\n\n  function removeChildrenAndAdd(parent, e) {\n    return removeChildren(parent).appendChild(e)\n  }\n\n  function elt(tag, content, className, style) {\n    var e = document.createElement(tag);\n    if (className) { e.className = className; }\n    if (style) { e.style.cssText = style; }\n    if (typeof content == \"string\") { e.appendChild(document.createTextNode(content)); }\n    else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }\n    return e\n  }\n  // wrapper for elt, which removes the elt from the accessibility tree\n  function eltP(tag, content, className, style) {\n    var e = elt(tag, content, className, style);\n    e.setAttribute(\"role\", \"presentation\");\n    return e\n  }\n\n  var range;\n  if (document.createRange) { range = function(node, start, end, endNode) {\n    var r = document.createRange();\n    r.setEnd(endNode || node, end);\n    r.setStart(node, start);\n    return r\n  }; }\n  else { range = function(node, start, end) {\n    var r = document.body.createTextRange();\n    try { r.moveToElementText(node.parentNode); }\n    catch(e) { return r }\n    r.collapse(true);\n    r.moveEnd(\"character\", end);\n    r.moveStart(\"character\", start);\n    return r\n  }; }\n\n  function contains(parent, child) {\n    if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n      { child = child.parentNode; }\n    if (parent.contains)\n      { return parent.contains(child) }\n    do {\n      if (child.nodeType == 11) { child = child.host; }\n      if (child == parent) { return true }\n    } while (child = child.parentNode)\n  }\n\n  function activeElt() {\n    // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n    // IE < 10 will throw when accessed while the page is loading or in an iframe.\n    // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n    var activeElement;\n    try {\n      activeElement = document.activeElement;\n    } catch(e) {\n      activeElement = document.body || null;\n    }\n    while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n      { activeElement = activeElement.shadowRoot.activeElement; }\n    return activeElement\n  }\n\n  function addClass(node, cls) {\n    var current = node.className;\n    if (!classTest(cls).test(current)) { node.className += (current ? \" \" : \"\") + cls; }\n  }\n  function joinClasses(a, b) {\n    var as = a.split(\" \");\n    for (var i = 0; i < as.length; i++)\n      { if (as[i] && !classTest(as[i]).test(b)) { b += \" \" + as[i]; } }\n    return b\n  }\n\n  var selectInput = function(node) { node.select(); };\n  if (ios) // Mobile Safari apparently has a bug where select() is broken.\n    { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }\n  else if (ie) // Suppress mysterious IE10 errors\n    { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }\n\n  function bind(f) {\n    var args = Array.prototype.slice.call(arguments, 1);\n    return function(){return f.apply(null, args)}\n  }\n\n  function copyObj(obj, target, overwrite) {\n    if (!target) { target = {}; }\n    for (var prop in obj)\n      { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n        { target[prop] = obj[prop]; } }\n    return target\n  }\n\n  // Counts the column offset in a string, taking tabs into account.\n  // Used mostly to find indentation.\n  function countColumn(string, end, tabSize, startIndex, startValue) {\n    if (end == null) {\n      end = string.search(/[^\\s\\u00a0]/);\n      if (end == -1) { end = string.length; }\n    }\n    for (var i = startIndex || 0, n = startValue || 0;;) {\n      var nextTab = string.indexOf(\"\\t\", i);\n      if (nextTab < 0 || nextTab >= end)\n        { return n + (end - i) }\n      n += nextTab - i;\n      n += tabSize - (n % tabSize);\n      i = nextTab + 1;\n    }\n  }\n\n  var Delayed = function() {\n    this.id = null;\n    this.f = null;\n    this.time = 0;\n    this.handler = bind(this.onTimeout, this);\n  };\n  Delayed.prototype.onTimeout = function (self) {\n    self.id = 0;\n    if (self.time <= +new Date) {\n      self.f();\n    } else {\n      setTimeout(self.handler, self.time - +new Date);\n    }\n  };\n  Delayed.prototype.set = function (ms, f) {\n    this.f = f;\n    var time = +new Date + ms;\n    if (!this.id || time < this.time) {\n      clearTimeout(this.id);\n      this.id = setTimeout(this.handler, ms);\n      this.time = time;\n    }\n  };\n\n  function indexOf(array, elt) {\n    for (var i = 0; i < array.length; ++i)\n      { if (array[i] == elt) { return i } }\n    return -1\n  }\n\n  // Number of pixels added to scroller and sizer to hide scrollbar\n  var scrollerGap = 50;\n\n  // Returned or thrown by various protocols to signal 'I'm not\n  // handling this'.\n  var Pass = {toString: function(){return \"CodeMirror.Pass\"}};\n\n  // Reused option objects for setSelection & friends\n  var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n  // The inverse of countColumn -- find the offset that corresponds to\n  // a particular column.\n  function findColumn(string, goal, tabSize) {\n    for (var pos = 0, col = 0;;) {\n      var nextTab = string.indexOf(\"\\t\", pos);\n      if (nextTab == -1) { nextTab = string.length; }\n      var skipped = nextTab - pos;\n      if (nextTab == string.length || col + skipped >= goal)\n        { return pos + Math.min(skipped, goal - col) }\n      col += nextTab - pos;\n      col += tabSize - (col % tabSize);\n      pos = nextTab + 1;\n      if (col >= goal) { return pos }\n    }\n  }\n\n  var spaceStrs = [\"\"];\n  function spaceStr(n) {\n    while (spaceStrs.length <= n)\n      { spaceStrs.push(lst(spaceStrs) + \" \"); }\n    return spaceStrs[n]\n  }\n\n  function lst(arr) { return arr[arr.length-1] }\n\n  function map(array, f) {\n    var out = [];\n    for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }\n    return out\n  }\n\n  function insertSorted(array, value, score) {\n    var pos = 0, priority = score(value);\n    while (pos < array.length && score(array[pos]) <= priority) { pos++; }\n    array.splice(pos, 0, value);\n  }\n\n  function nothing() {}\n\n  function createObj(base, props) {\n    var inst;\n    if (Object.create) {\n      inst = Object.create(base);\n    } else {\n      nothing.prototype = base;\n      inst = new nothing();\n    }\n    if (props) { copyObj(props, inst); }\n    return inst\n  }\n\n  var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n  function isWordCharBasic(ch) {\n    return /\\w/.test(ch) || ch > \"\\x80\" &&\n      (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n  }\n  function isWordChar(ch, helper) {\n    if (!helper) { return isWordCharBasic(ch) }\n    if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) { return true }\n    return helper.test(ch)\n  }\n\n  function isEmpty(obj) {\n    for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }\n    return true\n  }\n\n  // Extending unicode characters. A series of a non-extending char +\n  // any number of extending chars is treated as a single unit as far\n  // as editing and measuring is concerned. This is not fully correct,\n  // since some scripts/fonts/browsers also treat other configurations\n  // of code points as a group.\n  var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n  function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n  // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n  function skipExtendingChars(str, pos, dir) {\n    while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }\n    return pos\n  }\n\n  // Returns the value from the range [`from`; `to`] that satisfies\n  // `pred` and is closest to `from`. Assumes that at least `to`\n  // satisfies `pred`. Supports `from` being greater than `to`.\n  function findFirst(pred, from, to) {\n    // At any point we are certain `to` satisfies `pred`, don't know\n    // whether `from` does.\n    var dir = from > to ? -1 : 1;\n    for (;;) {\n      if (from == to) { return from }\n      var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n      if (mid == from) { return pred(mid) ? from : to }\n      if (pred(mid)) { to = mid; }\n      else { from = mid + dir; }\n    }\n  }\n\n  // BIDI HELPERS\n\n  function iterateBidiSections(order, from, to, f) {\n    if (!order) { return f(from, to, \"ltr\", 0) }\n    var found = false;\n    for (var i = 0; i < order.length; ++i) {\n      var part = order[i];\n      if (part.from < to && part.to > from || from == to && part.to == from) {\n        f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n        found = true;\n      }\n    }\n    if (!found) { f(from, to, \"ltr\"); }\n  }\n\n  var bidiOther = null;\n  function getBidiPartAt(order, ch, sticky) {\n    var found;\n    bidiOther = null;\n    for (var i = 0; i < order.length; ++i) {\n      var cur = order[i];\n      if (cur.from < ch && cur.to > ch) { return i }\n      if (cur.to == ch) {\n        if (cur.from != cur.to && sticky == \"before\") { found = i; }\n        else { bidiOther = i; }\n      }\n      if (cur.from == ch) {\n        if (cur.from != cur.to && sticky != \"before\") { found = i; }\n        else { bidiOther = i; }\n      }\n    }\n    return found != null ? found : bidiOther\n  }\n\n  // Bidirectional ordering algorithm\n  // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n  // that this (partially) implements.\n\n  // One-char codes used for character types:\n  // L (L):   Left-to-Right\n  // R (R):   Right-to-Left\n  // r (AL):  Right-to-Left Arabic\n  // 1 (EN):  European Number\n  // + (ES):  European Number Separator\n  // % (ET):  European Number Terminator\n  // n (AN):  Arabic Number\n  // , (CS):  Common Number Separator\n  // m (NSM): Non-Spacing Mark\n  // b (BN):  Boundary Neutral\n  // s (B):   Paragraph Separator\n  // t (S):   Segment Separator\n  // w (WS):  Whitespace\n  // N (ON):  Other Neutrals\n\n  // Returns null if characters are ordered as they appear\n  // (left-to-right), or an array of sections ({from, to, level}\n  // objects) in the order in which they occur visually.\n  var bidiOrdering = (function() {\n    // Character types for codepoints 0 to 0xff\n    var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n    // Character types for codepoints 0x600 to 0x6f9\n    var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n    function charType(code) {\n      if (code <= 0xf7) { return lowTypes.charAt(code) }\n      else if (0x590 <= code && code <= 0x5f4) { return \"R\" }\n      else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }\n      else if (0x6ee <= code && code <= 0x8ac) { return \"r\" }\n      else if (0x2000 <= code && code <= 0x200b) { return \"w\" }\n      else if (code == 0x200c) { return \"b\" }\n      else { return \"L\" }\n    }\n\n    var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n    var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n\n    function BidiSpan(level, from, to) {\n      this.level = level;\n      this.from = from; this.to = to;\n    }\n\n    return function(str, direction) {\n      var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n      if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) { return false }\n      var len = str.length, types = [];\n      for (var i = 0; i < len; ++i)\n        { types.push(charType(str.charCodeAt(i))); }\n\n      // W1. Examine each non-spacing mark (NSM) in the level run, and\n      // change the type of the NSM to the type of the previous\n      // character. If the NSM is at the start of the level run, it will\n      // get the type of sor.\n      for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n        var type = types[i$1];\n        if (type == \"m\") { types[i$1] = prev; }\n        else { prev = type; }\n      }\n\n      // W2. Search backwards from each instance of a European number\n      // until the first strong type (R, L, AL, or sor) is found. If an\n      // AL is found, change the type of the European number to Arabic\n      // number.\n      // W3. Change all ALs to R.\n      for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n        var type$1 = types[i$2];\n        if (type$1 == \"1\" && cur == \"r\") { types[i$2] = \"n\"; }\n        else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == \"r\") { types[i$2] = \"R\"; } }\n      }\n\n      // W4. A single European separator between two European numbers\n      // changes to a European number. A single common separator between\n      // two numbers of the same type changes to that type.\n      for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n        var type$2 = types[i$3];\n        if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3+1] == \"1\") { types[i$3] = \"1\"; }\n        else if (type$2 == \",\" && prev$1 == types[i$3+1] &&\n                 (prev$1 == \"1\" || prev$1 == \"n\")) { types[i$3] = prev$1; }\n        prev$1 = type$2;\n      }\n\n      // W5. A sequence of European terminators adjacent to European\n      // numbers changes to all European numbers.\n      // W6. Otherwise, separators and terminators change to Other\n      // Neutral.\n      for (var i$4 = 0; i$4 < len; ++i$4) {\n        var type$3 = types[i$4];\n        if (type$3 == \",\") { types[i$4] = \"N\"; }\n        else if (type$3 == \"%\") {\n          var end = (void 0);\n          for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n          var replace = (i$4 && types[i$4-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n          for (var j = i$4; j < end; ++j) { types[j] = replace; }\n          i$4 = end - 1;\n        }\n      }\n\n      // W7. Search backwards from each instance of a European number\n      // until the first strong type (R, L, or sor) is found. If an L is\n      // found, then change the type of the European number to L.\n      for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n        var type$4 = types[i$5];\n        if (cur$1 == \"L\" && type$4 == \"1\") { types[i$5] = \"L\"; }\n        else if (isStrong.test(type$4)) { cur$1 = type$4; }\n      }\n\n      // N1. A sequence of neutrals takes the direction of the\n      // surrounding strong text if the text on both sides has the same\n      // direction. European and Arabic numbers act as if they were R in\n      // terms of their influence on neutrals. Start-of-level-run (sor)\n      // and end-of-level-run (eor) are used at level run boundaries.\n      // N2. Any remaining neutrals take the embedding direction.\n      for (var i$6 = 0; i$6 < len; ++i$6) {\n        if (isNeutral.test(types[i$6])) {\n          var end$1 = (void 0);\n          for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n          var before = (i$6 ? types[i$6-1] : outerType) == \"L\";\n          var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n          var replace$1 = before == after ? (before ? \"L\" : \"R\") : outerType;\n          for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }\n          i$6 = end$1 - 1;\n        }\n      }\n\n      // Here we depart from the documented algorithm, in order to avoid\n      // building up an actual levels array. Since there are only three\n      // levels (0, 1, 2) in an implementation that doesn't take\n      // explicit embedding into account, we can build up the order on\n      // the fly, without following the level-based algorithm.\n      var order = [], m;\n      for (var i$7 = 0; i$7 < len;) {\n        if (countsAsLeft.test(types[i$7])) {\n          var start = i$7;\n          for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n          order.push(new BidiSpan(0, start, i$7));\n        } else {\n          var pos = i$7, at = order.length, isRTL = direction == \"rtl\" ? 1 : 0;\n          for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n          for (var j$2 = pos; j$2 < i$7;) {\n            if (countsAsNum.test(types[j$2])) {\n              if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; }\n              var nstart = j$2;\n              for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n              order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n              at += isRTL;\n              pos = j$2;\n            } else { ++j$2; }\n          }\n          if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }\n        }\n      }\n      if (direction == \"ltr\") {\n        if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n          order[0].from = m[0].length;\n          order.unshift(new BidiSpan(0, 0, m[0].length));\n        }\n        if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n          lst(order).to -= m[0].length;\n          order.push(new BidiSpan(0, len - m[0].length, len));\n        }\n      }\n\n      return direction == \"rtl\" ? order.reverse() : order\n    }\n  })();\n\n  // Get the bidi ordering for the given line (and cache it). Returns\n  // false for lines that are fully left-to-right, and an array of\n  // BidiSpan objects otherwise.\n  function getOrder(line, direction) {\n    var order = line.order;\n    if (order == null) { order = line.order = bidiOrdering(line.text, direction); }\n    return order\n  }\n\n  // EVENT HANDLING\n\n  // Lightweight event framework. on/off also work on DOM nodes,\n  // registering native DOM handlers.\n\n  var noHandlers = [];\n\n  var on = function(emitter, type, f) {\n    if (emitter.addEventListener) {\n      emitter.addEventListener(type, f, false);\n    } else if (emitter.attachEvent) {\n      emitter.attachEvent(\"on\" + type, f);\n    } else {\n      var map = emitter._handlers || (emitter._handlers = {});\n      map[type] = (map[type] || noHandlers).concat(f);\n    }\n  };\n\n  function getHandlers(emitter, type) {\n    return emitter._handlers && emitter._handlers[type] || noHandlers\n  }\n\n  function off(emitter, type, f) {\n    if (emitter.removeEventListener) {\n      emitter.removeEventListener(type, f, false);\n    } else if (emitter.detachEvent) {\n      emitter.detachEvent(\"on\" + type, f);\n    } else {\n      var map = emitter._handlers, arr = map && map[type];\n      if (arr) {\n        var index = indexOf(arr, f);\n        if (index > -1)\n          { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }\n      }\n    }\n  }\n\n  function signal(emitter, type /*, values...*/) {\n    var handlers = getHandlers(emitter, type);\n    if (!handlers.length) { return }\n    var args = Array.prototype.slice.call(arguments, 2);\n    for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }\n  }\n\n  // The DOM events that CodeMirror handles can be overridden by\n  // registering a (non-DOM) handler on the editor for the event name,\n  // and preventDefault-ing the event in that handler.\n  function signalDOMEvent(cm, e, override) {\n    if (typeof e == \"string\")\n      { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }\n    signal(cm, override || e.type, cm, e);\n    return e_defaultPrevented(e) || e.codemirrorIgnore\n  }\n\n  function signalCursorActivity(cm) {\n    var arr = cm._handlers && cm._handlers.cursorActivity;\n    if (!arr) { return }\n    var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n    for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)\n      { set.push(arr[i]); } }\n  }\n\n  function hasHandler(emitter, type) {\n    return getHandlers(emitter, type).length > 0\n  }\n\n  // Add on and off methods to a constructor's prototype, to make\n  // registering events on such objects more convenient.\n  function eventMixin(ctor) {\n    ctor.prototype.on = function(type, f) {on(this, type, f);};\n    ctor.prototype.off = function(type, f) {off(this, type, f);};\n  }\n\n  // Due to the fact that we still support jurassic IE versions, some\n  // compatibility wrappers are needed.\n\n  function e_preventDefault(e) {\n    if (e.preventDefault) { e.preventDefault(); }\n    else { e.returnValue = false; }\n  }\n  function e_stopPropagation(e) {\n    if (e.stopPropagation) { e.stopPropagation(); }\n    else { e.cancelBubble = true; }\n  }\n  function e_defaultPrevented(e) {\n    return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n  }\n  function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n\n  function e_target(e) {return e.target || e.srcElement}\n  function e_button(e) {\n    var b = e.which;\n    if (b == null) {\n      if (e.button & 1) { b = 1; }\n      else if (e.button & 2) { b = 3; }\n      else if (e.button & 4) { b = 2; }\n    }\n    if (mac && e.ctrlKey && b == 1) { b = 3; }\n    return b\n  }\n\n  // Detect drag-and-drop\n  var dragAndDrop = function() {\n    // There is *some* kind of drag-and-drop support in IE6-8, but I\n    // couldn't get it to work yet.\n    if (ie && ie_version < 9) { return false }\n    var div = elt('div');\n    return \"draggable\" in div || \"dragDrop\" in div\n  }();\n\n  var zwspSupported;\n  function zeroWidthElement(measure) {\n    if (zwspSupported == null) {\n      var test = elt(\"span\", \"\\u200b\");\n      removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n      if (measure.firstChild.offsetHeight != 0)\n        { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }\n    }\n    var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n      elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n    node.setAttribute(\"cm-text\", \"\");\n    return node\n  }\n\n  // Feature-detect IE's crummy client rect reporting for bidi text\n  var badBidiRects;\n  function hasBadBidiRects(measure) {\n    if (badBidiRects != null) { return badBidiRects }\n    var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n    var r0 = range(txt, 0, 1).getBoundingClientRect();\n    var r1 = range(txt, 1, 2).getBoundingClientRect();\n    removeChildren(measure);\n    if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)\n    return badBidiRects = (r1.right - r0.right < 3)\n  }\n\n  // See if \"\".split is the broken IE version, if so, provide an\n  // alternative way to split lines.\n  var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n    var pos = 0, result = [], l = string.length;\n    while (pos <= l) {\n      var nl = string.indexOf(\"\\n\", pos);\n      if (nl == -1) { nl = string.length; }\n      var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n      var rt = line.indexOf(\"\\r\");\n      if (rt != -1) {\n        result.push(line.slice(0, rt));\n        pos += rt + 1;\n      } else {\n        result.push(line);\n        pos = nl + 1;\n      }\n    }\n    return result\n  } : function (string) { return string.split(/\\r\\n?|\\n/); };\n\n  var hasSelection = window.getSelection ? function (te) {\n    try { return te.selectionStart != te.selectionEnd }\n    catch(e) { return false }\n  } : function (te) {\n    var range;\n    try {range = te.ownerDocument.selection.createRange();}\n    catch(e) {}\n    if (!range || range.parentElement() != te) { return false }\n    return range.compareEndPoints(\"StartToEnd\", range) != 0\n  };\n\n  var hasCopyEvent = (function () {\n    var e = elt(\"div\");\n    if (\"oncopy\" in e) { return true }\n    e.setAttribute(\"oncopy\", \"return;\");\n    return typeof e.oncopy == \"function\"\n  })();\n\n  var badZoomedRects = null;\n  function hasBadZoomedRects(measure) {\n    if (badZoomedRects != null) { return badZoomedRects }\n    var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n    var normal = node.getBoundingClientRect();\n    var fromRange = range(node, 0, 1).getBoundingClientRect();\n    return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1\n  }\n\n  // Known modes, by name and by MIME\n  var modes = {}, mimeModes = {};\n\n  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\n  function defineMode(name, mode) {\n    if (arguments.length > 2)\n      { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n    modes[name] = mode;\n  }\n\n  function defineMIME(mime, spec) {\n    mimeModes[mime] = spec;\n  }\n\n  // Given a MIME type, a {name, ...options} config object, or a name\n  // string, return a mode config object.\n  function resolveMode(spec) {\n    if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n      spec = mimeModes[spec];\n    } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n      var found = mimeModes[spec.name];\n      if (typeof found == \"string\") { found = {name: found}; }\n      spec = createObj(found, spec);\n      spec.name = found.name;\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n      return resolveMode(\"application/xml\")\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n      return resolveMode(\"application/json\")\n    }\n    if (typeof spec == \"string\") { return {name: spec} }\n    else { return spec || {name: \"null\"} }\n  }\n\n  // Given a mode spec (anything that resolveMode accepts), find and\n  // initialize an actual mode object.\n  function getMode(options, spec) {\n    spec = resolveMode(spec);\n    var mfactory = modes[spec.name];\n    if (!mfactory) { return getMode(options, \"text/plain\") }\n    var modeObj = mfactory(options, spec);\n    if (modeExtensions.hasOwnProperty(spec.name)) {\n      var exts = modeExtensions[spec.name];\n      for (var prop in exts) {\n        if (!exts.hasOwnProperty(prop)) { continue }\n        if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n        modeObj[prop] = exts[prop];\n      }\n    }\n    modeObj.name = spec.name;\n    if (spec.helperType) { modeObj.helperType = spec.helperType; }\n    if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n      { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n    return modeObj\n  }\n\n  // This can be used to attach properties to mode objects from\n  // outside the actual mode definition.\n  var modeExtensions = {};\n  function extendMode(mode, properties) {\n    var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n    copyObj(properties, exts);\n  }\n\n  function copyState(mode, state) {\n    if (state === true) { return state }\n    if (mode.copyState) { return mode.copyState(state) }\n    var nstate = {};\n    for (var n in state) {\n      var val = state[n];\n      if (val instanceof Array) { val = val.concat([]); }\n      nstate[n] = val;\n    }\n    return nstate\n  }\n\n  // Given a mode and a state (for that mode), find the inner mode and\n  // state at the position that the state refers to.\n  function innerMode(mode, state) {\n    var info;\n    while (mode.innerMode) {\n      info = mode.innerMode(state);\n      if (!info || info.mode == mode) { break }\n      state = info.state;\n      mode = info.mode;\n    }\n    return info || {mode: mode, state: state}\n  }\n\n  function startState(mode, a1, a2) {\n    return mode.startState ? mode.startState(a1, a2) : true\n  }\n\n  // STRING STREAM\n\n  // Fed to the mode parsers, provides helper functions to make\n  // parsers more succinct.\n\n  var StringStream = function(string, tabSize, lineOracle) {\n    this.pos = this.start = 0;\n    this.string = string;\n    this.tabSize = tabSize || 8;\n    this.lastColumnPos = this.lastColumnValue = 0;\n    this.lineStart = 0;\n    this.lineOracle = lineOracle;\n  };\n\n  StringStream.prototype.eol = function () {return this.pos >= this.string.length};\n  StringStream.prototype.sol = function () {return this.pos == this.lineStart};\n  StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\n  StringStream.prototype.next = function () {\n    if (this.pos < this.string.length)\n      { return this.string.charAt(this.pos++) }\n  };\n  StringStream.prototype.eat = function (match) {\n    var ch = this.string.charAt(this.pos);\n    var ok;\n    if (typeof match == \"string\") { ok = ch == match; }\n    else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n    if (ok) {++this.pos; return ch}\n  };\n  StringStream.prototype.eatWhile = function (match) {\n    var start = this.pos;\n    while (this.eat(match)){}\n    return this.pos > start\n  };\n  StringStream.prototype.eatSpace = function () {\n    var start = this.pos;\n    while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; }\n    return this.pos > start\n  };\n  StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\n  StringStream.prototype.skipTo = function (ch) {\n    var found = this.string.indexOf(ch, this.pos);\n    if (found > -1) {this.pos = found; return true}\n  };\n  StringStream.prototype.backUp = function (n) {this.pos -= n;};\n  StringStream.prototype.column = function () {\n    if (this.lastColumnPos < this.start) {\n      this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n      this.lastColumnPos = this.start;\n    }\n    return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  };\n  StringStream.prototype.indentation = function () {\n    return countColumn(this.string, null, this.tabSize) -\n      (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  };\n  StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n    if (typeof pattern == \"string\") {\n      var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n      var substr = this.string.substr(this.pos, pattern.length);\n      if (cased(substr) == cased(pattern)) {\n        if (consume !== false) { this.pos += pattern.length; }\n        return true\n      }\n    } else {\n      var match = this.string.slice(this.pos).match(pattern);\n      if (match && match.index > 0) { return null }\n      if (match && consume !== false) { this.pos += match[0].length; }\n      return match\n    }\n  };\n  StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\n  StringStream.prototype.hideFirstChars = function (n, inner) {\n    this.lineStart += n;\n    try { return inner() }\n    finally { this.lineStart -= n; }\n  };\n  StringStream.prototype.lookAhead = function (n) {\n    var oracle = this.lineOracle;\n    return oracle && oracle.lookAhead(n)\n  };\n  StringStream.prototype.baseToken = function () {\n    var oracle = this.lineOracle;\n    return oracle && oracle.baseToken(this.pos)\n  };\n\n  // Find the line object corresponding to the given line number.\n  function getLine(doc, n) {\n    n -= doc.first;\n    if (n < 0 || n >= doc.size) { throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\") }\n    var chunk = doc;\n    while (!chunk.lines) {\n      for (var i = 0;; ++i) {\n        var child = chunk.children[i], sz = child.chunkSize();\n        if (n < sz) { chunk = child; break }\n        n -= sz;\n      }\n    }\n    return chunk.lines[n]\n  }\n\n  // Get the part of a document between two positions, as an array of\n  // strings.\n  function getBetween(doc, start, end) {\n    var out = [], n = start.line;\n    doc.iter(start.line, end.line + 1, function (line) {\n      var text = line.text;\n      if (n == end.line) { text = text.slice(0, end.ch); }\n      if (n == start.line) { text = text.slice(start.ch); }\n      out.push(text);\n      ++n;\n    });\n    return out\n  }\n  // Get the lines between from and to, as array of strings.\n  function getLines(doc, from, to) {\n    var out = [];\n    doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value\n    return out\n  }\n\n  // Update the height of a line, propagating the height change\n  // upwards to parent nodes.\n  function updateLineHeight(line, height) {\n    var diff = height - line.height;\n    if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }\n  }\n\n  // Given a line object, find its line number by walking up through\n  // its parent links.\n  function lineNo(line) {\n    if (line.parent == null) { return null }\n    var cur = line.parent, no = indexOf(cur.lines, line);\n    for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n      for (var i = 0;; ++i) {\n        if (chunk.children[i] == cur) { break }\n        no += chunk.children[i].chunkSize();\n      }\n    }\n    return no + cur.first\n  }\n\n  // Find the line at the given vertical position, using the height\n  // information in the document tree.\n  function lineAtHeight(chunk, h) {\n    var n = chunk.first;\n    outer: do {\n      for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n        var child = chunk.children[i$1], ch = child.height;\n        if (h < ch) { chunk = child; continue outer }\n        h -= ch;\n        n += child.chunkSize();\n      }\n      return n\n    } while (!chunk.lines)\n    var i = 0;\n    for (; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i], lh = line.height;\n      if (h < lh) { break }\n      h -= lh;\n    }\n    return n + i\n  }\n\n  function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\n  function lineNumberFor(options, i) {\n    return String(options.lineNumberFormatter(i + options.firstLineNumber))\n  }\n\n  // A Pos instance represents a position within the text.\n  function Pos(line, ch, sticky) {\n    if ( sticky === void 0 ) sticky = null;\n\n    if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }\n    this.line = line;\n    this.ch = ch;\n    this.sticky = sticky;\n  }\n\n  // Compare two positions, return 0 if they are the same, a negative\n  // number when a is less, and a positive number otherwise.\n  function cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\n  function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\n  function copyPos(x) {return Pos(x.line, x.ch)}\n  function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\n  function minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n  // Most of the external API clips given positions to make sure they\n  // actually exist within the document.\n  function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\n  function clipPos(doc, pos) {\n    if (pos.line < doc.first) { return Pos(doc.first, 0) }\n    var last = doc.first + doc.size - 1;\n    if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }\n    return clipToLen(pos, getLine(doc, pos.line).text.length)\n  }\n  function clipToLen(pos, linelen) {\n    var ch = pos.ch;\n    if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }\n    else if (ch < 0) { return Pos(pos.line, 0) }\n    else { return pos }\n  }\n  function clipPosArray(doc, array) {\n    var out = [];\n    for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }\n    return out\n  }\n\n  var SavedContext = function(state, lookAhead) {\n    this.state = state;\n    this.lookAhead = lookAhead;\n  };\n\n  var Context = function(doc, state, line, lookAhead) {\n    this.state = state;\n    this.doc = doc;\n    this.line = line;\n    this.maxLookAhead = lookAhead || 0;\n    this.baseTokens = null;\n    this.baseTokenPos = 1;\n  };\n\n  Context.prototype.lookAhead = function (n) {\n    var line = this.doc.getLine(this.line + n);\n    if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }\n    return line\n  };\n\n  Context.prototype.baseToken = function (n) {\n    if (!this.baseTokens) { return null }\n    while (this.baseTokens[this.baseTokenPos] <= n)\n      { this.baseTokenPos += 2; }\n    var type = this.baseTokens[this.baseTokenPos + 1];\n    return {type: type && type.replace(/( |^)overlay .*/, \"\"),\n            size: this.baseTokens[this.baseTokenPos] - n}\n  };\n\n  Context.prototype.nextLine = function () {\n    this.line++;\n    if (this.maxLookAhead > 0) { this.maxLookAhead--; }\n  };\n\n  Context.fromSaved = function (doc, saved, line) {\n    if (saved instanceof SavedContext)\n      { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }\n    else\n      { return new Context(doc, copyState(doc.mode, saved), line) }\n  };\n\n  Context.prototype.save = function (copy) {\n    var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n    return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state\n  };\n\n\n  // Compute a style array (an array starting with a mode generation\n  // -- for invalidation -- followed by pairs of end positions and\n  // style strings), which is used to highlight the tokens on the\n  // line.\n  function highlightLine(cm, line, context, forceToEnd) {\n    // A styles array always starts with a number identifying the\n    // mode/overlays that it is based on (for easy invalidation).\n    var st = [cm.state.modeGen], lineClasses = {};\n    // Compute the base array of styles\n    runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },\n            lineClasses, forceToEnd);\n    var state = context.state;\n\n    // Run overlays, adjust style array.\n    var loop = function ( o ) {\n      context.baseTokens = st;\n      var overlay = cm.state.overlays[o], i = 1, at = 0;\n      context.state = true;\n      runMode(cm, line.text, overlay.mode, context, function (end, style) {\n        var start = i;\n        // Ensure there's a token end at the current position, and that i points at it\n        while (at < end) {\n          var i_end = st[i];\n          if (i_end > end)\n            { st.splice(i, 1, end, st[i+1], i_end); }\n          i += 2;\n          at = Math.min(end, i_end);\n        }\n        if (!style) { return }\n        if (overlay.opaque) {\n          st.splice(start, i - start, end, \"overlay \" + style);\n          i = start + 2;\n        } else {\n          for (; start < i; start += 2) {\n            var cur = st[start+1];\n            st[start+1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n          }\n        }\n      }, lineClasses);\n      context.state = state;\n      context.baseTokens = null;\n      context.baseTokenPos = 1;\n    };\n\n    for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );\n\n    return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\n  }\n\n  function getLineStyles(cm, line, updateFrontier) {\n    if (!line.styles || line.styles[0] != cm.state.modeGen) {\n      var context = getContextBefore(cm, lineNo(line));\n      var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n      var result = highlightLine(cm, line, context);\n      if (resetState) { context.state = resetState; }\n      line.stateAfter = context.save(!resetState);\n      line.styles = result.styles;\n      if (result.classes) { line.styleClasses = result.classes; }\n      else if (line.styleClasses) { line.styleClasses = null; }\n      if (updateFrontier === cm.doc.highlightFrontier)\n        { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }\n    }\n    return line.styles\n  }\n\n  function getContextBefore(cm, n, precise) {\n    var doc = cm.doc, display = cm.display;\n    if (!doc.mode.startState) { return new Context(doc, true, n) }\n    var start = findStartLine(cm, n, precise);\n    var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n    var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n\n    doc.iter(start, n, function (line) {\n      processLine(cm, line.text, context);\n      var pos = context.line;\n      line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n      context.nextLine();\n    });\n    if (precise) { doc.modeFrontier = context.line; }\n    return context\n  }\n\n  // Lightweight form of highlight -- proceed over this line and\n  // update state, but don't save a style array. Used for lines that\n  // aren't currently visible.\n  function processLine(cm, text, context, startAt) {\n    var mode = cm.doc.mode;\n    var stream = new StringStream(text, cm.options.tabSize, context);\n    stream.start = stream.pos = startAt || 0;\n    if (text == \"\") { callBlankLine(mode, context.state); }\n    while (!stream.eol()) {\n      readToken(mode, stream, context.state);\n      stream.start = stream.pos;\n    }\n  }\n\n  function callBlankLine(mode, state) {\n    if (mode.blankLine) { return mode.blankLine(state) }\n    if (!mode.innerMode) { return }\n    var inner = innerMode(mode, state);\n    if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }\n  }\n\n  function readToken(mode, stream, state, inner) {\n    for (var i = 0; i < 10; i++) {\n      if (inner) { inner[0] = innerMode(mode, state).mode; }\n      var style = mode.token(stream, state);\n      if (stream.pos > stream.start) { return style }\n    }\n    throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n  }\n\n  var Token = function(stream, type, state) {\n    this.start = stream.start; this.end = stream.pos;\n    this.string = stream.current();\n    this.type = type || null;\n    this.state = state;\n  };\n\n  // Utility for getTokenAt and getLineTokens\n  function takeToken(cm, pos, precise, asArray) {\n    var doc = cm.doc, mode = doc.mode, style;\n    pos = clipPos(doc, pos);\n    var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);\n    var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;\n    if (asArray) { tokens = []; }\n    while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n      stream.start = stream.pos;\n      style = readToken(mode, stream, context.state);\n      if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }\n    }\n    return asArray ? tokens : new Token(stream, style, context.state)\n  }\n\n  function extractLineClasses(type, output) {\n    if (type) { for (;;) {\n      var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n      if (!lineClass) { break }\n      type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n      var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n      if (output[prop] == null)\n        { output[prop] = lineClass[2]; }\n      else if (!(new RegExp(\"(?:^|\\\\s)\" + lineClass[2] + \"(?:$|\\\\s)\")).test(output[prop]))\n        { output[prop] += \" \" + lineClass[2]; }\n    } }\n    return type\n  }\n\n  // Run the given mode's parser over a line, calling f for each token.\n  function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n    var flattenSpans = mode.flattenSpans;\n    if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }\n    var curStart = 0, curStyle = null;\n    var stream = new StringStream(text, cm.options.tabSize, context), style;\n    var inner = cm.options.addModeClass && [null];\n    if (text == \"\") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }\n    while (!stream.eol()) {\n      if (stream.pos > cm.options.maxHighlightLength) {\n        flattenSpans = false;\n        if (forceToEnd) { processLine(cm, text, context, stream.pos); }\n        stream.pos = text.length;\n        style = null;\n      } else {\n        style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n      }\n      if (inner) {\n        var mName = inner[0].name;\n        if (mName) { style = \"m-\" + (style ? mName + \" \" + style : mName); }\n      }\n      if (!flattenSpans || curStyle != style) {\n        while (curStart < stream.start) {\n          curStart = Math.min(stream.start, curStart + 5000);\n          f(curStart, curStyle);\n        }\n        curStyle = style;\n      }\n      stream.start = stream.pos;\n    }\n    while (curStart < stream.pos) {\n      // Webkit seems to refuse to render text nodes longer than 57444\n      // characters, and returns inaccurate measurements in nodes\n      // starting around 5000 chars.\n      var pos = Math.min(stream.pos, curStart + 5000);\n      f(pos, curStyle);\n      curStart = pos;\n    }\n  }\n\n  // Finds the line to start with when starting a parse. Tries to\n  // find a line with a stateAfter, so that it can start with a\n  // valid state. If that fails, it returns the line with the\n  // smallest indentation, which tends to need the least context to\n  // parse correctly.\n  function findStartLine(cm, n, precise) {\n    var minindent, minline, doc = cm.doc;\n    var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n    for (var search = n; search > lim; --search) {\n      if (search <= doc.first) { return doc.first }\n      var line = getLine(doc, search - 1), after = line.stateAfter;\n      if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))\n        { return search }\n      var indented = countColumn(line.text, null, cm.options.tabSize);\n      if (minline == null || minindent > indented) {\n        minline = search - 1;\n        minindent = indented;\n      }\n    }\n    return minline\n  }\n\n  function retreatFrontier(doc, n) {\n    doc.modeFrontier = Math.min(doc.modeFrontier, n);\n    if (doc.highlightFrontier < n - 10) { return }\n    var start = doc.first;\n    for (var line = n - 1; line > start; line--) {\n      var saved = getLine(doc, line).stateAfter;\n      // change is on 3\n      // state on line 1 looked ahead 2 -- so saw 3\n      // test 1 + 2 < 3 should cover this\n      if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n        start = line + 1;\n        break\n      }\n    }\n    doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n  }\n\n  // Optimize some code when these features are not used.\n  var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n  function seeReadOnlySpans() {\n    sawReadOnlySpans = true;\n  }\n\n  function seeCollapsedSpans() {\n    sawCollapsedSpans = true;\n  }\n\n  // TEXTMARKER SPANS\n\n  function MarkedSpan(marker, from, to) {\n    this.marker = marker;\n    this.from = from; this.to = to;\n  }\n\n  // Search an array of spans for a span matching the given marker.\n  function getMarkedSpanFor(spans, marker) {\n    if (spans) { for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.marker == marker) { return span }\n    } }\n  }\n  // Remove a span from an array, returning undefined if no spans are\n  // left (we don't store arrays for lines without spans).\n  function removeMarkedSpan(spans, span) {\n    var r;\n    for (var i = 0; i < spans.length; ++i)\n      { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }\n    return r\n  }\n  // Add a span to a line.\n  function addMarkedSpan(line, span) {\n    line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n    span.marker.attachLine(line);\n  }\n\n  // Used for the algorithm that adjusts markers for a change in the\n  // document. These functions cut an array of spans at a given\n  // character position, returning an array of remaining chunks (or\n  // undefined if nothing remains).\n  function markedSpansBefore(old, startCh, isInsert) {\n    var nw;\n    if (old) { for (var i = 0; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n      if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n        var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)\n        ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n      }\n    } }\n    return nw\n  }\n  function markedSpansAfter(old, endCh, isInsert) {\n    var nw;\n    if (old) { for (var i = 0; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n      if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n        var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)\n        ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n                                              span.to == null ? null : span.to - endCh));\n      }\n    } }\n    return nw\n  }\n\n  // Given a change object, compute the new set of marker spans that\n  // cover the line in which the change took place. Removes spans\n  // entirely within the change, reconnects spans belonging to the\n  // same marker that appear on both sides of the change, and cuts off\n  // spans partially within the change. Returns an array of span\n  // arrays with one element for each line in (after) the change.\n  function stretchSpansOverChange(doc, change) {\n    if (change.full) { return null }\n    var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n    var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n    if (!oldFirst && !oldLast) { return null }\n\n    var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n    // Get the spans that 'stick out' on both sides\n    var first = markedSpansBefore(oldFirst, startCh, isInsert);\n    var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n    // Next, merge those two ends\n    var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n    if (first) {\n      // Fix up .to properties of first\n      for (var i = 0; i < first.length; ++i) {\n        var span = first[i];\n        if (span.to == null) {\n          var found = getMarkedSpanFor(last, span.marker);\n          if (!found) { span.to = startCh; }\n          else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }\n        }\n      }\n    }\n    if (last) {\n      // Fix up .from in last (or move them into first in case of sameLine)\n      for (var i$1 = 0; i$1 < last.length; ++i$1) {\n        var span$1 = last[i$1];\n        if (span$1.to != null) { span$1.to += offset; }\n        if (span$1.from == null) {\n          var found$1 = getMarkedSpanFor(first, span$1.marker);\n          if (!found$1) {\n            span$1.from = offset;\n            if (sameLine) { (first || (first = [])).push(span$1); }\n          }\n        } else {\n          span$1.from += offset;\n          if (sameLine) { (first || (first = [])).push(span$1); }\n        }\n      }\n    }\n    // Make sure we didn't create any zero-length spans\n    if (first) { first = clearEmptySpans(first); }\n    if (last && last != first) { last = clearEmptySpans(last); }\n\n    var newMarkers = [first];\n    if (!sameLine) {\n      // Fill gap with whole-line-spans\n      var gap = change.text.length - 2, gapMarkers;\n      if (gap > 0 && first)\n        { for (var i$2 = 0; i$2 < first.length; ++i$2)\n          { if (first[i$2].to == null)\n            { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }\n      for (var i$3 = 0; i$3 < gap; ++i$3)\n        { newMarkers.push(gapMarkers); }\n      newMarkers.push(last);\n    }\n    return newMarkers\n  }\n\n  // Remove spans that are empty and don't have a clearWhenEmpty\n  // option of false.\n  function clearEmptySpans(spans) {\n    for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n        { spans.splice(i--, 1); }\n    }\n    if (!spans.length) { return null }\n    return spans\n  }\n\n  // Used to 'clip' out readOnly ranges when making a change.\n  function removeReadOnlyRanges(doc, from, to) {\n    var markers = null;\n    doc.iter(from.line, to.line + 1, function (line) {\n      if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n        var mark = line.markedSpans[i].marker;\n        if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n          { (markers || (markers = [])).push(mark); }\n      } }\n    });\n    if (!markers) { return null }\n    var parts = [{from: from, to: to}];\n    for (var i = 0; i < markers.length; ++i) {\n      var mk = markers[i], m = mk.find(0);\n      for (var j = 0; j < parts.length; ++j) {\n        var p = parts[j];\n        if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }\n        var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n        if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n          { newParts.push({from: p.from, to: m.from}); }\n        if (dto > 0 || !mk.inclusiveRight && !dto)\n          { newParts.push({from: m.to, to: p.to}); }\n        parts.splice.apply(parts, newParts);\n        j += newParts.length - 3;\n      }\n    }\n    return parts\n  }\n\n  // Connect or disconnect spans from a line.\n  function detachMarkedSpans(line) {\n    var spans = line.markedSpans;\n    if (!spans) { return }\n    for (var i = 0; i < spans.length; ++i)\n      { spans[i].marker.detachLine(line); }\n    line.markedSpans = null;\n  }\n  function attachMarkedSpans(line, spans) {\n    if (!spans) { return }\n    for (var i = 0; i < spans.length; ++i)\n      { spans[i].marker.attachLine(line); }\n    line.markedSpans = spans;\n  }\n\n  // Helpers used when computing which overlapping collapsed span\n  // counts as the larger one.\n  function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\n  function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\n  // Returns a number indicating which of two overlapping collapsed\n  // spans is larger (and thus includes the other). Falls back to\n  // comparing ids when the spans cover exactly the same range.\n  function compareCollapsedMarkers(a, b) {\n    var lenDiff = a.lines.length - b.lines.length;\n    if (lenDiff != 0) { return lenDiff }\n    var aPos = a.find(), bPos = b.find();\n    var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n    if (fromCmp) { return -fromCmp }\n    var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n    if (toCmp) { return toCmp }\n    return b.id - a.id\n  }\n\n  // Find out whether a line ends or starts in a collapsed span. If\n  // so, return the marker for that span.\n  function collapsedSpanAtSide(line, start) {\n    var sps = sawCollapsedSpans && line.markedSpans, found;\n    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n          (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n        { found = sp.marker; }\n    } }\n    return found\n  }\n  function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\n  function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\n  function collapsedSpanAround(line, ch) {\n    var sps = sawCollapsedSpans && line.markedSpans, found;\n    if (sps) { for (var i = 0; i < sps.length; ++i) {\n      var sp = sps[i];\n      if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&\n          (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }\n    } }\n    return found\n  }\n\n  // Test whether there exists a collapsed span that partially\n  // overlaps (covers the start or end, but not both) of a new span.\n  // Such overlap is not allowed.\n  function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n    var line = getLine(doc, lineNo);\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) { for (var i = 0; i < sps.length; ++i) {\n      var sp = sps[i];\n      if (!sp.marker.collapsed) { continue }\n      var found = sp.marker.find(0);\n      var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n      var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n      if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }\n      if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n          fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n        { return true }\n    } }\n  }\n\n  // A visual line is a line as drawn on the screen. Folding, for\n  // example, can cause multiple logical lines to appear on the same\n  // visual line. This finds the start of the visual line that the\n  // given line is part of (usually that is the line itself).\n  function visualLine(line) {\n    var merged;\n    while (merged = collapsedSpanAtStart(line))\n      { line = merged.find(-1, true).line; }\n    return line\n  }\n\n  function visualLineEnd(line) {\n    var merged;\n    while (merged = collapsedSpanAtEnd(line))\n      { line = merged.find(1, true).line; }\n    return line\n  }\n\n  // Returns an array of logical lines that continue the visual line\n  // started by the argument, or undefined if there are no such lines.\n  function visualLineContinued(line) {\n    var merged, lines;\n    while (merged = collapsedSpanAtEnd(line)) {\n      line = merged.find(1, true).line\n      ;(lines || (lines = [])).push(line);\n    }\n    return lines\n  }\n\n  // Get the line number of the start of the visual line that the\n  // given line number is part of.\n  function visualLineNo(doc, lineN) {\n    var line = getLine(doc, lineN), vis = visualLine(line);\n    if (line == vis) { return lineN }\n    return lineNo(vis)\n  }\n\n  // Get the line number of the start of the next visual line after\n  // the given line.\n  function visualLineEndNo(doc, lineN) {\n    if (lineN > doc.lastLine()) { return lineN }\n    var line = getLine(doc, lineN), merged;\n    if (!lineIsHidden(doc, line)) { return lineN }\n    while (merged = collapsedSpanAtEnd(line))\n      { line = merged.find(1, true).line; }\n    return lineNo(line) + 1\n  }\n\n  // Compute whether a line is hidden. Lines count as hidden when they\n  // are part of a visual line that starts with another line, or when\n  // they are entirely covered by collapsed, non-widget span.\n  function lineIsHidden(doc, line) {\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (!sp.marker.collapsed) { continue }\n      if (sp.from == null) { return true }\n      if (sp.marker.widgetNode) { continue }\n      if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n        { return true }\n    } }\n  }\n  function lineIsHiddenInner(doc, line, span) {\n    if (span.to == null) {\n      var end = span.marker.find(1, true);\n      return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))\n    }\n    if (span.marker.inclusiveRight && span.to == line.text.length)\n      { return true }\n    for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {\n      sp = line.markedSpans[i];\n      if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n          (sp.to == null || sp.to != span.from) &&\n          (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n          lineIsHiddenInner(doc, line, sp)) { return true }\n    }\n  }\n\n  // Find the height above the given line.\n  function heightAtLine(lineObj) {\n    lineObj = visualLine(lineObj);\n\n    var h = 0, chunk = lineObj.parent;\n    for (var i = 0; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i];\n      if (line == lineObj) { break }\n      else { h += line.height; }\n    }\n    for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n      for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n        var cur = p.children[i$1];\n        if (cur == chunk) { break }\n        else { h += cur.height; }\n      }\n    }\n    return h\n  }\n\n  // Compute the character length of a line, taking into account\n  // collapsed ranges (see markText) that might hide parts, and join\n  // other lines onto it.\n  function lineLength(line) {\n    if (line.height == 0) { return 0 }\n    var len = line.text.length, merged, cur = line;\n    while (merged = collapsedSpanAtStart(cur)) {\n      var found = merged.find(0, true);\n      cur = found.from.line;\n      len += found.from.ch - found.to.ch;\n    }\n    cur = line;\n    while (merged = collapsedSpanAtEnd(cur)) {\n      var found$1 = merged.find(0, true);\n      len -= cur.text.length - found$1.from.ch;\n      cur = found$1.to.line;\n      len += cur.text.length - found$1.to.ch;\n    }\n    return len\n  }\n\n  // Find the longest line in the document.\n  function findMaxLine(cm) {\n    var d = cm.display, doc = cm.doc;\n    d.maxLine = getLine(doc, doc.first);\n    d.maxLineLength = lineLength(d.maxLine);\n    d.maxLineChanged = true;\n    doc.iter(function (line) {\n      var len = lineLength(line);\n      if (len > d.maxLineLength) {\n        d.maxLineLength = len;\n        d.maxLine = line;\n      }\n    });\n  }\n\n  // LINE DATA STRUCTURE\n\n  // Line objects. These hold state related to a line, including\n  // highlighting info (the styles array).\n  var Line = function(text, markedSpans, estimateHeight) {\n    this.text = text;\n    attachMarkedSpans(this, markedSpans);\n    this.height = estimateHeight ? estimateHeight(this) : 1;\n  };\n\n  Line.prototype.lineNo = function () { return lineNo(this) };\n  eventMixin(Line);\n\n  // Change the content (text, markers) of a line. Automatically\n  // invalidates cached information and tries to re-estimate the\n  // line's height.\n  function updateLine(line, text, markedSpans, estimateHeight) {\n    line.text = text;\n    if (line.stateAfter) { line.stateAfter = null; }\n    if (line.styles) { line.styles = null; }\n    if (line.order != null) { line.order = null; }\n    detachMarkedSpans(line);\n    attachMarkedSpans(line, markedSpans);\n    var estHeight = estimateHeight ? estimateHeight(line) : 1;\n    if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n  }\n\n  // Detach a line from the document tree and its markers.\n  function cleanUpLine(line) {\n    line.parent = null;\n    detachMarkedSpans(line);\n  }\n\n  // Convert a style as returned by a mode (either null, or a string\n  // containing one or more styles) to a CSS style. This is cached,\n  // and also looks for line-wide styles.\n  var styleToClassCache = {}, styleToClassCacheWithMode = {};\n  function interpretTokenStyle(style, options) {\n    if (!style || /^\\s*$/.test(style)) { return null }\n    var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n    return cache[style] ||\n      (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n  }\n\n  // Render the DOM representation of the text of a line. Also builds\n  // up a 'line map', which points at the DOM nodes that represent\n  // specific stretches of text, and is used by the measuring code.\n  // The returned object contains the DOM node, this map, and\n  // information about line-wide styles that were set by the mode.\n  function buildLineContent(cm, lineView) {\n    // The padding-right forces the element to have a 'border', which\n    // is needed on Webkit to be able to get line-level bounding\n    // rectangles for it (in measureChar).\n    var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n    var builder = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n                   col: 0, pos: 0, cm: cm,\n                   trailingSpace: false,\n                   splitSpaces: cm.getOption(\"lineWrapping\")};\n    lineView.measure = {};\n\n    // Iterate over the logical lines that make up this visual line.\n    for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n      var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);\n      builder.pos = 0;\n      builder.addToken = buildToken;\n      // Optionally wire in some hacks into the token-rendering\n      // algorithm, to deal with browser quirks.\n      if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n        { builder.addToken = buildTokenBadBidi(builder.addToken, order); }\n      builder.map = [];\n      var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n      insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n      if (line.styleClasses) {\n        if (line.styleClasses.bgClass)\n          { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\"); }\n        if (line.styleClasses.textClass)\n          { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\"); }\n      }\n\n      // Ensure at least a single node is present, for measuring.\n      if (builder.map.length == 0)\n        { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }\n\n      // Store the map and a cache object for the current logical line\n      if (i == 0) {\n        lineView.measure.map = builder.map;\n        lineView.measure.cache = {};\n      } else {\n  (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)\n        ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});\n      }\n    }\n\n    // See issue #2901\n    if (webkit) {\n      var last = builder.content.lastChild;\n      if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n        { builder.content.className = \"cm-tab-wrap-hack\"; }\n    }\n\n    signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n    if (builder.pre.className)\n      { builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\"); }\n\n    return builder\n  }\n\n  function defaultSpecialCharPlaceholder(ch) {\n    var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n    token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n    token.setAttribute(\"aria-label\", token.title);\n    return token\n  }\n\n  // Build up the DOM representation for a single token, and add it to\n  // the line map. Takes care to render special characters separately.\n  function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n    if (!text) { return }\n    var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n    var special = builder.cm.state.specialChars, mustWrap = false;\n    var content;\n    if (!special.test(text)) {\n      builder.col += text.length;\n      content = document.createTextNode(displayText);\n      builder.map.push(builder.pos, builder.pos + text.length, content);\n      if (ie && ie_version < 9) { mustWrap = true; }\n      builder.pos += text.length;\n    } else {\n      content = document.createDocumentFragment();\n      var pos = 0;\n      while (true) {\n        special.lastIndex = pos;\n        var m = special.exec(text);\n        var skipped = m ? m.index - pos : text.length - pos;\n        if (skipped) {\n          var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n          if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt])); }\n          else { content.appendChild(txt); }\n          builder.map.push(builder.pos, builder.pos + skipped, txt);\n          builder.col += skipped;\n          builder.pos += skipped;\n        }\n        if (!m) { break }\n        pos += skipped + 1;\n        var txt$1 = (void 0);\n        if (m[0] == \"\\t\") {\n          var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n          txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n          txt$1.setAttribute(\"role\", \"presentation\");\n          txt$1.setAttribute(\"cm-text\", \"\\t\");\n          builder.col += tabWidth;\n        } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n          txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n          txt$1.setAttribute(\"cm-text\", m[0]);\n          builder.col += 1;\n        } else {\n          txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n          txt$1.setAttribute(\"cm-text\", m[0]);\n          if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt$1])); }\n          else { content.appendChild(txt$1); }\n          builder.col += 1;\n        }\n        builder.map.push(builder.pos, builder.pos + 1, txt$1);\n        builder.pos++;\n      }\n    }\n    builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n    if (style || startStyle || endStyle || mustWrap || css || attributes) {\n      var fullStyle = style || \"\";\n      if (startStyle) { fullStyle += startStyle; }\n      if (endStyle) { fullStyle += endStyle; }\n      var token = elt(\"span\", [content], fullStyle, css);\n      if (attributes) {\n        for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\")\n          { token.setAttribute(attr, attributes[attr]); } }\n      }\n      return builder.content.appendChild(token)\n    }\n    builder.content.appendChild(content);\n  }\n\n  // Change some spaces to NBSP to prevent the browser from collapsing\n  // trailing spaces at the end of a line when rendering text (issue #1362).\n  function splitSpaces(text, trailingBefore) {\n    if (text.length > 1 && !/  /.test(text)) { return text }\n    var spaceBefore = trailingBefore, result = \"\";\n    for (var i = 0; i < text.length; i++) {\n      var ch = text.charAt(i);\n      if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n        { ch = \"\\u00a0\"; }\n      result += ch;\n      spaceBefore = ch == \" \";\n    }\n    return result\n  }\n\n  // Work around nonsense dimensions being reported for stretches of\n  // right-to-left text.\n  function buildTokenBadBidi(inner, order) {\n    return function (builder, text, style, startStyle, endStyle, css, attributes) {\n      style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n      var start = builder.pos, end = start + text.length;\n      for (;;) {\n        // Find the part that overlaps with the start of this text\n        var part = (void 0);\n        for (var i = 0; i < order.length; i++) {\n          part = order[i];\n          if (part.to > start && part.from <= start) { break }\n        }\n        if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }\n        inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n        startStyle = null;\n        text = text.slice(part.to - start);\n        start = part.to;\n      }\n    }\n  }\n\n  function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n    var widget = !ignoreWidget && marker.widgetNode;\n    if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }\n    if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n      if (!widget)\n        { widget = builder.content.appendChild(document.createElement(\"span\")); }\n      widget.setAttribute(\"cm-marker\", marker.id);\n    }\n    if (widget) {\n      builder.cm.display.input.setUneditable(widget);\n      builder.content.appendChild(widget);\n    }\n    builder.pos += size;\n    builder.trailingSpace = false;\n  }\n\n  // Outputs a number of spans to make up a line, taking highlighting\n  // and marked text into account.\n  function insertLineContent(line, builder, styles) {\n    var spans = line.markedSpans, allText = line.text, at = 0;\n    if (!spans) {\n      for (var i$1 = 1; i$1 < styles.length; i$1+=2)\n        { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }\n      return\n    }\n\n    var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n    var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;\n    for (;;) {\n      if (nextChange == pos) { // Update current marker set\n        spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n        attributes = null;\n        collapsed = null; nextChange = Infinity;\n        var foundBookmarks = [], endStyles = (void 0);\n        for (var j = 0; j < spans.length; ++j) {\n          var sp = spans[j], m = sp.marker;\n          if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n            foundBookmarks.push(m);\n          } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n            if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n              nextChange = sp.to;\n              spanEndStyle = \"\";\n            }\n            if (m.className) { spanStyle += \" \" + m.className; }\n            if (m.css) { css = (css ? css + \";\" : \"\") + m.css; }\n            if (m.startStyle && sp.from == pos) { spanStartStyle += \" \" + m.startStyle; }\n            if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }\n            // support for the old title property\n            // https://github.com/codemirror/CodeMirror/pull/5673\n            if (m.title) { (attributes || (attributes = {})).title = m.title; }\n            if (m.attributes) {\n              for (var attr in m.attributes)\n                { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }\n            }\n            if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n              { collapsed = sp; }\n          } else if (sp.from > pos && nextChange > sp.from) {\n            nextChange = sp.from;\n          }\n        }\n        if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)\n          { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += \" \" + endStyles[j$1]; } } }\n\n        if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)\n          { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }\n        if (collapsed && (collapsed.from || 0) == pos) {\n          buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n                             collapsed.marker, collapsed.from == null);\n          if (collapsed.to == null) { return }\n          if (collapsed.to == pos) { collapsed = false; }\n        }\n      }\n      if (pos >= len) { break }\n\n      var upto = Math.min(len, nextChange);\n      while (true) {\n        if (text) {\n          var end = pos + text.length;\n          if (!collapsed) {\n            var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n            builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n                             spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n          }\n          if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n          pos = end;\n          spanStartStyle = \"\";\n        }\n        text = allText.slice(at, at = styles[i++]);\n        style = interpretTokenStyle(styles[i++], builder.cm.options);\n      }\n    }\n  }\n\n\n  // These objects are used to represent the visible (currently drawn)\n  // part of the document. A LineView may correspond to multiple\n  // logical lines, if those are connected by collapsed ranges.\n  function LineView(doc, line, lineN) {\n    // The starting line\n    this.line = line;\n    // Continuing lines, if any\n    this.rest = visualLineContinued(line);\n    // Number of logical lines in this visual line\n    this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n    this.node = this.text = null;\n    this.hidden = lineIsHidden(doc, line);\n  }\n\n  // Create a range of LineView objects for the given lines.\n  function buildViewArray(cm, from, to) {\n    var array = [], nextPos;\n    for (var pos = from; pos < to; pos = nextPos) {\n      var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n      nextPos = pos + view.size;\n      array.push(view);\n    }\n    return array\n  }\n\n  var operationGroup = null;\n\n  function pushOperation(op) {\n    if (operationGroup) {\n      operationGroup.ops.push(op);\n    } else {\n      op.ownsGroup = operationGroup = {\n        ops: [op],\n        delayedCallbacks: []\n      };\n    }\n  }\n\n  function fireCallbacksForOps(group) {\n    // Calls delayed callbacks and cursorActivity handlers until no\n    // new ones appear\n    var callbacks = group.delayedCallbacks, i = 0;\n    do {\n      for (; i < callbacks.length; i++)\n        { callbacks[i].call(null); }\n      for (var j = 0; j < group.ops.length; j++) {\n        var op = group.ops[j];\n        if (op.cursorActivityHandlers)\n          { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n            { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }\n      }\n    } while (i < callbacks.length)\n  }\n\n  function finishOperation(op, endCb) {\n    var group = op.ownsGroup;\n    if (!group) { return }\n\n    try { fireCallbacksForOps(group); }\n    finally {\n      operationGroup = null;\n      endCb(group);\n    }\n  }\n\n  var orphanDelayedCallbacks = null;\n\n  // Often, we want to signal events at a point where we are in the\n  // middle of some work, but don't want the handler to start calling\n  // other methods on the editor, which might be in an inconsistent\n  // state or simply not expect any other events to happen.\n  // signalLater looks whether there are any handlers, and schedules\n  // them to be executed when the last operation ends, or, if no\n  // operation is active, when a timeout fires.\n  function signalLater(emitter, type /*, values...*/) {\n    var arr = getHandlers(emitter, type);\n    if (!arr.length) { return }\n    var args = Array.prototype.slice.call(arguments, 2), list;\n    if (operationGroup) {\n      list = operationGroup.delayedCallbacks;\n    } else if (orphanDelayedCallbacks) {\n      list = orphanDelayedCallbacks;\n    } else {\n      list = orphanDelayedCallbacks = [];\n      setTimeout(fireOrphanDelayed, 0);\n    }\n    var loop = function ( i ) {\n      list.push(function () { return arr[i].apply(null, args); });\n    };\n\n    for (var i = 0; i < arr.length; ++i)\n      loop( i );\n  }\n\n  function fireOrphanDelayed() {\n    var delayed = orphanDelayedCallbacks;\n    orphanDelayedCallbacks = null;\n    for (var i = 0; i < delayed.length; ++i) { delayed[i](); }\n  }\n\n  // When an aspect of a line changes, a string is added to\n  // lineView.changes. This updates the relevant part of the line's\n  // DOM structure.\n  function updateLineForChanges(cm, lineView, lineN, dims) {\n    for (var j = 0; j < lineView.changes.length; j++) {\n      var type = lineView.changes[j];\n      if (type == \"text\") { updateLineText(cm, lineView); }\n      else if (type == \"gutter\") { updateLineGutter(cm, lineView, lineN, dims); }\n      else if (type == \"class\") { updateLineClasses(cm, lineView); }\n      else if (type == \"widget\") { updateLineWidgets(cm, lineView, dims); }\n    }\n    lineView.changes = null;\n  }\n\n  // Lines with gutter elements, widgets or a background class need to\n  // be wrapped, and have the extra elements added to the wrapper div\n  function ensureLineWrapped(lineView) {\n    if (lineView.node == lineView.text) {\n      lineView.node = elt(\"div\", null, null, \"position: relative\");\n      if (lineView.text.parentNode)\n        { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }\n      lineView.node.appendChild(lineView.text);\n      if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }\n    }\n    return lineView.node\n  }\n\n  function updateLineBackground(cm, lineView) {\n    var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n    if (cls) { cls += \" CodeMirror-linebackground\"; }\n    if (lineView.background) {\n      if (cls) { lineView.background.className = cls; }\n      else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n    } else if (cls) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n      cm.display.input.setUneditable(lineView.background);\n    }\n  }\n\n  // Wrapper around buildLineContent which will reuse the structure\n  // in display.externalMeasured when possible.\n  function getLineContent(cm, lineView) {\n    var ext = cm.display.externalMeasured;\n    if (ext && ext.line == lineView.line) {\n      cm.display.externalMeasured = null;\n      lineView.measure = ext.measure;\n      return ext.built\n    }\n    return buildLineContent(cm, lineView)\n  }\n\n  // Redraw the line's text. Interacts with the background and text\n  // classes because the mode may output tokens that influence these\n  // classes.\n  function updateLineText(cm, lineView) {\n    var cls = lineView.text.className;\n    var built = getLineContent(cm, lineView);\n    if (lineView.text == lineView.node) { lineView.node = built.pre; }\n    lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n    lineView.text = built.pre;\n    if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n      lineView.bgClass = built.bgClass;\n      lineView.textClass = built.textClass;\n      updateLineClasses(cm, lineView);\n    } else if (cls) {\n      lineView.text.className = cls;\n    }\n  }\n\n  function updateLineClasses(cm, lineView) {\n    updateLineBackground(cm, lineView);\n    if (lineView.line.wrapClass)\n      { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }\n    else if (lineView.node != lineView.text)\n      { lineView.node.className = \"\"; }\n    var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n    lineView.text.className = textClass || \"\";\n  }\n\n  function updateLineGutter(cm, lineView, lineN, dims) {\n    if (lineView.gutter) {\n      lineView.node.removeChild(lineView.gutter);\n      lineView.gutter = null;\n    }\n    if (lineView.gutterBackground) {\n      lineView.node.removeChild(lineView.gutterBackground);\n      lineView.gutterBackground = null;\n    }\n    if (lineView.line.gutterClass) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n                                      (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + (dims.gutterTotalWidth) + \"px\"));\n      cm.display.input.setUneditable(lineView.gutterBackground);\n      wrap.insertBefore(lineView.gutterBackground, lineView.text);\n    }\n    var markers = lineView.line.gutterMarkers;\n    if (cm.options.lineNumbers || markers) {\n      var wrap$1 = ensureLineWrapped(lineView);\n      var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"));\n      cm.display.input.setUneditable(gutterWrap);\n      wrap$1.insertBefore(gutterWrap, lineView.text);\n      if (lineView.line.gutterClass)\n        { gutterWrap.className += \" \" + lineView.line.gutterClass; }\n      if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n        { lineView.lineNumber = gutterWrap.appendChild(\n          elt(\"div\", lineNumberFor(cm.options, lineN),\n              \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n              (\"left: \" + (dims.gutterLeft[\"CodeMirror-linenumbers\"]) + \"px; width: \" + (cm.display.lineNumInnerWidth) + \"px\"))); }\n      if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {\n        var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id];\n        if (found)\n          { gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n                                     (\"left: \" + (dims.gutterLeft[id]) + \"px; width: \" + (dims.gutterWidth[id]) + \"px\"))); }\n      } }\n    }\n  }\n\n  function updateLineWidgets(cm, lineView, dims) {\n    if (lineView.alignable) { lineView.alignable = null; }\n    var isWidget = classTest(\"CodeMirror-linewidget\");\n    for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {\n      next = node.nextSibling;\n      if (isWidget.test(node.className)) { lineView.node.removeChild(node); }\n    }\n    insertLineWidgets(cm, lineView, dims);\n  }\n\n  // Build a line's DOM representation from scratch\n  function buildLineElement(cm, lineView, lineN, dims) {\n    var built = getLineContent(cm, lineView);\n    lineView.text = lineView.node = built.pre;\n    if (built.bgClass) { lineView.bgClass = built.bgClass; }\n    if (built.textClass) { lineView.textClass = built.textClass; }\n\n    updateLineClasses(cm, lineView);\n    updateLineGutter(cm, lineView, lineN, dims);\n    insertLineWidgets(cm, lineView, dims);\n    return lineView.node\n  }\n\n  // A lineView may contain multiple logical lines (when merged by\n  // collapsed spans). The widgets for all of them need to be drawn.\n  function insertLineWidgets(cm, lineView, dims) {\n    insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n    if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n      { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }\n  }\n\n  function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n    if (!line.widgets) { return }\n    var wrap = ensureLineWrapped(lineView);\n    for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n      var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\" + (widget.className ? \" \" + widget.className : \"\"));\n      if (!widget.handleMouseEvents) { node.setAttribute(\"cm-ignore-events\", \"true\"); }\n      positionLineWidget(widget, node, lineView, dims);\n      cm.display.input.setUneditable(node);\n      if (allowAbove && widget.above)\n        { wrap.insertBefore(node, lineView.gutter || lineView.text); }\n      else\n        { wrap.appendChild(node); }\n      signalLater(widget, \"redraw\");\n    }\n  }\n\n  function positionLineWidget(widget, node, lineView, dims) {\n    if (widget.noHScroll) {\n  (lineView.alignable || (lineView.alignable = [])).push(node);\n      var width = dims.wrapperWidth;\n      node.style.left = dims.fixedPos + \"px\";\n      if (!widget.coverGutter) {\n        width -= dims.gutterTotalWidth;\n        node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n      }\n      node.style.width = width + \"px\";\n    }\n    if (widget.coverGutter) {\n      node.style.zIndex = 5;\n      node.style.position = \"relative\";\n      if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + \"px\"; }\n    }\n  }\n\n  function widgetHeight(widget) {\n    if (widget.height != null) { return widget.height }\n    var cm = widget.doc.cm;\n    if (!cm) { return 0 }\n    if (!contains(document.body, widget.node)) {\n      var parentStyle = \"position: relative;\";\n      if (widget.coverGutter)\n        { parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"; }\n      if (widget.noHScroll)\n        { parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"; }\n      removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n    }\n    return widget.height = widget.node.parentNode.offsetHeight\n  }\n\n  // Return true when the given mouse event happened in a widget\n  function eventInWidget(display, e) {\n    for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n      if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n          (n.parentNode == display.sizer && n != display.mover))\n        { return true }\n    }\n  }\n\n  // POSITION MEASUREMENT\n\n  function paddingTop(display) {return display.lineSpace.offsetTop}\n  function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\n  function paddingH(display) {\n    if (display.cachedPaddingH) { return display.cachedPaddingH }\n    var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\", \"CodeMirror-line-like\"));\n    var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n    var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n    if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }\n    return data\n  }\n\n  function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\n  function displayWidth(cm) {\n    return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n  }\n  function displayHeight(cm) {\n    return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n  }\n\n  // Ensure the lineView.wrapping.heights array is populated. This is\n  // an array of bottom offsets for the lines that make up a drawn\n  // line. When lineWrapping is on, there might be more than one\n  // height.\n  function ensureLineHeights(cm, lineView, rect) {\n    var wrapping = cm.options.lineWrapping;\n    var curWidth = wrapping && displayWidth(cm);\n    if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n      var heights = lineView.measure.heights = [];\n      if (wrapping) {\n        lineView.measure.width = curWidth;\n        var rects = lineView.text.firstChild.getClientRects();\n        for (var i = 0; i < rects.length - 1; i++) {\n          var cur = rects[i], next = rects[i + 1];\n          if (Math.abs(cur.bottom - next.bottom) > 2)\n            { heights.push((cur.bottom + next.top) / 2 - rect.top); }\n        }\n      }\n      heights.push(rect.bottom - rect.top);\n    }\n  }\n\n  // Find a line map (mapping character offsets to text nodes) and a\n  // measurement cache for the given line number. (A line view might\n  // contain multiple lines when collapsed ranges are present.)\n  function mapFromLineView(lineView, line, lineN) {\n    if (lineView.line == line)\n      { return {map: lineView.measure.map, cache: lineView.measure.cache} }\n    for (var i = 0; i < lineView.rest.length; i++)\n      { if (lineView.rest[i] == line)\n        { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }\n    for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)\n      { if (lineNo(lineView.rest[i$1]) > lineN)\n        { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }\n  }\n\n  // Render a line into the hidden node display.externalMeasured. Used\n  // when measurement is needed for a line that's not in the viewport.\n  function updateExternalMeasurement(cm, line) {\n    line = visualLine(line);\n    var lineN = lineNo(line);\n    var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n    view.lineN = lineN;\n    var built = view.built = buildLineContent(cm, view);\n    view.text = built.pre;\n    removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n    return view\n  }\n\n  // Get a {top, bottom, left, right} box (in line-local coordinates)\n  // for a given character.\n  function measureChar(cm, line, ch, bias) {\n    return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n  }\n\n  // Find a line view that corresponds to the given line number.\n  function findViewForLine(cm, lineN) {\n    if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n      { return cm.display.view[findViewIndex(cm, lineN)] }\n    var ext = cm.display.externalMeasured;\n    if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n      { return ext }\n  }\n\n  // Measurement can be split in two steps, the set-up work that\n  // applies to the whole line, and the measurement of the actual\n  // character. Functions like coordsChar, that need to do a lot of\n  // measurements in a row, can thus ensure that the set-up work is\n  // only done once.\n  function prepareMeasureForLine(cm, line) {\n    var lineN = lineNo(line);\n    var view = findViewForLine(cm, lineN);\n    if (view && !view.text) {\n      view = null;\n    } else if (view && view.changes) {\n      updateLineForChanges(cm, view, lineN, getDimensions(cm));\n      cm.curOp.forceUpdate = true;\n    }\n    if (!view)\n      { view = updateExternalMeasurement(cm, line); }\n\n    var info = mapFromLineView(view, line, lineN);\n    return {\n      line: line, view: view, rect: null,\n      map: info.map, cache: info.cache, before: info.before,\n      hasHeights: false\n    }\n  }\n\n  // Given a prepared measurement object, measures the position of an\n  // actual character (or fetches it from the cache).\n  function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n    if (prepared.before) { ch = -1; }\n    var key = ch + (bias || \"\"), found;\n    if (prepared.cache.hasOwnProperty(key)) {\n      found = prepared.cache[key];\n    } else {\n      if (!prepared.rect)\n        { prepared.rect = prepared.view.text.getBoundingClientRect(); }\n      if (!prepared.hasHeights) {\n        ensureLineHeights(cm, prepared.view, prepared.rect);\n        prepared.hasHeights = true;\n      }\n      found = measureCharInner(cm, prepared, ch, bias);\n      if (!found.bogus) { prepared.cache[key] = found; }\n    }\n    return {left: found.left, right: found.right,\n            top: varHeight ? found.rtop : found.top,\n            bottom: varHeight ? found.rbottom : found.bottom}\n  }\n\n  var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n  function nodeAndOffsetInLineMap(map, ch, bias) {\n    var node, start, end, collapse, mStart, mEnd;\n    // First, search the line map for the text node corresponding to,\n    // or closest to, the target character.\n    for (var i = 0; i < map.length; i += 3) {\n      mStart = map[i];\n      mEnd = map[i + 1];\n      if (ch < mStart) {\n        start = 0; end = 1;\n        collapse = \"left\";\n      } else if (ch < mEnd) {\n        start = ch - mStart;\n        end = start + 1;\n      } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n        end = mEnd - mStart;\n        start = end - 1;\n        if (ch >= mEnd) { collapse = \"right\"; }\n      }\n      if (start != null) {\n        node = map[i + 2];\n        if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n          { collapse = bias; }\n        if (bias == \"left\" && start == 0)\n          { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n            node = map[(i -= 3) + 2];\n            collapse = \"left\";\n          } }\n        if (bias == \"right\" && start == mEnd - mStart)\n          { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n            node = map[(i += 3) + 2];\n            collapse = \"right\";\n          } }\n        break\n      }\n    }\n    return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n  }\n\n  function getUsefulRect(rects, bias) {\n    var rect = nullRect;\n    if (bias == \"left\") { for (var i = 0; i < rects.length; i++) {\n      if ((rect = rects[i]).left != rect.right) { break }\n    } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n      if ((rect = rects[i$1]).left != rect.right) { break }\n    } }\n    return rect\n  }\n\n  function measureCharInner(cm, prepared, ch, bias) {\n    var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n    var node = place.node, start = place.start, end = place.end, collapse = place.collapse;\n\n    var rect;\n    if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n      for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n        while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }\n        while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }\n        if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n          { rect = node.parentNode.getBoundingClientRect(); }\n        else\n          { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }\n        if (rect.left || rect.right || start == 0) { break }\n        end = start;\n        start = start - 1;\n        collapse = \"right\";\n      }\n      if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }\n    } else { // If it is a widget, simply get the box for the whole widget.\n      if (start > 0) { collapse = bias = \"right\"; }\n      var rects;\n      if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n        { rect = rects[bias == \"right\" ? rects.length - 1 : 0]; }\n      else\n        { rect = node.getBoundingClientRect(); }\n    }\n    if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n      var rSpan = node.parentNode.getClientRects()[0];\n      if (rSpan)\n        { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }\n      else\n        { rect = nullRect; }\n    }\n\n    var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n    var mid = (rtop + rbot) / 2;\n    var heights = prepared.view.measure.heights;\n    var i = 0;\n    for (; i < heights.length - 1; i++)\n      { if (mid < heights[i]) { break } }\n    var top = i ? heights[i - 1] : 0, bot = heights[i];\n    var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n                  right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n                  top: top, bottom: bot};\n    if (!rect.left && !rect.right) { result.bogus = true; }\n    if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n    return result\n  }\n\n  // Work around problem with bounding client rects on ranges being\n  // returned incorrectly when zoomed on IE10 and below.\n  function maybeUpdateRectForZooming(measure, rect) {\n    if (!window.screen || screen.logicalXDPI == null ||\n        screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n      { return rect }\n    var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n    var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n    return {left: rect.left * scaleX, right: rect.right * scaleX,\n            top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n  }\n\n  function clearLineMeasurementCacheFor(lineView) {\n    if (lineView.measure) {\n      lineView.measure.cache = {};\n      lineView.measure.heights = null;\n      if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n        { lineView.measure.caches[i] = {}; } }\n    }\n  }\n\n  function clearLineMeasurementCache(cm) {\n    cm.display.externalMeasure = null;\n    removeChildren(cm.display.lineMeasure);\n    for (var i = 0; i < cm.display.view.length; i++)\n      { clearLineMeasurementCacheFor(cm.display.view[i]); }\n  }\n\n  function clearCaches(cm) {\n    clearLineMeasurementCache(cm);\n    cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n    if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }\n    cm.display.lineNumChars = null;\n  }\n\n  function pageScrollX() {\n    // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n    // which causes page_Offset and bounding client rects to use\n    // different reference viewports and invalidate our calculations.\n    if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }\n    return window.pageXOffset || (document.documentElement || document.body).scrollLeft\n  }\n  function pageScrollY() {\n    if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }\n    return window.pageYOffset || (document.documentElement || document.body).scrollTop\n  }\n\n  function widgetTopHeight(lineObj) {\n    var height = 0;\n    if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)\n      { height += widgetHeight(lineObj.widgets[i]); } } }\n    return height\n  }\n\n  // Converts a {top, bottom, left, right} box from line-local\n  // coordinates into another coordinate system. Context may be one of\n  // \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n  // or \"page\".\n  function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n    if (!includeWidgets) {\n      var height = widgetTopHeight(lineObj);\n      rect.top += height; rect.bottom += height;\n    }\n    if (context == \"line\") { return rect }\n    if (!context) { context = \"local\"; }\n    var yOff = heightAtLine(lineObj);\n    if (context == \"local\") { yOff += paddingTop(cm.display); }\n    else { yOff -= cm.display.viewOffset; }\n    if (context == \"page\" || context == \"window\") {\n      var lOff = cm.display.lineSpace.getBoundingClientRect();\n      yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n      var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n      rect.left += xOff; rect.right += xOff;\n    }\n    rect.top += yOff; rect.bottom += yOff;\n    return rect\n  }\n\n  // Coverts a box from \"div\" coords to another coordinate system.\n  // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n  function fromCoordSystem(cm, coords, context) {\n    if (context == \"div\") { return coords }\n    var left = coords.left, top = coords.top;\n    // First move into \"page\" coordinate system\n    if (context == \"page\") {\n      left -= pageScrollX();\n      top -= pageScrollY();\n    } else if (context == \"local\" || !context) {\n      var localBox = cm.display.sizer.getBoundingClientRect();\n      left += localBox.left;\n      top += localBox.top;\n    }\n\n    var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n    return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n  }\n\n  function charCoords(cm, pos, context, lineObj, bias) {\n    if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }\n    return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n  }\n\n  // Returns a box for a given cursor position, which may have an\n  // 'other' property containing the position of the secondary cursor\n  // on a bidi boundary.\n  // A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n  // and after `char - 1` in writing order of `char - 1`\n  // A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n  // and before `char` in writing order of `char`\n  // Examples (upper-case letters are RTL, lower-case are LTR):\n  //     Pos(0, 1, ...)\n  //     before   after\n  // ab     a|b     a|b\n  // aB     a|B     aB|\n  // Ab     |Ab     A|b\n  // AB     B|A     B|A\n  // Every position after the last character on a line is considered to stick\n  // to the last character on the line.\n  function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n    lineObj = lineObj || getLine(cm.doc, pos.line);\n    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n    function get(ch, right) {\n      var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n      if (right) { m.left = m.right; } else { m.right = m.left; }\n      return intoCoordSystem(cm, lineObj, m, context)\n    }\n    var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;\n    if (ch >= lineObj.text.length) {\n      ch = lineObj.text.length;\n      sticky = \"before\";\n    } else if (ch <= 0) {\n      ch = 0;\n      sticky = \"after\";\n    }\n    if (!order) { return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\") }\n\n    function getBidi(ch, partPos, invert) {\n      var part = order[partPos], right = part.level == 1;\n      return get(invert ? ch - 1 : ch, right != invert)\n    }\n    var partPos = getBidiPartAt(order, ch, sticky);\n    var other = bidiOther;\n    var val = getBidi(ch, partPos, sticky == \"before\");\n    if (other != null) { val.other = getBidi(ch, other, sticky != \"before\"); }\n    return val\n  }\n\n  // Used to cheaply estimate the coordinates for a position. Used for\n  // intermediate scroll updates.\n  function estimateCoords(cm, pos) {\n    var left = 0;\n    pos = clipPos(cm.doc, pos);\n    if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }\n    var lineObj = getLine(cm.doc, pos.line);\n    var top = heightAtLine(lineObj) + paddingTop(cm.display);\n    return {left: left, right: left, top: top, bottom: top + lineObj.height}\n  }\n\n  // Positions returned by coordsChar contain some extra information.\n  // xRel is the relative x position of the input coordinates compared\n  // to the found position (so xRel > 0 means the coordinates are to\n  // the right of the character position, for example). When outside\n  // is true, that means the coordinates lie outside the line's\n  // vertical range.\n  function PosWithInfo(line, ch, sticky, outside, xRel) {\n    var pos = Pos(line, ch, sticky);\n    pos.xRel = xRel;\n    if (outside) { pos.outside = outside; }\n    return pos\n  }\n\n  // Compute the character position closest to the given coordinates.\n  // Input must be lineSpace-local (\"div\" coordinate system).\n  function coordsChar(cm, x, y) {\n    var doc = cm.doc;\n    y += cm.display.viewOffset;\n    if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) }\n    var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n    if (lineN > last)\n      { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) }\n    if (x < 0) { x = 0; }\n\n    var lineObj = getLine(doc, lineN);\n    for (;;) {\n      var found = coordsCharInner(cm, lineObj, lineN, x, y);\n      var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));\n      if (!collapsed) { return found }\n      var rangeEnd = collapsed.find(1);\n      if (rangeEnd.line == lineN) { return rangeEnd }\n      lineObj = getLine(doc, lineN = rangeEnd.line);\n    }\n  }\n\n  function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n    y -= widgetTopHeight(lineObj);\n    var end = lineObj.text.length;\n    var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);\n    end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);\n    return {begin: begin, end: end}\n  }\n\n  function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n    var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n    return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n  }\n\n  // Returns true if the given side of a box is after the given\n  // coordinates, in top-to-bottom, left-to-right order.\n  function boxIsAfter(box, x, y, left) {\n    return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x\n  }\n\n  function coordsCharInner(cm, lineObj, lineNo, x, y) {\n    // Move y into line-local coordinate space\n    y -= heightAtLine(lineObj);\n    var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n    // When directly calling `measureCharPrepared`, we have to adjust\n    // for the widgets at this line.\n    var widgetHeight = widgetTopHeight(lineObj);\n    var begin = 0, end = lineObj.text.length, ltr = true;\n\n    var order = getOrder(lineObj, cm.doc.direction);\n    // If the line isn't plain left-to-right text, first figure out\n    // which bidi section the coordinates fall into.\n    if (order) {\n      var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)\n                   (cm, lineObj, lineNo, preparedMeasure, order, x, y);\n      ltr = part.level != 1;\n      // The awkward -1 offsets are needed because findFirst (called\n      // on these below) will treat its first bound as inclusive,\n      // second as exclusive, but we want to actually address the\n      // characters in the part's range\n      begin = ltr ? part.from : part.to - 1;\n      end = ltr ? part.to : part.from - 1;\n    }\n\n    // A binary search to find the first character whose bounding box\n    // starts after the coordinates. If we run across any whose box wrap\n    // the coordinates, store that.\n    var chAround = null, boxAround = null;\n    var ch = findFirst(function (ch) {\n      var box = measureCharPrepared(cm, preparedMeasure, ch);\n      box.top += widgetHeight; box.bottom += widgetHeight;\n      if (!boxIsAfter(box, x, y, false)) { return false }\n      if (box.top <= y && box.left <= x) {\n        chAround = ch;\n        boxAround = box;\n      }\n      return true\n    }, begin, end);\n\n    var baseX, sticky, outside = false;\n    // If a box around the coordinates was found, use that\n    if (boxAround) {\n      // Distinguish coordinates nearer to the left or right side of the box\n      var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;\n      ch = chAround + (atStart ? 0 : 1);\n      sticky = atStart ? \"after\" : \"before\";\n      baseX = atLeft ? boxAround.left : boxAround.right;\n    } else {\n      // (Adjust for extended bound, if necessary.)\n      if (!ltr && (ch == end || ch == begin)) { ch++; }\n      // To determine which side to associate with, get the box to the\n      // left of the character and compare it's vertical position to the\n      // coordinates\n      sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" :\n        (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ?\n        \"after\" : \"before\";\n      // Now get accurate coordinates for this place, in order to get a\n      // base X position\n      var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), \"line\", lineObj, preparedMeasure);\n      baseX = coords.left;\n      outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;\n    }\n\n    ch = skipExtendingChars(lineObj.text, ch, 1);\n    return PosWithInfo(lineNo, ch, sticky, outside, x - baseX)\n  }\n\n  function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {\n    // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n    // situation, we can take this ordering to correspond to the visual\n    // ordering. This finds the first part whose end is after the given\n    // coordinates.\n    var index = findFirst(function (i) {\n      var part = order[i], ltr = part.level != 1;\n      return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"),\n                                     \"line\", lineObj, preparedMeasure), x, y, true)\n    }, 0, order.length - 1);\n    var part = order[index];\n    // If this isn't the first part, the part's start is also after\n    // the coordinates, and the coordinates aren't on the same line as\n    // that start, move one part back.\n    if (index > 0) {\n      var ltr = part.level != 1;\n      var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"),\n                               \"line\", lineObj, preparedMeasure);\n      if (boxIsAfter(start, x, y, true) && start.top > y)\n        { part = order[index - 1]; }\n    }\n    return part\n  }\n\n  function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n    // In a wrapped line, rtl text on wrapping boundaries can do things\n    // that don't correspond to the ordering in our `order` array at\n    // all, so a binary search doesn't work, and we want to return a\n    // part that only spans one line so that the binary search in\n    // coordsCharInner is safe. As such, we first find the extent of the\n    // wrapped line, and then do a flat search in which we discard any\n    // spans that aren't on the line.\n    var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n    var begin = ref.begin;\n    var end = ref.end;\n    if (/\\s/.test(lineObj.text.charAt(end - 1))) { end--; }\n    var part = null, closestDist = null;\n    for (var i = 0; i < order.length; i++) {\n      var p = order[i];\n      if (p.from >= end || p.to <= begin) { continue }\n      var ltr = p.level != 1;\n      var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\n      // Weigh against spans ending before this, so that they are only\n      // picked if nothing ends after\n      var dist = endX < x ? x - endX + 1e9 : endX - x;\n      if (!part || closestDist > dist) {\n        part = p;\n        closestDist = dist;\n      }\n    }\n    if (!part) { part = order[order.length - 1]; }\n    // Clip the part to the wrapped line.\n    if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }\n    if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }\n    return part\n  }\n\n  var measureText;\n  // Compute the default text height.\n  function textHeight(display) {\n    if (display.cachedTextHeight != null) { return display.cachedTextHeight }\n    if (measureText == null) {\n      measureText = elt(\"pre\", null, \"CodeMirror-line-like\");\n      // Measure a bunch of lines, for browsers that compute\n      // fractional heights.\n      for (var i = 0; i < 49; ++i) {\n        measureText.appendChild(document.createTextNode(\"x\"));\n        measureText.appendChild(elt(\"br\"));\n      }\n      measureText.appendChild(document.createTextNode(\"x\"));\n    }\n    removeChildrenAndAdd(display.measure, measureText);\n    var height = measureText.offsetHeight / 50;\n    if (height > 3) { display.cachedTextHeight = height; }\n    removeChildren(display.measure);\n    return height || 1\n  }\n\n  // Compute the default character width.\n  function charWidth(display) {\n    if (display.cachedCharWidth != null) { return display.cachedCharWidth }\n    var anchor = elt(\"span\", \"xxxxxxxxxx\");\n    var pre = elt(\"pre\", [anchor], \"CodeMirror-line-like\");\n    removeChildrenAndAdd(display.measure, pre);\n    var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n    if (width > 2) { display.cachedCharWidth = width; }\n    return width || 10\n  }\n\n  // Do a bulk-read of the DOM positions and sizes needed to draw the\n  // view, so that we don't interleave reading and writing to the DOM.\n  function getDimensions(cm) {\n    var d = cm.display, left = {}, width = {};\n    var gutterLeft = d.gutters.clientLeft;\n    for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n      var id = cm.display.gutterSpecs[i].className;\n      left[id] = n.offsetLeft + n.clientLeft + gutterLeft;\n      width[id] = n.clientWidth;\n    }\n    return {fixedPos: compensateForHScroll(d),\n            gutterTotalWidth: d.gutters.offsetWidth,\n            gutterLeft: left,\n            gutterWidth: width,\n            wrapperWidth: d.wrapper.clientWidth}\n  }\n\n  // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n  // but using getBoundingClientRect to get a sub-pixel-accurate\n  // result.\n  function compensateForHScroll(display) {\n    return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n  }\n\n  // Returns a function that estimates the height of a line, to use as\n  // first approximation until the line becomes visible (and is thus\n  // properly measurable).\n  function estimateHeight(cm) {\n    var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n    var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n    return function (line) {\n      if (lineIsHidden(cm.doc, line)) { return 0 }\n\n      var widgetsHeight = 0;\n      if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {\n        if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }\n      } }\n\n      if (wrapping)\n        { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }\n      else\n        { return widgetsHeight + th }\n    }\n  }\n\n  function estimateLineHeights(cm) {\n    var doc = cm.doc, est = estimateHeight(cm);\n    doc.iter(function (line) {\n      var estHeight = est(line);\n      if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n    });\n  }\n\n  // Given a mouse event, find the corresponding position. If liberal\n  // is false, it checks whether a gutter or scrollbar was clicked,\n  // and returns null if it was. forRect is used by rectangular\n  // selections, and tries to estimate a character position even for\n  // coordinates beyond the right of the text.\n  function posFromMouse(cm, e, liberal, forRect) {\n    var display = cm.display;\n    if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") { return null }\n\n    var x, y, space = display.lineSpace.getBoundingClientRect();\n    // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n    try { x = e.clientX - space.left; y = e.clientY - space.top; }\n    catch (e$1) { return null }\n    var coords = coordsChar(cm, x, y), line;\n    if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n      var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n      coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n    }\n    return coords\n  }\n\n  // Find the view element corresponding to a given line. Return null\n  // when the line isn't visible.\n  function findViewIndex(cm, n) {\n    if (n >= cm.display.viewTo) { return null }\n    n -= cm.display.viewFrom;\n    if (n < 0) { return null }\n    var view = cm.display.view;\n    for (var i = 0; i < view.length; i++) {\n      n -= view[i].size;\n      if (n < 0) { return i }\n    }\n  }\n\n  // Updates the display.view data structure for a given change to the\n  // document. From and to are in pre-change coordinates. Lendiff is\n  // the amount of lines added or subtracted by the change. This is\n  // used for changes that span multiple lines, or change the way\n  // lines are divided into visual lines. regLineChange (below)\n  // registers single-line changes.\n  function regChange(cm, from, to, lendiff) {\n    if (from == null) { from = cm.doc.first; }\n    if (to == null) { to = cm.doc.first + cm.doc.size; }\n    if (!lendiff) { lendiff = 0; }\n\n    var display = cm.display;\n    if (lendiff && to < display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers > from))\n      { display.updateLineNumbers = from; }\n\n    cm.curOp.viewChanged = true;\n\n    if (from >= display.viewTo) { // Change after\n      if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n        { resetView(cm); }\n    } else if (to <= display.viewFrom) { // Change before\n      if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n        resetView(cm);\n      } else {\n        display.viewFrom += lendiff;\n        display.viewTo += lendiff;\n      }\n    } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n      resetView(cm);\n    } else if (from <= display.viewFrom) { // Top overlap\n      var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cut) {\n        display.view = display.view.slice(cut.index);\n        display.viewFrom = cut.lineN;\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    } else if (to >= display.viewTo) { // Bottom overlap\n      var cut$1 = viewCuttingPoint(cm, from, from, -1);\n      if (cut$1) {\n        display.view = display.view.slice(0, cut$1.index);\n        display.viewTo = cut$1.lineN;\n      } else {\n        resetView(cm);\n      }\n    } else { // Gap in the middle\n      var cutTop = viewCuttingPoint(cm, from, from, -1);\n      var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cutTop && cutBot) {\n        display.view = display.view.slice(0, cutTop.index)\n          .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n          .concat(display.view.slice(cutBot.index));\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    }\n\n    var ext = display.externalMeasured;\n    if (ext) {\n      if (to < ext.lineN)\n        { ext.lineN += lendiff; }\n      else if (from < ext.lineN + ext.size)\n        { display.externalMeasured = null; }\n    }\n  }\n\n  // Register a change to a single line. Type must be one of \"text\",\n  // \"gutter\", \"class\", \"widget\"\n  function regLineChange(cm, line, type) {\n    cm.curOp.viewChanged = true;\n    var display = cm.display, ext = cm.display.externalMeasured;\n    if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n      { display.externalMeasured = null; }\n\n    if (line < display.viewFrom || line >= display.viewTo) { return }\n    var lineView = display.view[findViewIndex(cm, line)];\n    if (lineView.node == null) { return }\n    var arr = lineView.changes || (lineView.changes = []);\n    if (indexOf(arr, type) == -1) { arr.push(type); }\n  }\n\n  // Clear the view.\n  function resetView(cm) {\n    cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n    cm.display.view = [];\n    cm.display.viewOffset = 0;\n  }\n\n  function viewCuttingPoint(cm, oldN, newN, dir) {\n    var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n    if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n      { return {index: index, lineN: newN} }\n    var n = cm.display.viewFrom;\n    for (var i = 0; i < index; i++)\n      { n += view[i].size; }\n    if (n != oldN) {\n      if (dir > 0) {\n        if (index == view.length - 1) { return null }\n        diff = (n + view[index].size) - oldN;\n        index++;\n      } else {\n        diff = n - oldN;\n      }\n      oldN += diff; newN += diff;\n    }\n    while (visualLineNo(cm.doc, newN) != newN) {\n      if (index == (dir < 0 ? 0 : view.length - 1)) { return null }\n      newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n      index += dir;\n    }\n    return {index: index, lineN: newN}\n  }\n\n  // Force the view to cover a given range, adding empty view element\n  // or clipping off existing ones as needed.\n  function adjustView(cm, from, to) {\n    var display = cm.display, view = display.view;\n    if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n      display.view = buildViewArray(cm, from, to);\n      display.viewFrom = from;\n    } else {\n      if (display.viewFrom > from)\n        { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }\n      else if (display.viewFrom < from)\n        { display.view = display.view.slice(findViewIndex(cm, from)); }\n      display.viewFrom = from;\n      if (display.viewTo < to)\n        { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }\n      else if (display.viewTo > to)\n        { display.view = display.view.slice(0, findViewIndex(cm, to)); }\n    }\n    display.viewTo = to;\n  }\n\n  // Count the number of lines in the view whose DOM representation is\n  // out of date (or nonexistent).\n  function countDirtyView(cm) {\n    var view = cm.display.view, dirty = 0;\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }\n    }\n    return dirty\n  }\n\n  function updateSelection(cm) {\n    cm.display.input.showSelection(cm.display.input.prepareSelection());\n  }\n\n  function prepareSelection(cm, primary) {\n    if ( primary === void 0 ) primary = true;\n\n    var doc = cm.doc, result = {};\n    var curFragment = result.cursors = document.createDocumentFragment();\n    var selFragment = result.selection = document.createDocumentFragment();\n\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      if (!primary && i == doc.sel.primIndex) { continue }\n      var range = doc.sel.ranges[i];\n      if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue }\n      var collapsed = range.empty();\n      if (collapsed || cm.options.showCursorWhenSelecting)\n        { drawSelectionCursor(cm, range.head, curFragment); }\n      if (!collapsed)\n        { drawSelectionRange(cm, range, selFragment); }\n    }\n    return result\n  }\n\n  // Draws a cursor for the given range\n  function drawSelectionCursor(cm, head, output) {\n    var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n    var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n    cursor.style.left = pos.left + \"px\";\n    cursor.style.top = pos.top + \"px\";\n    cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n    if (pos.other) {\n      // Secondary cursor, shown when on a 'jump' in bi-directional text\n      var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n      otherCursor.style.display = \"\";\n      otherCursor.style.left = pos.other.left + \"px\";\n      otherCursor.style.top = pos.other.top + \"px\";\n      otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n    }\n  }\n\n  function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }\n\n  // Draws the given range as a highlighted selection\n  function drawSelectionRange(cm, range, output) {\n    var display = cm.display, doc = cm.doc;\n    var fragment = document.createDocumentFragment();\n    var padding = paddingH(cm.display), leftSide = padding.left;\n    var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n    var docLTR = doc.direction == \"ltr\";\n\n    function add(left, top, width, bottom) {\n      if (top < 0) { top = 0; }\n      top = Math.round(top);\n      bottom = Math.round(bottom);\n      fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", (\"position: absolute; left: \" + left + \"px;\\n                             top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n                             height: \" + (bottom - top) + \"px\")));\n    }\n\n    function drawForLine(line, fromArg, toArg) {\n      var lineObj = getLine(doc, line);\n      var lineLen = lineObj.text.length;\n      var start, end;\n      function coords(ch, bias) {\n        return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias)\n      }\n\n      function wrapX(pos, dir, side) {\n        var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n        var prop = (dir == \"ltr\") == (side == \"after\") ? \"left\" : \"right\";\n        var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n        return coords(ch, prop)[prop]\n      }\n\n      var order = getOrder(lineObj, doc.direction);\n      iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n        var ltr = dir == \"ltr\";\n        var fromPos = coords(from, ltr ? \"left\" : \"right\");\n        var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n\n        var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;\n        var first = i == 0, last = !order || i == order.length - 1;\n        if (toPos.top - fromPos.top <= 3) { // Single line\n          var openLeft = (docLTR ? openStart : openEnd) && first;\n          var openRight = (docLTR ? openEnd : openStart) && last;\n          var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n          var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n          add(left, fromPos.top, right - left, fromPos.bottom);\n        } else { // Multiple lines\n          var topLeft, topRight, botLeft, botRight;\n          if (ltr) {\n            topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n            topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n            botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n            botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n          } else {\n            topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n            topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n            botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n            botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n          }\n          add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n          if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }\n          add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n        }\n\n        if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }\n        if (cmpCoords(toPos, start) < 0) { start = toPos; }\n        if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }\n        if (cmpCoords(toPos, end) < 0) { end = toPos; }\n      });\n      return {start: start, end: end}\n    }\n\n    var sFrom = range.from(), sTo = range.to();\n    if (sFrom.line == sTo.line) {\n      drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n    } else {\n      var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n      var singleVLine = visualLine(fromLine) == visualLine(toLine);\n      var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n      var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n      if (singleVLine) {\n        if (leftEnd.top < rightStart.top - 2) {\n          add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n          add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n        } else {\n          add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n        }\n      }\n      if (leftEnd.bottom < rightStart.top)\n        { add(leftSide, leftEnd.bottom, null, rightStart.top); }\n    }\n\n    output.appendChild(fragment);\n  }\n\n  // Cursor-blinking\n  function restartBlink(cm) {\n    if (!cm.state.focused) { return }\n    var display = cm.display;\n    clearInterval(display.blinker);\n    var on = true;\n    display.cursorDiv.style.visibility = \"\";\n    if (cm.options.cursorBlinkRate > 0)\n      { display.blinker = setInterval(function () {\n        if (!cm.hasFocus()) { onBlur(cm); }\n        display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\";\n      }, cm.options.cursorBlinkRate); }\n    else if (cm.options.cursorBlinkRate < 0)\n      { display.cursorDiv.style.visibility = \"hidden\"; }\n  }\n\n  function ensureFocus(cm) {\n    if (!cm.hasFocus()) {\n      cm.display.input.focus();\n      if (!cm.state.focused) { onFocus(cm); }\n    }\n  }\n\n  function delayBlurEvent(cm) {\n    cm.state.delayingBlurEvent = true;\n    setTimeout(function () { if (cm.state.delayingBlurEvent) {\n      cm.state.delayingBlurEvent = false;\n      if (cm.state.focused) { onBlur(cm); }\n    } }, 100);\n  }\n\n  function onFocus(cm, e) {\n    if (cm.state.delayingBlurEvent && !cm.state.draggingText) { cm.state.delayingBlurEvent = false; }\n\n    if (cm.options.readOnly == \"nocursor\") { return }\n    if (!cm.state.focused) {\n      signal(cm, \"focus\", cm, e);\n      cm.state.focused = true;\n      addClass(cm.display.wrapper, \"CodeMirror-focused\");\n      // This test prevents this from firing when a context\n      // menu is closed (since the input reset would kill the\n      // select-all detection hack)\n      if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n        cm.display.input.reset();\n        if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730\n      }\n      cm.display.input.receivedFocus();\n    }\n    restartBlink(cm);\n  }\n  function onBlur(cm, e) {\n    if (cm.state.delayingBlurEvent) { return }\n\n    if (cm.state.focused) {\n      signal(cm, \"blur\", cm, e);\n      cm.state.focused = false;\n      rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n    }\n    clearInterval(cm.display.blinker);\n    setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);\n  }\n\n  // Read the actual heights of the rendered lines, and update their\n  // stored heights to match.\n  function updateHeightsInViewport(cm) {\n    var display = cm.display;\n    var prevBottom = display.lineDiv.offsetTop;\n    for (var i = 0; i < display.view.length; i++) {\n      var cur = display.view[i], wrapping = cm.options.lineWrapping;\n      var height = (void 0), width = 0;\n      if (cur.hidden) { continue }\n      if (ie && ie_version < 8) {\n        var bot = cur.node.offsetTop + cur.node.offsetHeight;\n        height = bot - prevBottom;\n        prevBottom = bot;\n      } else {\n        var box = cur.node.getBoundingClientRect();\n        height = box.bottom - box.top;\n        // Check that lines don't extend past the right of the current\n        // editor width\n        if (!wrapping && cur.text.firstChild)\n          { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }\n      }\n      var diff = cur.line.height - height;\n      if (diff > .005 || diff < -.005) {\n        updateLineHeight(cur.line, height);\n        updateWidgetHeight(cur.line);\n        if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)\n          { updateWidgetHeight(cur.rest[j]); } }\n      }\n      if (width > cm.display.sizerWidth) {\n        var chWidth = Math.ceil(width / charWidth(cm.display));\n        if (chWidth > cm.display.maxLineLength) {\n          cm.display.maxLineLength = chWidth;\n          cm.display.maxLine = cur.line;\n          cm.display.maxLineChanged = true;\n        }\n      }\n    }\n  }\n\n  // Read and store the height of line widgets associated with the\n  // given line.\n  function updateWidgetHeight(line) {\n    if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {\n      var w = line.widgets[i], parent = w.node.parentNode;\n      if (parent) { w.height = parent.offsetHeight; }\n    } }\n  }\n\n  // Compute the lines that are visible in a given viewport (defaults\n  // the the current scroll position). viewport may contain top,\n  // height, and ensure (see op.scrollToPos) properties.\n  function visibleLines(display, doc, viewport) {\n    var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n    top = Math.floor(top - paddingTop(display));\n    var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n    var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n    // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n    // forces those lines into the viewport (if possible).\n    if (viewport && viewport.ensure) {\n      var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n      if (ensureFrom < from) {\n        from = ensureFrom;\n        to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n      } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n        from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n        to = ensureTo;\n      }\n    }\n    return {from: from, to: Math.max(to, from + 1)}\n  }\n\n  // SCROLLING THINGS INTO VIEW\n\n  // If an editor sits on the top or bottom of the window, partially\n  // scrolled out of view, this ensures that the cursor is visible.\n  function maybeScrollWindow(cm, rect) {\n    if (signalDOMEvent(cm, \"scrollCursorIntoView\")) { return }\n\n    var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n    if (rect.top + box.top < 0) { doScroll = true; }\n    else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }\n    if (doScroll != null && !phantom) {\n      var scrollNode = elt(\"div\", \"\\u200b\", null, (\"position: absolute;\\n                         top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n                         height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n                         left: \" + (rect.left) + \"px; width: \" + (Math.max(2, rect.right - rect.left)) + \"px;\"));\n      cm.display.lineSpace.appendChild(scrollNode);\n      scrollNode.scrollIntoView(doScroll);\n      cm.display.lineSpace.removeChild(scrollNode);\n    }\n  }\n\n  // Scroll a given position into view (immediately), verifying that\n  // it actually became visible (as line heights are accurately\n  // measured, the position of something may 'drift' during drawing).\n  function scrollPosIntoView(cm, pos, end, margin) {\n    if (margin == null) { margin = 0; }\n    var rect;\n    if (!cm.options.lineWrapping && pos == end) {\n      // Set pos and end to the cursor positions around the character pos sticks to\n      // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n      // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n      pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n      end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n    }\n    for (var limit = 0; limit < 5; limit++) {\n      var changed = false;\n      var coords = cursorCoords(cm, pos);\n      var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n      rect = {left: Math.min(coords.left, endCoords.left),\n              top: Math.min(coords.top, endCoords.top) - margin,\n              right: Math.max(coords.left, endCoords.left),\n              bottom: Math.max(coords.bottom, endCoords.bottom) + margin};\n      var scrollPos = calculateScrollPos(cm, rect);\n      var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n      if (scrollPos.scrollTop != null) {\n        updateScrollTop(cm, scrollPos.scrollTop);\n        if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }\n      }\n      if (scrollPos.scrollLeft != null) {\n        setScrollLeft(cm, scrollPos.scrollLeft);\n        if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }\n      }\n      if (!changed) { break }\n    }\n    return rect\n  }\n\n  // Scroll a given set of coordinates into view (immediately).\n  function scrollIntoView(cm, rect) {\n    var scrollPos = calculateScrollPos(cm, rect);\n    if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }\n    if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }\n  }\n\n  // Calculate a new scroll position needed to scroll the given\n  // rectangle into view. Returns an object with scrollTop and\n  // scrollLeft properties. When these are undefined, the\n  // vertical/horizontal position does not need to be adjusted.\n  function calculateScrollPos(cm, rect) {\n    var display = cm.display, snapMargin = textHeight(cm.display);\n    if (rect.top < 0) { rect.top = 0; }\n    var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n    var screen = displayHeight(cm), result = {};\n    if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }\n    var docBottom = cm.doc.height + paddingVert(display);\n    var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;\n    if (rect.top < screentop) {\n      result.scrollTop = atTop ? 0 : rect.top;\n    } else if (rect.bottom > screentop + screen) {\n      var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n      if (newTop != screentop) { result.scrollTop = newTop; }\n    }\n\n    var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth;\n    var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace;\n    var screenw = displayWidth(cm) - display.gutters.offsetWidth;\n    var tooWide = rect.right - rect.left > screenw;\n    if (tooWide) { rect.right = rect.left + screenw; }\n    if (rect.left < 10)\n      { result.scrollLeft = 0; }\n    else if (rect.left < screenleft)\n      { result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); }\n    else if (rect.right > screenw + screenleft - 3)\n      { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }\n    return result\n  }\n\n  // Store a relative adjustment to the scroll position in the current\n  // operation (to be applied when the operation finishes).\n  function addToScrollTop(cm, top) {\n    if (top == null) { return }\n    resolveScrollToPos(cm);\n    cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n  }\n\n  // Make sure that at the end of the operation the current cursor is\n  // shown.\n  function ensureCursorVisible(cm) {\n    resolveScrollToPos(cm);\n    var cur = cm.getCursor();\n    cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};\n  }\n\n  function scrollToCoords(cm, x, y) {\n    if (x != null || y != null) { resolveScrollToPos(cm); }\n    if (x != null) { cm.curOp.scrollLeft = x; }\n    if (y != null) { cm.curOp.scrollTop = y; }\n  }\n\n  function scrollToRange(cm, range) {\n    resolveScrollToPos(cm);\n    cm.curOp.scrollToPos = range;\n  }\n\n  // When an operation has its scrollToPos property set, and another\n  // scroll action is applied before the end of the operation, this\n  // 'simulates' scrolling that position into view in a cheap way, so\n  // that the effect of intermediate scroll commands is not ignored.\n  function resolveScrollToPos(cm) {\n    var range = cm.curOp.scrollToPos;\n    if (range) {\n      cm.curOp.scrollToPos = null;\n      var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);\n      scrollToCoordsRange(cm, from, to, range.margin);\n    }\n  }\n\n  function scrollToCoordsRange(cm, from, to, margin) {\n    var sPos = calculateScrollPos(cm, {\n      left: Math.min(from.left, to.left),\n      top: Math.min(from.top, to.top) - margin,\n      right: Math.max(from.right, to.right),\n      bottom: Math.max(from.bottom, to.bottom) + margin\n    });\n    scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n  }\n\n  // Sync the scrollable area and scrollbars, ensure the viewport\n  // covers the visible area.\n  function updateScrollTop(cm, val) {\n    if (Math.abs(cm.doc.scrollTop - val) < 2) { return }\n    if (!gecko) { updateDisplaySimple(cm, {top: val}); }\n    setScrollTop(cm, val, true);\n    if (gecko) { updateDisplaySimple(cm); }\n    startWorker(cm, 100);\n  }\n\n  function setScrollTop(cm, val, forceScroll) {\n    val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val));\n    if (cm.display.scroller.scrollTop == val && !forceScroll) { return }\n    cm.doc.scrollTop = val;\n    cm.display.scrollbars.setScrollTop(val);\n    if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }\n  }\n\n  // Sync scroller and scrollbar, ensure the gutter elements are\n  // aligned.\n  function setScrollLeft(cm, val, isScroller, forceScroll) {\n    val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));\n    if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }\n    cm.doc.scrollLeft = val;\n    alignHorizontally(cm);\n    if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }\n    cm.display.scrollbars.setScrollLeft(val);\n  }\n\n  // SCROLLBARS\n\n  // Prepare DOM reads needed to update the scrollbars. Done in one\n  // shot to minimize update/measure roundtrips.\n  function measureForScrollbars(cm) {\n    var d = cm.display, gutterW = d.gutters.offsetWidth;\n    var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n    return {\n      clientHeight: d.scroller.clientHeight,\n      viewHeight: d.wrapper.clientHeight,\n      scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n      viewWidth: d.wrapper.clientWidth,\n      barLeft: cm.options.fixedGutter ? gutterW : 0,\n      docHeight: docH,\n      scrollHeight: docH + scrollGap(cm) + d.barHeight,\n      nativeBarWidth: d.nativeBarWidth,\n      gutterWidth: gutterW\n    }\n  }\n\n  var NativeScrollbars = function(place, scroll, cm) {\n    this.cm = cm;\n    var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n    var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n    vert.tabIndex = horiz.tabIndex = -1;\n    place(vert); place(horiz);\n\n    on(vert, \"scroll\", function () {\n      if (vert.clientHeight) { scroll(vert.scrollTop, \"vertical\"); }\n    });\n    on(horiz, \"scroll\", function () {\n      if (horiz.clientWidth) { scroll(horiz.scrollLeft, \"horizontal\"); }\n    });\n\n    this.checkedZeroWidth = false;\n    // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n    if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"; }\n  };\n\n  NativeScrollbars.prototype.update = function (measure) {\n    var needsH = measure.scrollWidth > measure.clientWidth + 1;\n    var needsV = measure.scrollHeight > measure.clientHeight + 1;\n    var sWidth = measure.nativeBarWidth;\n\n    if (needsV) {\n      this.vert.style.display = \"block\";\n      this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n      var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n      // A bug in IE8 can cause this value to be negative, so guard it.\n      this.vert.firstChild.style.height =\n        Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n    } else {\n      this.vert.style.display = \"\";\n      this.vert.firstChild.style.height = \"0\";\n    }\n\n    if (needsH) {\n      this.horiz.style.display = \"block\";\n      this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n      this.horiz.style.left = measure.barLeft + \"px\";\n      var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n      this.horiz.firstChild.style.width =\n        Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n    } else {\n      this.horiz.style.display = \"\";\n      this.horiz.firstChild.style.width = \"0\";\n    }\n\n    if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n      if (sWidth == 0) { this.zeroWidthHack(); }\n      this.checkedZeroWidth = true;\n    }\n\n    return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n  };\n\n  NativeScrollbars.prototype.setScrollLeft = function (pos) {\n    if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }\n    if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\"); }\n  };\n\n  NativeScrollbars.prototype.setScrollTop = function (pos) {\n    if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }\n    if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\"); }\n  };\n\n  NativeScrollbars.prototype.zeroWidthHack = function () {\n    var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n    this.horiz.style.height = this.vert.style.width = w;\n    this.horiz.style.pointerEvents = this.vert.style.pointerEvents = \"none\";\n    this.disableHoriz = new Delayed;\n    this.disableVert = new Delayed;\n  };\n\n  NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n    bar.style.pointerEvents = \"auto\";\n    function maybeDisable() {\n      // To find out whether the scrollbar is still visible, we\n      // check whether the element under the pixel in the bottom\n      // right corner of the scrollbar box is the scrollbar box\n      // itself (when the bar is still visible) or its filler child\n      // (when the bar is hidden). If it is still visible, we keep\n      // it enabled, if it's hidden, we disable pointer events.\n      var box = bar.getBoundingClientRect();\n      var elt = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)\n          : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n      if (elt != bar) { bar.style.pointerEvents = \"none\"; }\n      else { delay.set(1000, maybeDisable); }\n    }\n    delay.set(1000, maybeDisable);\n  };\n\n  NativeScrollbars.prototype.clear = function () {\n    var parent = this.horiz.parentNode;\n    parent.removeChild(this.horiz);\n    parent.removeChild(this.vert);\n  };\n\n  var NullScrollbars = function () {};\n\n  NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };\n  NullScrollbars.prototype.setScrollLeft = function () {};\n  NullScrollbars.prototype.setScrollTop = function () {};\n  NullScrollbars.prototype.clear = function () {};\n\n  function updateScrollbars(cm, measure) {\n    if (!measure) { measure = measureForScrollbars(cm); }\n    var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n    updateScrollbarsInner(cm, measure);\n    for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n      if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n        { updateHeightsInViewport(cm); }\n      updateScrollbarsInner(cm, measureForScrollbars(cm));\n      startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n    }\n  }\n\n  // Re-synchronize the fake scrollbars with the actual size of the\n  // content.\n  function updateScrollbarsInner(cm, measure) {\n    var d = cm.display;\n    var sizes = d.scrollbars.update(measure);\n\n    d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n    d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n    d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n    if (sizes.right && sizes.bottom) {\n      d.scrollbarFiller.style.display = \"block\";\n      d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n      d.scrollbarFiller.style.width = sizes.right + \"px\";\n    } else { d.scrollbarFiller.style.display = \"\"; }\n    if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n      d.gutterFiller.style.display = \"block\";\n      d.gutterFiller.style.height = sizes.bottom + \"px\";\n      d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n    } else { d.gutterFiller.style.display = \"\"; }\n  }\n\n  var scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\n  function initScrollbars(cm) {\n    if (cm.display.scrollbars) {\n      cm.display.scrollbars.clear();\n      if (cm.display.scrollbars.addClass)\n        { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n    }\n\n    cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n      cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n      // Prevent clicks in the scrollbars from killing focus\n      on(node, \"mousedown\", function () {\n        if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }\n      });\n      node.setAttribute(\"cm-not-content\", \"true\");\n    }, function (pos, axis) {\n      if (axis == \"horizontal\") { setScrollLeft(cm, pos); }\n      else { updateScrollTop(cm, pos); }\n    }, cm);\n    if (cm.display.scrollbars.addClass)\n      { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n  }\n\n  // Operations are used to wrap a series of changes to the editor\n  // state in such a way that each change won't have to update the\n  // cursor and display (which would be awkward, slow, and\n  // error-prone). Instead, display updates are batched and then all\n  // combined and executed at once.\n\n  var nextOpId = 0;\n  // Start a new operation.\n  function startOperation(cm) {\n    cm.curOp = {\n      cm: cm,\n      viewChanged: false,      // Flag that indicates that lines might need to be redrawn\n      startHeight: cm.doc.height, // Used to detect need to update scrollbar\n      forceUpdate: false,      // Used to force a redraw\n      updateInput: 0,       // Whether to reset the input textarea\n      typing: false,           // Whether this reset should be careful to leave existing text (for compositing)\n      changeObjs: null,        // Accumulated changes, for firing change events\n      cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n      cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n      selectionChanged: false, // Whether the selection needs to be redrawn\n      updateMaxLine: false,    // Set when the widest line needs to be determined anew\n      scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n      scrollToPos: null,       // Used to scroll to a specific position\n      focus: false,\n      id: ++nextOpId           // Unique ID\n    };\n    pushOperation(cm.curOp);\n  }\n\n  // Finish an operation, updating the display and signalling delayed events\n  function endOperation(cm) {\n    var op = cm.curOp;\n    if (op) { finishOperation(op, function (group) {\n      for (var i = 0; i < group.ops.length; i++)\n        { group.ops[i].cm.curOp = null; }\n      endOperations(group);\n    }); }\n  }\n\n  // The DOM updates done when an operation finishes are batched so\n  // that the minimum number of relayouts are required.\n  function endOperations(group) {\n    var ops = group.ops;\n    for (var i = 0; i < ops.length; i++) // Read DOM\n      { endOperation_R1(ops[i]); }\n    for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n      { endOperation_W1(ops[i$1]); }\n    for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n      { endOperation_R2(ops[i$2]); }\n    for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n      { endOperation_W2(ops[i$3]); }\n    for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n      { endOperation_finish(ops[i$4]); }\n  }\n\n  function endOperation_R1(op) {\n    var cm = op.cm, display = cm.display;\n    maybeClipScrollbars(cm);\n    if (op.updateMaxLine) { findMaxLine(cm); }\n\n    op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n      op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n                         op.scrollToPos.to.line >= display.viewTo) ||\n      display.maxLineChanged && cm.options.lineWrapping;\n    op.update = op.mustUpdate &&\n      new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n  }\n\n  function endOperation_W1(op) {\n    op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n  }\n\n  function endOperation_R2(op) {\n    var cm = op.cm, display = cm.display;\n    if (op.updatedDisplay) { updateHeightsInViewport(cm); }\n\n    op.barMeasure = measureForScrollbars(cm);\n\n    // If the max line changed since it was last measured, measure it,\n    // and ensure the document's width matches it.\n    // updateDisplay_W2 will use these properties to do the actual resizing\n    if (display.maxLineChanged && !cm.options.lineWrapping) {\n      op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n      cm.display.sizerWidth = op.adjustWidthTo;\n      op.barMeasure.scrollWidth =\n        Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n      op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n    }\n\n    if (op.updatedDisplay || op.selectionChanged)\n      { op.preparedSelection = display.input.prepareSelection(); }\n  }\n\n  function endOperation_W2(op) {\n    var cm = op.cm;\n\n    if (op.adjustWidthTo != null) {\n      cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n      if (op.maxScrollLeft < cm.doc.scrollLeft)\n        { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }\n      cm.display.maxLineChanged = false;\n    }\n\n    var takeFocus = op.focus && op.focus == activeElt();\n    if (op.preparedSelection)\n      { cm.display.input.showSelection(op.preparedSelection, takeFocus); }\n    if (op.updatedDisplay || op.startHeight != cm.doc.height)\n      { updateScrollbars(cm, op.barMeasure); }\n    if (op.updatedDisplay)\n      { setDocumentHeight(cm, op.barMeasure); }\n\n    if (op.selectionChanged) { restartBlink(cm); }\n\n    if (cm.state.focused && op.updateInput)\n      { cm.display.input.reset(op.typing); }\n    if (takeFocus) { ensureFocus(op.cm); }\n  }\n\n  function endOperation_finish(op) {\n    var cm = op.cm, display = cm.display, doc = cm.doc;\n\n    if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }\n\n    // Abort mouse wheel delta measurement, when scrolling explicitly\n    if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n      { display.wheelStartX = display.wheelStartY = null; }\n\n    // Propagate the scroll position to the actual DOM scroller\n    if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }\n\n    if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }\n    // If we need to scroll a specific position into view, do so.\n    if (op.scrollToPos) {\n      var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n                                   clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n      maybeScrollWindow(cm, rect);\n    }\n\n    // Fire events for markers that are hidden/unidden by editing or\n    // undoing\n    var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n    if (hidden) { for (var i = 0; i < hidden.length; ++i)\n      { if (!hidden[i].lines.length) { signal(hidden[i], \"hide\"); } } }\n    if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)\n      { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], \"unhide\"); } } }\n\n    if (display.wrapper.offsetHeight)\n      { doc.scrollTop = cm.display.scroller.scrollTop; }\n\n    // Fire change events, and delayed event handlers\n    if (op.changeObjs)\n      { signal(cm, \"changes\", cm, op.changeObjs); }\n    if (op.update)\n      { op.update.finish(); }\n  }\n\n  // Run the given function in an operation\n  function runInOp(cm, f) {\n    if (cm.curOp) { return f() }\n    startOperation(cm);\n    try { return f() }\n    finally { endOperation(cm); }\n  }\n  // Wraps a function in an operation. Returns the wrapped function.\n  function operation(cm, f) {\n    return function() {\n      if (cm.curOp) { return f.apply(cm, arguments) }\n      startOperation(cm);\n      try { return f.apply(cm, arguments) }\n      finally { endOperation(cm); }\n    }\n  }\n  // Used to add methods to editor and doc instances, wrapping them in\n  // operations.\n  function methodOp(f) {\n    return function() {\n      if (this.curOp) { return f.apply(this, arguments) }\n      startOperation(this);\n      try { return f.apply(this, arguments) }\n      finally { endOperation(this); }\n    }\n  }\n  function docMethodOp(f) {\n    return function() {\n      var cm = this.cm;\n      if (!cm || cm.curOp) { return f.apply(this, arguments) }\n      startOperation(cm);\n      try { return f.apply(this, arguments) }\n      finally { endOperation(cm); }\n    }\n  }\n\n  // HIGHLIGHT WORKER\n\n  function startWorker(cm, time) {\n    if (cm.doc.highlightFrontier < cm.display.viewTo)\n      { cm.state.highlight.set(time, bind(highlightWorker, cm)); }\n  }\n\n  function highlightWorker(cm) {\n    var doc = cm.doc;\n    if (doc.highlightFrontier >= cm.display.viewTo) { return }\n    var end = +new Date + cm.options.workTime;\n    var context = getContextBefore(cm, doc.highlightFrontier);\n    var changedLines = [];\n\n    doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n      if (context.line >= cm.display.viewFrom) { // Visible\n        var oldStyles = line.styles;\n        var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n        var highlighted = highlightLine(cm, line, context, true);\n        if (resetState) { context.state = resetState; }\n        line.styles = highlighted.styles;\n        var oldCls = line.styleClasses, newCls = highlighted.classes;\n        if (newCls) { line.styleClasses = newCls; }\n        else if (oldCls) { line.styleClasses = null; }\n        var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n          oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n        for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }\n        if (ischange) { changedLines.push(context.line); }\n        line.stateAfter = context.save();\n        context.nextLine();\n      } else {\n        if (line.text.length <= cm.options.maxHighlightLength)\n          { processLine(cm, line.text, context); }\n        line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n        context.nextLine();\n      }\n      if (+new Date > end) {\n        startWorker(cm, cm.options.workDelay);\n        return true\n      }\n    });\n    doc.highlightFrontier = context.line;\n    doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n    if (changedLines.length) { runInOp(cm, function () {\n      for (var i = 0; i < changedLines.length; i++)\n        { regLineChange(cm, changedLines[i], \"text\"); }\n    }); }\n  }\n\n  // DISPLAY DRAWING\n\n  var DisplayUpdate = function(cm, viewport, force) {\n    var display = cm.display;\n\n    this.viewport = viewport;\n    // Store some values that we'll need later (but don't want to force a relayout for)\n    this.visible = visibleLines(display, cm.doc, viewport);\n    this.editorIsHidden = !display.wrapper.offsetWidth;\n    this.wrapperHeight = display.wrapper.clientHeight;\n    this.wrapperWidth = display.wrapper.clientWidth;\n    this.oldDisplayWidth = displayWidth(cm);\n    this.force = force;\n    this.dims = getDimensions(cm);\n    this.events = [];\n  };\n\n  DisplayUpdate.prototype.signal = function (emitter, type) {\n    if (hasHandler(emitter, type))\n      { this.events.push(arguments); }\n  };\n  DisplayUpdate.prototype.finish = function () {\n    for (var i = 0; i < this.events.length; i++)\n      { signal.apply(null, this.events[i]); }\n  };\n\n  function maybeClipScrollbars(cm) {\n    var display = cm.display;\n    if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n      display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n      display.heightForcer.style.height = scrollGap(cm) + \"px\";\n      display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n      display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n      display.scrollbarsClipped = true;\n    }\n  }\n\n  function selectionSnapshot(cm) {\n    if (cm.hasFocus()) { return null }\n    var active = activeElt();\n    if (!active || !contains(cm.display.lineDiv, active)) { return null }\n    var result = {activeElt: active};\n    if (window.getSelection) {\n      var sel = window.getSelection();\n      if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n        result.anchorNode = sel.anchorNode;\n        result.anchorOffset = sel.anchorOffset;\n        result.focusNode = sel.focusNode;\n        result.focusOffset = sel.focusOffset;\n      }\n    }\n    return result\n  }\n\n  function restoreSelection(snapshot) {\n    if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }\n    snapshot.activeElt.focus();\n    if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) &&\n        snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n      var sel = window.getSelection(), range = document.createRange();\n      range.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n      range.collapse(false);\n      sel.removeAllRanges();\n      sel.addRange(range);\n      sel.extend(snapshot.focusNode, snapshot.focusOffset);\n    }\n  }\n\n  // Does the actual updating of the line display. Bails out\n  // (returning false) when there is nothing to be done and forced is\n  // false.\n  function updateDisplayIfNeeded(cm, update) {\n    var display = cm.display, doc = cm.doc;\n\n    if (update.editorIsHidden) {\n      resetView(cm);\n      return false\n    }\n\n    // Bail out if the visible area is already rendered and nothing changed.\n    if (!update.force &&\n        update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n        display.renderedView == display.view && countDirtyView(cm) == 0)\n      { return false }\n\n    if (maybeUpdateLineNumberWidth(cm)) {\n      resetView(cm);\n      update.dims = getDimensions(cm);\n    }\n\n    // Compute a suitable new viewport (from & to)\n    var end = doc.first + doc.size;\n    var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n    var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n    if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }\n    if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }\n    if (sawCollapsedSpans) {\n      from = visualLineNo(cm.doc, from);\n      to = visualLineEndNo(cm.doc, to);\n    }\n\n    var different = from != display.viewFrom || to != display.viewTo ||\n      display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n    adjustView(cm, from, to);\n\n    display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n    // Position the mover div to align with the current scroll position\n    cm.display.mover.style.top = display.viewOffset + \"px\";\n\n    var toUpdate = countDirtyView(cm);\n    if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n      { return false }\n\n    // For big changes, we hide the enclosing element during the\n    // update, since that speeds up the operations on most browsers.\n    var selSnapshot = selectionSnapshot(cm);\n    if (toUpdate > 4) { display.lineDiv.style.display = \"none\"; }\n    patchDisplay(cm, display.updateLineNumbers, update.dims);\n    if (toUpdate > 4) { display.lineDiv.style.display = \"\"; }\n    display.renderedView = display.view;\n    // There might have been a widget with a focused element that got\n    // hidden or updated, if so re-focus it.\n    restoreSelection(selSnapshot);\n\n    // Prevent selection and cursors from interfering with the scroll\n    // width and height.\n    removeChildren(display.cursorDiv);\n    removeChildren(display.selectionDiv);\n    display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n    if (different) {\n      display.lastWrapHeight = update.wrapperHeight;\n      display.lastWrapWidth = update.wrapperWidth;\n      startWorker(cm, 400);\n    }\n\n    display.updateLineNumbers = null;\n\n    return true\n  }\n\n  function postUpdateDisplay(cm, update) {\n    var viewport = update.viewport;\n\n    for (var first = true;; first = false) {\n      if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n        // Clip forced viewport to actual scrollable area.\n        if (viewport && viewport.top != null)\n          { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }\n        // Updated line heights might result in the drawn area not\n        // actually covering the viewport. Keep looping until it does.\n        update.visible = visibleLines(cm.display, cm.doc, viewport);\n        if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n          { break }\n      } else if (first) {\n        update.visible = visibleLines(cm.display, cm.doc, viewport);\n      }\n      if (!updateDisplayIfNeeded(cm, update)) { break }\n      updateHeightsInViewport(cm);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      updateScrollbars(cm, barMeasure);\n      setDocumentHeight(cm, barMeasure);\n      update.force = false;\n    }\n\n    update.signal(cm, \"update\", cm);\n    if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n      update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n      cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n    }\n  }\n\n  function updateDisplaySimple(cm, viewport) {\n    var update = new DisplayUpdate(cm, viewport);\n    if (updateDisplayIfNeeded(cm, update)) {\n      updateHeightsInViewport(cm);\n      postUpdateDisplay(cm, update);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      updateScrollbars(cm, barMeasure);\n      setDocumentHeight(cm, barMeasure);\n      update.finish();\n    }\n  }\n\n  // Sync the actual display DOM structure with display.view, removing\n  // nodes for lines that are no longer in view, and creating the ones\n  // that are not there yet, and updating the ones that are out of\n  // date.\n  function patchDisplay(cm, updateNumbersFrom, dims) {\n    var display = cm.display, lineNumbers = cm.options.lineNumbers;\n    var container = display.lineDiv, cur = container.firstChild;\n\n    function rm(node) {\n      var next = node.nextSibling;\n      // Works around a throw-scroll bug in OS X Webkit\n      if (webkit && mac && cm.display.currentWheelTarget == node)\n        { node.style.display = \"none\"; }\n      else\n        { node.parentNode.removeChild(node); }\n      return next\n    }\n\n    var view = display.view, lineN = display.viewFrom;\n    // Loop over the elements in the view, syncing cur (the DOM nodes\n    // in display.lineDiv) with the view as we go.\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n        var node = buildLineElement(cm, lineView, lineN, dims);\n        container.insertBefore(node, cur);\n      } else { // Already drawn\n        while (cur != lineView.node) { cur = rm(cur); }\n        var updateNumber = lineNumbers && updateNumbersFrom != null &&\n          updateNumbersFrom <= lineN && lineView.lineNumber;\n        if (lineView.changes) {\n          if (indexOf(lineView.changes, \"gutter\") > -1) { updateNumber = false; }\n          updateLineForChanges(cm, lineView, lineN, dims);\n        }\n        if (updateNumber) {\n          removeChildren(lineView.lineNumber);\n          lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n        }\n        cur = lineView.node.nextSibling;\n      }\n      lineN += lineView.size;\n    }\n    while (cur) { cur = rm(cur); }\n  }\n\n  function updateGutterSpace(display) {\n    var width = display.gutters.offsetWidth;\n    display.sizer.style.marginLeft = width + \"px\";\n  }\n\n  function setDocumentHeight(cm, measure) {\n    cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n    cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n    cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\";\n  }\n\n  // Re-align line numbers and gutter marks to compensate for\n  // horizontal scrolling.\n  function alignHorizontally(cm) {\n    var display = cm.display, view = display.view;\n    if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }\n    var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n    var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n    for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {\n      if (cm.options.fixedGutter) {\n        if (view[i].gutter)\n          { view[i].gutter.style.left = left; }\n        if (view[i].gutterBackground)\n          { view[i].gutterBackground.style.left = left; }\n      }\n      var align = view[i].alignable;\n      if (align) { for (var j = 0; j < align.length; j++)\n        { align[j].style.left = left; } }\n    } }\n    if (cm.options.fixedGutter)\n      { display.gutters.style.left = (comp + gutterW) + \"px\"; }\n  }\n\n  // Used to ensure that the line number gutter is still the right\n  // size for the current document size. Returns true when an update\n  // is needed.\n  function maybeUpdateLineNumberWidth(cm) {\n    if (!cm.options.lineNumbers) { return false }\n    var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n    if (last.length != display.lineNumChars) {\n      var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n                                                 \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n      var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n      display.lineGutter.style.width = \"\";\n      display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n      display.lineNumWidth = display.lineNumInnerWidth + padding;\n      display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n      display.lineGutter.style.width = display.lineNumWidth + \"px\";\n      updateGutterSpace(cm.display);\n      return true\n    }\n    return false\n  }\n\n  function getGutters(gutters, lineNumbers) {\n    var result = [], sawLineNumbers = false;\n    for (var i = 0; i < gutters.length; i++) {\n      var name = gutters[i], style = null;\n      if (typeof name != \"string\") { style = name.style; name = name.className; }\n      if (name == \"CodeMirror-linenumbers\") {\n        if (!lineNumbers) { continue }\n        else { sawLineNumbers = true; }\n      }\n      result.push({className: name, style: style});\n    }\n    if (lineNumbers && !sawLineNumbers) { result.push({className: \"CodeMirror-linenumbers\", style: null}); }\n    return result\n  }\n\n  // Rebuild the gutter elements, ensure the margin to the left of the\n  // code matches their width.\n  function renderGutters(display) {\n    var gutters = display.gutters, specs = display.gutterSpecs;\n    removeChildren(gutters);\n    display.lineGutter = null;\n    for (var i = 0; i < specs.length; ++i) {\n      var ref = specs[i];\n      var className = ref.className;\n      var style = ref.style;\n      var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + className));\n      if (style) { gElt.style.cssText = style; }\n      if (className == \"CodeMirror-linenumbers\") {\n        display.lineGutter = gElt;\n        gElt.style.width = (display.lineNumWidth || 1) + \"px\";\n      }\n    }\n    gutters.style.display = specs.length ? \"\" : \"none\";\n    updateGutterSpace(display);\n  }\n\n  function updateGutters(cm) {\n    renderGutters(cm.display);\n    regChange(cm);\n    alignHorizontally(cm);\n  }\n\n  // The display handles the DOM integration, both for input reading\n  // and content drawing. It holds references to DOM nodes and\n  // display-related state.\n\n  function Display(place, doc, input, options) {\n    var d = this;\n    this.input = input;\n\n    // Covers bottom-right square when both scrollbars are present.\n    d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n    d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n    // Covers bottom of gutter when coverGutterNextToScrollbar is on\n    // and h scrollbar is present.\n    d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n    d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n    // Will contain the actual code, positioned to cover the viewport.\n    d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n    // Elements are added to these to represent selection and cursors.\n    d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n    d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n    // A visibility: hidden element used to find the size of things.\n    d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n    // When lines outside of the viewport are measured, they are drawn in this.\n    d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n    // Wraps everything that needs to exist inside the vertically-padded coordinate system\n    d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n                      null, \"position: relative; outline: none\");\n    var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n    // Moved around its parent to cover visible view.\n    d.mover = elt(\"div\", [lines], null, \"position: relative\");\n    // Set to the height of the document, allowing scrolling.\n    d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n    d.sizerWidth = null;\n    // Behavior of elts with overflow: auto and padding is\n    // inconsistent across browsers. This is used to ensure the\n    // scrollable area is big enough.\n    d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n    // Will contain the gutters, if any.\n    d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n    d.lineGutter = null;\n    // Actual scrollable element.\n    d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n    d.scroller.setAttribute(\"tabIndex\", \"-1\");\n    // The element in which the editor lives.\n    d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n\n    // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n    if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n    if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }\n\n    if (place) {\n      if (place.appendChild) { place.appendChild(d.wrapper); }\n      else { place(d.wrapper); }\n    }\n\n    // Current rendered range (may be bigger than the view window).\n    d.viewFrom = d.viewTo = doc.first;\n    d.reportedViewFrom = d.reportedViewTo = doc.first;\n    // Information about the rendered lines.\n    d.view = [];\n    d.renderedView = null;\n    // Holds info about a single rendered line when it was rendered\n    // for measurement, while not in view.\n    d.externalMeasured = null;\n    // Empty space (in pixels) above the view\n    d.viewOffset = 0;\n    d.lastWrapHeight = d.lastWrapWidth = 0;\n    d.updateLineNumbers = null;\n\n    d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n    d.scrollbarsClipped = false;\n\n    // Used to only resize the line number gutter when necessary (when\n    // the amount of lines crosses a boundary that makes its width change)\n    d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n    // Set to true when a non-horizontal-scrolling line widget is\n    // added. As an optimization, line widget aligning is skipped when\n    // this is false.\n    d.alignWidgets = false;\n\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n    // Tracks the maximum line length so that the horizontal scrollbar\n    // can be kept static when scrolling.\n    d.maxLine = null;\n    d.maxLineLength = 0;\n    d.maxLineChanged = false;\n\n    // Used for measuring wheel scrolling granularity\n    d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n    // True when shift is held down.\n    d.shift = false;\n\n    // Used to track whether anything happened since the context menu\n    // was opened.\n    d.selForContextMenu = null;\n\n    d.activeTouch = null;\n\n    d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);\n    renderGutters(d);\n\n    input.init(d);\n  }\n\n  // Since the delta values reported on mouse wheel events are\n  // unstandardized between browsers and even browser versions, and\n  // generally horribly unpredictable, this code starts by measuring\n  // the scroll effect that the first few mouse wheel events have,\n  // and, from that, detects the way it can convert deltas to pixel\n  // offsets afterwards.\n  //\n  // The reason we want to know the amount a wheel event will scroll\n  // is that it gives us a chance to update the display before the\n  // actual scrolling happens, reducing flickering.\n\n  var wheelSamples = 0, wheelPixelsPerUnit = null;\n  // Fill in a browser-detected starting value on browsers where we\n  // know one. These don't have to be accurate -- the result of them\n  // being wrong would just be a slight flicker on the first wheel\n  // scroll (if it is large enough).\n  if (ie) { wheelPixelsPerUnit = -.53; }\n  else if (gecko) { wheelPixelsPerUnit = 15; }\n  else if (chrome) { wheelPixelsPerUnit = -.7; }\n  else if (safari) { wheelPixelsPerUnit = -1/3; }\n\n  function wheelEventDelta(e) {\n    var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n    if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }\n    if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }\n    else if (dy == null) { dy = e.wheelDelta; }\n    return {x: dx, y: dy}\n  }\n  function wheelEventPixels(e) {\n    var delta = wheelEventDelta(e);\n    delta.x *= wheelPixelsPerUnit;\n    delta.y *= wheelPixelsPerUnit;\n    return delta\n  }\n\n  function onScrollWheel(cm, e) {\n    var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n\n    var display = cm.display, scroll = display.scroller;\n    // Quit if there's nothing to scroll here\n    var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n    var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n    if (!(dx && canScrollX || dy && canScrollY)) { return }\n\n    // Webkit browsers on OS X abort momentum scrolls when the target\n    // of the scroll event is removed from the scrollable element.\n    // This hack (see related code in patchDisplay) makes sure the\n    // element is kept around.\n    if (dy && mac && webkit) {\n      outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n        for (var i = 0; i < view.length; i++) {\n          if (view[i].node == cur) {\n            cm.display.currentWheelTarget = cur;\n            break outer\n          }\n        }\n      }\n    }\n\n    // On some browsers, horizontal scrolling will cause redraws to\n    // happen before the gutter has been realigned, causing it to\n    // wriggle around in a most unseemly way. When we have an\n    // estimated pixels/delta value, we just handle horizontal\n    // scrolling entirely here. It'll be slightly off from native, but\n    // better than glitching out.\n    if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {\n      if (dy && canScrollY)\n        { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); }\n      setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit));\n      // Only prevent default scrolling if vertical scrolling is\n      // actually possible. Otherwise, it causes vertical scroll\n      // jitter on OSX trackpads when deltaX is small and deltaY\n      // is large (issue #3579)\n      if (!dy || (dy && canScrollY))\n        { e_preventDefault(e); }\n      display.wheelStartX = null; // Abort measurement, if in progress\n      return\n    }\n\n    // 'Project' the visible viewport to cover the area that is being\n    // scrolled into view (if we know enough to estimate it).\n    if (dy && wheelPixelsPerUnit != null) {\n      var pixels = dy * wheelPixelsPerUnit;\n      var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n      if (pixels < 0) { top = Math.max(0, top + pixels - 50); }\n      else { bot = Math.min(cm.doc.height, bot + pixels + 50); }\n      updateDisplaySimple(cm, {top: top, bottom: bot});\n    }\n\n    if (wheelSamples < 20) {\n      if (display.wheelStartX == null) {\n        display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n        display.wheelDX = dx; display.wheelDY = dy;\n        setTimeout(function () {\n          if (display.wheelStartX == null) { return }\n          var movedX = scroll.scrollLeft - display.wheelStartX;\n          var movedY = scroll.scrollTop - display.wheelStartY;\n          var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n            (movedX && display.wheelDX && movedX / display.wheelDX);\n          display.wheelStartX = display.wheelStartY = null;\n          if (!sample) { return }\n          wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n          ++wheelSamples;\n        }, 200);\n      } else {\n        display.wheelDX += dx; display.wheelDY += dy;\n      }\n    }\n  }\n\n  // Selection objects are immutable. A new one is created every time\n  // the selection changes. A selection is one or more non-overlapping\n  // (and non-touching) ranges, sorted, and an integer that indicates\n  // which one is the primary selection (the one that's scrolled into\n  // view, that getCursor returns, etc).\n  var Selection = function(ranges, primIndex) {\n    this.ranges = ranges;\n    this.primIndex = primIndex;\n  };\n\n  Selection.prototype.primary = function () { return this.ranges[this.primIndex] };\n\n  Selection.prototype.equals = function (other) {\n    if (other == this) { return true }\n    if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }\n    for (var i = 0; i < this.ranges.length; i++) {\n      var here = this.ranges[i], there = other.ranges[i];\n      if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }\n    }\n    return true\n  };\n\n  Selection.prototype.deepCopy = function () {\n    var out = [];\n    for (var i = 0; i < this.ranges.length; i++)\n      { out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); }\n    return new Selection(out, this.primIndex)\n  };\n\n  Selection.prototype.somethingSelected = function () {\n    for (var i = 0; i < this.ranges.length; i++)\n      { if (!this.ranges[i].empty()) { return true } }\n    return false\n  };\n\n  Selection.prototype.contains = function (pos, end) {\n    if (!end) { end = pos; }\n    for (var i = 0; i < this.ranges.length; i++) {\n      var range = this.ranges[i];\n      if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n        { return i }\n    }\n    return -1\n  };\n\n  var Range = function(anchor, head) {\n    this.anchor = anchor; this.head = head;\n  };\n\n  Range.prototype.from = function () { return minPos(this.anchor, this.head) };\n  Range.prototype.to = function () { return maxPos(this.anchor, this.head) };\n  Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };\n\n  // Take an unsorted, potentially overlapping set of ranges, and\n  // build a selection out of it. 'Consumes' ranges array (modifying\n  // it).\n  function normalizeSelection(cm, ranges, primIndex) {\n    var mayTouch = cm && cm.options.selectionsMayTouch;\n    var prim = ranges[primIndex];\n    ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });\n    primIndex = indexOf(ranges, prim);\n    for (var i = 1; i < ranges.length; i++) {\n      var cur = ranges[i], prev = ranges[i - 1];\n      var diff = cmp(prev.to(), cur.from());\n      if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n        var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n        var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n        if (i <= primIndex) { --primIndex; }\n        ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n      }\n    }\n    return new Selection(ranges, primIndex)\n  }\n\n  function simpleSelection(anchor, head) {\n    return new Selection([new Range(anchor, head || anchor)], 0)\n  }\n\n  // Compute the position of the end of a change (its 'to' property\n  // refers to the pre-change end).\n  function changeEnd(change) {\n    if (!change.text) { return change.to }\n    return Pos(change.from.line + change.text.length - 1,\n               lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n  }\n\n  // Adjust a position to refer to the post-change position of the\n  // same text, or the end of the change if the change covers it.\n  function adjustForChange(pos, change) {\n    if (cmp(pos, change.from) < 0) { return pos }\n    if (cmp(pos, change.to) <= 0) { return changeEnd(change) }\n\n    var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n    if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }\n    return Pos(line, ch)\n  }\n\n  function computeSelAfterChange(doc, change) {\n    var out = [];\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      var range = doc.sel.ranges[i];\n      out.push(new Range(adjustForChange(range.anchor, change),\n                         adjustForChange(range.head, change)));\n    }\n    return normalizeSelection(doc.cm, out, doc.sel.primIndex)\n  }\n\n  function offsetPos(pos, old, nw) {\n    if (pos.line == old.line)\n      { return Pos(nw.line, pos.ch - old.ch + nw.ch) }\n    else\n      { return Pos(nw.line + (pos.line - old.line), pos.ch) }\n  }\n\n  // Used by replaceSelections to allow moving the selection to the\n  // start or around the replaced test. Hint may be \"start\" or \"around\".\n  function computeReplacedSel(doc, changes, hint) {\n    var out = [];\n    var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n    for (var i = 0; i < changes.length; i++) {\n      var change = changes[i];\n      var from = offsetPos(change.from, oldPrev, newPrev);\n      var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n      oldPrev = change.to;\n      newPrev = to;\n      if (hint == \"around\") {\n        var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n        out[i] = new Range(inv ? to : from, inv ? from : to);\n      } else {\n        out[i] = new Range(from, from);\n      }\n    }\n    return new Selection(out, doc.sel.primIndex)\n  }\n\n  // Used to get the editor into a consistent state again when options change.\n\n  function loadMode(cm) {\n    cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n    resetModeState(cm);\n  }\n\n  function resetModeState(cm) {\n    cm.doc.iter(function (line) {\n      if (line.stateAfter) { line.stateAfter = null; }\n      if (line.styles) { line.styles = null; }\n    });\n    cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n    startWorker(cm, 100);\n    cm.state.modeGen++;\n    if (cm.curOp) { regChange(cm); }\n  }\n\n  // DOCUMENT DATA STRUCTURE\n\n  // By default, updates that start and end at the beginning of a line\n  // are treated specially, in order to make the association of line\n  // widgets and marker elements with the text behave more intuitive.\n  function isWholeLineUpdate(doc, change) {\n    return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n      (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n  }\n\n  // Perform a change on the document data structure.\n  function updateDoc(doc, change, markedSpans, estimateHeight) {\n    function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n    function update(line, text, spans) {\n      updateLine(line, text, spans, estimateHeight);\n      signalLater(line, \"change\", line, change);\n    }\n    function linesFor(start, end) {\n      var result = [];\n      for (var i = start; i < end; ++i)\n        { result.push(new Line(text[i], spansFor(i), estimateHeight)); }\n      return result\n    }\n\n    var from = change.from, to = change.to, text = change.text;\n    var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n    var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n    // Adjust the line structure\n    if (change.full) {\n      doc.insert(0, linesFor(0, text.length));\n      doc.remove(text.length, doc.size - text.length);\n    } else if (isWholeLineUpdate(doc, change)) {\n      // This is a whole-line replace. Treated specially to make\n      // sure line objects move the way they are supposed to.\n      var added = linesFor(0, text.length - 1);\n      update(lastLine, lastLine.text, lastSpans);\n      if (nlines) { doc.remove(from.line, nlines); }\n      if (added.length) { doc.insert(from.line, added); }\n    } else if (firstLine == lastLine) {\n      if (text.length == 1) {\n        update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n      } else {\n        var added$1 = linesFor(1, text.length - 1);\n        added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n        update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n        doc.insert(from.line + 1, added$1);\n      }\n    } else if (text.length == 1) {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n      doc.remove(from.line + 1, nlines);\n    } else {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n      update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n      var added$2 = linesFor(1, text.length - 1);\n      if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }\n      doc.insert(from.line + 1, added$2);\n    }\n\n    signalLater(doc, \"change\", doc, change);\n  }\n\n  // Call f for all linked documents.\n  function linkedDocs(doc, f, sharedHistOnly) {\n    function propagate(doc, skip, sharedHist) {\n      if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {\n        var rel = doc.linked[i];\n        if (rel.doc == skip) { continue }\n        var shared = sharedHist && rel.sharedHist;\n        if (sharedHistOnly && !shared) { continue }\n        f(rel.doc, shared);\n        propagate(rel.doc, doc, shared);\n      } }\n    }\n    propagate(doc, null, true);\n  }\n\n  // Attach a document to an editor.\n  function attachDoc(cm, doc) {\n    if (doc.cm) { throw new Error(\"This document is already in use.\") }\n    cm.doc = doc;\n    doc.cm = cm;\n    estimateLineHeights(cm);\n    loadMode(cm);\n    setDirectionClass(cm);\n    if (!cm.options.lineWrapping) { findMaxLine(cm); }\n    cm.options.mode = doc.modeOption;\n    regChange(cm);\n  }\n\n  function setDirectionClass(cm) {\n  (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n  }\n\n  function directionChanged(cm) {\n    runInOp(cm, function () {\n      setDirectionClass(cm);\n      regChange(cm);\n    });\n  }\n\n  function History(startGen) {\n    // Arrays of change events and selections. Doing something adds an\n    // event to done and clears undo. Undoing moves events from done\n    // to undone, redoing moves them in the other direction.\n    this.done = []; this.undone = [];\n    this.undoDepth = Infinity;\n    // Used to track when changes can be merged into a single undo\n    // event\n    this.lastModTime = this.lastSelTime = 0;\n    this.lastOp = this.lastSelOp = null;\n    this.lastOrigin = this.lastSelOrigin = null;\n    // Used by the isClean() method\n    this.generation = this.maxGeneration = startGen || 1;\n  }\n\n  // Create a history change event from an updateDoc-style change\n  // object.\n  function historyChangeFromChange(doc, change) {\n    var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n    attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n    linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);\n    return histChange\n  }\n\n  // Pop all selection events off the end of a history array. Stop at\n  // a change event.\n  function clearSelectionEvents(array) {\n    while (array.length) {\n      var last = lst(array);\n      if (last.ranges) { array.pop(); }\n      else { break }\n    }\n  }\n\n  // Find the top change event in the history. Pop off selection\n  // events that are in the way.\n  function lastChangeEvent(hist, force) {\n    if (force) {\n      clearSelectionEvents(hist.done);\n      return lst(hist.done)\n    } else if (hist.done.length && !lst(hist.done).ranges) {\n      return lst(hist.done)\n    } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n      hist.done.pop();\n      return lst(hist.done)\n    }\n  }\n\n  // Register a change in the history. Merges changes that are within\n  // a single operation, or are close together with an origin that\n  // allows merging (starting with \"+\") into a single event.\n  function addChangeToHistory(doc, change, selAfter, opId) {\n    var hist = doc.history;\n    hist.undone.length = 0;\n    var time = +new Date, cur;\n    var last;\n\n    if ((hist.lastOp == opId ||\n         hist.lastOrigin == change.origin && change.origin &&\n         ((change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||\n          change.origin.charAt(0) == \"*\")) &&\n        (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n      // Merge this change into the last event\n      last = lst(cur.changes);\n      if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n        // Optimized case for simple insertion -- don't want to add\n        // new changesets for every character typed\n        last.to = changeEnd(change);\n      } else {\n        // Add new sub-event\n        cur.changes.push(historyChangeFromChange(doc, change));\n      }\n    } else {\n      // Can not be merged, start a new event.\n      var before = lst(hist.done);\n      if (!before || !before.ranges)\n        { pushSelectionToHistory(doc.sel, hist.done); }\n      cur = {changes: [historyChangeFromChange(doc, change)],\n             generation: hist.generation};\n      hist.done.push(cur);\n      while (hist.done.length > hist.undoDepth) {\n        hist.done.shift();\n        if (!hist.done[0].ranges) { hist.done.shift(); }\n      }\n    }\n    hist.done.push(selAfter);\n    hist.generation = ++hist.maxGeneration;\n    hist.lastModTime = hist.lastSelTime = time;\n    hist.lastOp = hist.lastSelOp = opId;\n    hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n    if (!last) { signal(doc, \"historyAdded\"); }\n  }\n\n  function selectionEventCanBeMerged(doc, origin, prev, sel) {\n    var ch = origin.charAt(0);\n    return ch == \"*\" ||\n      ch == \"+\" &&\n      prev.ranges.length == sel.ranges.length &&\n      prev.somethingSelected() == sel.somethingSelected() &&\n      new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n  }\n\n  // Called whenever the selection changes, sets the new selection as\n  // the pending selection in the history, and pushes the old pending\n  // selection into the 'done' array when it was significantly\n  // different (in number of selected ranges, emptiness, or time).\n  function addSelectionToHistory(doc, sel, opId, options) {\n    var hist = doc.history, origin = options && options.origin;\n\n    // A new event is started when the previous origin does not match\n    // the current, or the origins don't allow matching. Origins\n    // starting with * are always merged, those starting with + are\n    // merged when similar and close together in time.\n    if (opId == hist.lastSelOp ||\n        (origin && hist.lastSelOrigin == origin &&\n         (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n          selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n      { hist.done[hist.done.length - 1] = sel; }\n    else\n      { pushSelectionToHistory(sel, hist.done); }\n\n    hist.lastSelTime = +new Date;\n    hist.lastSelOrigin = origin;\n    hist.lastSelOp = opId;\n    if (options && options.clearRedo !== false)\n      { clearSelectionEvents(hist.undone); }\n  }\n\n  function pushSelectionToHistory(sel, dest) {\n    var top = lst(dest);\n    if (!(top && top.ranges && top.equals(sel)))\n      { dest.push(sel); }\n  }\n\n  // Used to store marked span information in the history.\n  function attachLocalSpans(doc, change, from, to) {\n    var existing = change[\"spans_\" + doc.id], n = 0;\n    doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n      if (line.markedSpans)\n        { (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans; }\n      ++n;\n    });\n  }\n\n  // When un/re-doing restores text containing marked spans, those\n  // that have been explicitly cleared should not be restored.\n  function removeClearedSpans(spans) {\n    if (!spans) { return null }\n    var out;\n    for (var i = 0; i < spans.length; ++i) {\n      if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }\n      else if (out) { out.push(spans[i]); }\n    }\n    return !out ? spans : out.length ? out : null\n  }\n\n  // Retrieve and filter the old marked spans stored in a change event.\n  function getOldSpans(doc, change) {\n    var found = change[\"spans_\" + doc.id];\n    if (!found) { return null }\n    var nw = [];\n    for (var i = 0; i < change.text.length; ++i)\n      { nw.push(removeClearedSpans(found[i])); }\n    return nw\n  }\n\n  // Used for un/re-doing changes from the history. Combines the\n  // result of computing the existing spans with the set of spans that\n  // existed in the history (so that deleting around a span and then\n  // undoing brings back the span).\n  function mergeOldSpans(doc, change) {\n    var old = getOldSpans(doc, change);\n    var stretched = stretchSpansOverChange(doc, change);\n    if (!old) { return stretched }\n    if (!stretched) { return old }\n\n    for (var i = 0; i < old.length; ++i) {\n      var oldCur = old[i], stretchCur = stretched[i];\n      if (oldCur && stretchCur) {\n        spans: for (var j = 0; j < stretchCur.length; ++j) {\n          var span = stretchCur[j];\n          for (var k = 0; k < oldCur.length; ++k)\n            { if (oldCur[k].marker == span.marker) { continue spans } }\n          oldCur.push(span);\n        }\n      } else if (stretchCur) {\n        old[i] = stretchCur;\n      }\n    }\n    return old\n  }\n\n  // Used both to provide a JSON-safe object in .getHistory, and, when\n  // detaching a document, to split the history in two\n  function copyHistoryArray(events, newGroup, instantiateSel) {\n    var copy = [];\n    for (var i = 0; i < events.length; ++i) {\n      var event = events[i];\n      if (event.ranges) {\n        copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n        continue\n      }\n      var changes = event.changes, newChanges = [];\n      copy.push({changes: newChanges});\n      for (var j = 0; j < changes.length; ++j) {\n        var change = changes[j], m = (void 0);\n        newChanges.push({from: change.from, to: change.to, text: change.text});\n        if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\\d+)$/)) {\n          if (indexOf(newGroup, Number(m[1])) > -1) {\n            lst(newChanges)[prop] = change[prop];\n            delete change[prop];\n          }\n        } } }\n      }\n    }\n    return copy\n  }\n\n  // The 'scroll' parameter given to many of these indicated whether\n  // the new cursor position should be scrolled into view after\n  // modifying the selection.\n\n  // If shift is held or the extend flag is set, extends a range to\n  // include a given position (and optionally a second position).\n  // Otherwise, simply returns the range between the given positions.\n  // Used for cursor motion and such.\n  function extendRange(range, head, other, extend) {\n    if (extend) {\n      var anchor = range.anchor;\n      if (other) {\n        var posBefore = cmp(head, anchor) < 0;\n        if (posBefore != (cmp(other, anchor) < 0)) {\n          anchor = head;\n          head = other;\n        } else if (posBefore != (cmp(head, other) < 0)) {\n          head = other;\n        }\n      }\n      return new Range(anchor, head)\n    } else {\n      return new Range(other || head, head)\n    }\n  }\n\n  // Extend the primary selection range, discard the rest.\n  function extendSelection(doc, head, other, options, extend) {\n    if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }\n    setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n  }\n\n  // Extend all selections (pos is an array of selections with length\n  // equal the number of selections)\n  function extendSelections(doc, heads, options) {\n    var out = [];\n    var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n    for (var i = 0; i < doc.sel.ranges.length; i++)\n      { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }\n    var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n    setSelection(doc, newSel, options);\n  }\n\n  // Updates a single range in the selection.\n  function replaceOneSelection(doc, i, range, options) {\n    var ranges = doc.sel.ranges.slice(0);\n    ranges[i] = range;\n    setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);\n  }\n\n  // Reset the selection to a single range.\n  function setSimpleSelection(doc, anchor, head, options) {\n    setSelection(doc, simpleSelection(anchor, head), options);\n  }\n\n  // Give beforeSelectionChange handlers a change to influence a\n  // selection update.\n  function filterSelectionChange(doc, sel, options) {\n    var obj = {\n      ranges: sel.ranges,\n      update: function(ranges) {\n        this.ranges = [];\n        for (var i = 0; i < ranges.length; i++)\n          { this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n                                     clipPos(doc, ranges[i].head)); }\n      },\n      origin: options && options.origin\n    };\n    signal(doc, \"beforeSelectionChange\", doc, obj);\n    if (doc.cm) { signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj); }\n    if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }\n    else { return sel }\n  }\n\n  function setSelectionReplaceHistory(doc, sel, options) {\n    var done = doc.history.done, last = lst(done);\n    if (last && last.ranges) {\n      done[done.length - 1] = sel;\n      setSelectionNoUndo(doc, sel, options);\n    } else {\n      setSelection(doc, sel, options);\n    }\n  }\n\n  // Set a new selection.\n  function setSelection(doc, sel, options) {\n    setSelectionNoUndo(doc, sel, options);\n    addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n  }\n\n  function setSelectionNoUndo(doc, sel, options) {\n    if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n      { sel = filterSelectionChange(doc, sel, options); }\n\n    var bias = options && options.bias ||\n      (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n    setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n    if (!(options && options.scroll === false) && doc.cm)\n      { ensureCursorVisible(doc.cm); }\n  }\n\n  function setSelectionInner(doc, sel) {\n    if (sel.equals(doc.sel)) { return }\n\n    doc.sel = sel;\n\n    if (doc.cm) {\n      doc.cm.curOp.updateInput = 1;\n      doc.cm.curOp.selectionChanged = true;\n      signalCursorActivity(doc.cm);\n    }\n    signalLater(doc, \"cursorActivity\", doc);\n  }\n\n  // Verify that the selection does not partially select any atomic\n  // marked ranges.\n  function reCheckSelection(doc) {\n    setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n  }\n\n  // Return a selection that does not partially select any atomic\n  // ranges.\n  function skipAtomicInSelection(doc, sel, bias, mayClear) {\n    var out;\n    for (var i = 0; i < sel.ranges.length; i++) {\n      var range = sel.ranges[i];\n      var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n      var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n      var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n      if (out || newAnchor != range.anchor || newHead != range.head) {\n        if (!out) { out = sel.ranges.slice(0, i); }\n        out[i] = new Range(newAnchor, newHead);\n      }\n    }\n    return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel\n  }\n\n  function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n    var line = getLine(doc, pos.line);\n    if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n      var sp = line.markedSpans[i], m = sp.marker;\n\n      // Determine if we should prevent the cursor being placed to the left/right of an atomic marker\n      // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it\n      // is with selectLeft/Right\n      var preventCursorLeft = (\"selectLeft\" in m) ? !m.selectLeft : m.inclusiveLeft;\n      var preventCursorRight = (\"selectRight\" in m) ? !m.selectRight : m.inclusiveRight;\n\n      if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n          (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n        if (mayClear) {\n          signal(m, \"beforeCursorEnter\");\n          if (m.explicitlyCleared) {\n            if (!line.markedSpans) { break }\n            else {--i; continue}\n          }\n        }\n        if (!m.atomic) { continue }\n\n        if (oldPos) {\n          var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);\n          if (dir < 0 ? preventCursorRight : preventCursorLeft)\n            { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }\n          if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n            { return skipAtomicInner(doc, near, pos, dir, mayClear) }\n        }\n\n        var far = m.find(dir < 0 ? -1 : 1);\n        if (dir < 0 ? preventCursorLeft : preventCursorRight)\n          { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }\n        return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n      }\n    } }\n    return pos\n  }\n\n  // Ensure a given position is not inside an atomic range.\n  function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n    var dir = bias || 1;\n    var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n        (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n        skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n        (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n    if (!found) {\n      doc.cantEdit = true;\n      return Pos(doc.first, 0)\n    }\n    return found\n  }\n\n  function movePos(doc, pos, dir, line) {\n    if (dir < 0 && pos.ch == 0) {\n      if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }\n      else { return null }\n    } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n      if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }\n      else { return null }\n    } else {\n      return new Pos(pos.line, pos.ch + dir)\n    }\n  }\n\n  function selectAll(cm) {\n    cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n  }\n\n  // UPDATING\n\n  // Allow \"beforeChange\" event handlers to influence a change\n  function filterChange(doc, change, update) {\n    var obj = {\n      canceled: false,\n      from: change.from,\n      to: change.to,\n      text: change.text,\n      origin: change.origin,\n      cancel: function () { return obj.canceled = true; }\n    };\n    if (update) { obj.update = function (from, to, text, origin) {\n      if (from) { obj.from = clipPos(doc, from); }\n      if (to) { obj.to = clipPos(doc, to); }\n      if (text) { obj.text = text; }\n      if (origin !== undefined) { obj.origin = origin; }\n    }; }\n    signal(doc, \"beforeChange\", doc, obj);\n    if (doc.cm) { signal(doc.cm, \"beforeChange\", doc.cm, obj); }\n\n    if (obj.canceled) {\n      if (doc.cm) { doc.cm.curOp.updateInput = 2; }\n      return null\n    }\n    return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n  }\n\n  // Apply a change to a document, and add it to the document's\n  // history, and propagating it to all linked documents.\n  function makeChange(doc, change, ignoreReadOnly) {\n    if (doc.cm) {\n      if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }\n      if (doc.cm.state.suppressEdits) { return }\n    }\n\n    if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n      change = filterChange(doc, change, true);\n      if (!change) { return }\n    }\n\n    // Possibly split or suppress the update based on the presence\n    // of read-only spans in its range.\n    var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n    if (split) {\n      for (var i = split.length - 1; i >= 0; --i)\n        { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text, origin: change.origin}); }\n    } else {\n      makeChangeInner(doc, change);\n    }\n  }\n\n  function makeChangeInner(doc, change) {\n    if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) { return }\n    var selAfter = computeSelAfterChange(doc, change);\n    addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n    makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n    var rebased = [];\n\n    linkedDocs(doc, function (doc, sharedHist) {\n      if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n        rebaseHist(doc.history, change);\n        rebased.push(doc.history);\n      }\n      makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n    });\n  }\n\n  // Revert a change stored in a document's history.\n  function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n    var suppress = doc.cm && doc.cm.state.suppressEdits;\n    if (suppress && !allowSelectionOnly) { return }\n\n    var hist = doc.history, event, selAfter = doc.sel;\n    var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n    // Verify that there is a useable event (so that ctrl-z won't\n    // needlessly clear selection events)\n    var i = 0;\n    for (; i < source.length; i++) {\n      event = source[i];\n      if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n        { break }\n    }\n    if (i == source.length) { return }\n    hist.lastOrigin = hist.lastSelOrigin = null;\n\n    for (;;) {\n      event = source.pop();\n      if (event.ranges) {\n        pushSelectionToHistory(event, dest);\n        if (allowSelectionOnly && !event.equals(doc.sel)) {\n          setSelection(doc, event, {clearRedo: false});\n          return\n        }\n        selAfter = event;\n      } else if (suppress) {\n        source.push(event);\n        return\n      } else { break }\n    }\n\n    // Build up a reverse change object to add to the opposite history\n    // stack (redo when undoing, and vice versa).\n    var antiChanges = [];\n    pushSelectionToHistory(selAfter, dest);\n    dest.push({changes: antiChanges, generation: hist.generation});\n    hist.generation = event.generation || ++hist.maxGeneration;\n\n    var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n    var loop = function ( i ) {\n      var change = event.changes[i];\n      change.origin = type;\n      if (filter && !filterChange(doc, change, false)) {\n        source.length = 0;\n        return {}\n      }\n\n      antiChanges.push(historyChangeFromChange(doc, change));\n\n      var after = i ? computeSelAfterChange(doc, change) : lst(source);\n      makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n      if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }\n      var rebased = [];\n\n      // Propagate to the linked documents\n      linkedDocs(doc, function (doc, sharedHist) {\n        if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n          rebaseHist(doc.history, change);\n          rebased.push(doc.history);\n        }\n        makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n      });\n    };\n\n    for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n      var returned = loop( i$1 );\n\n      if ( returned ) return returned.v;\n    }\n  }\n\n  // Sub-views need their line numbers shifted when text is added\n  // above or below them in the parent document.\n  function shiftDoc(doc, distance) {\n    if (distance == 0) { return }\n    doc.first += distance;\n    doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(\n      Pos(range.anchor.line + distance, range.anchor.ch),\n      Pos(range.head.line + distance, range.head.ch)\n    ); }), doc.sel.primIndex);\n    if (doc.cm) {\n      regChange(doc.cm, doc.first, doc.first - distance, distance);\n      for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n        { regLineChange(doc.cm, l, \"gutter\"); }\n    }\n  }\n\n  // More lower-level change function, handling only a single document\n  // (not linked ones).\n  function makeChangeSingleDoc(doc, change, selAfter, spans) {\n    if (doc.cm && !doc.cm.curOp)\n      { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }\n\n    if (change.to.line < doc.first) {\n      shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n      return\n    }\n    if (change.from.line > doc.lastLine()) { return }\n\n    // Clip the change to the size of this doc\n    if (change.from.line < doc.first) {\n      var shift = change.text.length - 1 - (doc.first - change.from.line);\n      shiftDoc(doc, shift);\n      change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n                text: [lst(change.text)], origin: change.origin};\n    }\n    var last = doc.lastLine();\n    if (change.to.line > last) {\n      change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n                text: [change.text[0]], origin: change.origin};\n    }\n\n    change.removed = getBetween(doc, change.from, change.to);\n\n    if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }\n    if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }\n    else { updateDoc(doc, change, spans); }\n    setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n\n    if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0)))\n      { doc.cantEdit = false; }\n  }\n\n  // Handle the interaction of a change to a document with the editor\n  // that this document is part of.\n  function makeChangeSingleDocInEditor(cm, change, spans) {\n    var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n    var recomputeMaxLength = false, checkWidthStart = from.line;\n    if (!cm.options.lineWrapping) {\n      checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n      doc.iter(checkWidthStart, to.line + 1, function (line) {\n        if (line == display.maxLine) {\n          recomputeMaxLength = true;\n          return true\n        }\n      });\n    }\n\n    if (doc.sel.contains(change.from, change.to) > -1)\n      { signalCursorActivity(cm); }\n\n    updateDoc(doc, change, spans, estimateHeight(cm));\n\n    if (!cm.options.lineWrapping) {\n      doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n        var len = lineLength(line);\n        if (len > display.maxLineLength) {\n          display.maxLine = line;\n          display.maxLineLength = len;\n          display.maxLineChanged = true;\n          recomputeMaxLength = false;\n        }\n      });\n      if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }\n    }\n\n    retreatFrontier(doc, from.line);\n    startWorker(cm, 400);\n\n    var lendiff = change.text.length - (to.line - from.line) - 1;\n    // Remember that these lines changed, for updating the display\n    if (change.full)\n      { regChange(cm); }\n    else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n      { regLineChange(cm, from.line, \"text\"); }\n    else\n      { regChange(cm, from.line, to.line + 1, lendiff); }\n\n    var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n    if (changeHandler || changesHandler) {\n      var obj = {\n        from: from, to: to,\n        text: change.text,\n        removed: change.removed,\n        origin: change.origin\n      };\n      if (changeHandler) { signalLater(cm, \"change\", cm, obj); }\n      if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }\n    }\n    cm.display.selForContextMenu = null;\n  }\n\n  function replaceRange(doc, code, from, to, origin) {\n    var assign;\n\n    if (!to) { to = from; }\n    if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }\n    if (typeof code == \"string\") { code = doc.splitLines(code); }\n    makeChange(doc, {from: from, to: to, text: code, origin: origin});\n  }\n\n  // Rebasing/resetting history to deal with externally-sourced changes\n\n  function rebaseHistSelSingle(pos, from, to, diff) {\n    if (to < pos.line) {\n      pos.line += diff;\n    } else if (from < pos.line) {\n      pos.line = from;\n      pos.ch = 0;\n    }\n  }\n\n  // Tries to rebase an array of history events given a change in the\n  // document. If the change touches the same lines as the event, the\n  // event, and everything 'behind' it, is discarded. If the change is\n  // before the event, the event's positions are updated. Uses a\n  // copy-on-write scheme for the positions, to avoid having to\n  // reallocate them all on every rebase, but also avoid problems with\n  // shared position objects being unsafely updated.\n  function rebaseHistArray(array, from, to, diff) {\n    for (var i = 0; i < array.length; ++i) {\n      var sub = array[i], ok = true;\n      if (sub.ranges) {\n        if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n        for (var j = 0; j < sub.ranges.length; j++) {\n          rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n          rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n        }\n        continue\n      }\n      for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n        var cur = sub.changes[j$1];\n        if (to < cur.from.line) {\n          cur.from = Pos(cur.from.line + diff, cur.from.ch);\n          cur.to = Pos(cur.to.line + diff, cur.to.ch);\n        } else if (from <= cur.to.line) {\n          ok = false;\n          break\n        }\n      }\n      if (!ok) {\n        array.splice(0, i + 1);\n        i = 0;\n      }\n    }\n  }\n\n  function rebaseHist(hist, change) {\n    var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n    rebaseHistArray(hist.done, from, to, diff);\n    rebaseHistArray(hist.undone, from, to, diff);\n  }\n\n  // Utility for applying a change to a line by handle or number,\n  // returning the number and optionally registering the line as\n  // changed.\n  function changeLine(doc, handle, changeType, op) {\n    var no = handle, line = handle;\n    if (typeof handle == \"number\") { line = getLine(doc, clipLine(doc, handle)); }\n    else { no = lineNo(handle); }\n    if (no == null) { return null }\n    if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }\n    return line\n  }\n\n  // The document is represented as a BTree consisting of leaves, with\n  // chunk of lines in them, and branches, with up to ten leaves or\n  // other branch nodes below them. The top node is always a branch\n  // node, and is the document object itself (meaning it has\n  // additional methods and properties).\n  //\n  // All nodes have parent links. The tree is used both to go from\n  // line numbers to line objects, and to go from objects to numbers.\n  // It also indexes by height, and is used to convert between height\n  // and line object, and to find the total height of the document.\n  //\n  // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n  function LeafChunk(lines) {\n    this.lines = lines;\n    this.parent = null;\n    var height = 0;\n    for (var i = 0; i < lines.length; ++i) {\n      lines[i].parent = this;\n      height += lines[i].height;\n    }\n    this.height = height;\n  }\n\n  LeafChunk.prototype = {\n    chunkSize: function() { return this.lines.length },\n\n    // Remove the n lines at offset 'at'.\n    removeInner: function(at, n) {\n      for (var i = at, e = at + n; i < e; ++i) {\n        var line = this.lines[i];\n        this.height -= line.height;\n        cleanUpLine(line);\n        signalLater(line, \"delete\");\n      }\n      this.lines.splice(at, n);\n    },\n\n    // Helper used to collapse a small branch into a single leaf.\n    collapse: function(lines) {\n      lines.push.apply(lines, this.lines);\n    },\n\n    // Insert the given array of lines at offset 'at', count them as\n    // having the given height.\n    insertInner: function(at, lines, height) {\n      this.height += height;\n      this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n      for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; }\n    },\n\n    // Used to iterate over a part of the tree.\n    iterN: function(at, n, op) {\n      for (var e = at + n; at < e; ++at)\n        { if (op(this.lines[at])) { return true } }\n    }\n  };\n\n  function BranchChunk(children) {\n    this.children = children;\n    var size = 0, height = 0;\n    for (var i = 0; i < children.length; ++i) {\n      var ch = children[i];\n      size += ch.chunkSize(); height += ch.height;\n      ch.parent = this;\n    }\n    this.size = size;\n    this.height = height;\n    this.parent = null;\n  }\n\n  BranchChunk.prototype = {\n    chunkSize: function() { return this.size },\n\n    removeInner: function(at, n) {\n      this.size -= n;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var rm = Math.min(n, sz - at), oldHeight = child.height;\n          child.removeInner(at, rm);\n          this.height -= oldHeight - child.height;\n          if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\n          if ((n -= rm) == 0) { break }\n          at = 0;\n        } else { at -= sz; }\n      }\n      // If the result is smaller than 25 lines, ensure that it is a\n      // single leaf node.\n      if (this.size - n < 25 &&\n          (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n        var lines = [];\n        this.collapse(lines);\n        this.children = [new LeafChunk(lines)];\n        this.children[0].parent = this;\n      }\n    },\n\n    collapse: function(lines) {\n      for (var i = 0; i < this.children.length; ++i) { this.children[i].collapse(lines); }\n    },\n\n    insertInner: function(at, lines, height) {\n      this.size += lines.length;\n      this.height += height;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at <= sz) {\n          child.insertInner(at, lines, height);\n          if (child.lines && child.lines.length > 50) {\n            // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n            // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n            var remaining = child.lines.length % 25 + 25;\n            for (var pos = remaining; pos < child.lines.length;) {\n              var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n              child.height -= leaf.height;\n              this.children.splice(++i, 0, leaf);\n              leaf.parent = this;\n            }\n            child.lines = child.lines.slice(0, remaining);\n            this.maybeSpill();\n          }\n          break\n        }\n        at -= sz;\n      }\n    },\n\n    // When a node has grown, check whether it should be split.\n    maybeSpill: function() {\n      if (this.children.length <= 10) { return }\n      var me = this;\n      do {\n        var spilled = me.children.splice(me.children.length - 5, 5);\n        var sibling = new BranchChunk(spilled);\n        if (!me.parent) { // Become the parent node\n          var copy = new BranchChunk(me.children);\n          copy.parent = me;\n          me.children = [copy, sibling];\n          me = copy;\n       } else {\n          me.size -= sibling.size;\n          me.height -= sibling.height;\n          var myIndex = indexOf(me.parent.children, me);\n          me.parent.children.splice(myIndex + 1, 0, sibling);\n        }\n        sibling.parent = me.parent;\n      } while (me.children.length > 10)\n      me.parent.maybeSpill();\n    },\n\n    iterN: function(at, n, op) {\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var used = Math.min(n, sz - at);\n          if (child.iterN(at, used, op)) { return true }\n          if ((n -= used) == 0) { break }\n          at = 0;\n        } else { at -= sz; }\n      }\n    }\n  };\n\n  // Line widgets are block elements displayed above or below a line.\n\n  var LineWidget = function(doc, node, options) {\n    if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))\n      { this[opt] = options[opt]; } } }\n    this.doc = doc;\n    this.node = node;\n  };\n\n  LineWidget.prototype.clear = function () {\n    var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n    if (no == null || !ws) { return }\n    for (var i = 0; i < ws.length; ++i) { if (ws[i] == this) { ws.splice(i--, 1); } }\n    if (!ws.length) { line.widgets = null; }\n    var height = widgetHeight(this);\n    updateLineHeight(line, Math.max(0, line.height - height));\n    if (cm) {\n      runInOp(cm, function () {\n        adjustScrollWhenAboveVisible(cm, line, -height);\n        regLineChange(cm, no, \"widget\");\n      });\n      signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n    }\n  };\n\n  LineWidget.prototype.changed = function () {\n      var this$1 = this;\n\n    var oldH = this.height, cm = this.doc.cm, line = this.line;\n    this.height = null;\n    var diff = widgetHeight(this) - oldH;\n    if (!diff) { return }\n    if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }\n    if (cm) {\n      runInOp(cm, function () {\n        cm.curOp.forceUpdate = true;\n        adjustScrollWhenAboveVisible(cm, line, diff);\n        signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n      });\n    }\n  };\n  eventMixin(LineWidget);\n\n  function adjustScrollWhenAboveVisible(cm, line, diff) {\n    if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n      { addToScrollTop(cm, diff); }\n  }\n\n  function addLineWidget(doc, handle, node, options) {\n    var widget = new LineWidget(doc, node, options);\n    var cm = doc.cm;\n    if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }\n    changeLine(doc, handle, \"widget\", function (line) {\n      var widgets = line.widgets || (line.widgets = []);\n      if (widget.insertAt == null) { widgets.push(widget); }\n      else { widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); }\n      widget.line = line;\n      if (cm && !lineIsHidden(doc, line)) {\n        var aboveVisible = heightAtLine(line) < doc.scrollTop;\n        updateLineHeight(line, line.height + widgetHeight(widget));\n        if (aboveVisible) { addToScrollTop(cm, widget.height); }\n        cm.curOp.forceUpdate = true;\n      }\n      return true\n    });\n    if (cm) { signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle)); }\n    return widget\n  }\n\n  // TEXTMARKERS\n\n  // Created with markText and setBookmark methods. A TextMarker is a\n  // handle that can be used to clear or find a marked position in the\n  // document. Line objects hold arrays (markedSpans) containing\n  // {from, to, marker} object pointing to such marker objects, and\n  // indicating that such a marker is present on that line. Multiple\n  // lines may point to the same marker when it spans across lines.\n  // The spans will have null for their from/to properties when the\n  // marker continues beyond the start/end of the line. Markers have\n  // links back to the lines they currently touch.\n\n  // Collapsed markers have unique ids, in order to be able to order\n  // them, which is needed for uniquely determining an outer marker\n  // when they overlap (they may nest, but not partially overlap).\n  var nextMarkerId = 0;\n\n  var TextMarker = function(doc, type) {\n    this.lines = [];\n    this.type = type;\n    this.doc = doc;\n    this.id = ++nextMarkerId;\n  };\n\n  // Clear the marker.\n  TextMarker.prototype.clear = function () {\n    if (this.explicitlyCleared) { return }\n    var cm = this.doc.cm, withOp = cm && !cm.curOp;\n    if (withOp) { startOperation(cm); }\n    if (hasHandler(this, \"clear\")) {\n      var found = this.find();\n      if (found) { signalLater(this, \"clear\", found.from, found.to); }\n    }\n    var min = null, max = null;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this);\n      if (cm && !this.collapsed) { regLineChange(cm, lineNo(line), \"text\"); }\n      else if (cm) {\n        if (span.to != null) { max = lineNo(line); }\n        if (span.from != null) { min = lineNo(line); }\n      }\n      line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n      if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)\n        { updateLineHeight(line, textHeight(cm.display)); }\n    }\n    if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n      var visual = visualLine(this.lines[i$1]), len = lineLength(visual);\n      if (len > cm.display.maxLineLength) {\n        cm.display.maxLine = visual;\n        cm.display.maxLineLength = len;\n        cm.display.maxLineChanged = true;\n      }\n    } }\n\n    if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }\n    this.lines.length = 0;\n    this.explicitlyCleared = true;\n    if (this.atomic && this.doc.cantEdit) {\n      this.doc.cantEdit = false;\n      if (cm) { reCheckSelection(cm.doc); }\n    }\n    if (cm) { signalLater(cm, \"markerCleared\", cm, this, min, max); }\n    if (withOp) { endOperation(cm); }\n    if (this.parent) { this.parent.clear(); }\n  };\n\n  // Find the position of the marker in the document. Returns a {from,\n  // to} object by default. Side can be passed to get a specific side\n  // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n  // Pos objects returned contain a line object, rather than a line\n  // number (used to prevent looking up the same line twice).\n  TextMarker.prototype.find = function (side, lineObj) {\n    if (side == null && this.type == \"bookmark\") { side = 1; }\n    var from, to;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this);\n      if (span.from != null) {\n        from = Pos(lineObj ? line : lineNo(line), span.from);\n        if (side == -1) { return from }\n      }\n      if (span.to != null) {\n        to = Pos(lineObj ? line : lineNo(line), span.to);\n        if (side == 1) { return to }\n      }\n    }\n    return from && {from: from, to: to}\n  };\n\n  // Signals that the marker's widget changed, and surrounding layout\n  // should be recomputed.\n  TextMarker.prototype.changed = function () {\n      var this$1 = this;\n\n    var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n    if (!pos || !cm) { return }\n    runInOp(cm, function () {\n      var line = pos.line, lineN = lineNo(pos.line);\n      var view = findViewForLine(cm, lineN);\n      if (view) {\n        clearLineMeasurementCacheFor(view);\n        cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n      }\n      cm.curOp.updateMaxLine = true;\n      if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n        var oldHeight = widget.height;\n        widget.height = null;\n        var dHeight = widgetHeight(widget) - oldHeight;\n        if (dHeight)\n          { updateLineHeight(line, line.height + dHeight); }\n      }\n      signalLater(cm, \"markerChanged\", cm, this$1);\n    });\n  };\n\n  TextMarker.prototype.attachLine = function (line) {\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp;\n      if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n        { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }\n    }\n    this.lines.push(line);\n  };\n\n  TextMarker.prototype.detachLine = function (line) {\n    this.lines.splice(indexOf(this.lines, line), 1);\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp\n      ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n    }\n  };\n  eventMixin(TextMarker);\n\n  // Create a marker, wire it up to the right lines, and\n  function markText(doc, from, to, options, type) {\n    // Shared markers (across linked documents) are handled separately\n    // (markTextShared will call out to this again, once per\n    // document).\n    if (options && options.shared) { return markTextShared(doc, from, to, options, type) }\n    // Ensure we are in an operation.\n    if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }\n\n    var marker = new TextMarker(doc, type), diff = cmp(from, to);\n    if (options) { copyObj(options, marker, false); }\n    // Don't connect empty markers unless clearWhenEmpty is false\n    if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n      { return marker }\n    if (marker.replacedWith) {\n      // Showing up as a widget implies collapsed (widget replaces text)\n      marker.collapsed = true;\n      marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n      if (!options.handleMouseEvents) { marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\"); }\n      if (options.insertLeft) { marker.widgetNode.insertLeft = true; }\n    }\n    if (marker.collapsed) {\n      if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n          from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n        { throw new Error(\"Inserting collapsed marker partially overlapping an existing one\") }\n      seeCollapsedSpans();\n    }\n\n    if (marker.addToHistory)\n      { addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN); }\n\n    var curLine = from.line, cm = doc.cm, updateMaxLine;\n    doc.iter(curLine, to.line + 1, function (line) {\n      if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n        { updateMaxLine = true; }\n      if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }\n      addMarkedSpan(line, new MarkedSpan(marker,\n                                         curLine == from.line ? from.ch : null,\n                                         curLine == to.line ? to.ch : null));\n      ++curLine;\n    });\n    // lineIsHidden depends on the presence of the spans, so needs a second pass\n    if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {\n      if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }\n    }); }\n\n    if (marker.clearOnEnter) { on(marker, \"beforeCursorEnter\", function () { return marker.clear(); }); }\n\n    if (marker.readOnly) {\n      seeReadOnlySpans();\n      if (doc.history.done.length || doc.history.undone.length)\n        { doc.clearHistory(); }\n    }\n    if (marker.collapsed) {\n      marker.id = ++nextMarkerId;\n      marker.atomic = true;\n    }\n    if (cm) {\n      // Sync editor state\n      if (updateMaxLine) { cm.curOp.updateMaxLine = true; }\n      if (marker.collapsed)\n        { regChange(cm, from.line, to.line + 1); }\n      else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||\n               marker.attributes || marker.title)\n        { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, \"text\"); } }\n      if (marker.atomic) { reCheckSelection(cm.doc); }\n      signalLater(cm, \"markerAdded\", cm, marker);\n    }\n    return marker\n  }\n\n  // SHARED TEXTMARKERS\n\n  // A shared marker spans multiple linked documents. It is\n  // implemented as a meta-marker-object controlling multiple normal\n  // markers.\n  var SharedTextMarker = function(markers, primary) {\n    this.markers = markers;\n    this.primary = primary;\n    for (var i = 0; i < markers.length; ++i)\n      { markers[i].parent = this; }\n  };\n\n  SharedTextMarker.prototype.clear = function () {\n    if (this.explicitlyCleared) { return }\n    this.explicitlyCleared = true;\n    for (var i = 0; i < this.markers.length; ++i)\n      { this.markers[i].clear(); }\n    signalLater(this, \"clear\");\n  };\n\n  SharedTextMarker.prototype.find = function (side, lineObj) {\n    return this.primary.find(side, lineObj)\n  };\n  eventMixin(SharedTextMarker);\n\n  function markTextShared(doc, from, to, options, type) {\n    options = copyObj(options);\n    options.shared = false;\n    var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n    var widget = options.widgetNode;\n    linkedDocs(doc, function (doc) {\n      if (widget) { options.widgetNode = widget.cloneNode(true); }\n      markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n      for (var i = 0; i < doc.linked.length; ++i)\n        { if (doc.linked[i].isParent) { return } }\n      primary = lst(markers);\n    });\n    return new SharedTextMarker(markers, primary)\n  }\n\n  function findSharedMarkers(doc) {\n    return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })\n  }\n\n  function copySharedMarkers(doc, markers) {\n    for (var i = 0; i < markers.length; i++) {\n      var marker = markers[i], pos = marker.find();\n      var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n      if (cmp(mFrom, mTo)) {\n        var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n        marker.markers.push(subMark);\n        subMark.parent = marker;\n      }\n    }\n  }\n\n  function detachSharedMarkers(markers) {\n    var loop = function ( i ) {\n      var marker = markers[i], linked = [marker.primary.doc];\n      linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });\n      for (var j = 0; j < marker.markers.length; j++) {\n        var subMarker = marker.markers[j];\n        if (indexOf(linked, subMarker.doc) == -1) {\n          subMarker.parent = null;\n          marker.markers.splice(j--, 1);\n        }\n      }\n    };\n\n    for (var i = 0; i < markers.length; i++) loop( i );\n  }\n\n  var nextDocId = 0;\n  var Doc = function(text, mode, firstLine, lineSep, direction) {\n    if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }\n    if (firstLine == null) { firstLine = 0; }\n\n    BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n    this.first = firstLine;\n    this.scrollTop = this.scrollLeft = 0;\n    this.cantEdit = false;\n    this.cleanGeneration = 1;\n    this.modeFrontier = this.highlightFrontier = firstLine;\n    var start = Pos(firstLine, 0);\n    this.sel = simpleSelection(start);\n    this.history = new History(null);\n    this.id = ++nextDocId;\n    this.modeOption = mode;\n    this.lineSep = lineSep;\n    this.direction = (direction == \"rtl\") ? \"rtl\" : \"ltr\";\n    this.extend = false;\n\n    if (typeof text == \"string\") { text = this.splitLines(text); }\n    updateDoc(this, {from: start, to: start, text: text});\n    setSelection(this, simpleSelection(start), sel_dontScroll);\n  };\n\n  Doc.prototype = createObj(BranchChunk.prototype, {\n    constructor: Doc,\n    // Iterate over the document. Supports two forms -- with only one\n    // argument, it calls that for each line in the document. With\n    // three, it iterates over the range given by the first two (with\n    // the second being non-inclusive).\n    iter: function(from, to, op) {\n      if (op) { this.iterN(from - this.first, to - from, op); }\n      else { this.iterN(this.first, this.first + this.size, from); }\n    },\n\n    // Non-public interface for adding and removing lines.\n    insert: function(at, lines) {\n      var height = 0;\n      for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }\n      this.insertInner(at - this.first, lines, height);\n    },\n    remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n    // From here, the methods are part of the public interface. Most\n    // are also available from CodeMirror (editor) instances.\n\n    getValue: function(lineSep) {\n      var lines = getLines(this, this.first, this.first + this.size);\n      if (lineSep === false) { return lines }\n      return lines.join(lineSep || this.lineSeparator())\n    },\n    setValue: docMethodOp(function(code) {\n      var top = Pos(this.first, 0), last = this.first + this.size - 1;\n      makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n                        text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n      if (this.cm) { scrollToCoords(this.cm, 0, 0); }\n      setSelection(this, simpleSelection(top), sel_dontScroll);\n    }),\n    replaceRange: function(code, from, to, origin) {\n      from = clipPos(this, from);\n      to = to ? clipPos(this, to) : from;\n      replaceRange(this, code, from, to, origin);\n    },\n    getRange: function(from, to, lineSep) {\n      var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n      if (lineSep === false) { return lines }\n      return lines.join(lineSep || this.lineSeparator())\n    },\n\n    getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},\n\n    getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},\n    getLineNumber: function(line) {return lineNo(line)},\n\n    getLineHandleVisualStart: function(line) {\n      if (typeof line == \"number\") { line = getLine(this, line); }\n      return visualLine(line)\n    },\n\n    lineCount: function() {return this.size},\n    firstLine: function() {return this.first},\n    lastLine: function() {return this.first + this.size - 1},\n\n    clipPos: function(pos) {return clipPos(this, pos)},\n\n    getCursor: function(start) {\n      var range = this.sel.primary(), pos;\n      if (start == null || start == \"head\") { pos = range.head; }\n      else if (start == \"anchor\") { pos = range.anchor; }\n      else if (start == \"end\" || start == \"to\" || start === false) { pos = range.to(); }\n      else { pos = range.from(); }\n      return pos\n    },\n    listSelections: function() { return this.sel.ranges },\n    somethingSelected: function() {return this.sel.somethingSelected()},\n\n    setCursor: docMethodOp(function(line, ch, options) {\n      setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n    }),\n    setSelection: docMethodOp(function(anchor, head, options) {\n      setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n    }),\n    extendSelection: docMethodOp(function(head, other, options) {\n      extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n    }),\n    extendSelections: docMethodOp(function(heads, options) {\n      extendSelections(this, clipPosArray(this, heads), options);\n    }),\n    extendSelectionsBy: docMethodOp(function(f, options) {\n      var heads = map(this.sel.ranges, f);\n      extendSelections(this, clipPosArray(this, heads), options);\n    }),\n    setSelections: docMethodOp(function(ranges, primary, options) {\n      if (!ranges.length) { return }\n      var out = [];\n      for (var i = 0; i < ranges.length; i++)\n        { out[i] = new Range(clipPos(this, ranges[i].anchor),\n                           clipPos(this, ranges[i].head)); }\n      if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }\n      setSelection(this, normalizeSelection(this.cm, out, primary), options);\n    }),\n    addSelection: docMethodOp(function(anchor, head, options) {\n      var ranges = this.sel.ranges.slice(0);\n      ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n      setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n    }),\n\n    getSelection: function(lineSep) {\n      var ranges = this.sel.ranges, lines;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n        lines = lines ? lines.concat(sel) : sel;\n      }\n      if (lineSep === false) { return lines }\n      else { return lines.join(lineSep || this.lineSeparator()) }\n    },\n    getSelections: function(lineSep) {\n      var parts = [], ranges = this.sel.ranges;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n        if (lineSep !== false) { sel = sel.join(lineSep || this.lineSeparator()); }\n        parts[i] = sel;\n      }\n      return parts\n    },\n    replaceSelection: function(code, collapse, origin) {\n      var dup = [];\n      for (var i = 0; i < this.sel.ranges.length; i++)\n        { dup[i] = code; }\n      this.replaceSelections(dup, collapse, origin || \"+input\");\n    },\n    replaceSelections: docMethodOp(function(code, collapse, origin) {\n      var changes = [], sel = this.sel;\n      for (var i = 0; i < sel.ranges.length; i++) {\n        var range = sel.ranges[i];\n        changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin};\n      }\n      var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n      for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)\n        { makeChange(this, changes[i$1]); }\n      if (newSel) { setSelectionReplaceHistory(this, newSel); }\n      else if (this.cm) { ensureCursorVisible(this.cm); }\n    }),\n    undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n    redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n    undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n    redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n    setExtending: function(val) {this.extend = val;},\n    getExtending: function() {return this.extend},\n\n    historySize: function() {\n      var hist = this.history, done = 0, undone = 0;\n      for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }\n      for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }\n      return {undo: done, redo: undone}\n    },\n    clearHistory: function() {\n      var this$1 = this;\n\n      this.history = new History(this.history.maxGeneration);\n      linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true);\n    },\n\n    markClean: function() {\n      this.cleanGeneration = this.changeGeneration(true);\n    },\n    changeGeneration: function(forceSplit) {\n      if (forceSplit)\n        { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }\n      return this.history.generation\n    },\n    isClean: function (gen) {\n      return this.history.generation == (gen || this.cleanGeneration)\n    },\n\n    getHistory: function() {\n      return {done: copyHistoryArray(this.history.done),\n              undone: copyHistoryArray(this.history.undone)}\n    },\n    setHistory: function(histData) {\n      var hist = this.history = new History(this.history.maxGeneration);\n      hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n      hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n    },\n\n    setGutterMarker: docMethodOp(function(line, gutterID, value) {\n      return changeLine(this, line, \"gutter\", function (line) {\n        var markers = line.gutterMarkers || (line.gutterMarkers = {});\n        markers[gutterID] = value;\n        if (!value && isEmpty(markers)) { line.gutterMarkers = null; }\n        return true\n      })\n    }),\n\n    clearGutter: docMethodOp(function(gutterID) {\n      var this$1 = this;\n\n      this.iter(function (line) {\n        if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n          changeLine(this$1, line, \"gutter\", function () {\n            line.gutterMarkers[gutterID] = null;\n            if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }\n            return true\n          });\n        }\n      });\n    }),\n\n    lineInfo: function(line) {\n      var n;\n      if (typeof line == \"number\") {\n        if (!isLine(this, line)) { return null }\n        n = line;\n        line = getLine(this, line);\n        if (!line) { return null }\n      } else {\n        n = lineNo(line);\n        if (n == null) { return null }\n      }\n      return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n              textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n              widgets: line.widgets}\n    },\n\n    addLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n        var prop = where == \"text\" ? \"textClass\"\n                 : where == \"background\" ? \"bgClass\"\n                 : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n        if (!line[prop]) { line[prop] = cls; }\n        else if (classTest(cls).test(line[prop])) { return false }\n        else { line[prop] += \" \" + cls; }\n        return true\n      })\n    }),\n    removeLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n        var prop = where == \"text\" ? \"textClass\"\n                 : where == \"background\" ? \"bgClass\"\n                 : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n        var cur = line[prop];\n        if (!cur) { return false }\n        else if (cls == null) { line[prop] = null; }\n        else {\n          var found = cur.match(classTest(cls));\n          if (!found) { return false }\n          var end = found.index + found[0].length;\n          line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n        }\n        return true\n      })\n    }),\n\n    addLineWidget: docMethodOp(function(handle, node, options) {\n      return addLineWidget(this, handle, node, options)\n    }),\n    removeLineWidget: function(widget) { widget.clear(); },\n\n    markText: function(from, to, options) {\n      return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n    },\n    setBookmark: function(pos, options) {\n      var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n                      insertLeft: options && options.insertLeft,\n                      clearWhenEmpty: false, shared: options && options.shared,\n                      handleMouseEvents: options && options.handleMouseEvents};\n      pos = clipPos(this, pos);\n      return markText(this, pos, pos, realOpts, \"bookmark\")\n    },\n    findMarksAt: function(pos) {\n      pos = clipPos(this, pos);\n      var markers = [], spans = getLine(this, pos.line).markedSpans;\n      if (spans) { for (var i = 0; i < spans.length; ++i) {\n        var span = spans[i];\n        if ((span.from == null || span.from <= pos.ch) &&\n            (span.to == null || span.to >= pos.ch))\n          { markers.push(span.marker.parent || span.marker); }\n      } }\n      return markers\n    },\n    findMarks: function(from, to, filter) {\n      from = clipPos(this, from); to = clipPos(this, to);\n      var found = [], lineNo = from.line;\n      this.iter(from.line, to.line + 1, function (line) {\n        var spans = line.markedSpans;\n        if (spans) { for (var i = 0; i < spans.length; i++) {\n          var span = spans[i];\n          if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||\n                span.from == null && lineNo != from.line ||\n                span.from != null && lineNo == to.line && span.from >= to.ch) &&\n              (!filter || filter(span.marker)))\n            { found.push(span.marker.parent || span.marker); }\n        } }\n        ++lineNo;\n      });\n      return found\n    },\n    getAllMarks: function() {\n      var markers = [];\n      this.iter(function (line) {\n        var sps = line.markedSpans;\n        if (sps) { for (var i = 0; i < sps.length; ++i)\n          { if (sps[i].from != null) { markers.push(sps[i].marker); } } }\n      });\n      return markers\n    },\n\n    posFromIndex: function(off) {\n      var ch, lineNo = this.first, sepSize = this.lineSeparator().length;\n      this.iter(function (line) {\n        var sz = line.text.length + sepSize;\n        if (sz > off) { ch = off; return true }\n        off -= sz;\n        ++lineNo;\n      });\n      return clipPos(this, Pos(lineNo, ch))\n    },\n    indexFromPos: function (coords) {\n      coords = clipPos(this, coords);\n      var index = coords.ch;\n      if (coords.line < this.first || coords.ch < 0) { return 0 }\n      var sepSize = this.lineSeparator().length;\n      this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value\n        index += line.text.length + sepSize;\n      });\n      return index\n    },\n\n    copy: function(copyHistory) {\n      var doc = new Doc(getLines(this, this.first, this.first + this.size),\n                        this.modeOption, this.first, this.lineSep, this.direction);\n      doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n      doc.sel = this.sel;\n      doc.extend = false;\n      if (copyHistory) {\n        doc.history.undoDepth = this.history.undoDepth;\n        doc.setHistory(this.getHistory());\n      }\n      return doc\n    },\n\n    linkedDoc: function(options) {\n      if (!options) { options = {}; }\n      var from = this.first, to = this.first + this.size;\n      if (options.from != null && options.from > from) { from = options.from; }\n      if (options.to != null && options.to < to) { to = options.to; }\n      var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n      if (options.sharedHist) { copy.history = this.history\n      ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n      copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n      copySharedMarkers(copy, findSharedMarkers(this));\n      return copy\n    },\n    unlinkDoc: function(other) {\n      if (other instanceof CodeMirror) { other = other.doc; }\n      if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {\n        var link = this.linked[i];\n        if (link.doc != other) { continue }\n        this.linked.splice(i, 1);\n        other.unlinkDoc(this);\n        detachSharedMarkers(findSharedMarkers(this));\n        break\n      } }\n      // If the histories were shared, split them again\n      if (other.history == this.history) {\n        var splitIds = [other.id];\n        linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);\n        other.history = new History(null);\n        other.history.done = copyHistoryArray(this.history.done, splitIds);\n        other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n      }\n    },\n    iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n    getMode: function() {return this.mode},\n    getEditor: function() {return this.cm},\n\n    splitLines: function(str) {\n      if (this.lineSep) { return str.split(this.lineSep) }\n      return splitLinesAuto(str)\n    },\n    lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n    setDirection: docMethodOp(function (dir) {\n      if (dir != \"rtl\") { dir = \"ltr\"; }\n      if (dir == this.direction) { return }\n      this.direction = dir;\n      this.iter(function (line) { return line.order = null; });\n      if (this.cm) { directionChanged(this.cm); }\n    })\n  });\n\n  // Public alias.\n  Doc.prototype.eachLine = Doc.prototype.iter;\n\n  // Kludge to work around strange IE behavior where it'll sometimes\n  // re-fire a series of drag-related events right after the drop (#1551)\n  var lastDrop = 0;\n\n  function onDrop(e) {\n    var cm = this;\n    clearDragCursor(cm);\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n      { return }\n    e_preventDefault(e);\n    if (ie) { lastDrop = +new Date; }\n    var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n    if (!pos || cm.isReadOnly()) { return }\n    // Might be a file drop, in which case we simply extract the text\n    // and insert it.\n    if (files && files.length && window.FileReader && window.File) {\n      var n = files.length, text = Array(n), read = 0;\n      var markAsReadAndPasteIfAllFilesAreRead = function () {\n        if (++read == n) {\n          operation(cm, function () {\n            pos = clipPos(cm.doc, pos);\n            var change = {from: pos, to: pos,\n                          text: cm.doc.splitLines(\n                              text.filter(function (t) { return t != null; }).join(cm.doc.lineSeparator())),\n                          origin: \"paste\"};\n            makeChange(cm.doc, change);\n            setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change))));\n          })();\n        }\n      };\n      var readTextFromFile = function (file, i) {\n        if (cm.options.allowDropFileTypes &&\n            indexOf(cm.options.allowDropFileTypes, file.type) == -1) {\n          markAsReadAndPasteIfAllFilesAreRead();\n          return\n        }\n        var reader = new FileReader;\n        reader.onerror = function () { return markAsReadAndPasteIfAllFilesAreRead(); };\n        reader.onload = function () {\n          var content = reader.result;\n          if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) {\n            markAsReadAndPasteIfAllFilesAreRead();\n            return\n          }\n          text[i] = content;\n          markAsReadAndPasteIfAllFilesAreRead();\n        };\n        reader.readAsText(file);\n      };\n      for (var i = 0; i < files.length; i++) { readTextFromFile(files[i], i); }\n    } else { // Normal drop\n      // Don't do a replace if the drop happened inside of the selected text.\n      if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n        cm.state.draggingText(e);\n        // Ensure the editor is re-focused\n        setTimeout(function () { return cm.display.input.focus(); }, 20);\n        return\n      }\n      try {\n        var text$1 = e.dataTransfer.getData(\"Text\");\n        if (text$1) {\n          var selected;\n          if (cm.state.draggingText && !cm.state.draggingText.copy)\n            { selected = cm.listSelections(); }\n          setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n          if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)\n            { replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\"); } }\n          cm.replaceSelection(text$1, \"around\", \"paste\");\n          cm.display.input.focus();\n        }\n      }\n      catch(e$1){}\n    }\n  }\n\n  function onDragStart(cm, e) {\n    if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }\n\n    e.dataTransfer.setData(\"Text\", cm.getSelection());\n    e.dataTransfer.effectAllowed = \"copyMove\";\n\n    // Use dummy image instead of default browsers image.\n    // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n    if (e.dataTransfer.setDragImage && !safari) {\n      var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n      img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n      if (presto) {\n        img.width = img.height = 1;\n        cm.display.wrapper.appendChild(img);\n        // Force a relayout, or Opera won't use our image for some obscure reason\n        img._top = img.offsetTop;\n      }\n      e.dataTransfer.setDragImage(img, 0, 0);\n      if (presto) { img.parentNode.removeChild(img); }\n    }\n  }\n\n  function onDragOver(cm, e) {\n    var pos = posFromMouse(cm, e);\n    if (!pos) { return }\n    var frag = document.createDocumentFragment();\n    drawSelectionCursor(cm, pos, frag);\n    if (!cm.display.dragCursor) {\n      cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n      cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n    }\n    removeChildrenAndAdd(cm.display.dragCursor, frag);\n  }\n\n  function clearDragCursor(cm) {\n    if (cm.display.dragCursor) {\n      cm.display.lineSpace.removeChild(cm.display.dragCursor);\n      cm.display.dragCursor = null;\n    }\n  }\n\n  // These must be handled carefully, because naively registering a\n  // handler for each editor will cause the editors to never be\n  // garbage collected.\n\n  function forEachCodeMirror(f) {\n    if (!document.getElementsByClassName) { return }\n    var byClass = document.getElementsByClassName(\"CodeMirror\"), editors = [];\n    for (var i = 0; i < byClass.length; i++) {\n      var cm = byClass[i].CodeMirror;\n      if (cm) { editors.push(cm); }\n    }\n    if (editors.length) { editors[0].operation(function () {\n      for (var i = 0; i < editors.length; i++) { f(editors[i]); }\n    }); }\n  }\n\n  var globalsRegistered = false;\n  function ensureGlobalHandlers() {\n    if (globalsRegistered) { return }\n    registerGlobalHandlers();\n    globalsRegistered = true;\n  }\n  function registerGlobalHandlers() {\n    // When the window resizes, we need to refresh active editors.\n    var resizeTimer;\n    on(window, \"resize\", function () {\n      if (resizeTimer == null) { resizeTimer = setTimeout(function () {\n        resizeTimer = null;\n        forEachCodeMirror(onResize);\n      }, 100); }\n    });\n    // When the window loses focus, we want to show the editor as blurred\n    on(window, \"blur\", function () { return forEachCodeMirror(onBlur); });\n  }\n  // Called when the window resizes\n  function onResize(cm) {\n    var d = cm.display;\n    // Might be a text scaling operation, clear size caches.\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n    d.scrollbarsClipped = false;\n    cm.setSize();\n  }\n\n  var keyNames = {\n    3: \"Pause\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n    19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n    36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n    46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n    106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 145: \"ScrollLock\",\n    173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n    221: \"]\", 222: \"'\", 224: \"Mod\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n    63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n  };\n\n  // Number keys\n  for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }\n  // Alphabetic keys\n  for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }\n  // Function keys\n  for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2; }\n\n  var keyMap = {};\n\n  keyMap.basic = {\n    \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n    \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n    \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n    \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n    \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n    \"Esc\": \"singleSelection\"\n  };\n  // Note that the save and find-related commands aren't defined by\n  // default. User code or addons can define them. Unknown commands\n  // are simply ignored.\n  keyMap.pcDefault = {\n    \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n    \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n    \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n    \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n    \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n    \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n    \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n    \"fallthrough\": \"basic\"\n  };\n  // Very basic readline/emacs-style bindings, which are standard on Mac.\n  keyMap.emacsy = {\n    \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n    \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n    \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\", \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\",\n    \"Alt-D\": \"delWordAfter\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\",\n    \"Ctrl-O\": \"openLine\"\n  };\n  keyMap.macDefault = {\n    \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n    \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n    \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n    \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n    \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n    \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n    \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n    \"fallthrough\": [\"basic\", \"emacsy\"]\n  };\n  keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n  // KEYMAP DISPATCH\n\n  function normalizeKeyName(name) {\n    var parts = name.split(/-(?!$)/);\n    name = parts[parts.length - 1];\n    var alt, ctrl, shift, cmd;\n    for (var i = 0; i < parts.length - 1; i++) {\n      var mod = parts[i];\n      if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }\n      else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n      else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n      else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n      else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n    }\n    if (alt) { name = \"Alt-\" + name; }\n    if (ctrl) { name = \"Ctrl-\" + name; }\n    if (cmd) { name = \"Cmd-\" + name; }\n    if (shift) { name = \"Shift-\" + name; }\n    return name\n  }\n\n  // This is a kludge to keep keymaps mostly working as raw objects\n  // (backwards compatibility) while at the same time support features\n  // like normalization and multi-stroke key bindings. It compiles a\n  // new normalized keymap, and then updates the old object to reflect\n  // this.\n  function normalizeKeyMap(keymap) {\n    var copy = {};\n    for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {\n      var value = keymap[keyname];\n      if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }\n      if (value == \"...\") { delete keymap[keyname]; continue }\n\n      var keys = map(keyname.split(\" \"), normalizeKeyName);\n      for (var i = 0; i < keys.length; i++) {\n        var val = (void 0), name = (void 0);\n        if (i == keys.length - 1) {\n          name = keys.join(\" \");\n          val = value;\n        } else {\n          name = keys.slice(0, i + 1).join(\" \");\n          val = \"...\";\n        }\n        var prev = copy[name];\n        if (!prev) { copy[name] = val; }\n        else if (prev != val) { throw new Error(\"Inconsistent bindings for \" + name) }\n      }\n      delete keymap[keyname];\n    } }\n    for (var prop in copy) { keymap[prop] = copy[prop]; }\n    return keymap\n  }\n\n  function lookupKey(key, map, handle, context) {\n    map = getKeyMap(map);\n    var found = map.call ? map.call(key, context) : map[key];\n    if (found === false) { return \"nothing\" }\n    if (found === \"...\") { return \"multi\" }\n    if (found != null && handle(found)) { return \"handled\" }\n\n    if (map.fallthrough) {\n      if (Object.prototype.toString.call(map.fallthrough) != \"[object Array]\")\n        { return lookupKey(key, map.fallthrough, handle, context) }\n      for (var i = 0; i < map.fallthrough.length; i++) {\n        var result = lookupKey(key, map.fallthrough[i], handle, context);\n        if (result) { return result }\n      }\n    }\n  }\n\n  // Modifier key presses don't count as 'real' key presses for the\n  // purpose of keymap fallthrough.\n  function isModifierKey(value) {\n    var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n    return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\"\n  }\n\n  function addModifierNames(name, event, noShift) {\n    var base = name;\n    if (event.altKey && base != \"Alt\") { name = \"Alt-\" + name; }\n    if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") { name = \"Ctrl-\" + name; }\n    if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Mod\") { name = \"Cmd-\" + name; }\n    if (!noShift && event.shiftKey && base != \"Shift\") { name = \"Shift-\" + name; }\n    return name\n  }\n\n  // Look up the name of a key as indicated by an event object.\n  function keyName(event, noShift) {\n    if (presto && event.keyCode == 34 && event[\"char\"]) { return false }\n    var name = keyNames[event.keyCode];\n    if (name == null || event.altGraphKey) { return false }\n    // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n    // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n    if (event.keyCode == 3 && event.code) { name = event.code; }\n    return addModifierNames(name, event, noShift)\n  }\n\n  function getKeyMap(val) {\n    return typeof val == \"string\" ? keyMap[val] : val\n  }\n\n  // Helper for deleting text near the selection(s), used to implement\n  // backspace, delete, and similar functionality.\n  function deleteNearSelection(cm, compute) {\n    var ranges = cm.doc.sel.ranges, kill = [];\n    // Build up a set of ranges to kill first, merging overlapping\n    // ranges.\n    for (var i = 0; i < ranges.length; i++) {\n      var toKill = compute(ranges[i]);\n      while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n        var replaced = kill.pop();\n        if (cmp(replaced.from, toKill.from) < 0) {\n          toKill.from = replaced.from;\n          break\n        }\n      }\n      kill.push(toKill);\n    }\n    // Next, remove those actual ranges.\n    runInOp(cm, function () {\n      for (var i = kill.length - 1; i >= 0; i--)\n        { replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\"); }\n      ensureCursorVisible(cm);\n    });\n  }\n\n  function moveCharLogically(line, ch, dir) {\n    var target = skipExtendingChars(line.text, ch + dir, dir);\n    return target < 0 || target > line.text.length ? null : target\n  }\n\n  function moveLogically(line, start, dir) {\n    var ch = moveCharLogically(line, start.ch, dir);\n    return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\")\n  }\n\n  function endOfLine(visually, cm, lineObj, lineNo, dir) {\n    if (visually) {\n      if (cm.doc.direction == \"rtl\") { dir = -dir; }\n      var order = getOrder(lineObj, cm.doc.direction);\n      if (order) {\n        var part = dir < 0 ? lst(order) : order[0];\n        var moveInStorageOrder = (dir < 0) == (part.level == 1);\n        var sticky = moveInStorageOrder ? \"after\" : \"before\";\n        var ch;\n        // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n        // it could be that the last bidi part is not on the last visual line,\n        // since visual lines contain content order-consecutive chunks.\n        // Thus, in rtl, we are looking for the first (content-order) character\n        // in the rtl chunk that is on the last line (that is, the same line\n        // as the last (content-order) character).\n        if (part.level > 0 || cm.doc.direction == \"rtl\") {\n          var prep = prepareMeasureForLine(cm, lineObj);\n          ch = dir < 0 ? lineObj.text.length - 1 : 0;\n          var targetTop = measureCharPrepared(cm, prep, ch).top;\n          ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);\n          if (sticky == \"before\") { ch = moveCharLogically(lineObj, ch, 1); }\n        } else { ch = dir < 0 ? part.to : part.from; }\n        return new Pos(lineNo, ch, sticky)\n      }\n    }\n    return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\")\n  }\n\n  function moveVisually(cm, line, start, dir) {\n    var bidi = getOrder(line, cm.doc.direction);\n    if (!bidi) { return moveLogically(line, start, dir) }\n    if (start.ch >= line.text.length) {\n      start.ch = line.text.length;\n      start.sticky = \"before\";\n    } else if (start.ch <= 0) {\n      start.ch = 0;\n      start.sticky = \"after\";\n    }\n    var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];\n    if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n      // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n      // nothing interesting happens.\n      return moveLogically(line, start, dir)\n    }\n\n    var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };\n    var prep;\n    var getWrappedLineExtent = function (ch) {\n      if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }\n      prep = prep || prepareMeasureForLine(cm, line);\n      return wrappedLineExtentChar(cm, line, prep, ch)\n    };\n    var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n    if (cm.doc.direction == \"rtl\" || part.level == 1) {\n      var moveInStorageOrder = (part.level == 1) == (dir < 0);\n      var ch = mv(start, moveInStorageOrder ? 1 : -1);\n      if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n        // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n        var sticky = moveInStorageOrder ? \"before\" : \"after\";\n        return new Pos(start.line, ch, sticky)\n      }\n    }\n\n    // Case 3: Could not move within this bidi part in this visual line, so leave\n    // the current bidi part\n\n    var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n      var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder\n        ? new Pos(start.line, mv(ch, 1), \"before\")\n        : new Pos(start.line, ch, \"after\"); };\n\n      for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n        var part = bidi[partPos];\n        var moveInStorageOrder = (dir > 0) == (part.level != 1);\n        var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n        if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }\n        ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n        if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }\n      }\n    };\n\n    // Case 3a: Look for other bidi parts on the same visual line\n    var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n    if (res) { return res }\n\n    // Case 3b: Look for other bidi parts on the next visual line\n    var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n    if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n      res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n      if (res) { return res }\n    }\n\n    // Case 4: Nowhere to move\n    return null\n  }\n\n  // Commands are parameter-less actions that can be performed on an\n  // editor, mostly used for keybindings.\n  var commands = {\n    selectAll: selectAll,\n    singleSelection: function (cm) { return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll); },\n    killLine: function (cm) { return deleteNearSelection(cm, function (range) {\n      if (range.empty()) {\n        var len = getLine(cm.doc, range.head.line).text.length;\n        if (range.head.ch == len && range.head.line < cm.lastLine())\n          { return {from: range.head, to: Pos(range.head.line + 1, 0)} }\n        else\n          { return {from: range.head, to: Pos(range.head.line, len)} }\n      } else {\n        return {from: range.from(), to: range.to()}\n      }\n    }); },\n    deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n      from: Pos(range.from().line, 0),\n      to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n    }); }); },\n    delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n      from: Pos(range.from().line, 0), to: range.from()\n    }); }); },\n    delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {\n      var top = cm.charCoords(range.head, \"div\").top + 5;\n      var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n      return {from: leftPos, to: range.from()}\n    }); },\n    delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {\n      var top = cm.charCoords(range.head, \"div\").top + 5;\n      var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n      return {from: range.from(), to: rightPos }\n    }); },\n    undo: function (cm) { return cm.undo(); },\n    redo: function (cm) { return cm.redo(); },\n    undoSelection: function (cm) { return cm.undoSelection(); },\n    redoSelection: function (cm) { return cm.redoSelection(); },\n    goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },\n    goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },\n    goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },\n      {origin: \"+move\", bias: 1}\n    ); },\n    goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },\n      {origin: \"+move\", bias: 1}\n    ); },\n    goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },\n      {origin: \"+move\", bias: -1}\n    ); },\n    goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n    }, sel_move); },\n    goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      return cm.coordsChar({left: 0, top: top}, \"div\")\n    }, sel_move); },\n    goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n      if (pos.ch < cm.getLine(pos.line).search(/\\S/)) { return lineStartSmart(cm, range.head) }\n      return pos\n    }, sel_move); },\n    goLineUp: function (cm) { return cm.moveV(-1, \"line\"); },\n    goLineDown: function (cm) { return cm.moveV(1, \"line\"); },\n    goPageUp: function (cm) { return cm.moveV(-1, \"page\"); },\n    goPageDown: function (cm) { return cm.moveV(1, \"page\"); },\n    goCharLeft: function (cm) { return cm.moveH(-1, \"char\"); },\n    goCharRight: function (cm) { return cm.moveH(1, \"char\"); },\n    goColumnLeft: function (cm) { return cm.moveH(-1, \"column\"); },\n    goColumnRight: function (cm) { return cm.moveH(1, \"column\"); },\n    goWordLeft: function (cm) { return cm.moveH(-1, \"word\"); },\n    goGroupRight: function (cm) { return cm.moveH(1, \"group\"); },\n    goGroupLeft: function (cm) { return cm.moveH(-1, \"group\"); },\n    goWordRight: function (cm) { return cm.moveH(1, \"word\"); },\n    delCharBefore: function (cm) { return cm.deleteH(-1, \"codepoint\"); },\n    delCharAfter: function (cm) { return cm.deleteH(1, \"char\"); },\n    delWordBefore: function (cm) { return cm.deleteH(-1, \"word\"); },\n    delWordAfter: function (cm) { return cm.deleteH(1, \"word\"); },\n    delGroupBefore: function (cm) { return cm.deleteH(-1, \"group\"); },\n    delGroupAfter: function (cm) { return cm.deleteH(1, \"group\"); },\n    indentAuto: function (cm) { return cm.indentSelection(\"smart\"); },\n    indentMore: function (cm) { return cm.indentSelection(\"add\"); },\n    indentLess: function (cm) { return cm.indentSelection(\"subtract\"); },\n    insertTab: function (cm) { return cm.replaceSelection(\"\\t\"); },\n    insertSoftTab: function (cm) {\n      var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n      for (var i = 0; i < ranges.length; i++) {\n        var pos = ranges[i].from();\n        var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n        spaces.push(spaceStr(tabSize - col % tabSize));\n      }\n      cm.replaceSelections(spaces);\n    },\n    defaultTab: function (cm) {\n      if (cm.somethingSelected()) { cm.indentSelection(\"add\"); }\n      else { cm.execCommand(\"insertTab\"); }\n    },\n    // Swap the two chars left and right of each selection's head.\n    // Move cursor behind the two swapped characters afterwards.\n    //\n    // Doesn't consider line feeds a character.\n    // Doesn't scan more than one line above to find a character.\n    // Doesn't do anything on an empty line.\n    // Doesn't do anything with non-empty selections.\n    transposeChars: function (cm) { return runInOp(cm, function () {\n      var ranges = cm.listSelections(), newSel = [];\n      for (var i = 0; i < ranges.length; i++) {\n        if (!ranges[i].empty()) { continue }\n        var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n        if (line) {\n          if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }\n          if (cur.ch > 0) {\n            cur = new Pos(cur.line, cur.ch + 1);\n            cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n                            Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n          } else if (cur.line > cm.doc.first) {\n            var prev = getLine(cm.doc, cur.line - 1).text;\n            if (prev) {\n              cur = new Pos(cur.line, 1);\n              cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n                              prev.charAt(prev.length - 1),\n                              Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n            }\n          }\n        }\n        newSel.push(new Range(cur, cur));\n      }\n      cm.setSelections(newSel);\n    }); },\n    newlineAndIndent: function (cm) { return runInOp(cm, function () {\n      var sels = cm.listSelections();\n      for (var i = sels.length - 1; i >= 0; i--)\n        { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\"); }\n      sels = cm.listSelections();\n      for (var i$1 = 0; i$1 < sels.length; i$1++)\n        { cm.indentLine(sels[i$1].from().line, null, true); }\n      ensureCursorVisible(cm);\n    }); },\n    openLine: function (cm) { return cm.replaceSelection(\"\\n\", \"start\"); },\n    toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }\n  };\n\n\n  function lineStart(cm, lineN) {\n    var line = getLine(cm.doc, lineN);\n    var visual = visualLine(line);\n    if (visual != line) { lineN = lineNo(visual); }\n    return endOfLine(true, cm, visual, lineN, 1)\n  }\n  function lineEnd(cm, lineN) {\n    var line = getLine(cm.doc, lineN);\n    var visual = visualLineEnd(line);\n    if (visual != line) { lineN = lineNo(visual); }\n    return endOfLine(true, cm, line, lineN, -1)\n  }\n  function lineStartSmart(cm, pos) {\n    var start = lineStart(cm, pos.line);\n    var line = getLine(cm.doc, start.line);\n    var order = getOrder(line, cm.doc.direction);\n    if (!order || order[0].level == 0) {\n      var firstNonWS = Math.max(start.ch, line.text.search(/\\S/));\n      var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n      return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)\n    }\n    return start\n  }\n\n  // Run a handler that was bound to a key.\n  function doHandleBinding(cm, bound, dropShift) {\n    if (typeof bound == \"string\") {\n      bound = commands[bound];\n      if (!bound) { return false }\n    }\n    // Ensure previous input has been read, so that the handler sees a\n    // consistent view of the document\n    cm.display.input.ensurePolled();\n    var prevShift = cm.display.shift, done = false;\n    try {\n      if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n      if (dropShift) { cm.display.shift = false; }\n      done = bound(cm) != Pass;\n    } finally {\n      cm.display.shift = prevShift;\n      cm.state.suppressEdits = false;\n    }\n    return done\n  }\n\n  function lookupKeyForEditor(cm, name, handle) {\n    for (var i = 0; i < cm.state.keyMaps.length; i++) {\n      var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n      if (result) { return result }\n    }\n    return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n      || lookupKey(name, cm.options.keyMap, handle, cm)\n  }\n\n  // Note that, despite the name, this function is also used to check\n  // for bound mouse clicks.\n\n  var stopSeq = new Delayed;\n\n  function dispatchKey(cm, name, e, handle) {\n    var seq = cm.state.keySeq;\n    if (seq) {\n      if (isModifierKey(name)) { return \"handled\" }\n      if (/\\'$/.test(name))\n        { cm.state.keySeq = null; }\n      else\n        { stopSeq.set(50, function () {\n          if (cm.state.keySeq == seq) {\n            cm.state.keySeq = null;\n            cm.display.input.reset();\n          }\n        }); }\n      if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) { return true }\n    }\n    return dispatchKeyInner(cm, name, e, handle)\n  }\n\n  function dispatchKeyInner(cm, name, e, handle) {\n    var result = lookupKeyForEditor(cm, name, handle);\n\n    if (result == \"multi\")\n      { cm.state.keySeq = name; }\n    if (result == \"handled\")\n      { signalLater(cm, \"keyHandled\", cm, name, e); }\n\n    if (result == \"handled\" || result == \"multi\") {\n      e_preventDefault(e);\n      restartBlink(cm);\n    }\n\n    return !!result\n  }\n\n  // Handle a key from the keydown event.\n  function handleKeyBinding(cm, e) {\n    var name = keyName(e, true);\n    if (!name) { return false }\n\n    if (e.shiftKey && !cm.state.keySeq) {\n      // First try to resolve full name (including 'Shift-'). Failing\n      // that, see if there is a cursor-motion command (starting with\n      // 'go') bound to the keyname without 'Shift-'.\n      return dispatchKey(cm, \"Shift-\" + name, e, function (b) { return doHandleBinding(cm, b, true); })\n          || dispatchKey(cm, name, e, function (b) {\n               if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n                 { return doHandleBinding(cm, b) }\n             })\n    } else {\n      return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })\n    }\n  }\n\n  // Handle a key from the keypress event\n  function handleCharBinding(cm, e, ch) {\n    return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) { return doHandleBinding(cm, b, true); })\n  }\n\n  var lastStoppedKey = null;\n  function onKeyDown(e) {\n    var cm = this;\n    if (e.target && e.target != cm.display.input.getField()) { return }\n    cm.curOp.focus = activeElt();\n    if (signalDOMEvent(cm, e)) { return }\n    // IE does strange things with escape.\n    if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }\n    var code = e.keyCode;\n    cm.display.shift = code == 16 || e.shiftKey;\n    var handled = handleKeyBinding(cm, e);\n    if (presto) {\n      lastStoppedKey = handled ? code : null;\n      // Opera has no cut event... we try to at least catch the key combo\n      if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n        { cm.replaceSelection(\"\", null, \"cut\"); }\n    }\n    if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand)\n      { document.execCommand(\"cut\"); }\n\n    // Turn mouse into crosshair when Alt is held on Mac.\n    if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n      { showCrossHair(cm); }\n  }\n\n  function showCrossHair(cm) {\n    var lineDiv = cm.display.lineDiv;\n    addClass(lineDiv, \"CodeMirror-crosshair\");\n\n    function up(e) {\n      if (e.keyCode == 18 || !e.altKey) {\n        rmClass(lineDiv, \"CodeMirror-crosshair\");\n        off(document, \"keyup\", up);\n        off(document, \"mouseover\", up);\n      }\n    }\n    on(document, \"keyup\", up);\n    on(document, \"mouseover\", up);\n  }\n\n  function onKeyUp(e) {\n    if (e.keyCode == 16) { this.doc.sel.shift = false; }\n    signalDOMEvent(this, e);\n  }\n\n  function onKeyPress(e) {\n    var cm = this;\n    if (e.target && e.target != cm.display.input.getField()) { return }\n    if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }\n    var keyCode = e.keyCode, charCode = e.charCode;\n    if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n    if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }\n    var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n    // Some browsers fire keypress events for backspace\n    if (ch == \"\\x08\") { return }\n    if (handleCharBinding(cm, e, ch)) { return }\n    cm.display.input.onKeyPress(e);\n  }\n\n  var DOUBLECLICK_DELAY = 400;\n\n  var PastClick = function(time, pos, button) {\n    this.time = time;\n    this.pos = pos;\n    this.button = button;\n  };\n\n  PastClick.prototype.compare = function (time, pos, button) {\n    return this.time + DOUBLECLICK_DELAY > time &&\n      cmp(pos, this.pos) == 0 && button == this.button\n  };\n\n  var lastClick, lastDoubleClick;\n  function clickRepeat(pos, button) {\n    var now = +new Date;\n    if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n      lastClick = lastDoubleClick = null;\n      return \"triple\"\n    } else if (lastClick && lastClick.compare(now, pos, button)) {\n      lastDoubleClick = new PastClick(now, pos, button);\n      lastClick = null;\n      return \"double\"\n    } else {\n      lastClick = new PastClick(now, pos, button);\n      lastDoubleClick = null;\n      return \"single\"\n    }\n  }\n\n  // A mouse down can be a single click, double click, triple click,\n  // start of selection drag, start of text drag, new cursor\n  // (ctrl-click), rectangle drag (alt-drag), or xwin\n  // middle-click-paste. Or it might be a click on something we should\n  // not interfere with, such as a scrollbar or widget.\n  function onMouseDown(e) {\n    var cm = this, display = cm.display;\n    if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }\n    display.input.ensurePolled();\n    display.shift = e.shiftKey;\n\n    if (eventInWidget(display, e)) {\n      if (!webkit) {\n        // Briefly turn off draggability, to allow widgets to do\n        // normal dragging things.\n        display.scroller.draggable = false;\n        setTimeout(function () { return display.scroller.draggable = true; }, 100);\n      }\n      return\n    }\n    if (clickInGutter(cm, e)) { return }\n    var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : \"single\";\n    window.focus();\n\n    // #3261: make sure, that we're not starting a second selection\n    if (button == 1 && cm.state.selectingText)\n      { cm.state.selectingText(e); }\n\n    if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }\n\n    if (button == 1) {\n      if (pos) { leftButtonDown(cm, pos, repeat, e); }\n      else if (e_target(e) == display.scroller) { e_preventDefault(e); }\n    } else if (button == 2) {\n      if (pos) { extendSelection(cm.doc, pos); }\n      setTimeout(function () { return display.input.focus(); }, 20);\n    } else if (button == 3) {\n      if (captureRightClick) { cm.display.input.onContextMenu(e); }\n      else { delayBlurEvent(cm); }\n    }\n  }\n\n  function handleMappedButton(cm, button, pos, repeat, event) {\n    var name = \"Click\";\n    if (repeat == \"double\") { name = \"Double\" + name; }\n    else if (repeat == \"triple\") { name = \"Triple\" + name; }\n    name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n\n    return dispatchKey(cm,  addModifierNames(name, event), event, function (bound) {\n      if (typeof bound == \"string\") { bound = commands[bound]; }\n      if (!bound) { return false }\n      var done = false;\n      try {\n        if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n        done = bound(cm, pos) != Pass;\n      } finally {\n        cm.state.suppressEdits = false;\n      }\n      return done\n    })\n  }\n\n  function configureMouse(cm, repeat, event) {\n    var option = cm.getOption(\"configureMouse\");\n    var value = option ? option(cm, repeat, event) : {};\n    if (value.unit == null) {\n      var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n      value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n    }\n    if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }\n    if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }\n    if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }\n    return value\n  }\n\n  function leftButtonDown(cm, pos, repeat, event) {\n    if (ie) { setTimeout(bind(ensureFocus, cm), 0); }\n    else { cm.curOp.focus = activeElt(); }\n\n    var behavior = configureMouse(cm, repeat, event);\n\n    var sel = cm.doc.sel, contained;\n    if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n        repeat == \"single\" && (contained = sel.contains(pos)) > -1 &&\n        (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&\n        (cmp(contained.to(), pos) > 0 || pos.xRel < 0))\n      { leftButtonStartDrag(cm, event, pos, behavior); }\n    else\n      { leftButtonSelect(cm, event, pos, behavior); }\n  }\n\n  // Start a text drag. When it ends, see if any dragging actually\n  // happen, and treat as a click if it didn't.\n  function leftButtonStartDrag(cm, event, pos, behavior) {\n    var display = cm.display, moved = false;\n    var dragEnd = operation(cm, function (e) {\n      if (webkit) { display.scroller.draggable = false; }\n      cm.state.draggingText = false;\n      if (cm.state.delayingBlurEvent) {\n        if (cm.hasFocus()) { cm.state.delayingBlurEvent = false; }\n        else { delayBlurEvent(cm); }\n      }\n      off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n      off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n      off(display.scroller, \"dragstart\", dragStart);\n      off(display.scroller, \"drop\", dragEnd);\n      if (!moved) {\n        e_preventDefault(e);\n        if (!behavior.addNew)\n          { extendSelection(cm.doc, pos, null, null, behavior.extend); }\n        // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n        if ((webkit && !safari) || ie && ie_version == 9)\n          { setTimeout(function () {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus();}, 20); }\n        else\n          { display.input.focus(); }\n      }\n    });\n    var mouseMove = function(e2) {\n      moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n    };\n    var dragStart = function () { return moved = true; };\n    // Let the drag handler handle this.\n    if (webkit) { display.scroller.draggable = true; }\n    cm.state.draggingText = dragEnd;\n    dragEnd.copy = !behavior.moveOnDrag;\n    on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n    on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n    on(display.scroller, \"dragstart\", dragStart);\n    on(display.scroller, \"drop\", dragEnd);\n\n    cm.state.delayingBlurEvent = true;\n    setTimeout(function () { return display.input.focus(); }, 20);\n    // IE's approach to draggable\n    if (display.scroller.dragDrop) { display.scroller.dragDrop(); }\n  }\n\n  function rangeForUnit(cm, pos, unit) {\n    if (unit == \"char\") { return new Range(pos, pos) }\n    if (unit == \"word\") { return cm.findWordAt(pos) }\n    if (unit == \"line\") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }\n    var result = unit(cm, pos);\n    return new Range(result.from, result.to)\n  }\n\n  // Normal selection, as opposed to text dragging.\n  function leftButtonSelect(cm, event, start, behavior) {\n    if (ie) { delayBlurEvent(cm); }\n    var display = cm.display, doc = cm.doc;\n    e_preventDefault(event);\n\n    var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;\n    if (behavior.addNew && !behavior.extend) {\n      ourIndex = doc.sel.contains(start);\n      if (ourIndex > -1)\n        { ourRange = ranges[ourIndex]; }\n      else\n        { ourRange = new Range(start, start); }\n    } else {\n      ourRange = doc.sel.primary();\n      ourIndex = doc.sel.primIndex;\n    }\n\n    if (behavior.unit == \"rectangle\") {\n      if (!behavior.addNew) { ourRange = new Range(start, start); }\n      start = posFromMouse(cm, event, true, true);\n      ourIndex = -1;\n    } else {\n      var range = rangeForUnit(cm, start, behavior.unit);\n      if (behavior.extend)\n        { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); }\n      else\n        { ourRange = range; }\n    }\n\n    if (!behavior.addNew) {\n      ourIndex = 0;\n      setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n      startSel = doc.sel;\n    } else if (ourIndex == -1) {\n      ourIndex = ranges.length;\n      setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),\n                   {scroll: false, origin: \"*mouse\"});\n    } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n      setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n                   {scroll: false, origin: \"*mouse\"});\n      startSel = doc.sel;\n    } else {\n      replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n    }\n\n    var lastPos = start;\n    function extendTo(pos) {\n      if (cmp(lastPos, pos) == 0) { return }\n      lastPos = pos;\n\n      if (behavior.unit == \"rectangle\") {\n        var ranges = [], tabSize = cm.options.tabSize;\n        var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n        var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n        var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n        for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n             line <= end; line++) {\n          var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n          if (left == right)\n            { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }\n          else if (text.length > leftPos)\n            { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }\n        }\n        if (!ranges.length) { ranges.push(new Range(start, start)); }\n        setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n                     {origin: \"*mouse\", scroll: false});\n        cm.scrollIntoView(pos);\n      } else {\n        var oldRange = ourRange;\n        var range = rangeForUnit(cm, pos, behavior.unit);\n        var anchor = oldRange.anchor, head;\n        if (cmp(range.anchor, anchor) > 0) {\n          head = range.head;\n          anchor = minPos(oldRange.from(), range.anchor);\n        } else {\n          head = range.anchor;\n          anchor = maxPos(oldRange.to(), range.head);\n        }\n        var ranges$1 = startSel.ranges.slice(0);\n        ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));\n        setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\n      }\n    }\n\n    var editorSize = display.wrapper.getBoundingClientRect();\n    // Used to ensure timeout re-tries don't fire when another extend\n    // happened in the meantime (clearTimeout isn't reliable -- at\n    // least on Chrome, the timeouts still happen even when cleared,\n    // if the clear happens after their scheduled firing time).\n    var counter = 0;\n\n    function extend(e) {\n      var curCount = ++counter;\n      var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n      if (!cur) { return }\n      if (cmp(cur, lastPos) != 0) {\n        cm.curOp.focus = activeElt();\n        extendTo(cur);\n        var visible = visibleLines(display, doc);\n        if (cur.line >= visible.to || cur.line < visible.from)\n          { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }\n      } else {\n        var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n        if (outside) { setTimeout(operation(cm, function () {\n          if (counter != curCount) { return }\n          display.scroller.scrollTop += outside;\n          extend(e);\n        }), 50); }\n      }\n    }\n\n    function done(e) {\n      cm.state.selectingText = false;\n      counter = Infinity;\n      // If e is null or undefined we interpret this as someone trying\n      // to explicitly cancel the selection rather than the user\n      // letting go of the mouse button.\n      if (e) {\n        e_preventDefault(e);\n        display.input.focus();\n      }\n      off(display.wrapper.ownerDocument, \"mousemove\", move);\n      off(display.wrapper.ownerDocument, \"mouseup\", up);\n      doc.history.lastSelOrigin = null;\n    }\n\n    var move = operation(cm, function (e) {\n      if (e.buttons === 0 || !e_button(e)) { done(e); }\n      else { extend(e); }\n    });\n    var up = operation(cm, done);\n    cm.state.selectingText = up;\n    on(display.wrapper.ownerDocument, \"mousemove\", move);\n    on(display.wrapper.ownerDocument, \"mouseup\", up);\n  }\n\n  // Used when mouse-selecting to adjust the anchor to the proper side\n  // of a bidi jump depending on the visual position of the head.\n  function bidiSimplify(cm, range) {\n    var anchor = range.anchor;\n    var head = range.head;\n    var anchorLine = getLine(cm.doc, anchor.line);\n    if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range }\n    var order = getOrder(anchorLine);\n    if (!order) { return range }\n    var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];\n    if (part.from != anchor.ch && part.to != anchor.ch) { return range }\n    var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);\n    if (boundary == 0 || boundary == order.length) { return range }\n\n    // Compute the relative visual position of the head compared to the\n    // anchor (<0 is to the left, >0 to the right)\n    var leftSide;\n    if (head.line != anchor.line) {\n      leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n    } else {\n      var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n      var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n      if (headIndex == boundary - 1 || headIndex == boundary)\n        { leftSide = dir < 0; }\n      else\n        { leftSide = dir > 0; }\n    }\n\n    var usePart = order[boundary + (leftSide ? -1 : 0)];\n    var from = leftSide == (usePart.level == 1);\n    var ch = from ? usePart.from : usePart.to, sticky = from ? \"after\" : \"before\";\n    return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head)\n  }\n\n\n  // Determines whether an event happened in the gutter, and fires the\n  // handlers for the corresponding event.\n  function gutterEvent(cm, e, type, prevent) {\n    var mX, mY;\n    if (e.touches) {\n      mX = e.touches[0].clientX;\n      mY = e.touches[0].clientY;\n    } else {\n      try { mX = e.clientX; mY = e.clientY; }\n      catch(e$1) { return false }\n    }\n    if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }\n    if (prevent) { e_preventDefault(e); }\n\n    var display = cm.display;\n    var lineBox = display.lineDiv.getBoundingClientRect();\n\n    if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }\n    mY -= lineBox.top - display.viewOffset;\n\n    for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {\n      var g = display.gutters.childNodes[i];\n      if (g && g.getBoundingClientRect().right >= mX) {\n        var line = lineAtHeight(cm.doc, mY);\n        var gutter = cm.display.gutterSpecs[i];\n        signal(cm, type, cm, line, gutter.className, e);\n        return e_defaultPrevented(e)\n      }\n    }\n  }\n\n  function clickInGutter(cm, e) {\n    return gutterEvent(cm, e, \"gutterClick\", true)\n  }\n\n  // CONTEXT MENU HANDLING\n\n  // To make the context menu work, we need to briefly unhide the\n  // textarea (making it as unobtrusive as possible) to let the\n  // right-click take effect on it.\n  function onContextMenu(cm, e) {\n    if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }\n    if (signalDOMEvent(cm, e, \"contextmenu\")) { return }\n    if (!captureRightClick) { cm.display.input.onContextMenu(e); }\n  }\n\n  function contextMenuInGutter(cm, e) {\n    if (!hasHandler(cm, \"gutterContextMenu\")) { return false }\n    return gutterEvent(cm, e, \"gutterContextMenu\", false)\n  }\n\n  function themeChanged(cm) {\n    cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n      cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n    clearCaches(cm);\n  }\n\n  var Init = {toString: function(){return \"CodeMirror.Init\"}};\n\n  var defaults = {};\n  var optionHandlers = {};\n\n  function defineOptions(CodeMirror) {\n    var optionHandlers = CodeMirror.optionHandlers;\n\n    function option(name, deflt, handle, notOnInit) {\n      CodeMirror.defaults[name] = deflt;\n      if (handle) { optionHandlers[name] =\n        notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }\n    }\n\n    CodeMirror.defineOption = option;\n\n    // Passed to option handlers when there is no old value.\n    CodeMirror.Init = Init;\n\n    // These two are, on init, called from the constructor because they\n    // have to be initialized before the editor can start at all.\n    option(\"value\", \"\", function (cm, val) { return cm.setValue(val); }, true);\n    option(\"mode\", null, function (cm, val) {\n      cm.doc.modeOption = val;\n      loadMode(cm);\n    }, true);\n\n    option(\"indentUnit\", 2, loadMode, true);\n    option(\"indentWithTabs\", false);\n    option(\"smartIndent\", true);\n    option(\"tabSize\", 4, function (cm) {\n      resetModeState(cm);\n      clearCaches(cm);\n      regChange(cm);\n    }, true);\n\n    option(\"lineSeparator\", null, function (cm, val) {\n      cm.doc.lineSep = val;\n      if (!val) { return }\n      var newBreaks = [], lineNo = cm.doc.first;\n      cm.doc.iter(function (line) {\n        for (var pos = 0;;) {\n          var found = line.text.indexOf(val, pos);\n          if (found == -1) { break }\n          pos = found + val.length;\n          newBreaks.push(Pos(lineNo, found));\n        }\n        lineNo++;\n      });\n      for (var i = newBreaks.length - 1; i >= 0; i--)\n        { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }\n    });\n    option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b-\\u200c\\u200e\\u200f\\u2028\\u2029\\ufeff\\ufff9-\\ufffc]/g, function (cm, val, old) {\n      cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n      if (old != Init) { cm.refresh(); }\n    });\n    option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);\n    option(\"electricChars\", true);\n    option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n      throw new Error(\"inputStyle can not (yet) be changed in a running editor\") // FIXME\n    }, true);\n    option(\"spellcheck\", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);\n    option(\"autocorrect\", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);\n    option(\"autocapitalize\", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);\n    option(\"rtlMoveVisually\", !windows);\n    option(\"wholeLineUpdateBefore\", true);\n\n    option(\"theme\", \"default\", function (cm) {\n      themeChanged(cm);\n      updateGutters(cm);\n    }, true);\n    option(\"keyMap\", \"default\", function (cm, val, old) {\n      var next = getKeyMap(val);\n      var prev = old != Init && getKeyMap(old);\n      if (prev && prev.detach) { prev.detach(cm, next); }\n      if (next.attach) { next.attach(cm, prev || null); }\n    });\n    option(\"extraKeys\", null);\n    option(\"configureMouse\", null);\n\n    option(\"lineWrapping\", false, wrappingChanged, true);\n    option(\"gutters\", [], function (cm, val) {\n      cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);\n      updateGutters(cm);\n    }, true);\n    option(\"fixedGutter\", true, function (cm, val) {\n      cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n      cm.refresh();\n    }, true);\n    option(\"coverGutterNextToScrollbar\", false, function (cm) { return updateScrollbars(cm); }, true);\n    option(\"scrollbarStyle\", \"native\", function (cm) {\n      initScrollbars(cm);\n      updateScrollbars(cm);\n      cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n      cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n    }, true);\n    option(\"lineNumbers\", false, function (cm, val) {\n      cm.display.gutterSpecs = getGutters(cm.options.gutters, val);\n      updateGutters(cm);\n    }, true);\n    option(\"firstLineNumber\", 1, updateGutters, true);\n    option(\"lineNumberFormatter\", function (integer) { return integer; }, updateGutters, true);\n    option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n    option(\"resetSelectionOnContextMenu\", true);\n    option(\"lineWiseCopyCut\", true);\n    option(\"pasteLinesPerSelection\", true);\n    option(\"selectionsMayTouch\", false);\n\n    option(\"readOnly\", false, function (cm, val) {\n      if (val == \"nocursor\") {\n        onBlur(cm);\n        cm.display.input.blur();\n      }\n      cm.display.input.readOnlyChanged(val);\n    });\n\n    option(\"screenReaderLabel\", null, function (cm, val) {\n      val = (val === '') ? null : val;\n      cm.display.input.screenReaderLabelChanged(val);\n    });\n\n    option(\"disableInput\", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);\n    option(\"dragDrop\", true, dragDropChanged);\n    option(\"allowDropFileTypes\", null);\n\n    option(\"cursorBlinkRate\", 530);\n    option(\"cursorScrollMargin\", 0);\n    option(\"cursorHeight\", 1, updateSelection, true);\n    option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n    option(\"workTime\", 100);\n    option(\"workDelay\", 100);\n    option(\"flattenSpans\", true, resetModeState, true);\n    option(\"addModeClass\", false, resetModeState, true);\n    option(\"pollInterval\", 100);\n    option(\"undoDepth\", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });\n    option(\"historyEventDelay\", 1250);\n    option(\"viewportMargin\", 10, function (cm) { return cm.refresh(); }, true);\n    option(\"maxHighlightLength\", 10000, resetModeState, true);\n    option(\"moveInputWithCursor\", true, function (cm, val) {\n      if (!val) { cm.display.input.resetPosition(); }\n    });\n\n    option(\"tabindex\", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || \"\"; });\n    option(\"autofocus\", null);\n    option(\"direction\", \"ltr\", function (cm, val) { return cm.doc.setDirection(val); }, true);\n    option(\"phrases\", null);\n  }\n\n  function dragDropChanged(cm, value, old) {\n    var wasOn = old && old != Init;\n    if (!value != !wasOn) {\n      var funcs = cm.display.dragFunctions;\n      var toggle = value ? on : off;\n      toggle(cm.display.scroller, \"dragstart\", funcs.start);\n      toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n      toggle(cm.display.scroller, \"dragover\", funcs.over);\n      toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n      toggle(cm.display.scroller, \"drop\", funcs.drop);\n    }\n  }\n\n  function wrappingChanged(cm) {\n    if (cm.options.lineWrapping) {\n      addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      cm.display.sizer.style.minWidth = \"\";\n      cm.display.sizerWidth = null;\n    } else {\n      rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      findMaxLine(cm);\n    }\n    estimateLineHeights(cm);\n    regChange(cm);\n    clearCaches(cm);\n    setTimeout(function () { return updateScrollbars(cm); }, 100);\n  }\n\n  // A CodeMirror instance represents an editor. This is the object\n  // that user code is usually dealing with.\n\n  function CodeMirror(place, options) {\n    var this$1 = this;\n\n    if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }\n\n    this.options = options = options ? copyObj(options) : {};\n    // Determine effective options based on given values and defaults.\n    copyObj(defaults, options, false);\n\n    var doc = options.value;\n    if (typeof doc == \"string\") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }\n    else if (options.mode) { doc.modeOption = options.mode; }\n    this.doc = doc;\n\n    var input = new CodeMirror.inputStyles[options.inputStyle](this);\n    var display = this.display = new Display(place, doc, input, options);\n    display.wrapper.CodeMirror = this;\n    themeChanged(this);\n    if (options.lineWrapping)\n      { this.display.wrapper.className += \" CodeMirror-wrap\"; }\n    initScrollbars(this);\n\n    this.state = {\n      keyMaps: [],  // stores maps added by addKeyMap\n      overlays: [], // highlighting overlays, as added by addOverlay\n      modeGen: 0,   // bumped when mode/overlay changes, used to invalidate highlighting info\n      overwrite: false,\n      delayingBlurEvent: false,\n      focused: false,\n      suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n      pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll\n      selectingText: false,\n      draggingText: false,\n      highlight: new Delayed(), // stores highlight worker timeout\n      keySeq: null,  // Unfinished key sequence\n      specialChars: null\n    };\n\n    if (options.autofocus && !mobile) { display.input.focus(); }\n\n    // Override magic textarea content restore that IE sometimes does\n    // on our hidden textarea on reload\n    if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }\n\n    registerEventHandlers(this);\n    ensureGlobalHandlers();\n\n    startOperation(this);\n    this.curOp.forceUpdate = true;\n    attachDoc(this, doc);\n\n    if ((options.autofocus && !mobile) || this.hasFocus())\n      { setTimeout(function () {\n        if (this$1.hasFocus() && !this$1.state.focused) { onFocus(this$1); }\n      }, 20); }\n    else\n      { onBlur(this); }\n\n    for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))\n      { optionHandlers[opt](this, options[opt], Init); } }\n    maybeUpdateLineNumberWidth(this);\n    if (options.finishInit) { options.finishInit(this); }\n    for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this); }\n    endOperation(this);\n    // Suppress optimizelegibility in Webkit, since it breaks text\n    // measuring on line wrapping boundaries.\n    if (webkit && options.lineWrapping &&\n        getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n      { display.lineDiv.style.textRendering = \"auto\"; }\n  }\n\n  // The default configuration options.\n  CodeMirror.defaults = defaults;\n  // Functions to run when options are changed.\n  CodeMirror.optionHandlers = optionHandlers;\n\n  // Attach the necessary event handlers when initializing the editor\n  function registerEventHandlers(cm) {\n    var d = cm.display;\n    on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n    // Older IE's will not fire a second mousedown for a double click\n    if (ie && ie_version < 11)\n      { on(d.scroller, \"dblclick\", operation(cm, function (e) {\n        if (signalDOMEvent(cm, e)) { return }\n        var pos = posFromMouse(cm, e);\n        if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }\n        e_preventDefault(e);\n        var word = cm.findWordAt(pos);\n        extendSelection(cm.doc, word.anchor, word.head);\n      })); }\n    else\n      { on(d.scroller, \"dblclick\", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }\n    // Some browsers fire contextmenu *after* opening the menu, at\n    // which point we can't mess with it anymore. Context menu is\n    // handled in onMouseDown for these browsers.\n    on(d.scroller, \"contextmenu\", function (e) { return onContextMenu(cm, e); });\n    on(d.input.getField(), \"contextmenu\", function (e) {\n      if (!d.scroller.contains(e.target)) { onContextMenu(cm, e); }\n    });\n\n    // Used to suppress mouse event handling when a touch happens\n    var touchFinished, prevTouch = {end: 0};\n    function finishTouch() {\n      if (d.activeTouch) {\n        touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);\n        prevTouch = d.activeTouch;\n        prevTouch.end = +new Date;\n      }\n    }\n    function isMouseLikeTouchEvent(e) {\n      if (e.touches.length != 1) { return false }\n      var touch = e.touches[0];\n      return touch.radiusX <= 1 && touch.radiusY <= 1\n    }\n    function farAway(touch, other) {\n      if (other.left == null) { return true }\n      var dx = other.left - touch.left, dy = other.top - touch.top;\n      return dx * dx + dy * dy > 20 * 20\n    }\n    on(d.scroller, \"touchstart\", function (e) {\n      if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n        d.input.ensurePolled();\n        clearTimeout(touchFinished);\n        var now = +new Date;\n        d.activeTouch = {start: now, moved: false,\n                         prev: now - prevTouch.end <= 300 ? prevTouch : null};\n        if (e.touches.length == 1) {\n          d.activeTouch.left = e.touches[0].pageX;\n          d.activeTouch.top = e.touches[0].pageY;\n        }\n      }\n    });\n    on(d.scroller, \"touchmove\", function () {\n      if (d.activeTouch) { d.activeTouch.moved = true; }\n    });\n    on(d.scroller, \"touchend\", function (e) {\n      var touch = d.activeTouch;\n      if (touch && !eventInWidget(d, e) && touch.left != null &&\n          !touch.moved && new Date - touch.start < 300) {\n        var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n        if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n          { range = new Range(pos, pos); }\n        else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n          { range = cm.findWordAt(pos); }\n        else // Triple tap\n          { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }\n        cm.setSelection(range.anchor, range.head);\n        cm.focus();\n        e_preventDefault(e);\n      }\n      finishTouch();\n    });\n    on(d.scroller, \"touchcancel\", finishTouch);\n\n    // Sync scrolling between fake scrollbars and real scrollable\n    // area, ensure viewport is updated when scrolling.\n    on(d.scroller, \"scroll\", function () {\n      if (d.scroller.clientHeight) {\n        updateScrollTop(cm, d.scroller.scrollTop);\n        setScrollLeft(cm, d.scroller.scrollLeft, true);\n        signal(cm, \"scroll\", cm);\n      }\n    });\n\n    // Listen to wheel events in order to try and update the viewport on time.\n    on(d.scroller, \"mousewheel\", function (e) { return onScrollWheel(cm, e); });\n    on(d.scroller, \"DOMMouseScroll\", function (e) { return onScrollWheel(cm, e); });\n\n    // Prevent wrapper from ever scrolling\n    on(d.wrapper, \"scroll\", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n    d.dragFunctions = {\n      enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},\n      over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n      start: function (e) { return onDragStart(cm, e); },\n      drop: operation(cm, onDrop),\n      leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n    };\n\n    var inp = d.input.getField();\n    on(inp, \"keyup\", function (e) { return onKeyUp.call(cm, e); });\n    on(inp, \"keydown\", operation(cm, onKeyDown));\n    on(inp, \"keypress\", operation(cm, onKeyPress));\n    on(inp, \"focus\", function (e) { return onFocus(cm, e); });\n    on(inp, \"blur\", function (e) { return onBlur(cm, e); });\n  }\n\n  var initHooks = [];\n  CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };\n\n  // Indent the given line. The how parameter can be \"smart\",\n  // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n  // (typically set to true for forced single-line indents), empty\n  // lines are not indented, and places where the mode returns Pass\n  // are left alone.\n  function indentLine(cm, n, how, aggressive) {\n    var doc = cm.doc, state;\n    if (how == null) { how = \"add\"; }\n    if (how == \"smart\") {\n      // Fall back to \"prev\" when the mode doesn't have an indentation\n      // method.\n      if (!doc.mode.indent) { how = \"prev\"; }\n      else { state = getContextBefore(cm, n).state; }\n    }\n\n    var tabSize = cm.options.tabSize;\n    var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n    if (line.stateAfter) { line.stateAfter = null; }\n    var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n    if (!aggressive && !/\\S/.test(line.text)) {\n      indentation = 0;\n      how = \"not\";\n    } else if (how == \"smart\") {\n      indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n      if (indentation == Pass || indentation > 150) {\n        if (!aggressive) { return }\n        how = \"prev\";\n      }\n    }\n    if (how == \"prev\") {\n      if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }\n      else { indentation = 0; }\n    } else if (how == \"add\") {\n      indentation = curSpace + cm.options.indentUnit;\n    } else if (how == \"subtract\") {\n      indentation = curSpace - cm.options.indentUnit;\n    } else if (typeof how == \"number\") {\n      indentation = curSpace + how;\n    }\n    indentation = Math.max(0, indentation);\n\n    var indentString = \"\", pos = 0;\n    if (cm.options.indentWithTabs)\n      { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";} }\n    if (pos < indentation) { indentString += spaceStr(indentation - pos); }\n\n    if (indentString != curSpaceString) {\n      replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n      line.stateAfter = null;\n      return true\n    } else {\n      // Ensure that, if the cursor was in the whitespace at the start\n      // of the line, it is moved to the end of that space.\n      for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n        var range = doc.sel.ranges[i$1];\n        if (range.head.line == n && range.head.ch < curSpaceString.length) {\n          var pos$1 = Pos(n, curSpaceString.length);\n          replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n          break\n        }\n      }\n    }\n  }\n\n  // This will be set to a {lineWise: bool, text: [string]} object, so\n  // that, when pasting, we know what kind of selections the copied\n  // text was made out of.\n  var lastCopied = null;\n\n  function setLastCopied(newLastCopied) {\n    lastCopied = newLastCopied;\n  }\n\n  function applyTextInput(cm, inserted, deleted, sel, origin) {\n    var doc = cm.doc;\n    cm.display.shift = false;\n    if (!sel) { sel = doc.sel; }\n\n    var recent = +new Date - 200;\n    var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n    var textLines = splitLinesAuto(inserted), multiPaste = null;\n    // When pasting N lines into N selections, insert one line per selection\n    if (paste && sel.ranges.length > 1) {\n      if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n        if (sel.ranges.length % lastCopied.text.length == 0) {\n          multiPaste = [];\n          for (var i = 0; i < lastCopied.text.length; i++)\n            { multiPaste.push(doc.splitLines(lastCopied.text[i])); }\n        }\n      } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n        multiPaste = map(textLines, function (l) { return [l]; });\n      }\n    }\n\n    var updateInput = cm.curOp.updateInput;\n    // Normal behavior is to insert the new text into every selection\n    for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n      var range = sel.ranges[i$1];\n      var from = range.from(), to = range.to();\n      if (range.empty()) {\n        if (deleted && deleted > 0) // Handle deletion\n          { from = Pos(from.line, from.ch - deleted); }\n        else if (cm.state.overwrite && !paste) // Handle overwrite\n          { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }\n        else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == textLines.join(\"\\n\"))\n          { from = to = Pos(from.line, 0); }\n      }\n      var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n                         origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")};\n      makeChange(cm.doc, changeEvent);\n      signalLater(cm, \"inputRead\", cm, changeEvent);\n    }\n    if (inserted && !paste)\n      { triggerElectric(cm, inserted); }\n\n    ensureCursorVisible(cm);\n    if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }\n    cm.curOp.typing = true;\n    cm.state.pasteIncoming = cm.state.cutIncoming = -1;\n  }\n\n  function handlePaste(e, cm) {\n    var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n    if (pasted) {\n      e.preventDefault();\n      if (!cm.isReadOnly() && !cm.options.disableInput)\n        { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, \"paste\"); }); }\n      return true\n    }\n  }\n\n  function triggerElectric(cm, inserted) {\n    // When an 'electric' character is inserted, immediately trigger a reindent\n    if (!cm.options.electricChars || !cm.options.smartIndent) { return }\n    var sel = cm.doc.sel;\n\n    for (var i = sel.ranges.length - 1; i >= 0; i--) {\n      var range = sel.ranges[i];\n      if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue }\n      var mode = cm.getModeAt(range.head);\n      var indented = false;\n      if (mode.electricChars) {\n        for (var j = 0; j < mode.electricChars.length; j++)\n          { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n            indented = indentLine(cm, range.head.line, \"smart\");\n            break\n          } }\n      } else if (mode.electricInput) {\n        if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))\n          { indented = indentLine(cm, range.head.line, \"smart\"); }\n      }\n      if (indented) { signalLater(cm, \"electricInput\", cm, range.head.line); }\n    }\n  }\n\n  function copyableRanges(cm) {\n    var text = [], ranges = [];\n    for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n      var line = cm.doc.sel.ranges[i].head.line;\n      var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n      ranges.push(lineRange);\n      text.push(cm.getRange(lineRange.anchor, lineRange.head));\n    }\n    return {text: text, ranges: ranges}\n  }\n\n  function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {\n    field.setAttribute(\"autocorrect\", autocorrect ? \"\" : \"off\");\n    field.setAttribute(\"autocapitalize\", autocapitalize ? \"\" : \"off\");\n    field.setAttribute(\"spellcheck\", !!spellcheck);\n  }\n\n  function hiddenTextarea() {\n    var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\");\n    var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n    // The textarea is kept positioned near the cursor to prevent the\n    // fact that it'll be scrolled into view on input from scrolling\n    // our fake cursor out of view. On webkit, when wrap=off, paste is\n    // very slow. So make the area wide instead.\n    if (webkit) { te.style.width = \"1000px\"; }\n    else { te.setAttribute(\"wrap\", \"off\"); }\n    // If border: 0; -- iOS fails to open keyboard (issue #1287)\n    if (ios) { te.style.border = \"1px solid black\"; }\n    disableBrowserMagic(te);\n    return div\n  }\n\n  // The publicly visible API. Note that methodOp(f) means\n  // 'wrap f in an operation, performed on its `this` parameter'.\n\n  // This is not the complete set of editor methods. Most of the\n  // methods defined on the Doc type are also injected into\n  // CodeMirror.prototype, for backwards compatibility and\n  // convenience.\n\n  function addEditorMethods(CodeMirror) {\n    var optionHandlers = CodeMirror.optionHandlers;\n\n    var helpers = CodeMirror.helpers = {};\n\n    CodeMirror.prototype = {\n      constructor: CodeMirror,\n      focus: function(){window.focus(); this.display.input.focus();},\n\n      setOption: function(option, value) {\n        var options = this.options, old = options[option];\n        if (options[option] == value && option != \"mode\") { return }\n        options[option] = value;\n        if (optionHandlers.hasOwnProperty(option))\n          { operation(this, optionHandlers[option])(this, value, old); }\n        signal(this, \"optionChange\", this, option);\n      },\n\n      getOption: function(option) {return this.options[option]},\n      getDoc: function() {return this.doc},\n\n      addKeyMap: function(map, bottom) {\n        this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map));\n      },\n      removeKeyMap: function(map) {\n        var maps = this.state.keyMaps;\n        for (var i = 0; i < maps.length; ++i)\n          { if (maps[i] == map || maps[i].name == map) {\n            maps.splice(i, 1);\n            return true\n          } }\n      },\n\n      addOverlay: methodOp(function(spec, options) {\n        var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n        if (mode.startState) { throw new Error(\"Overlays may not be stateful.\") }\n        insertSorted(this.state.overlays,\n                     {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n                      priority: (options && options.priority) || 0},\n                     function (overlay) { return overlay.priority; });\n        this.state.modeGen++;\n        regChange(this);\n      }),\n      removeOverlay: methodOp(function(spec) {\n        var overlays = this.state.overlays;\n        for (var i = 0; i < overlays.length; ++i) {\n          var cur = overlays[i].modeSpec;\n          if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n            overlays.splice(i, 1);\n            this.state.modeGen++;\n            regChange(this);\n            return\n          }\n        }\n      }),\n\n      indentLine: methodOp(function(n, dir, aggressive) {\n        if (typeof dir != \"string\" && typeof dir != \"number\") {\n          if (dir == null) { dir = this.options.smartIndent ? \"smart\" : \"prev\"; }\n          else { dir = dir ? \"add\" : \"subtract\"; }\n        }\n        if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }\n      }),\n      indentSelection: methodOp(function(how) {\n        var ranges = this.doc.sel.ranges, end = -1;\n        for (var i = 0; i < ranges.length; i++) {\n          var range = ranges[i];\n          if (!range.empty()) {\n            var from = range.from(), to = range.to();\n            var start = Math.max(end, from.line);\n            end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n            for (var j = start; j < end; ++j)\n              { indentLine(this, j, how); }\n            var newRanges = this.doc.sel.ranges;\n            if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n              { replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }\n          } else if (range.head.line > end) {\n            indentLine(this, range.head.line, how, true);\n            end = range.head.line;\n            if (i == this.doc.sel.primIndex) { ensureCursorVisible(this); }\n          }\n        }\n      }),\n\n      // Fetch the parser token for a given character. Useful for hacks\n      // that want to inspect the mode state (say, for completion).\n      getTokenAt: function(pos, precise) {\n        return takeToken(this, pos, precise)\n      },\n\n      getLineTokens: function(line, precise) {\n        return takeToken(this, Pos(line), precise, true)\n      },\n\n      getTokenTypeAt: function(pos) {\n        pos = clipPos(this.doc, pos);\n        var styles = getLineStyles(this, getLine(this.doc, pos.line));\n        var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n        var type;\n        if (ch == 0) { type = styles[2]; }\n        else { for (;;) {\n          var mid = (before + after) >> 1;\n          if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }\n          else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }\n          else { type = styles[mid * 2 + 2]; break }\n        } }\n        var cut = type ? type.indexOf(\"overlay \") : -1;\n        return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n      },\n\n      getModeAt: function(pos) {\n        var mode = this.doc.mode;\n        if (!mode.innerMode) { return mode }\n        return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n      },\n\n      getHelper: function(pos, type) {\n        return this.getHelpers(pos, type)[0]\n      },\n\n      getHelpers: function(pos, type) {\n        var found = [];\n        if (!helpers.hasOwnProperty(type)) { return found }\n        var help = helpers[type], mode = this.getModeAt(pos);\n        if (typeof mode[type] == \"string\") {\n          if (help[mode[type]]) { found.push(help[mode[type]]); }\n        } else if (mode[type]) {\n          for (var i = 0; i < mode[type].length; i++) {\n            var val = help[mode[type][i]];\n            if (val) { found.push(val); }\n          }\n        } else if (mode.helperType && help[mode.helperType]) {\n          found.push(help[mode.helperType]);\n        } else if (help[mode.name]) {\n          found.push(help[mode.name]);\n        }\n        for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n          var cur = help._global[i$1];\n          if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)\n            { found.push(cur.val); }\n        }\n        return found\n      },\n\n      getStateAfter: function(line, precise) {\n        var doc = this.doc;\n        line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n        return getContextBefore(this, line + 1, precise).state\n      },\n\n      cursorCoords: function(start, mode) {\n        var pos, range = this.doc.sel.primary();\n        if (start == null) { pos = range.head; }\n        else if (typeof start == \"object\") { pos = clipPos(this.doc, start); }\n        else { pos = start ? range.from() : range.to(); }\n        return cursorCoords(this, pos, mode || \"page\")\n      },\n\n      charCoords: function(pos, mode) {\n        return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n      },\n\n      coordsChar: function(coords, mode) {\n        coords = fromCoordSystem(this, coords, mode || \"page\");\n        return coordsChar(this, coords.left, coords.top)\n      },\n\n      lineAtHeight: function(height, mode) {\n        height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n        return lineAtHeight(this.doc, height + this.display.viewOffset)\n      },\n      heightAtLine: function(line, mode, includeWidgets) {\n        var end = false, lineObj;\n        if (typeof line == \"number\") {\n          var last = this.doc.first + this.doc.size - 1;\n          if (line < this.doc.first) { line = this.doc.first; }\n          else if (line > last) { line = last; end = true; }\n          lineObj = getLine(this.doc, line);\n        } else {\n          lineObj = line;\n        }\n        return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n          (end ? this.doc.height - heightAtLine(lineObj) : 0)\n      },\n\n      defaultTextHeight: function() { return textHeight(this.display) },\n      defaultCharWidth: function() { return charWidth(this.display) },\n\n      getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n      addWidget: function(pos, node, scroll, vert, horiz) {\n        var display = this.display;\n        pos = cursorCoords(this, clipPos(this.doc, pos));\n        var top = pos.bottom, left = pos.left;\n        node.style.position = \"absolute\";\n        node.setAttribute(\"cm-ignore-events\", \"true\");\n        this.display.input.setUneditable(node);\n        display.sizer.appendChild(node);\n        if (vert == \"over\") {\n          top = pos.top;\n        } else if (vert == \"above\" || vert == \"near\") {\n          var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n          hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n          // Default to positioning above (if specified and possible); otherwise default to positioning below\n          if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n            { top = pos.top - node.offsetHeight; }\n          else if (pos.bottom + node.offsetHeight <= vspace)\n            { top = pos.bottom; }\n          if (left + node.offsetWidth > hspace)\n            { left = hspace - node.offsetWidth; }\n        }\n        node.style.top = top + \"px\";\n        node.style.left = node.style.right = \"\";\n        if (horiz == \"right\") {\n          left = display.sizer.clientWidth - node.offsetWidth;\n          node.style.right = \"0px\";\n        } else {\n          if (horiz == \"left\") { left = 0; }\n          else if (horiz == \"middle\") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }\n          node.style.left = left + \"px\";\n        }\n        if (scroll)\n          { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }\n      },\n\n      triggerOnKeyDown: methodOp(onKeyDown),\n      triggerOnKeyPress: methodOp(onKeyPress),\n      triggerOnKeyUp: onKeyUp,\n      triggerOnMouseDown: methodOp(onMouseDown),\n\n      execCommand: function(cmd) {\n        if (commands.hasOwnProperty(cmd))\n          { return commands[cmd].call(null, this) }\n      },\n\n      triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n      findPosH: function(from, amount, unit, visually) {\n        var dir = 1;\n        if (amount < 0) { dir = -1; amount = -amount; }\n        var cur = clipPos(this.doc, from);\n        for (var i = 0; i < amount; ++i) {\n          cur = findPosH(this.doc, cur, dir, unit, visually);\n          if (cur.hitSide) { break }\n        }\n        return cur\n      },\n\n      moveH: methodOp(function(dir, unit) {\n        var this$1 = this;\n\n        this.extendSelectionsBy(function (range) {\n          if (this$1.display.shift || this$1.doc.extend || range.empty())\n            { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) }\n          else\n            { return dir < 0 ? range.from() : range.to() }\n        }, sel_move);\n      }),\n\n      deleteH: methodOp(function(dir, unit) {\n        var sel = this.doc.sel, doc = this.doc;\n        if (sel.somethingSelected())\n          { doc.replaceSelection(\"\", null, \"+delete\"); }\n        else\n          { deleteNearSelection(this, function (range) {\n            var other = findPosH(doc, range.head, dir, unit, false);\n            return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}\n          }); }\n      }),\n\n      findPosV: function(from, amount, unit, goalColumn) {\n        var dir = 1, x = goalColumn;\n        if (amount < 0) { dir = -1; amount = -amount; }\n        var cur = clipPos(this.doc, from);\n        for (var i = 0; i < amount; ++i) {\n          var coords = cursorCoords(this, cur, \"div\");\n          if (x == null) { x = coords.left; }\n          else { coords.left = x; }\n          cur = findPosV(this, coords, dir, unit);\n          if (cur.hitSide) { break }\n        }\n        return cur\n      },\n\n      moveV: methodOp(function(dir, unit) {\n        var this$1 = this;\n\n        var doc = this.doc, goals = [];\n        var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n        doc.extendSelectionsBy(function (range) {\n          if (collapse)\n            { return dir < 0 ? range.from() : range.to() }\n          var headPos = cursorCoords(this$1, range.head, \"div\");\n          if (range.goalColumn != null) { headPos.left = range.goalColumn; }\n          goals.push(headPos.left);\n          var pos = findPosV(this$1, headPos, dir, unit);\n          if (unit == \"page\" && range == doc.sel.primary())\n            { addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top); }\n          return pos\n        }, sel_move);\n        if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)\n          { doc.sel.ranges[i].goalColumn = goals[i]; } }\n      }),\n\n      // Find the word at the given position (as returned by coordsChar).\n      findWordAt: function(pos) {\n        var doc = this.doc, line = getLine(doc, pos.line).text;\n        var start = pos.ch, end = pos.ch;\n        if (line) {\n          var helper = this.getHelper(pos, \"wordChars\");\n          if ((pos.sticky == \"before\" || end == line.length) && start) { --start; } else { ++end; }\n          var startChar = line.charAt(start);\n          var check = isWordChar(startChar, helper)\n            ? function (ch) { return isWordChar(ch, helper); }\n            : /\\s/.test(startChar) ? function (ch) { return /\\s/.test(ch); }\n            : function (ch) { return (!/\\s/.test(ch) && !isWordChar(ch)); };\n          while (start > 0 && check(line.charAt(start - 1))) { --start; }\n          while (end < line.length && check(line.charAt(end))) { ++end; }\n        }\n        return new Range(Pos(pos.line, start), Pos(pos.line, end))\n      },\n\n      toggleOverwrite: function(value) {\n        if (value != null && value == this.state.overwrite) { return }\n        if (this.state.overwrite = !this.state.overwrite)\n          { addClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n        else\n          { rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n\n        signal(this, \"overwriteToggle\", this, this.state.overwrite);\n      },\n      hasFocus: function() { return this.display.input.getField() == activeElt() },\n      isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n      scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),\n      getScrollInfo: function() {\n        var scroller = this.display.scroller;\n        return {left: scroller.scrollLeft, top: scroller.scrollTop,\n                height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n                width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n                clientHeight: displayHeight(this), clientWidth: displayWidth(this)}\n      },\n\n      scrollIntoView: methodOp(function(range, margin) {\n        if (range == null) {\n          range = {from: this.doc.sel.primary().head, to: null};\n          if (margin == null) { margin = this.options.cursorScrollMargin; }\n        } else if (typeof range == \"number\") {\n          range = {from: Pos(range, 0), to: null};\n        } else if (range.from == null) {\n          range = {from: range, to: null};\n        }\n        if (!range.to) { range.to = range.from; }\n        range.margin = margin || 0;\n\n        if (range.from.line != null) {\n          scrollToRange(this, range);\n        } else {\n          scrollToCoordsRange(this, range.from, range.to, range.margin);\n        }\n      }),\n\n      setSize: methodOp(function(width, height) {\n        var this$1 = this;\n\n        var interpret = function (val) { return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val; };\n        if (width != null) { this.display.wrapper.style.width = interpret(width); }\n        if (height != null) { this.display.wrapper.style.height = interpret(height); }\n        if (this.options.lineWrapping) { clearLineMeasurementCache(this); }\n        var lineNo = this.display.viewFrom;\n        this.doc.iter(lineNo, this.display.viewTo, function (line) {\n          if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)\n            { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, \"widget\"); break } } }\n          ++lineNo;\n        });\n        this.curOp.forceUpdate = true;\n        signal(this, \"refresh\", this);\n      }),\n\n      operation: function(f){return runInOp(this, f)},\n      startOperation: function(){return startOperation(this)},\n      endOperation: function(){return endOperation(this)},\n\n      refresh: methodOp(function() {\n        var oldHeight = this.display.cachedTextHeight;\n        regChange(this);\n        this.curOp.forceUpdate = true;\n        clearCaches(this);\n        scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n        updateGutterSpace(this.display);\n        if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping)\n          { estimateLineHeights(this); }\n        signal(this, \"refresh\", this);\n      }),\n\n      swapDoc: methodOp(function(doc) {\n        var old = this.doc;\n        old.cm = null;\n        // Cancel the current text selection if any (#5821)\n        if (this.state.selectingText) { this.state.selectingText(); }\n        attachDoc(this, doc);\n        clearCaches(this);\n        this.display.input.reset();\n        scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n        this.curOp.forceScroll = true;\n        signalLater(this, \"swapDoc\", this, old);\n        return old\n      }),\n\n      phrase: function(phraseText) {\n        var phrases = this.options.phrases;\n        return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText\n      },\n\n      getInputField: function(){return this.display.input.getField()},\n      getWrapperElement: function(){return this.display.wrapper},\n      getScrollerElement: function(){return this.display.scroller},\n      getGutterElement: function(){return this.display.gutters}\n    };\n    eventMixin(CodeMirror);\n\n    CodeMirror.registerHelper = function(type, name, value) {\n      if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }\n      helpers[type][name] = value;\n    };\n    CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n      CodeMirror.registerHelper(type, name, value);\n      helpers[type]._global.push({pred: predicate, val: value});\n    };\n  }\n\n  // Used for horizontal relative motion. Dir is -1 or 1 (left or\n  // right), unit can be \"codepoint\", \"char\", \"column\" (like char, but\n  // doesn't cross line boundaries), \"word\" (across next word), or\n  // \"group\" (to the start of next group of word or\n  // non-word-non-whitespace chars). The visually param controls\n  // whether, in right-to-left text, direction 1 means to move towards\n  // the next index in the string, or towards the character to the right\n  // of the current position. The resulting position will have a\n  // hitSide=true property if it reached the end of the document.\n  function findPosH(doc, pos, dir, unit, visually) {\n    var oldPos = pos;\n    var origDir = dir;\n    var lineObj = getLine(doc, pos.line);\n    var lineDir = visually && doc.direction == \"rtl\" ? -dir : dir;\n    function findNextLine() {\n      var l = pos.line + lineDir;\n      if (l < doc.first || l >= doc.first + doc.size) { return false }\n      pos = new Pos(l, pos.ch, pos.sticky);\n      return lineObj = getLine(doc, l)\n    }\n    function moveOnce(boundToLine) {\n      var next;\n      if (unit == \"codepoint\") {\n        var ch = lineObj.text.charCodeAt(pos.ch + (unit > 0 ? 0 : -1));\n        if (isNaN(ch)) { next = null; }\n        else { next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (ch >= 0xD800 && ch < 0xDC00 ? 2 : 1))),\n                            -dir); }\n      } else if (visually) {\n        next = moveVisually(doc.cm, lineObj, pos, dir);\n      } else {\n        next = moveLogically(lineObj, pos, dir);\n      }\n      if (next == null) {\n        if (!boundToLine && findNextLine())\n          { pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); }\n        else\n          { return false }\n      } else {\n        pos = next;\n      }\n      return true\n    }\n\n    if (unit == \"char\" || unit == \"codepoint\") {\n      moveOnce();\n    } else if (unit == \"column\") {\n      moveOnce(true);\n    } else if (unit == \"word\" || unit == \"group\") {\n      var sawType = null, group = unit == \"group\";\n      var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n      for (var first = true;; first = false) {\n        if (dir < 0 && !moveOnce(!first)) { break }\n        var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n        var type = isWordChar(cur, helper) ? \"w\"\n          : group && cur == \"\\n\" ? \"n\"\n          : !group || /\\s/.test(cur) ? null\n          : \"p\";\n        if (group && !first && !type) { type = \"s\"; }\n        if (sawType && sawType != type) {\n          if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\";}\n          break\n        }\n\n        if (type) { sawType = type; }\n        if (dir > 0 && !moveOnce(!first)) { break }\n      }\n    }\n    var result = skipAtomic(doc, pos, oldPos, origDir, true);\n    if (equalCursorPos(oldPos, result)) { result.hitSide = true; }\n    return result\n  }\n\n  // For relative vertical movement. Dir may be -1 or 1. Unit can be\n  // \"page\" or \"line\". The resulting position will have a hitSide=true\n  // property if it reached the end of the document.\n  function findPosV(cm, pos, dir, unit) {\n    var doc = cm.doc, x = pos.left, y;\n    if (unit == \"page\") {\n      var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n      var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n      y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n\n    } else if (unit == \"line\") {\n      y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n    }\n    var target;\n    for (;;) {\n      target = coordsChar(cm, x, y);\n      if (!target.outside) { break }\n      if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n      y += dir * 5;\n    }\n    return target\n  }\n\n  // CONTENTEDITABLE INPUT STYLE\n\n  var ContentEditableInput = function(cm) {\n    this.cm = cm;\n    this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n    this.polling = new Delayed();\n    this.composing = null;\n    this.gracePeriod = false;\n    this.readDOMTimeout = null;\n  };\n\n  ContentEditableInput.prototype.init = function (display) {\n      var this$1 = this;\n\n    var input = this, cm = input.cm;\n    var div = input.div = display.lineDiv;\n    disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);\n\n    function belongsToInput(e) {\n      for (var t = e.target; t; t = t.parentNode) {\n        if (t == div) { return true }\n        if (/\\bCodeMirror-(?:line)?widget\\b/.test(t.className)) { break }\n      }\n      return false\n    }\n\n    on(div, \"paste\", function (e) {\n      if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n      // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n      if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }\n    });\n\n    on(div, \"compositionstart\", function (e) {\n      this$1.composing = {data: e.data, done: false};\n    });\n    on(div, \"compositionupdate\", function (e) {\n      if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }\n    });\n    on(div, \"compositionend\", function (e) {\n      if (this$1.composing) {\n        if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }\n        this$1.composing.done = true;\n      }\n    });\n\n    on(div, \"touchstart\", function () { return input.forceCompositionEnd(); });\n\n    on(div, \"input\", function () {\n      if (!this$1.composing) { this$1.readFromDOMSoon(); }\n    });\n\n    function onCopyCut(e) {\n      if (!belongsToInput(e) || signalDOMEvent(cm, e)) { return }\n      if (cm.somethingSelected()) {\n        setLastCopied({lineWise: false, text: cm.getSelections()});\n        if (e.type == \"cut\") { cm.replaceSelection(\"\", null, \"cut\"); }\n      } else if (!cm.options.lineWiseCopyCut) {\n        return\n      } else {\n        var ranges = copyableRanges(cm);\n        setLastCopied({lineWise: true, text: ranges.text});\n        if (e.type == \"cut\") {\n          cm.operation(function () {\n            cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n            cm.replaceSelection(\"\", null, \"cut\");\n          });\n        }\n      }\n      if (e.clipboardData) {\n        e.clipboardData.clearData();\n        var content = lastCopied.text.join(\"\\n\");\n        // iOS exposes the clipboard API, but seems to discard content inserted into it\n        e.clipboardData.setData(\"Text\", content);\n        if (e.clipboardData.getData(\"Text\") == content) {\n          e.preventDefault();\n          return\n        }\n      }\n      // Old-fashioned briefly-focus-a-textarea hack\n      var kludge = hiddenTextarea(), te = kludge.firstChild;\n      cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n      te.value = lastCopied.text.join(\"\\n\");\n      var hadFocus = document.activeElement;\n      selectInput(te);\n      setTimeout(function () {\n        cm.display.lineSpace.removeChild(kludge);\n        hadFocus.focus();\n        if (hadFocus == div) { input.showPrimarySelection(); }\n      }, 50);\n    }\n    on(div, \"copy\", onCopyCut);\n    on(div, \"cut\", onCopyCut);\n  };\n\n  ContentEditableInput.prototype.screenReaderLabelChanged = function (label) {\n    // Label for screenreaders, accessibility\n    if(label) {\n      this.div.setAttribute('aria-label', label);\n    } else {\n      this.div.removeAttribute('aria-label');\n    }\n  };\n\n  ContentEditableInput.prototype.prepareSelection = function () {\n    var result = prepareSelection(this.cm, false);\n    result.focus = document.activeElement == this.div;\n    return result\n  };\n\n  ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n    if (!info || !this.cm.display.view.length) { return }\n    if (info.focus || takeFocus) { this.showPrimarySelection(); }\n    this.showMultipleSelections(info);\n  };\n\n  ContentEditableInput.prototype.getSelection = function () {\n    return this.cm.display.wrapper.ownerDocument.getSelection()\n  };\n\n  ContentEditableInput.prototype.showPrimarySelection = function () {\n    var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();\n    var from = prim.from(), to = prim.to();\n\n    if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n      sel.removeAllRanges();\n      return\n    }\n\n    var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n    var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n    if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n        cmp(minPos(curAnchor, curFocus), from) == 0 &&\n        cmp(maxPos(curAnchor, curFocus), to) == 0)\n      { return }\n\n    var view = cm.display.view;\n    var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||\n        {node: view[0].measure.map[2], offset: 0};\n    var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n    if (!end) {\n      var measure = view[view.length - 1].measure;\n      var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n      end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]};\n    }\n\n    if (!start || !end) {\n      sel.removeAllRanges();\n      return\n    }\n\n    var old = sel.rangeCount && sel.getRangeAt(0), rng;\n    try { rng = range(start.node, start.offset, end.offset, end.node); }\n    catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n    if (rng) {\n      if (!gecko && cm.state.focused) {\n        sel.collapse(start.node, start.offset);\n        if (!rng.collapsed) {\n          sel.removeAllRanges();\n          sel.addRange(rng);\n        }\n      } else {\n        sel.removeAllRanges();\n        sel.addRange(rng);\n      }\n      if (old && sel.anchorNode == null) { sel.addRange(old); }\n      else if (gecko) { this.startGracePeriod(); }\n    }\n    this.rememberSelection();\n  };\n\n  ContentEditableInput.prototype.startGracePeriod = function () {\n      var this$1 = this;\n\n    clearTimeout(this.gracePeriod);\n    this.gracePeriod = setTimeout(function () {\n      this$1.gracePeriod = false;\n      if (this$1.selectionChanged())\n        { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }\n    }, 20);\n  };\n\n  ContentEditableInput.prototype.showMultipleSelections = function (info) {\n    removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n    removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n  };\n\n  ContentEditableInput.prototype.rememberSelection = function () {\n    var sel = this.getSelection();\n    this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;\n    this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n  };\n\n  ContentEditableInput.prototype.selectionInEditor = function () {\n    var sel = this.getSelection();\n    if (!sel.rangeCount) { return false }\n    var node = sel.getRangeAt(0).commonAncestorContainer;\n    return contains(this.div, node)\n  };\n\n  ContentEditableInput.prototype.focus = function () {\n    if (this.cm.options.readOnly != \"nocursor\") {\n      if (!this.selectionInEditor() || document.activeElement != this.div)\n        { this.showSelection(this.prepareSelection(), true); }\n      this.div.focus();\n    }\n  };\n  ContentEditableInput.prototype.blur = function () { this.div.blur(); };\n  ContentEditableInput.prototype.getField = function () { return this.div };\n\n  ContentEditableInput.prototype.supportsTouch = function () { return true };\n\n  ContentEditableInput.prototype.receivedFocus = function () {\n    var input = this;\n    if (this.selectionInEditor())\n      { this.pollSelection(); }\n    else\n      { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }\n\n    function poll() {\n      if (input.cm.state.focused) {\n        input.pollSelection();\n        input.polling.set(input.cm.options.pollInterval, poll);\n      }\n    }\n    this.polling.set(this.cm.options.pollInterval, poll);\n  };\n\n  ContentEditableInput.prototype.selectionChanged = function () {\n    var sel = this.getSelection();\n    return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n      sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n  };\n\n  ContentEditableInput.prototype.pollSelection = function () {\n    if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }\n    var sel = this.getSelection(), cm = this.cm;\n    // On Android Chrome (version 56, at least), backspacing into an\n    // uneditable block element will put the cursor in that element,\n    // and then, because it's not editable, hide the virtual keyboard.\n    // Because Android doesn't allow us to actually detect backspace\n    // presses in a sane way, this code checks for when that happens\n    // and simulates a backspace press in this case.\n    if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {\n      this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs});\n      this.blur();\n      this.focus();\n      return\n    }\n    if (this.composing) { return }\n    this.rememberSelection();\n    var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n    var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n    if (anchor && head) { runInOp(cm, function () {\n      setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n      if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }\n    }); }\n  };\n\n  ContentEditableInput.prototype.pollContent = function () {\n    if (this.readDOMTimeout != null) {\n      clearTimeout(this.readDOMTimeout);\n      this.readDOMTimeout = null;\n    }\n\n    var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();\n    var from = sel.from(), to = sel.to();\n    if (from.ch == 0 && from.line > cm.firstLine())\n      { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }\n    if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n      { to = Pos(to.line + 1, 0); }\n    if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }\n\n    var fromIndex, fromLine, fromNode;\n    if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n      fromLine = lineNo(display.view[0].line);\n      fromNode = display.view[0].node;\n    } else {\n      fromLine = lineNo(display.view[fromIndex].line);\n      fromNode = display.view[fromIndex - 1].node.nextSibling;\n    }\n    var toIndex = findViewIndex(cm, to.line);\n    var toLine, toNode;\n    if (toIndex == display.view.length - 1) {\n      toLine = display.viewTo - 1;\n      toNode = display.lineDiv.lastChild;\n    } else {\n      toLine = lineNo(display.view[toIndex + 1].line) - 1;\n      toNode = display.view[toIndex + 1].node.previousSibling;\n    }\n\n    if (!fromNode) { return false }\n    var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n    var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n    while (newText.length > 1 && oldText.length > 1) {\n      if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n      else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n      else { break }\n    }\n\n    var cutFront = 0, cutEnd = 0;\n    var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n    while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n      { ++cutFront; }\n    var newBot = lst(newText), oldBot = lst(oldText);\n    var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n                             oldBot.length - (oldText.length == 1 ? cutFront : 0));\n    while (cutEnd < maxCutEnd &&\n           newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n      { ++cutEnd; }\n    // Try to move start of change to start of selection if ambiguous\n    if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n      while (cutFront && cutFront > from.ch &&\n             newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n        cutFront--;\n        cutEnd++;\n      }\n    }\n\n    newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n    newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n\n    var chFrom = Pos(fromLine, cutFront);\n    var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n    if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n      replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n      return true\n    }\n  };\n\n  ContentEditableInput.prototype.ensurePolled = function () {\n    this.forceCompositionEnd();\n  };\n  ContentEditableInput.prototype.reset = function () {\n    this.forceCompositionEnd();\n  };\n  ContentEditableInput.prototype.forceCompositionEnd = function () {\n    if (!this.composing) { return }\n    clearTimeout(this.readDOMTimeout);\n    this.composing = null;\n    this.updateFromDOM();\n    this.div.blur();\n    this.div.focus();\n  };\n  ContentEditableInput.prototype.readFromDOMSoon = function () {\n      var this$1 = this;\n\n    if (this.readDOMTimeout != null) { return }\n    this.readDOMTimeout = setTimeout(function () {\n      this$1.readDOMTimeout = null;\n      if (this$1.composing) {\n        if (this$1.composing.done) { this$1.composing = null; }\n        else { return }\n      }\n      this$1.updateFromDOM();\n    }, 80);\n  };\n\n  ContentEditableInput.prototype.updateFromDOM = function () {\n      var this$1 = this;\n\n    if (this.cm.isReadOnly() || !this.pollContent())\n      { runInOp(this.cm, function () { return regChange(this$1.cm); }); }\n  };\n\n  ContentEditableInput.prototype.setUneditable = function (node) {\n    node.contentEditable = \"false\";\n  };\n\n  ContentEditableInput.prototype.onKeyPress = function (e) {\n    if (e.charCode == 0 || this.composing) { return }\n    e.preventDefault();\n    if (!this.cm.isReadOnly())\n      { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }\n  };\n\n  ContentEditableInput.prototype.readOnlyChanged = function (val) {\n    this.div.contentEditable = String(val != \"nocursor\");\n  };\n\n  ContentEditableInput.prototype.onContextMenu = function () {};\n  ContentEditableInput.prototype.resetPosition = function () {};\n\n  ContentEditableInput.prototype.needsContentAttribute = true;\n\n  function posToDOM(cm, pos) {\n    var view = findViewForLine(cm, pos.line);\n    if (!view || view.hidden) { return null }\n    var line = getLine(cm.doc, pos.line);\n    var info = mapFromLineView(view, line, pos.line);\n\n    var order = getOrder(line, cm.doc.direction), side = \"left\";\n    if (order) {\n      var partPos = getBidiPartAt(order, pos.ch);\n      side = partPos % 2 ? \"right\" : \"left\";\n    }\n    var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n    result.offset = result.collapse == \"right\" ? result.end : result.start;\n    return result\n  }\n\n  function isInGutter(node) {\n    for (var scan = node; scan; scan = scan.parentNode)\n      { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }\n    return false\n  }\n\n  function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }\n\n  function domTextBetween(cm, from, to, fromLine, toLine) {\n    var text = \"\", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;\n    function recognizeMarker(id) { return function (marker) { return marker.id == id; } }\n    function close() {\n      if (closing) {\n        text += lineSep;\n        if (extraLinebreak) { text += lineSep; }\n        closing = extraLinebreak = false;\n      }\n    }\n    function addText(str) {\n      if (str) {\n        close();\n        text += str;\n      }\n    }\n    function walk(node) {\n      if (node.nodeType == 1) {\n        var cmText = node.getAttribute(\"cm-text\");\n        if (cmText) {\n          addText(cmText);\n          return\n        }\n        var markerID = node.getAttribute(\"cm-marker\"), range;\n        if (markerID) {\n          var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n          if (found.length && (range = found[0].find(0)))\n            { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); }\n          return\n        }\n        if (node.getAttribute(\"contenteditable\") == \"false\") { return }\n        var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n        if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }\n\n        if (isBlock) { close(); }\n        for (var i = 0; i < node.childNodes.length; i++)\n          { walk(node.childNodes[i]); }\n\n        if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }\n        if (isBlock) { closing = true; }\n      } else if (node.nodeType == 3) {\n        addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n      }\n    }\n    for (;;) {\n      walk(from);\n      if (from == to) { break }\n      from = from.nextSibling;\n      extraLinebreak = false;\n    }\n    return text\n  }\n\n  function domToPos(cm, node, offset) {\n    var lineNode;\n    if (node == cm.display.lineDiv) {\n      lineNode = cm.display.lineDiv.childNodes[offset];\n      if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }\n      node = null; offset = 0;\n    } else {\n      for (lineNode = node;; lineNode = lineNode.parentNode) {\n        if (!lineNode || lineNode == cm.display.lineDiv) { return null }\n        if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }\n      }\n    }\n    for (var i = 0; i < cm.display.view.length; i++) {\n      var lineView = cm.display.view[i];\n      if (lineView.node == lineNode)\n        { return locateNodeInLineView(lineView, node, offset) }\n    }\n  }\n\n  function locateNodeInLineView(lineView, node, offset) {\n    var wrapper = lineView.text.firstChild, bad = false;\n    if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }\n    if (node == wrapper) {\n      bad = true;\n      node = wrapper.childNodes[offset];\n      offset = 0;\n      if (!node) {\n        var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n        return badPos(Pos(lineNo(line), line.text.length), bad)\n      }\n    }\n\n    var textNode = node.nodeType == 3 ? node : null, topNode = node;\n    if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n      textNode = node.firstChild;\n      if (offset) { offset = textNode.nodeValue.length; }\n    }\n    while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }\n    var measure = lineView.measure, maps = measure.maps;\n\n    function find(textNode, topNode, offset) {\n      for (var i = -1; i < (maps ? maps.length : 0); i++) {\n        var map = i < 0 ? measure.map : maps[i];\n        for (var j = 0; j < map.length; j += 3) {\n          var curNode = map[j + 2];\n          if (curNode == textNode || curNode == topNode) {\n            var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n            var ch = map[j] + offset;\n            if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)]; }\n            return Pos(line, ch)\n          }\n        }\n      }\n    }\n    var found = find(textNode, topNode, offset);\n    if (found) { return badPos(found, bad) }\n\n    // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n    for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n      found = find(after, after.firstChild, 0);\n      if (found)\n        { return badPos(Pos(found.line, found.ch - dist), bad) }\n      else\n        { dist += after.textContent.length; }\n    }\n    for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n      found = find(before, before.firstChild, -1);\n      if (found)\n        { return badPos(Pos(found.line, found.ch + dist$1), bad) }\n      else\n        { dist$1 += before.textContent.length; }\n    }\n  }\n\n  // TEXTAREA INPUT STYLE\n\n  var TextareaInput = function(cm) {\n    this.cm = cm;\n    // See input.poll and input.reset\n    this.prevInput = \"\";\n\n    // Flag that indicates whether we expect input to appear real soon\n    // now (after some event like 'keypress' or 'input') and are\n    // polling intensively.\n    this.pollingFast = false;\n    // Self-resetting timeout for the poller\n    this.polling = new Delayed();\n    // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n    this.hasSelection = false;\n    this.composing = null;\n  };\n\n  TextareaInput.prototype.init = function (display) {\n      var this$1 = this;\n\n    var input = this, cm = this.cm;\n    this.createField(display);\n    var te = this.textarea;\n\n    display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n    // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n    if (ios) { te.style.width = \"0px\"; }\n\n    on(te, \"input\", function () {\n      if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }\n      input.poll();\n    });\n\n    on(te, \"paste\", function (e) {\n      if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n\n      cm.state.pasteIncoming = +new Date;\n      input.fastPoll();\n    });\n\n    function prepareCopyCut(e) {\n      if (signalDOMEvent(cm, e)) { return }\n      if (cm.somethingSelected()) {\n        setLastCopied({lineWise: false, text: cm.getSelections()});\n      } else if (!cm.options.lineWiseCopyCut) {\n        return\n      } else {\n        var ranges = copyableRanges(cm);\n        setLastCopied({lineWise: true, text: ranges.text});\n        if (e.type == \"cut\") {\n          cm.setSelections(ranges.ranges, null, sel_dontScroll);\n        } else {\n          input.prevInput = \"\";\n          te.value = ranges.text.join(\"\\n\");\n          selectInput(te);\n        }\n      }\n      if (e.type == \"cut\") { cm.state.cutIncoming = +new Date; }\n    }\n    on(te, \"cut\", prepareCopyCut);\n    on(te, \"copy\", prepareCopyCut);\n\n    on(display.scroller, \"paste\", function (e) {\n      if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }\n      if (!te.dispatchEvent) {\n        cm.state.pasteIncoming = +new Date;\n        input.focus();\n        return\n      }\n\n      // Pass the `paste` event to the textarea so it's handled by its event listener.\n      var event = new Event(\"paste\");\n      event.clipboardData = e.clipboardData;\n      te.dispatchEvent(event);\n    });\n\n    // Prevent normal selection in the editor (we handle our own)\n    on(display.lineSpace, \"selectstart\", function (e) {\n      if (!eventInWidget(display, e)) { e_preventDefault(e); }\n    });\n\n    on(te, \"compositionstart\", function () {\n      var start = cm.getCursor(\"from\");\n      if (input.composing) { input.composing.range.clear(); }\n      input.composing = {\n        start: start,\n        range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n      };\n    });\n    on(te, \"compositionend\", function () {\n      if (input.composing) {\n        input.poll();\n        input.composing.range.clear();\n        input.composing = null;\n      }\n    });\n  };\n\n  TextareaInput.prototype.createField = function (_display) {\n    // Wraps and hides input textarea\n    this.wrapper = hiddenTextarea();\n    // The semihidden textarea that is focused when the editor is\n    // focused, and receives input.\n    this.textarea = this.wrapper.firstChild;\n  };\n\n  TextareaInput.prototype.screenReaderLabelChanged = function (label) {\n    // Label for screenreaders, accessibility\n    if(label) {\n      this.textarea.setAttribute('aria-label', label);\n    } else {\n      this.textarea.removeAttribute('aria-label');\n    }\n  };\n\n  TextareaInput.prototype.prepareSelection = function () {\n    // Redraw the selection and/or cursor\n    var cm = this.cm, display = cm.display, doc = cm.doc;\n    var result = prepareSelection(cm);\n\n    // Move the hidden textarea near the cursor to prevent scrolling artifacts\n    if (cm.options.moveInputWithCursor) {\n      var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n      var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n      result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n                                          headPos.top + lineOff.top - wrapOff.top));\n      result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n                                           headPos.left + lineOff.left - wrapOff.left));\n    }\n\n    return result\n  };\n\n  TextareaInput.prototype.showSelection = function (drawn) {\n    var cm = this.cm, display = cm.display;\n    removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n    removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n    if (drawn.teTop != null) {\n      this.wrapper.style.top = drawn.teTop + \"px\";\n      this.wrapper.style.left = drawn.teLeft + \"px\";\n    }\n  };\n\n  // Reset the input to correspond to the selection (or to be empty,\n  // when not typing and nothing is selected)\n  TextareaInput.prototype.reset = function (typing) {\n    if (this.contextMenuPending || this.composing) { return }\n    var cm = this.cm;\n    if (cm.somethingSelected()) {\n      this.prevInput = \"\";\n      var content = cm.getSelection();\n      this.textarea.value = content;\n      if (cm.state.focused) { selectInput(this.textarea); }\n      if (ie && ie_version >= 9) { this.hasSelection = content; }\n    } else if (!typing) {\n      this.prevInput = this.textarea.value = \"\";\n      if (ie && ie_version >= 9) { this.hasSelection = null; }\n    }\n  };\n\n  TextareaInput.prototype.getField = function () { return this.textarea };\n\n  TextareaInput.prototype.supportsTouch = function () { return false };\n\n  TextareaInput.prototype.focus = function () {\n    if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n      try { this.textarea.focus(); }\n      catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n    }\n  };\n\n  TextareaInput.prototype.blur = function () { this.textarea.blur(); };\n\n  TextareaInput.prototype.resetPosition = function () {\n    this.wrapper.style.top = this.wrapper.style.left = 0;\n  };\n\n  TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };\n\n  // Poll for input changes, using the normal rate of polling. This\n  // runs as long as the editor is focused.\n  TextareaInput.prototype.slowPoll = function () {\n      var this$1 = this;\n\n    if (this.pollingFast) { return }\n    this.polling.set(this.cm.options.pollInterval, function () {\n      this$1.poll();\n      if (this$1.cm.state.focused) { this$1.slowPoll(); }\n    });\n  };\n\n  // When an event has just come in that is likely to add or change\n  // something in the input textarea, we poll faster, to ensure that\n  // the change appears on the screen quickly.\n  TextareaInput.prototype.fastPoll = function () {\n    var missed = false, input = this;\n    input.pollingFast = true;\n    function p() {\n      var changed = input.poll();\n      if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n      else {input.pollingFast = false; input.slowPoll();}\n    }\n    input.polling.set(20, p);\n  };\n\n  // Read input from the textarea, and update the document to match.\n  // When something is selected, it is present in the textarea, and\n  // selected (unless it is huge, in which case a placeholder is\n  // used). When nothing is selected, the cursor sits after previously\n  // seen text (can be empty), which is stored in prevInput (we must\n  // not reset the textarea when typing, because that breaks IME).\n  TextareaInput.prototype.poll = function () {\n      var this$1 = this;\n\n    var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n    // Since this is called a *lot*, try to bail out as cheaply as\n    // possible when it is clear that nothing happened. hasSelection\n    // will be the case when there is a lot of text in the textarea,\n    // in which case reading its value would be expensive.\n    if (this.contextMenuPending || !cm.state.focused ||\n        (hasSelection(input) && !prevInput && !this.composing) ||\n        cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n      { return false }\n\n    var text = input.value;\n    // If nothing changed, bail.\n    if (text == prevInput && !cm.somethingSelected()) { return false }\n    // Work around nonsensical selection resetting in IE9/10, and\n    // inexplicable appearance of private area unicode characters on\n    // some key combos in Mac (#2689).\n    if (ie && ie_version >= 9 && this.hasSelection === text ||\n        mac && /[\\uf700-\\uf7ff]/.test(text)) {\n      cm.display.input.reset();\n      return false\n    }\n\n    if (cm.doc.sel == cm.display.selForContextMenu) {\n      var first = text.charCodeAt(0);\n      if (first == 0x200b && !prevInput) { prevInput = \"\\u200b\"; }\n      if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n    }\n    // Find the part of the input that is actually new\n    var same = 0, l = Math.min(prevInput.length, text.length);\n    while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }\n\n    runInOp(cm, function () {\n      applyTextInput(cm, text.slice(same), prevInput.length - same,\n                     null, this$1.composing ? \"*compose\" : null);\n\n      // Don't leave long text in the textarea, since it makes further polling slow\n      if (text.length > 1000 || text.indexOf(\"\\n\") > -1) { input.value = this$1.prevInput = \"\"; }\n      else { this$1.prevInput = text; }\n\n      if (this$1.composing) {\n        this$1.composing.range.clear();\n        this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"),\n                                           {className: \"CodeMirror-composing\"});\n      }\n    });\n    return true\n  };\n\n  TextareaInput.prototype.ensurePolled = function () {\n    if (this.pollingFast && this.poll()) { this.pollingFast = false; }\n  };\n\n  TextareaInput.prototype.onKeyPress = function () {\n    if (ie && ie_version >= 9) { this.hasSelection = null; }\n    this.fastPoll();\n  };\n\n  TextareaInput.prototype.onContextMenu = function (e) {\n    var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n    if (input.contextMenuPending) { input.contextMenuPending(); }\n    var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n    if (!pos || presto) { return } // Opera is difficult.\n\n    // Reset the current text selection only if the click is done outside of the selection\n    // and 'resetSelectionOnContextMenu' option is true.\n    var reset = cm.options.resetSelectionOnContextMenu;\n    if (reset && cm.doc.sel.contains(pos) == -1)\n      { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }\n\n    var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;\n    var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n    input.wrapper.style.cssText = \"position: static\";\n    te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n      top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n      z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n    var oldScrollY;\n    if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)\n    display.input.focus();\n    if (webkit) { window.scrollTo(null, oldScrollY); }\n    display.input.reset();\n    // Adds \"Select all\" to context menu in FF\n    if (!cm.somethingSelected()) { te.value = input.prevInput = \" \"; }\n    input.contextMenuPending = rehide;\n    display.selForContextMenu = cm.doc.sel;\n    clearTimeout(display.detectingSelectAll);\n\n    // Select-all will be greyed out if there's nothing to select, so\n    // this adds a zero-width space so that we can later check whether\n    // it got selected.\n    function prepareSelectAllHack() {\n      if (te.selectionStart != null) {\n        var selected = cm.somethingSelected();\n        var extval = \"\\u200b\" + (selected ? te.value : \"\");\n        te.value = \"\\u21da\"; // Used to catch context-menu undo\n        te.value = extval;\n        input.prevInput = selected ? \"\" : \"\\u200b\";\n        te.selectionStart = 1; te.selectionEnd = extval.length;\n        // Re-set this, in case some other handler touched the\n        // selection in the meantime.\n        display.selForContextMenu = cm.doc.sel;\n      }\n    }\n    function rehide() {\n      if (input.contextMenuPending != rehide) { return }\n      input.contextMenuPending = false;\n      input.wrapper.style.cssText = oldWrapperCSS;\n      te.style.cssText = oldCSS;\n      if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }\n\n      // Try to detect the user choosing select-all\n      if (te.selectionStart != null) {\n        if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }\n        var i = 0, poll = function () {\n          if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n              te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n            operation(cm, selectAll)(cm);\n          } else if (i++ < 10) {\n            display.detectingSelectAll = setTimeout(poll, 500);\n          } else {\n            display.selForContextMenu = null;\n            display.input.reset();\n          }\n        };\n        display.detectingSelectAll = setTimeout(poll, 200);\n      }\n    }\n\n    if (ie && ie_version >= 9) { prepareSelectAllHack(); }\n    if (captureRightClick) {\n      e_stop(e);\n      var mouseup = function () {\n        off(window, \"mouseup\", mouseup);\n        setTimeout(rehide, 20);\n      };\n      on(window, \"mouseup\", mouseup);\n    } else {\n      setTimeout(rehide, 50);\n    }\n  };\n\n  TextareaInput.prototype.readOnlyChanged = function (val) {\n    if (!val) { this.reset(); }\n    this.textarea.disabled = val == \"nocursor\";\n    this.textarea.readOnly = !!val;\n  };\n\n  TextareaInput.prototype.setUneditable = function () {};\n\n  TextareaInput.prototype.needsContentAttribute = false;\n\n  function fromTextArea(textarea, options) {\n    options = options ? copyObj(options) : {};\n    options.value = textarea.value;\n    if (!options.tabindex && textarea.tabIndex)\n      { options.tabindex = textarea.tabIndex; }\n    if (!options.placeholder && textarea.placeholder)\n      { options.placeholder = textarea.placeholder; }\n    // Set autofocus to true if this textarea is focused, or if it has\n    // autofocus and no other element is focused.\n    if (options.autofocus == null) {\n      var hasFocus = activeElt();\n      options.autofocus = hasFocus == textarea ||\n        textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n    }\n\n    function save() {textarea.value = cm.getValue();}\n\n    var realSubmit;\n    if (textarea.form) {\n      on(textarea.form, \"submit\", save);\n      // Deplorable hack to make the submit method do the right thing.\n      if (!options.leaveSubmitMethodAlone) {\n        var form = textarea.form;\n        realSubmit = form.submit;\n        try {\n          var wrappedSubmit = form.submit = function () {\n            save();\n            form.submit = realSubmit;\n            form.submit();\n            form.submit = wrappedSubmit;\n          };\n        } catch(e) {}\n      }\n    }\n\n    options.finishInit = function (cm) {\n      cm.save = save;\n      cm.getTextArea = function () { return textarea; };\n      cm.toTextArea = function () {\n        cm.toTextArea = isNaN; // Prevent this from being ran twice\n        save();\n        textarea.parentNode.removeChild(cm.getWrapperElement());\n        textarea.style.display = \"\";\n        if (textarea.form) {\n          off(textarea.form, \"submit\", save);\n          if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == \"function\")\n            { textarea.form.submit = realSubmit; }\n        }\n      };\n    };\n\n    textarea.style.display = \"none\";\n    var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },\n      options);\n    return cm\n  }\n\n  function addLegacyProps(CodeMirror) {\n    CodeMirror.off = off;\n    CodeMirror.on = on;\n    CodeMirror.wheelEventPixels = wheelEventPixels;\n    CodeMirror.Doc = Doc;\n    CodeMirror.splitLines = splitLinesAuto;\n    CodeMirror.countColumn = countColumn;\n    CodeMirror.findColumn = findColumn;\n    CodeMirror.isWordChar = isWordCharBasic;\n    CodeMirror.Pass = Pass;\n    CodeMirror.signal = signal;\n    CodeMirror.Line = Line;\n    CodeMirror.changeEnd = changeEnd;\n    CodeMirror.scrollbarModel = scrollbarModel;\n    CodeMirror.Pos = Pos;\n    CodeMirror.cmpPos = cmp;\n    CodeMirror.modes = modes;\n    CodeMirror.mimeModes = mimeModes;\n    CodeMirror.resolveMode = resolveMode;\n    CodeMirror.getMode = getMode;\n    CodeMirror.modeExtensions = modeExtensions;\n    CodeMirror.extendMode = extendMode;\n    CodeMirror.copyState = copyState;\n    CodeMirror.startState = startState;\n    CodeMirror.innerMode = innerMode;\n    CodeMirror.commands = commands;\n    CodeMirror.keyMap = keyMap;\n    CodeMirror.keyName = keyName;\n    CodeMirror.isModifierKey = isModifierKey;\n    CodeMirror.lookupKey = lookupKey;\n    CodeMirror.normalizeKeyMap = normalizeKeyMap;\n    CodeMirror.StringStream = StringStream;\n    CodeMirror.SharedTextMarker = SharedTextMarker;\n    CodeMirror.TextMarker = TextMarker;\n    CodeMirror.LineWidget = LineWidget;\n    CodeMirror.e_preventDefault = e_preventDefault;\n    CodeMirror.e_stopPropagation = e_stopPropagation;\n    CodeMirror.e_stop = e_stop;\n    CodeMirror.addClass = addClass;\n    CodeMirror.contains = contains;\n    CodeMirror.rmClass = rmClass;\n    CodeMirror.keyNames = keyNames;\n  }\n\n  // EDITOR CONSTRUCTOR\n\n  defineOptions(CodeMirror);\n\n  addEditorMethods(CodeMirror);\n\n  // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n  var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n  for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n    { CodeMirror.prototype[prop] = (function(method) {\n      return function() {return method.apply(this.doc, arguments)}\n    })(Doc.prototype[prop]); } }\n\n  eventMixin(Doc);\n  CodeMirror.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\n  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\n  CodeMirror.defineMode = function(name/*, mode, …*/) {\n    if (!CodeMirror.defaults.mode && name != \"null\") { CodeMirror.defaults.mode = name; }\n    defineMode.apply(this, arguments);\n  };\n\n  CodeMirror.defineMIME = defineMIME;\n\n  // Minimal default mode.\n  CodeMirror.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\n  CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n  // EXTENSIONS\n\n  CodeMirror.defineExtension = function (name, func) {\n    CodeMirror.prototype[name] = func;\n  };\n  CodeMirror.defineDocExtension = function (name, func) {\n    Doc.prototype[name] = func;\n  };\n\n  CodeMirror.fromTextArea = fromTextArea;\n\n  addLegacyProps(CodeMirror);\n\n  CodeMirror.version = \"5.58.3\";\n\n  return CodeMirror;\n\n})));\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"))\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod)\n  else // Plain browser env\n    mod(CodeMirror)\n})(function(CodeMirror) {\n  \"use strict\"\n\n  CodeMirror.defineOption(\"autoRefresh\", false, function(cm, val) {\n    if (cm.state.autoRefresh) {\n      stopListening(cm, cm.state.autoRefresh)\n      cm.state.autoRefresh = null\n    }\n    if (val && cm.display.wrapper.offsetHeight == 0)\n      startListening(cm, cm.state.autoRefresh = {delay: val.delay || 250})\n  })\n\n  function startListening(cm, state) {\n    function check() {\n      if (cm.display.wrapper.offsetHeight) {\n        stopListening(cm, state)\n        if (cm.display.lastWrapHeight != cm.display.wrapper.clientHeight)\n          cm.refresh()\n      } else {\n        state.timeout = setTimeout(check, state.delay)\n      }\n    }\n    state.timeout = setTimeout(check, state.delay)\n    state.hurry = function() {\n      clearTimeout(state.timeout)\n      state.timeout = setTimeout(check, 50)\n    }\n    CodeMirror.on(window, \"mouseup\", state.hurry)\n    CodeMirror.on(window, \"keyup\", state.hurry)\n  }\n\n  function stopListening(_cm, state) {\n    clearTimeout(state.timeout)\n    CodeMirror.off(window, \"mouseup\", state.hurry)\n    CodeMirror.off(window, \"keyup\", state.hurry)\n  }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar htmlConfig = {\n  autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,\n                    'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,\n                    'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,\n                    'track': true, 'wbr': true, 'menuitem': true},\n  implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,\n                     'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,\n                     'th': true, 'tr': true},\n  contextGrabbers: {\n    'dd': {'dd': true, 'dt': true},\n    'dt': {'dd': true, 'dt': true},\n    'li': {'li': true},\n    'option': {'option': true, 'optgroup': true},\n    'optgroup': {'optgroup': true},\n    'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,\n          'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,\n          'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,\n          'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,\n          'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},\n    'rp': {'rp': true, 'rt': true},\n    'rt': {'rp': true, 'rt': true},\n    'tbody': {'tbody': true, 'tfoot': true},\n    'td': {'td': true, 'th': true},\n    'tfoot': {'tbody': true},\n    'th': {'td': true, 'th': true},\n    'thead': {'tbody': true, 'tfoot': true},\n    'tr': {'tr': true}\n  },\n  doNotIndent: {\"pre\": true},\n  allowUnquoted: true,\n  allowMissing: true,\n  caseFold: true\n}\n\nvar xmlConfig = {\n  autoSelfClosers: {},\n  implicitlyClosed: {},\n  contextGrabbers: {},\n  doNotIndent: {},\n  allowUnquoted: false,\n  allowMissing: false,\n  allowMissingTagName: false,\n  caseFold: false\n}\n\nCodeMirror.defineMode(\"xml\", function(editorConf, config_) {\n  var indentUnit = editorConf.indentUnit\n  var config = {}\n  var defaults = config_.htmlMode ? htmlConfig : xmlConfig\n  for (var prop in defaults) config[prop] = defaults[prop]\n  for (var prop in config_) config[prop] = config_[prop]\n\n  // Return variables for tokenizers\n  var type, setStyle;\n\n  function inText(stream, state) {\n    function chain(parser) {\n      state.tokenize = parser;\n      return parser(stream, state);\n    }\n\n    var ch = stream.next();\n    if (ch == \"<\") {\n      if (stream.eat(\"!\")) {\n        if (stream.eat(\"[\")) {\n          if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n          else return null;\n        } else if (stream.match(\"--\")) {\n          return chain(inBlock(\"comment\", \"-->\"));\n        } else if (stream.match(\"DOCTYPE\", true, true)) {\n          stream.eatWhile(/[\\w\\._\\-]/);\n          return chain(doctype(1));\n        } else {\n          return null;\n        }\n      } else if (stream.eat(\"?\")) {\n        stream.eatWhile(/[\\w\\._\\-]/);\n        state.tokenize = inBlock(\"meta\", \"?>\");\n        return \"meta\";\n      } else {\n        type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n        state.tokenize = inTag;\n        return \"tag bracket\";\n      }\n    } else if (ch == \"&\") {\n      var ok;\n      if (stream.eat(\"#\")) {\n        if (stream.eat(\"x\")) {\n          ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n        } else {\n          ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n        }\n      } else {\n        ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n      }\n      return ok ? \"atom\" : \"error\";\n    } else {\n      stream.eatWhile(/[^&<]/);\n      return null;\n    }\n  }\n  inText.isInText = true;\n\n  function inTag(stream, state) {\n    var ch = stream.next();\n    if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n      state.tokenize = inText;\n      type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n      return \"tag bracket\";\n    } else if (ch == \"=\") {\n      type = \"equals\";\n      return null;\n    } else if (ch == \"<\") {\n      state.tokenize = inText;\n      state.state = baseState;\n      state.tagName = state.tagStart = null;\n      var next = state.tokenize(stream, state);\n      return next ? next + \" tag error\" : \"tag error\";\n    } else if (/[\\'\\\"]/.test(ch)) {\n      state.tokenize = inAttribute(ch);\n      state.stringStartCol = stream.column();\n      return state.tokenize(stream, state);\n    } else {\n      stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n      return \"word\";\n    }\n  }\n\n  function inAttribute(quote) {\n    var closure = function(stream, state) {\n      while (!stream.eol()) {\n        if (stream.next() == quote) {\n          state.tokenize = inTag;\n          break;\n        }\n      }\n      return \"string\";\n    };\n    closure.isInAttribute = true;\n    return closure;\n  }\n\n  function inBlock(style, terminator) {\n    return function(stream, state) {\n      while (!stream.eol()) {\n        if (stream.match(terminator)) {\n          state.tokenize = inText;\n          break;\n        }\n        stream.next();\n      }\n      return style;\n    }\n  }\n\n  function doctype(depth) {\n    return function(stream, state) {\n      var ch;\n      while ((ch = stream.next()) != null) {\n        if (ch == \"<\") {\n          state.tokenize = doctype(depth + 1);\n          return state.tokenize(stream, state);\n        } else if (ch == \">\") {\n          if (depth == 1) {\n            state.tokenize = inText;\n            break;\n          } else {\n            state.tokenize = doctype(depth - 1);\n            return state.tokenize(stream, state);\n          }\n        }\n      }\n      return \"meta\";\n    };\n  }\n\n  function Context(state, tagName, startOfLine) {\n    this.prev = state.context;\n    this.tagName = tagName || \"\";\n    this.indent = state.indented;\n    this.startOfLine = startOfLine;\n    if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n      this.noIndent = true;\n  }\n  function popContext(state) {\n    if (state.context) state.context = state.context.prev;\n  }\n  function maybePopContext(state, nextTagName) {\n    var parentTagName;\n    while (true) {\n      if (!state.context) {\n        return;\n      }\n      parentTagName = state.context.tagName;\n      if (!config.contextGrabbers.hasOwnProperty(parentTagName) ||\n          !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {\n        return;\n      }\n      popContext(state);\n    }\n  }\n\n  function baseState(type, stream, state) {\n    if (type == \"openTag\") {\n      state.tagStart = stream.column();\n      return tagNameState;\n    } else if (type == \"closeTag\") {\n      return closeTagNameState;\n    } else {\n      return baseState;\n    }\n  }\n  function tagNameState(type, stream, state) {\n    if (type == \"word\") {\n      state.tagName = stream.current();\n      setStyle = \"tag\";\n      return attrState;\n    } else if (config.allowMissingTagName && type == \"endTag\") {\n      setStyle = \"tag bracket\";\n      return attrState(type, stream, state);\n    } else {\n      setStyle = \"error\";\n      return tagNameState;\n    }\n  }\n  function closeTagNameState(type, stream, state) {\n    if (type == \"word\") {\n      var tagName = stream.current();\n      if (state.context && state.context.tagName != tagName &&\n          config.implicitlyClosed.hasOwnProperty(state.context.tagName))\n        popContext(state);\n      if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {\n        setStyle = \"tag\";\n        return closeState;\n      } else {\n        setStyle = \"tag error\";\n        return closeStateErr;\n      }\n    } else if (config.allowMissingTagName && type == \"endTag\") {\n      setStyle = \"tag bracket\";\n      return closeState(type, stream, state);\n    } else {\n      setStyle = \"error\";\n      return closeStateErr;\n    }\n  }\n\n  function closeState(type, _stream, state) {\n    if (type != \"endTag\") {\n      setStyle = \"error\";\n      return closeState;\n    }\n    popContext(state);\n    return baseState;\n  }\n  function closeStateErr(type, stream, state) {\n    setStyle = \"error\";\n    return closeState(type, stream, state);\n  }\n\n  function attrState(type, _stream, state) {\n    if (type == \"word\") {\n      setStyle = \"attribute\";\n      return attrEqState;\n    } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n      var tagName = state.tagName, tagStart = state.tagStart;\n      state.tagName = state.tagStart = null;\n      if (type == \"selfcloseTag\" ||\n          config.autoSelfClosers.hasOwnProperty(tagName)) {\n        maybePopContext(state, tagName);\n      } else {\n        maybePopContext(state, tagName);\n        state.context = new Context(state, tagName, tagStart == state.indented);\n      }\n      return baseState;\n    }\n    setStyle = \"error\";\n    return attrState;\n  }\n  function attrEqState(type, stream, state) {\n    if (type == \"equals\") return attrValueState;\n    if (!config.allowMissing) setStyle = \"error\";\n    return attrState(type, stream, state);\n  }\n  function attrValueState(type, stream, state) {\n    if (type == \"string\") return attrContinuedState;\n    if (type == \"word\" && config.allowUnquoted) {setStyle = \"string\"; return attrState;}\n    setStyle = \"error\";\n    return attrState(type, stream, state);\n  }\n  function attrContinuedState(type, stream, state) {\n    if (type == \"string\") return attrContinuedState;\n    return attrState(type, stream, state);\n  }\n\n  return {\n    startState: function(baseIndent) {\n      var state = {tokenize: inText,\n                   state: baseState,\n                   indented: baseIndent || 0,\n                   tagName: null, tagStart: null,\n                   context: null}\n      if (baseIndent != null) state.baseIndent = baseIndent\n      return state\n    },\n\n    token: function(stream, state) {\n      if (!state.tagName && stream.sol())\n        state.indented = stream.indentation();\n\n      if (stream.eatSpace()) return null;\n      type = null;\n      var style = state.tokenize(stream, state);\n      if ((style || type) && style != \"comment\") {\n        setStyle = null;\n        state.state = state.state(type || style, stream, state);\n        if (setStyle)\n          style = setStyle == \"error\" ? style + \" error\" : setStyle;\n      }\n      return style;\n    },\n\n    indent: function(state, textAfter, fullLine) {\n      var context = state.context;\n      // Indent multi-line strings (e.g. css).\n      if (state.tokenize.isInAttribute) {\n        if (state.tagStart == state.indented)\n          return state.stringStartCol + 1;\n        else\n          return state.indented + indentUnit;\n      }\n      if (context && context.noIndent) return CodeMirror.Pass;\n      if (state.tokenize != inTag && state.tokenize != inText)\n        return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n      // Indent the starts of attribute names.\n      if (state.tagName) {\n        if (config.multilineTagIndentPastTag !== false)\n          return state.tagStart + state.tagName.length + 2;\n        else\n          return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n      }\n      if (config.alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n      var tagAfter = textAfter && /^<(\\/)?([\\w_:\\.-]*)/.exec(textAfter);\n      if (tagAfter && tagAfter[1]) { // Closing tag spotted\n        while (context) {\n          if (context.tagName == tagAfter[2]) {\n            context = context.prev;\n            break;\n          } else if (config.implicitlyClosed.hasOwnProperty(context.tagName)) {\n            context = context.prev;\n          } else {\n            break;\n          }\n        }\n      } else if (tagAfter) { // Opening tag spotted\n        while (context) {\n          var grabbers = config.contextGrabbers[context.tagName];\n          if (grabbers && grabbers.hasOwnProperty(tagAfter[2]))\n            context = context.prev;\n          else\n            break;\n        }\n      }\n      while (context && context.prev && !context.startOfLine)\n        context = context.prev;\n      if (context) return context.indent + indentUnit;\n      else return state.baseIndent || 0;\n    },\n\n    electricInput: /<\\/[\\s\\w:]+>$/,\n    blockCommentStart: \"<!--\",\n    blockCommentEnd: \"-->\",\n\n    configuration: config.htmlMode ? \"html\" : \"xml\",\n    helperType: config.htmlMode ? \"html\" : \"xml\",\n\n    skipAttribute: function(state) {\n      if (state.state == attrValueState)\n        state.state = attrState\n    },\n\n    xmlCurrentTag: function(state) {\n      return state.tagName ? {name: state.tagName, close: state.type == \"closeTag\"} : null\n    },\n\n    xmlCurrentContext: function(state) {\n      var context = []\n      for (var cx = state.context; cx; cx = cx.prev)\n        context.push(cx.tagName)\n      return context.reverse()\n    }\n  };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n  CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"yaml\", function() {\n\n  var cons = ['true', 'false', 'on', 'off', 'yes', 'no'];\n  var keywordRegex = new RegExp(\"\\\\b((\"+cons.join(\")|(\")+\"))$\", 'i');\n\n  return {\n    token: function(stream, state) {\n      var ch = stream.peek();\n      var esc = state.escaped;\n      state.escaped = false;\n      /* comments */\n      if (ch == \"#\" && (stream.pos == 0 || /\\s/.test(stream.string.charAt(stream.pos - 1)))) {\n        stream.skipToEnd();\n        return \"comment\";\n      }\n\n      if (stream.match(/^('([^']|\\\\.)*'?|\"([^\"]|\\\\.)*\"?)/))\n        return \"string\";\n\n      if (state.literal && stream.indentation() > state.keyCol) {\n        stream.skipToEnd(); return \"string\";\n      } else if (state.literal) { state.literal = false; }\n      if (stream.sol()) {\n        state.keyCol = 0;\n        state.pair = false;\n        state.pairStart = false;\n        /* document start */\n        if(stream.match(/---/)) { return \"def\"; }\n        /* document end */\n        if (stream.match(/\\.\\.\\./)) { return \"def\"; }\n        /* array list item */\n        if (stream.match(/\\s*-\\s+/)) { return 'meta'; }\n      }\n      /* inline pairs/lists */\n      if (stream.match(/^(\\{|\\}|\\[|\\])/)) {\n        if (ch == '{')\n          state.inlinePairs++;\n        else if (ch == '}')\n          state.inlinePairs--;\n        else if (ch == '[')\n          state.inlineList++;\n        else\n          state.inlineList--;\n        return 'meta';\n      }\n\n      /* list seperator */\n      if (state.inlineList > 0 && !esc && ch == ',') {\n        stream.next();\n        return 'meta';\n      }\n      /* pairs seperator */\n      if (state.inlinePairs > 0 && !esc && ch == ',') {\n        state.keyCol = 0;\n        state.pair = false;\n        state.pairStart = false;\n        stream.next();\n        return 'meta';\n      }\n\n      /* start of value of a pair */\n      if (state.pairStart) {\n        /* block literals */\n        if (stream.match(/^\\s*(\\||\\>)\\s*/)) { state.literal = true; return 'meta'; };\n        /* references */\n        if (stream.match(/^\\s*(\\&|\\*)[a-z0-9\\._-]+\\b/i)) { return 'variable-2'; }\n        /* numbers */\n        if (state.inlinePairs == 0 && stream.match(/^\\s*-?[0-9\\.\\,]+\\s?$/)) { return 'number'; }\n        if (state.inlinePairs > 0 && stream.match(/^\\s*-?[0-9\\.\\,]+\\s?(?=(,|}))/)) { return 'number'; }\n        /* keywords */\n        if (stream.match(keywordRegex)) { return 'keyword'; }\n      }\n\n      /* pairs (associative arrays) -> key */\n      if (!state.pair && stream.match(/^\\s*(?:[,\\[\\]{}&*!|>'\"%@`][^\\s'\":]|[^,\\[\\]{}#&*!|>'\"%@`])[^#]*?(?=\\s*:($|\\s))/)) {\n        state.pair = true;\n        state.keyCol = stream.indentation();\n        return \"atom\";\n      }\n      if (state.pair && stream.match(/^:\\s*/)) { state.pairStart = true; return 'meta'; }\n\n      /* nothing found, continue */\n      state.pairStart = false;\n      state.escaped = (ch == '\\\\');\n      stream.next();\n      return null;\n    },\n    startState: function() {\n      return {\n        pair: false,\n        pairStart: false,\n        keyCol: 0,\n        inlinePairs: 0,\n        inlineList: 0,\n        literal: false,\n        escaped: false\n      };\n    },\n    lineComment: \"#\",\n    fold: \"indent\"\n  };\n});\n\nCodeMirror.defineMIME(\"text/x-yaml\", \"yaml\");\nCodeMirror.defineMIME(\"text/yaml\", \"yaml\");\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  function wordRegexp(words) {\n    return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\");\n  }\n\n  var wordOperators = wordRegexp([\"and\", \"or\", \"not\", \"is\"]);\n  var commonKeywords = [\"as\", \"assert\", \"break\", \"class\", \"continue\",\n                        \"def\", \"del\", \"elif\", \"else\", \"except\", \"finally\",\n                        \"for\", \"from\", \"global\", \"if\", \"import\",\n                        \"lambda\", \"pass\", \"raise\", \"return\",\n                        \"try\", \"while\", \"with\", \"yield\", \"in\"];\n  var commonBuiltins = [\"abs\", \"all\", \"any\", \"bin\", \"bool\", \"bytearray\", \"callable\", \"chr\",\n                        \"classmethod\", \"compile\", \"complex\", \"delattr\", \"dict\", \"dir\", \"divmod\",\n                        \"enumerate\", \"eval\", \"filter\", \"float\", \"format\", \"frozenset\",\n                        \"getattr\", \"globals\", \"hasattr\", \"hash\", \"help\", \"hex\", \"id\",\n                        \"input\", \"int\", \"isinstance\", \"issubclass\", \"iter\", \"len\",\n                        \"list\", \"locals\", \"map\", \"max\", \"memoryview\", \"min\", \"next\",\n                        \"object\", \"oct\", \"open\", \"ord\", \"pow\", \"property\", \"range\",\n                        \"repr\", \"reversed\", \"round\", \"set\", \"setattr\", \"slice\",\n                        \"sorted\", \"staticmethod\", \"str\", \"sum\", \"super\", \"tuple\",\n                        \"type\", \"vars\", \"zip\", \"__import__\", \"NotImplemented\",\n                        \"Ellipsis\", \"__debug__\"];\n  CodeMirror.registerHelper(\"hintWords\", \"python\", commonKeywords.concat(commonBuiltins));\n\n  function top(state) {\n    return state.scopes[state.scopes.length - 1];\n  }\n\n  CodeMirror.defineMode(\"python\", function(conf, parserConf) {\n    var ERRORCLASS = \"error\";\n\n    var delimiters = parserConf.delimiters || parserConf.singleDelimiters || /^[\\(\\)\\[\\]\\{\\}@,:`=;\\.\\\\]/;\n    //               (Backwards-compatibility with old, cumbersome config system)\n    var operators = [parserConf.singleOperators, parserConf.doubleOperators, parserConf.doubleDelimiters, parserConf.tripleDelimiters,\n                     parserConf.operators || /^([-+*/%\\/&|^]=?|[<>=]+|\\/\\/=?|\\*\\*=?|!=|[~!@]|\\.\\.\\.)/]\n    for (var i = 0; i < operators.length; i++) if (!operators[i]) operators.splice(i--, 1)\n\n    var hangingIndent = parserConf.hangingIndent || conf.indentUnit;\n\n    var myKeywords = commonKeywords, myBuiltins = commonBuiltins;\n    if (parserConf.extra_keywords != undefined)\n      myKeywords = myKeywords.concat(parserConf.extra_keywords);\n\n    if (parserConf.extra_builtins != undefined)\n      myBuiltins = myBuiltins.concat(parserConf.extra_builtins);\n\n    var py3 = !(parserConf.version && Number(parserConf.version) < 3)\n    if (py3) {\n      // since http://legacy.python.org/dev/peps/pep-0465/ @ is also an operator\n      var identifiers = parserConf.identifiers|| /^[_A-Za-z\\u00A1-\\uFFFF][_A-Za-z0-9\\u00A1-\\uFFFF]*/;\n      myKeywords = myKeywords.concat([\"nonlocal\", \"False\", \"True\", \"None\", \"async\", \"await\"]);\n      myBuiltins = myBuiltins.concat([\"ascii\", \"bytes\", \"exec\", \"print\"]);\n      var stringPrefixes = new RegExp(\"^(([rbuf]|(br)|(fr))?('{3}|\\\"{3}|['\\\"]))\", \"i\");\n    } else {\n      var identifiers = parserConf.identifiers|| /^[_A-Za-z][_A-Za-z0-9]*/;\n      myKeywords = myKeywords.concat([\"exec\", \"print\"]);\n      myBuiltins = myBuiltins.concat([\"apply\", \"basestring\", \"buffer\", \"cmp\", \"coerce\", \"execfile\",\n                                      \"file\", \"intern\", \"long\", \"raw_input\", \"reduce\", \"reload\",\n                                      \"unichr\", \"unicode\", \"xrange\", \"False\", \"True\", \"None\"]);\n      var stringPrefixes = new RegExp(\"^(([rubf]|(ur)|(br))?('{3}|\\\"{3}|['\\\"]))\", \"i\");\n    }\n    var keywords = wordRegexp(myKeywords);\n    var builtins = wordRegexp(myBuiltins);\n\n    // tokenizers\n    function tokenBase(stream, state) {\n      var sol = stream.sol() && state.lastToken != \"\\\\\"\n      if (sol) state.indent = stream.indentation()\n      // Handle scope changes\n      if (sol && top(state).type == \"py\") {\n        var scopeOffset = top(state).offset;\n        if (stream.eatSpace()) {\n          var lineOffset = stream.indentation();\n          if (lineOffset > scopeOffset)\n            pushPyScope(state);\n          else if (lineOffset < scopeOffset && dedent(stream, state) && stream.peek() != \"#\")\n            state.errorToken = true;\n          return null;\n        } else {\n          var style = tokenBaseInner(stream, state);\n          if (scopeOffset > 0 && dedent(stream, state))\n            style += \" \" + ERRORCLASS;\n          return style;\n        }\n      }\n      return tokenBaseInner(stream, state);\n    }\n\n    function tokenBaseInner(stream, state, inFormat) {\n      if (stream.eatSpace()) return null;\n\n      // Handle Comments\n      if (!inFormat && stream.match(/^#.*/)) return \"comment\";\n\n      // Handle Number Literals\n      if (stream.match(/^[0-9\\.]/, false)) {\n        var floatLiteral = false;\n        // Floats\n        if (stream.match(/^[\\d_]*\\.\\d+(e[\\+\\-]?\\d+)?/i)) { floatLiteral = true; }\n        if (stream.match(/^[\\d_]+\\.\\d*/)) { floatLiteral = true; }\n        if (stream.match(/^\\.\\d+/)) { floatLiteral = true; }\n        if (floatLiteral) {\n          // Float literals may be \"imaginary\"\n          stream.eat(/J/i);\n          return \"number\";\n        }\n        // Integers\n        var intLiteral = false;\n        // Hex\n        if (stream.match(/^0x[0-9a-f_]+/i)) intLiteral = true;\n        // Binary\n        if (stream.match(/^0b[01_]+/i)) intLiteral = true;\n        // Octal\n        if (stream.match(/^0o[0-7_]+/i)) intLiteral = true;\n        // Decimal\n        if (stream.match(/^[1-9][\\d_]*(e[\\+\\-]?[\\d_]+)?/)) {\n          // Decimal literals may be \"imaginary\"\n          stream.eat(/J/i);\n          // TODO - Can you have imaginary longs?\n          intLiteral = true;\n        }\n        // Zero by itself with no other piece of number.\n        if (stream.match(/^0(?![\\dx])/i)) intLiteral = true;\n        if (intLiteral) {\n          // Integer literals may be \"long\"\n          stream.eat(/L/i);\n          return \"number\";\n        }\n      }\n\n      // Handle Strings\n      if (stream.match(stringPrefixes)) {\n        var isFmtString = stream.current().toLowerCase().indexOf('f') !== -1;\n        if (!isFmtString) {\n          state.tokenize = tokenStringFactory(stream.current(), state.tokenize);\n          return state.tokenize(stream, state);\n        } else {\n          state.tokenize = formatStringFactory(stream.current(), state.tokenize);\n          return state.tokenize(stream, state);\n        }\n      }\n\n      for (var i = 0; i < operators.length; i++)\n        if (stream.match(operators[i])) return \"operator\"\n\n      if (stream.match(delimiters)) return \"punctuation\";\n\n      if (state.lastToken == \".\" && stream.match(identifiers))\n        return \"property\";\n\n      if (stream.match(keywords) || stream.match(wordOperators))\n        return \"keyword\";\n\n      if (stream.match(builtins))\n        return \"builtin\";\n\n      if (stream.match(/^(self|cls)\\b/))\n        return \"variable-2\";\n\n      if (stream.match(identifiers)) {\n        if (state.lastToken == \"def\" || state.lastToken == \"class\")\n          return \"def\";\n        return \"variable\";\n      }\n\n      // Handle non-detected items\n      stream.next();\n      return inFormat ? null :ERRORCLASS;\n    }\n\n    function formatStringFactory(delimiter, tokenOuter) {\n      while (\"rubf\".indexOf(delimiter.charAt(0).toLowerCase()) >= 0)\n        delimiter = delimiter.substr(1);\n\n      var singleline = delimiter.length == 1;\n      var OUTCLASS = \"string\";\n\n      function tokenNestedExpr(depth) {\n        return function(stream, state) {\n          var inner = tokenBaseInner(stream, state, true)\n          if (inner == \"punctuation\") {\n            if (stream.current() == \"{\") {\n              state.tokenize = tokenNestedExpr(depth + 1)\n            } else if (stream.current() == \"}\") {\n              if (depth > 1) state.tokenize = tokenNestedExpr(depth - 1)\n              else state.tokenize = tokenString\n            }\n          }\n          return inner\n        }\n      }\n\n      function tokenString(stream, state) {\n        while (!stream.eol()) {\n          stream.eatWhile(/[^'\"\\{\\}\\\\]/);\n          if (stream.eat(\"\\\\\")) {\n            stream.next();\n            if (singleline && stream.eol())\n              return OUTCLASS;\n          } else if (stream.match(delimiter)) {\n            state.tokenize = tokenOuter;\n            return OUTCLASS;\n          } else if (stream.match('{{')) {\n            // ignore {{ in f-str\n            return OUTCLASS;\n          } else if (stream.match('{', false)) {\n            // switch to nested mode\n            state.tokenize = tokenNestedExpr(0)\n            if (stream.current()) return OUTCLASS;\n            else return state.tokenize(stream, state)\n          } else if (stream.match('}}')) {\n            return OUTCLASS;\n          } else if (stream.match('}')) {\n            // single } in f-string is an error\n            return ERRORCLASS;\n          } else {\n            stream.eat(/['\"]/);\n          }\n        }\n        if (singleline) {\n          if (parserConf.singleLineStringErrors)\n            return ERRORCLASS;\n          else\n            state.tokenize = tokenOuter;\n        }\n        return OUTCLASS;\n      }\n      tokenString.isString = true;\n      return tokenString;\n    }\n\n    function tokenStringFactory(delimiter, tokenOuter) {\n      while (\"rubf\".indexOf(delimiter.charAt(0).toLowerCase()) >= 0)\n        delimiter = delimiter.substr(1);\n\n      var singleline = delimiter.length == 1;\n      var OUTCLASS = \"string\";\n\n      function tokenString(stream, state) {\n        while (!stream.eol()) {\n          stream.eatWhile(/[^'\"\\\\]/);\n          if (stream.eat(\"\\\\\")) {\n            stream.next();\n            if (singleline && stream.eol())\n              return OUTCLASS;\n          } else if (stream.match(delimiter)) {\n            state.tokenize = tokenOuter;\n            return OUTCLASS;\n          } else {\n            stream.eat(/['\"]/);\n          }\n        }\n        if (singleline) {\n          if (parserConf.singleLineStringErrors)\n            return ERRORCLASS;\n          else\n            state.tokenize = tokenOuter;\n        }\n        return OUTCLASS;\n      }\n      tokenString.isString = true;\n      return tokenString;\n    }\n\n    function pushPyScope(state) {\n      while (top(state).type != \"py\") state.scopes.pop()\n      state.scopes.push({offset: top(state).offset + conf.indentUnit,\n                         type: \"py\",\n                         align: null})\n    }\n\n    function pushBracketScope(stream, state, type) {\n      var align = stream.match(/^([\\s\\[\\{\\(]|#.*)*$/, false) ? null : stream.column() + 1\n      state.scopes.push({offset: state.indent + hangingIndent,\n                         type: type,\n                         align: align})\n    }\n\n    function dedent(stream, state) {\n      var indented = stream.indentation();\n      while (state.scopes.length > 1 && top(state).offset > indented) {\n        if (top(state).type != \"py\") return true;\n        state.scopes.pop();\n      }\n      return top(state).offset != indented;\n    }\n\n    function tokenLexer(stream, state) {\n      if (stream.sol()) state.beginningOfLine = true;\n\n      var style = state.tokenize(stream, state);\n      var current = stream.current();\n\n      // Handle decorators\n      if (state.beginningOfLine && current == \"@\")\n        return stream.match(identifiers, false) ? \"meta\" : py3 ? \"operator\" : ERRORCLASS;\n\n      if (/\\S/.test(current)) state.beginningOfLine = false;\n\n      if ((style == \"variable\" || style == \"builtin\")\n          && state.lastToken == \"meta\")\n        style = \"meta\";\n\n      // Handle scope changes.\n      if (current == \"pass\" || current == \"return\")\n        state.dedent += 1;\n\n      if (current == \"lambda\") state.lambda = true;\n      if (current == \":\" && !state.lambda && top(state).type == \"py\")\n        pushPyScope(state);\n\n      if (current.length == 1 && !/string|comment/.test(style)) {\n        var delimiter_index = \"[({\".indexOf(current);\n        if (delimiter_index != -1)\n          pushBracketScope(stream, state, \"])}\".slice(delimiter_index, delimiter_index+1));\n\n        delimiter_index = \"])}\".indexOf(current);\n        if (delimiter_index != -1) {\n          if (top(state).type == current) state.indent = state.scopes.pop().offset - hangingIndent\n          else return ERRORCLASS;\n        }\n      }\n      if (state.dedent > 0 && stream.eol() && top(state).type == \"py\") {\n        if (state.scopes.length > 1) state.scopes.pop();\n        state.dedent -= 1;\n      }\n\n      return style;\n    }\n\n    var external = {\n      startState: function(basecolumn) {\n        return {\n          tokenize: tokenBase,\n          scopes: [{offset: basecolumn || 0, type: \"py\", align: null}],\n          indent: basecolumn || 0,\n          lastToken: null,\n          lambda: false,\n          dedent: 0\n        };\n      },\n\n      token: function(stream, state) {\n        var addErr = state.errorToken;\n        if (addErr) state.errorToken = false;\n        var style = tokenLexer(stream, state);\n\n        if (style && style != \"comment\")\n          state.lastToken = (style == \"keyword\" || style == \"punctuation\") ? stream.current() : style;\n        if (style == \"punctuation\") style = null;\n\n        if (stream.eol() && state.lambda)\n          state.lambda = false;\n        return addErr ? style + \" \" + ERRORCLASS : style;\n      },\n\n      indent: function(state, textAfter) {\n        if (state.tokenize != tokenBase)\n          return state.tokenize.isString ? CodeMirror.Pass : 0;\n\n        var scope = top(state), closing = scope.type == textAfter.charAt(0)\n        if (scope.align != null)\n          return scope.align - (closing ? 1 : 0)\n        else\n          return scope.offset - (closing ? hangingIndent : 0)\n      },\n\n      electricInput: /^\\s*[\\}\\]\\)]$/,\n      closeBrackets: {triples: \"'\\\"\"},\n      lineComment: \"#\",\n      fold: \"indent\"\n    };\n    return external;\n  });\n\n  CodeMirror.defineMIME(\"text/x-python\", \"python\");\n\n  var words = function(str) { return str.split(\" \"); };\n\n  CodeMirror.defineMIME(\"text/x-cython\", {\n    name: \"python\",\n    extra_keywords: words(\"by cdef cimport cpdef ctypedef enum except \"+\n                          \"extern gil include nogil property public \"+\n                          \"readonly struct union DEF IF ELIF ELSE\")\n  });\n\n});\n",null,null,null,null,null,null,null,null,"//! moment.js\n//! version : 2.29.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks() {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback(callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return (\n            input instanceof Array ||\n            Object.prototype.toString.call(input) === '[object Array]'\n        );\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return (\n            input != null &&\n            Object.prototype.toString.call(input) === '[object Object]'\n        );\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return Object.getOwnPropertyNames(obj).length === 0;\n        } else {\n            var k;\n            for (k in obj) {\n                if (hasOwnProp(obj, k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return (\n            typeof input === 'number' ||\n            Object.prototype.toString.call(input) === '[object Number]'\n        );\n    }\n\n    function isDate(input) {\n        return (\n            input instanceof Date ||\n            Object.prototype.toString.call(input) === '[object Date]'\n        );\n    }\n\n    function map(arr, fn) {\n        var res = [],\n            i;\n        for (i = 0; i < arr.length; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty: false,\n            unusedTokens: [],\n            unusedInput: [],\n            overflow: -2,\n            charsLeftOver: 0,\n            nullInput: false,\n            invalidEra: null,\n            invalidMonth: null,\n            invalidFormat: false,\n            userInvalidated: false,\n            iso: false,\n            parsedDateParts: [],\n            era: null,\n            meridiem: null,\n            rfc2822: false,\n            weekdayMismatch: false,\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this),\n                len = t.length >>> 0,\n                i;\n\n            for (i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m),\n                parsedParts = some.call(flags.parsedDateParts, function (i) {\n                    return i != null;\n                }),\n                isNowValid =\n                    !isNaN(m._d.getTime()) &&\n                    flags.overflow < 0 &&\n                    !flags.empty &&\n                    !flags.invalidEra &&\n                    !flags.invalidMonth &&\n                    !flags.invalidWeekday &&\n                    !flags.weekdayMismatch &&\n                    !flags.nullInput &&\n                    !flags.invalidFormat &&\n                    !flags.userInvalidated &&\n                    (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid =\n                    isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            } else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid(flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        } else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = (hooks.momentProperties = []),\n        updateInProgress = false;\n\n    function copyConfig(to, from) {\n        var i, prop, val;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentProperties.length > 0) {\n            for (i = 0; i < momentProperties.length; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment(obj) {\n        return (\n            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n        );\n    }\n\n    function warn(msg) {\n        if (\n            hooks.suppressDeprecationWarnings === false &&\n            typeof console !== 'undefined' &&\n            console.warn\n        ) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [],\n                    arg,\n                    i,\n                    key;\n                for (i = 0; i < arguments.length; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (key in arguments[0]) {\n                            if (hasOwnProp(arguments[0], key)) {\n                                arg += key + ': ' + arguments[0][key] + ', ';\n                            }\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(\n                    msg +\n                        '\\nArguments: ' +\n                        Array.prototype.slice.call(args).join('') +\n                        '\\n' +\n                        new Error().stack\n                );\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    function set(config) {\n        var prop, i;\n        for (i in config) {\n            if (hasOwnProp(config, i)) {\n                prop = config[i];\n                if (isFunction(prop)) {\n                    this[i] = prop;\n                } else {\n                    this['_' + i] = prop;\n                }\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' +\n                /\\d{1,2}/.source\n        );\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig),\n            prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (\n                hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])\n            ) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i,\n                res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay: '[Today at] LT',\n        nextDay: '[Tomorrow at] LT',\n        nextWeek: 'dddd [at] LT',\n        lastDay: '[Yesterday at] LT',\n        lastWeek: '[Last] dddd [at] LT',\n        sameElse: 'L',\n    };\n\n    function calendar(key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (\n            (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n            absNumber\n        );\n    }\n\n    var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n        formatFunctions = {},\n        formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken(token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(\n                    func.apply(this, arguments),\n                    token\n                );\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens),\n            i,\n            length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '',\n                i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i])\n                    ? array[i].call(mom, format)\n                    : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] =\n            formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(\n                localFormattingTokens,\n                replaceLongDateFormatTokens\n            );\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var defaultLongDateFormat = {\n        LTS: 'h:mm:ss A',\n        LT: 'h:mm A',\n        L: 'MM/DD/YYYY',\n        LL: 'MMMM D, YYYY',\n        LLL: 'MMMM D, YYYY h:mm A',\n        LLLL: 'dddd, MMMM D, YYYY h:mm A',\n    };\n\n    function longDateFormat(key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper\n            .match(formattingTokens)\n            .map(function (tok) {\n                if (\n                    tok === 'MMMM' ||\n                    tok === 'MM' ||\n                    tok === 'DD' ||\n                    tok === 'dddd'\n                ) {\n                    return tok.slice(1);\n                }\n                return tok;\n            })\n            .join('');\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate() {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d',\n        defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal(number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future: 'in %s',\n        past: '%s ago',\n        s: 'a few seconds',\n        ss: '%d seconds',\n        m: 'a minute',\n        mm: '%d minutes',\n        h: 'an hour',\n        hh: '%d hours',\n        d: 'a day',\n        dd: '%d days',\n        w: 'a week',\n        ww: '%d weeks',\n        M: 'a month',\n        MM: '%d months',\n        y: 'a year',\n        yy: '%d years',\n    };\n\n    function relativeTime(number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return isFunction(output)\n            ? output(number, withoutSuffix, string, isFuture)\n            : output.replace(/%d/i, number);\n    }\n\n    function pastFuture(diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias(unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string'\n            ? aliases[units] || aliases[units.toLowerCase()]\n            : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [],\n            u;\n        for (u in unitsObj) {\n            if (hasOwnProp(unitsObj, u)) {\n                units.push({ unit: u, priority: priorities[u] });\n            }\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    function absFloor(number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    function makeGetSet(unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get(mom, unit) {\n        return mom.isValid()\n            ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n            : NaN;\n    }\n\n    function set$1(mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (\n                unit === 'FullYear' &&\n                isLeapYear(mom.year()) &&\n                mom.month() === 1 &&\n                mom.date() === 29\n            ) {\n                value = toInt(value);\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n                    value,\n                    mom.month(),\n                    daysInMonth(value, mom.month())\n                );\n            } else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet(units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n    function stringSet(units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units),\n                i;\n            for (i = 0; i < prioritized.length; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    var match1 = /\\d/, //       0 - 9\n        match2 = /\\d\\d/, //      00 - 99\n        match3 = /\\d{3}/, //     000 - 999\n        match4 = /\\d{4}/, //    0000 - 9999\n        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n        match1to2 = /\\d\\d?/, //       0 - 99\n        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n        match1to3 = /\\d{1,3}/, //       0 - 999\n        match1to4 = /\\d{1,4}/, //       0 - 9999\n        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n        matchUnsigned = /\\d+/, //       0 - inf\n        matchSigned = /[+-]?\\d+/, //    -inf - inf\n        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n        // any word (or two) characters or numbers including two/three word month in arabic.\n        // includes scottish gaelic two word and hyphenated months\n        matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n        regexes;\n\n    regexes = {};\n\n    function addRegexToken(token, regex, strictRegex) {\n        regexes[token] = isFunction(regex)\n            ? regex\n            : function (isStrict, localeData) {\n                  return isStrict && strictRegex ? strictRegex : regex;\n              };\n    }\n\n    function getParseRegexForToken(token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(\n            s\n                .replace('\\\\', '')\n                .replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (\n                    matched,\n                    p1,\n                    p2,\n                    p3,\n                    p4\n                ) {\n                    return p1 || p2 || p3 || p4;\n                })\n        );\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken(token, callback) {\n        var i,\n            func = callback;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        for (i = 0; i < token.length; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken(token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0,\n        MONTH = 1,\n        DATE = 2,\n        HOUR = 3,\n        MINUTE = 4,\n        SECOND = 5,\n        MILLISECOND = 6,\n        WEEK = 7,\n        WEEKDAY = 8;\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1\n            ? isLeapYear(year)\n                ? 29\n                : 28\n            : 31 - ((modMonth % 7) % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M', match1to2);\n    addRegexToken('MM', match1to2, match2);\n    addRegexToken('MMM', function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(\n            '_'\n        ),\n        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n        defaultMonthsShortRegex = matchWord,\n        defaultMonthsRegex = matchWord;\n\n    function localeMonths(m, format) {\n        if (!m) {\n            return isArray(this._months)\n                ? this._months\n                : this._months['standalone'];\n        }\n        return isArray(this._months)\n            ? this._months[m.month()]\n            : this._months[\n                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                      ? 'format'\n                      : 'standalone'\n              ][m.month()];\n    }\n\n    function localeMonthsShort(m, format) {\n        if (!m) {\n            return isArray(this._monthsShort)\n                ? this._monthsShort\n                : this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort)\n            ? this._monthsShort[m.month()]\n            : this._monthsShort[\n                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n              ][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse(monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp(\n                    '^' + this.months(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n                this._shortMonthsParse[i] = new RegExp(\n                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex =\n                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'MMMM' &&\n                this._longMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'MMM' &&\n                this._shortMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth(mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth(value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth() {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function monthsShortRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict\n                ? this._monthsShortStrictRegex\n                : this._monthsShortRegex;\n        }\n    }\n\n    function monthsRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict\n                ? this._monthsStrictRegex\n                : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._monthsShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY', 4], 0, 'year');\n    addFormatToken(0, ['YYYYY', 5], 0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y', matchSigned);\n    addRegexToken('YY', match1to2, match2);\n    addRegexToken('YYYY', match1to4, match4);\n    addRegexToken('YYYYY', match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] =\n            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear() {\n        return isLeapYear(this.year());\n    }\n\n    function createDate(y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate(y) {\n        var date, args;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear,\n            resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear,\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek,\n            resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear,\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w', match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W', match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (\n        input,\n        week,\n        config,\n        token\n    ) {\n        week[token.substr(0, 1)] = toInt(input);\n    });\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek(mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow: 0, // Sunday is the first day of the week.\n        doy: 6, // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek() {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear() {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek(input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek(input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d', match1to2);\n    addRegexToken('e', match1to2);\n    addRegexToken('E', match1to2);\n    addRegexToken('dd', function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd', function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd', function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays(ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        defaultWeekdaysRegex = matchWord,\n        defaultWeekdaysShortRegex = matchWord,\n        defaultWeekdaysMinRegex = matchWord;\n\n    function localeWeekdays(m, format) {\n        var weekdays = isArray(this._weekdays)\n            ? this._weekdays\n            : this._weekdays[\n                  m && m !== true && this._weekdays.isFormat.test(format)\n                      ? 'format'\n                      : 'standalone'\n              ];\n        return m === true\n            ? shiftWeekdays(weekdays, this._week.dow)\n            : m\n            ? weekdays[m.day()]\n            : weekdays;\n    }\n\n    function localeWeekdaysShort(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : m\n            ? this._weekdaysShort[m.day()]\n            : this._weekdaysShort;\n    }\n\n    function localeWeekdaysMin(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : m\n            ? this._weekdaysMin[m.day()]\n            : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse(weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._shortWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._minWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n            }\n            if (!this._weekdaysParse[i]) {\n                regex =\n                    '^' +\n                    this.weekdays(mom, '') +\n                    '|^' +\n                    this.weekdaysShort(mom, '') +\n                    '|^' +\n                    this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'dddd' &&\n                this._fullWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'ddd' &&\n                this._shortWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'dd' &&\n                this._minWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    function weekdaysRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict\n                ? this._weekdaysStrictRegex\n                : this._weekdaysRegex;\n        }\n    }\n\n    function weekdaysShortRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict\n                ? this._weekdaysShortStrictRegex\n                : this._weekdaysShortRegex;\n        }\n    }\n\n    function weekdaysMinRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict\n                ? this._weekdaysMinStrictRegex\n                : this._weekdaysMinRegex;\n        }\n    }\n\n    function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [],\n            shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            minp,\n            shortp,\n            longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = regexEscape(this.weekdaysMin(mom, ''));\n            shortp = regexEscape(this.weekdaysShort(mom, ''));\n            longp = regexEscape(this.weekdays(mom, ''));\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n            '^(' + minPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return (\n            '' +\n            hFormat.apply(this) +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return (\n            '' +\n            this.hours() +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    function meridiem(token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(\n                this.hours(),\n                this.minutes(),\n                lowercase\n            );\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem(isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a', matchMeridiem);\n    addRegexToken('A', matchMeridiem);\n    addRegexToken('H', match1to2);\n    addRegexToken('h', match1to2);\n    addRegexToken('k', match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM(input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return (input + '').toLowerCase().charAt(0) === 'p';\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n        // Setting the hour should keep the time, because the user explicitly\n        // specified which hour they want. So trying to maintain the same hour (in\n        // a new timezone) makes sense. Adding/subtracting hours does not follow\n        // this rule.\n        getSetHour = makeGetSet('Hours', true);\n\n    function localeMeridiem(hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse,\n    };\n\n    // internal storage for locale config files\n    var locales = {},\n        localeFamilies = {},\n        globalLocale;\n\n    function commonPrefix(arr1, arr2) {\n        var i,\n            minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n            if (arr1[i] !== arr2[i]) {\n                return i;\n            }\n        }\n        return minl;\n    }\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0,\n            j,\n            next,\n            locale,\n            split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (\n                    next &&\n                    next.length >= j &&\n                    commonPrefix(split, next) >= j - 1\n                ) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null,\n            aliasedRequire;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (\n            locales[name] === undefined &&\n            typeof module !== 'undefined' &&\n            module &&\n            module.exports\n        ) {\n            try {\n                oldLocale = globalLocale._abbr;\n                aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {\n                // mark as not found to avoid repeating expensive file require call causing high CPU\n                // when trying to find en-US, en_US, en-us for every format call\n                locales[name] = null; // null means not found\n            }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale(key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            } else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            } else {\n                if (typeof console !== 'undefined' && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn(\n                        'Locale ' + key + ' not found. Did you forget to load it?'\n                    );\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale(name, config) {\n        if (config !== null) {\n            var locale,\n                parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple(\n                    'defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n                );\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config,\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale,\n                tmpLocale,\n                parentConfig = baseConfig;\n\n            if (locales[name] != null && locales[name].parentLocale != null) {\n                // Update existing child locale in-place to avoid memory-leaks\n                locales[name].set(mergeConfigs(locales[name]._config, config));\n            } else {\n                // MERGE\n                tmpLocale = loadLocale(name);\n                if (tmpLocale != null) {\n                    parentConfig = tmpLocale._config;\n                }\n                config = mergeConfigs(parentConfig, config);\n                if (tmpLocale == null) {\n                    // updateLocale is called for creating a new locale\n                    // Set abbr so it will have a name (getters return\n                    // undefined otherwise).\n                    config.abbr = name;\n                }\n                locale = new Locale(config);\n                locale.parentLocale = locales[name];\n                locales[name] = locale;\n            }\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                    if (name === getSetGlobalLocale()) {\n                        getSetGlobalLocale(name);\n                    }\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale(key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow(m) {\n        var overflow,\n            a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH] < 0 || a[MONTH] > 11\n                    ? MONTH\n                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                    ? DATE\n                    : a[HOUR] < 0 ||\n                      a[HOUR] > 24 ||\n                      (a[HOUR] === 24 &&\n                          (a[MINUTE] !== 0 ||\n                              a[SECOND] !== 0 ||\n                              a[MILLISECOND] !== 0))\n                    ? HOUR\n                    : a[MINUTE] < 0 || a[MINUTE] > 59\n                    ? MINUTE\n                    : a[SECOND] < 0 || a[SECOND] > 59\n                    ? SECOND\n                    : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                    ? MILLISECOND\n                    : -1;\n\n            if (\n                getParsingFlags(m)._overflowDayOfYear &&\n                (overflow < YEAR || overflow > DATE)\n            ) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n        isoDates = [\n            ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n            ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n            ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n            ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n            ['YYYY-DDD', /\\d{4}-\\d{3}/],\n            ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n            ['YYYYYYMMDD', /[+-]\\d{10}/],\n            ['YYYYMMDD', /\\d{8}/],\n            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n            ['YYYYDDD', /\\d{7}/],\n            ['YYYYMM', /\\d{6}/, false],\n            ['YYYY', /\\d{4}/, false],\n        ],\n        // iso time formats and regexes\n        isoTimes = [\n            ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n            ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n            ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n            ['HH:mm', /\\d\\d:\\d\\d/],\n            ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n            ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n            ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n            ['HHmm', /\\d\\d\\d\\d/],\n            ['HH', /\\d\\d/],\n        ],\n        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n        rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n        obsOffsets = {\n            UT: 0,\n            GMT: 0,\n            EDT: -4 * 60,\n            EST: -5 * 60,\n            CDT: -5 * 60,\n            CST: -6 * 60,\n            MDT: -6 * 60,\n            MST: -7 * 60,\n            PDT: -7 * 60,\n            PST: -8 * 60,\n        };\n\n    // date from iso format\n    function configFromISO(config) {\n        var i,\n            l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime,\n            dateFormat,\n            timeFormat,\n            tzFormat;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n\n            for (i = 0, l = isoDates.length; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimes.length; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    function extractFromRFC2822Strings(\n        yearStr,\n        monthStr,\n        dayStr,\n        hourStr,\n        minuteStr,\n        secondStr\n    ) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10),\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s\n            .replace(/\\([^)]*\\)|[\\n\\t]/g, ' ')\n            .replace(/(\\s\\s+)/g, ' ')\n            .replace(/^\\s\\s*/, '')\n            .replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(\n                    parsedInput[0],\n                    parsedInput[1],\n                    parsedInput[2]\n                ).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10),\n                m = hm % 100,\n                h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i)),\n            parsedArray;\n        if (match) {\n            parsedArray = extractFromRFC2822Strings(\n                match[4],\n                match[3],\n                match[2],\n                match[5],\n                match[6],\n                match[7]\n            );\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        if (config._strict) {\n            config._isValid = false;\n        } else {\n            // Final attempt, use Input Fallback\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [\n                nowValue.getUTCFullYear(),\n                nowValue.getUTCMonth(),\n                nowValue.getUTCDate(),\n            ];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray(config) {\n        var i,\n            date,\n            input = [],\n            currentDate,\n            expectedWeekday,\n            yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (\n                config._dayOfYear > daysInYear(yearToUse) ||\n                config._dayOfYear === 0\n            ) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] =\n                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (\n            config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0\n        ) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n            null,\n            input\n        );\n        expectedWeekday = config._useUTC\n            ? config._d.getUTCDay()\n            : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (\n            config._w &&\n            typeof config._w.d !== 'undefined' &&\n            config._w.d !== expectedWeekday\n        ) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(\n                w.GG,\n                config._a[YEAR],\n                weekOfYear(createLocal(), 1, 4).year\n            );\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i,\n            parsedInput,\n            tokens,\n            token,\n            skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0,\n            era;\n\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n        for (i = 0; i < tokens.length; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n                [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(\n                    string.indexOf(parsedInput) + parsedInput.length\n                );\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                } else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            } else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver =\n            stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (\n            config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0\n        ) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(\n            config._locale,\n            config._a[HOUR],\n            config._meridiem\n        );\n\n        // handle era\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n    function meridiemFixWrap(locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n            scoreToBeat,\n            i,\n            currentScore,\n            validFormatFound,\n            bestFormatIsValid = false;\n\n        if (config._f.length === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < config._f.length; i++) {\n            currentScore = 0;\n            validFormatFound = false;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (isValid(tempConfig)) {\n                validFormatFound = true;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (!bestFormatIsValid) {\n                if (\n                    scoreToBeat == null ||\n                    currentScore < scoreToBeat ||\n                    validFormatFound\n                ) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                    if (validFormatFound) {\n                        bestFormatIsValid = true;\n                    }\n                }\n            } else {\n                if (currentScore < scoreToBeat) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                }\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i),\n            dayOrDate = i.day === undefined ? i.date : i.day;\n        config._a = map(\n            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n            function (obj) {\n                return obj && parseInt(obj, 10);\n            }\n        );\n\n        configFromArray(config);\n    }\n\n    function createFromConfig(config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig(config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({ nullInput: true });\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC(input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (format === true || format === false) {\n            strict = format;\n            format = undefined;\n        }\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if (\n            (isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)\n        ) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other < this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        ),\n        prototypeMax = deprecate(\n            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other > this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +new Date();\n    };\n\n    var ordering = [\n        'year',\n        'quarter',\n        'month',\n        'week',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'millisecond',\n    ];\n\n    function isDurationValid(m) {\n        var key,\n            unitHasDecimal = false,\n            i;\n        for (key in m) {\n            if (\n                hasOwnProp(m, key) &&\n                !(\n                    indexOf.call(ordering, key) !== -1 &&\n                    (m[key] == null || !isNaN(m[key]))\n                )\n            ) {\n                return false;\n            }\n        }\n\n        for (i = 0; i < ordering.length; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration(duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds =\n            +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days + weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months + quarters * 3 + years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration(obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound(number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if (\n                (dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n            ) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    // FORMATTING\n\n    function offset(token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset(),\n                sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return (\n                sign +\n                zeroFill(~~(offset / 60), 2) +\n                separator +\n                zeroFill(~~offset % 60, 2)\n            );\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z', matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher),\n            chunk,\n            parts,\n            minutes;\n\n        if (matches === null) {\n            return null;\n        }\n\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff =\n                (isMoment(input) || isDate(input)\n                    ? input.valueOf()\n                    : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset(m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset());\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset(input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(\n                        this,\n                        createDuration(input - offset, 'm'),\n                        1,\n                        false\n                    );\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone(input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC(keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal(keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset() {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            } else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset(input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime() {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted() {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {},\n            other;\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted =\n                this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal() {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset() {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc() {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n        // and further modified to allow for strings containing both week and day\n        isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration(input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms: input._milliseconds,\n                d: input._days,\n                M: input._months,\n            };\n        } else if (isNumber(input) || !isNaN(+input)) {\n            duration = {};\n            if (key) {\n                duration[key] = +input;\n            } else {\n                duration.milliseconds = +input;\n            }\n        } else if ((match = aspNetRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: 0,\n                d: toInt(match[DATE]) * sign,\n                h: toInt(match[HOUR]) * sign,\n                m: toInt(match[MINUTE]) * sign,\n                s: toInt(match[SECOND]) * sign,\n                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n            };\n        } else if ((match = isoRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: parseIso(match[2], sign),\n                M: parseIso(match[3], sign),\n                w: parseIso(match[4], sign),\n                d: parseIso(match[5], sign),\n                h: parseIso(match[6], sign),\n                m: parseIso(match[7], sign),\n                s: parseIso(match[8], sign),\n            };\n        } else if (duration == null) {\n            // checks for null or undefined\n            duration = {};\n        } else if (\n            typeof duration === 'object' &&\n            ('from' in duration || 'to' in duration)\n        ) {\n            diffRes = momentsDifference(\n                createLocal(duration.from),\n                createLocal(duration.to)\n            );\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n            ret._isValid = input._isValid;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso(inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months =\n            other.month() - base.month() + (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return { milliseconds: 0, months: 0 };\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(\n                    name,\n                    'moment().' +\n                        name +\n                        '(period, number) is deprecated. Please use moment().' +\n                        name +\n                        '(number, period). ' +\n                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n                );\n                tmp = val;\n                val = period;\n                period = tmp;\n            }\n\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract(mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add = createAdder(1, 'add'),\n        subtract = createAdder(-1, 'subtract');\n\n    function isString(input) {\n        return typeof input === 'string' || input instanceof String;\n    }\n\n    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n    function isMomentInput(input) {\n        return (\n            isMoment(input) ||\n            isDate(input) ||\n            isString(input) ||\n            isNumber(input) ||\n            isNumberOrStringArray(input) ||\n            isMomentInputObject(input) ||\n            input === null ||\n            input === undefined\n        );\n    }\n\n    function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'years',\n                'year',\n                'y',\n                'months',\n                'month',\n                'M',\n                'days',\n                'day',\n                'd',\n                'dates',\n                'date',\n                'D',\n                'hours',\n                'hour',\n                'h',\n                'minutes',\n                'minute',\n                'm',\n                'seconds',\n                'second',\n                's',\n                'milliseconds',\n                'millisecond',\n                'ms',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input),\n            dataTypeTest = false;\n        if (arrayTest) {\n            dataTypeTest =\n                input.filter(function (item) {\n                    return !isNumber(item) && isString(input);\n                }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n    }\n\n    function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'sameDay',\n                'nextDay',\n                'lastDay',\n                'nextWeek',\n                'lastWeek',\n                'sameElse',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6\n            ? 'sameElse'\n            : diff < -1\n            ? 'lastWeek'\n            : diff < 0\n            ? 'lastDay'\n            : diff < 1\n            ? 'sameDay'\n            : diff < 2\n            ? 'nextDay'\n            : diff < 7\n            ? 'nextWeek'\n            : 'sameElse';\n    }\n\n    function calendar$1(time, formats) {\n        // Support for single parameter, formats only overload to the calendar function\n        if (arguments.length === 1) {\n            if (!arguments[0]) {\n                time = undefined;\n                formats = undefined;\n            } else if (isMomentInput(arguments[0])) {\n                time = arguments[0];\n                formats = undefined;\n            } else if (isCalendarSpec(arguments[0])) {\n                formats = arguments[0];\n                time = undefined;\n            }\n        }\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse',\n            output =\n                formats &&\n                (isFunction(formats[format])\n                    ? formats[format].call(this, now)\n                    : formats[format]);\n\n        return this.format(\n            output || this.localeData().calendar(format, this, createLocal(now))\n        );\n    }\n\n    function clone() {\n        return new Moment(this);\n    }\n\n    function isAfter(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween(from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (\n            (inclusivity[0] === '('\n                ? this.isAfter(localFrom, units)\n                : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')'\n                ? this.isBefore(localTo, units)\n                : !this.isAfter(localTo, units))\n        );\n    }\n\n    function isSame(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return (\n                this.clone().startOf(units).valueOf() <= inputMs &&\n                inputMs <= this.clone().endOf(units).valueOf()\n            );\n        }\n    }\n\n    function isSameOrAfter(input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore(input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff(input, units, asFloat) {\n        var that, zoneDelta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year':\n                output = monthDiff(this, that) / 12;\n                break;\n            case 'month':\n                output = monthDiff(this, that);\n                break;\n            case 'quarter':\n                output = monthDiff(this, that) / 3;\n                break;\n            case 'second':\n                output = (this - that) / 1e3;\n                break; // 1000\n            case 'minute':\n                output = (this - that) / 6e4;\n                break; // 1000 * 60\n            case 'hour':\n                output = (this - that) / 36e5;\n                break; // 1000 * 60 * 60\n            case 'day':\n                output = (this - that - zoneDelta) / 864e5;\n                break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week':\n                output = (this - that - zoneDelta) / 6048e5;\n                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default:\n                output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n            // end-of-month calculations work correct when the start month has more\n            // days than the end month.\n            return -monthDiff(b, a);\n        }\n        // difference in months\n        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2,\n            adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString() {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true,\n            m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(\n                m,\n                utc\n                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n            );\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                    .toISOString()\n                    .replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(\n            m,\n            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect() {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment',\n            zone = '',\n            prefix,\n            year,\n            datetime,\n            suffix;\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        prefix = '[' + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format(inputString) {\n        if (!inputString) {\n            inputString = this.isUtc()\n                ? hooks.defaultFormatUtc\n                : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ to: this, from: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow(withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ from: this, to: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow(withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale(key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData() {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000,\n        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return ((dividend % divisor) + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3),\n                    1\n                );\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday()\n                );\n                break;\n            case 'isoWeek':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1)\n                );\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                );\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month() - (this.month() % 3) + 3,\n                        1\n                    ) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - this.weekday() + 7\n                    ) - 1;\n                break;\n            case 'isoWeek':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - (this.isoWeekday() - 1) + 7\n                    ) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time +=\n                    MS_PER_HOUR -\n                    mod$1(\n                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                        MS_PER_HOUR\n                    ) -\n                    1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf() {\n        return this._d.valueOf() - (this._offset || 0) * 60000;\n    }\n\n    function unix() {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate() {\n        return new Date(this.valueOf());\n    }\n\n    function toArray() {\n        var m = this;\n        return [\n            m.year(),\n            m.month(),\n            m.date(),\n            m.hour(),\n            m.minute(),\n            m.second(),\n            m.millisecond(),\n        ];\n    }\n\n    function toObject() {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds(),\n        };\n    }\n\n    function toJSON() {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2() {\n        return isValid(this);\n    }\n\n    function parsingFlags() {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt() {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict,\n        };\n    }\n\n    addFormatToken('N', 0, 0, 'eraAbbr');\n    addFormatToken('NN', 0, 0, 'eraAbbr');\n    addFormatToken('NNN', 0, 0, 'eraAbbr');\n    addFormatToken('NNNN', 0, 0, 'eraName');\n    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n    addRegexToken('N', matchEraAbbr);\n    addRegexToken('NN', matchEraAbbr);\n    addRegexToken('NNN', matchEraAbbr);\n    addRegexToken('NNNN', matchEraName);\n    addRegexToken('NNNNN', matchEraNarrow);\n\n    addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (\n        input,\n        array,\n        config,\n        token\n    ) {\n        var era = config._locale.erasParse(input, token, config._strict);\n        if (era) {\n            getParsingFlags(config).era = era;\n        } else {\n            getParsingFlags(config).invalidEra = input;\n        }\n    });\n\n    addRegexToken('y', matchUnsigned);\n    addRegexToken('yy', matchUnsigned);\n    addRegexToken('yyy', matchUnsigned);\n    addRegexToken('yyyy', matchUnsigned);\n    addRegexToken('yo', matchEraYearOrdinal);\n\n    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n    addParseToken(['yo'], function (input, array, config, token) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n            match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n\n        if (config._locale.eraYearOrdinalParse) {\n            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n            array[YEAR] = parseInt(input, 10);\n        }\n    });\n\n    function localeEras(m, format) {\n        var i,\n            l,\n            date,\n            eras = this._eras || getLocale('en')._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n            switch (typeof eras[i].since) {\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].since).startOf('day');\n                    eras[i].since = date.valueOf();\n                    break;\n            }\n\n            switch (typeof eras[i].until) {\n                case 'undefined':\n                    eras[i].until = +Infinity;\n                    break;\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].until).startOf('day').valueOf();\n                    eras[i].until = date.valueOf();\n                    break;\n            }\n        }\n        return eras;\n    }\n\n    function localeErasParse(eraName, format, strict) {\n        var i,\n            l,\n            eras = this.eras(),\n            name,\n            abbr,\n            narrow;\n        eraName = eraName.toUpperCase();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            name = eras[i].name.toUpperCase();\n            abbr = eras[i].abbr.toUpperCase();\n            narrow = eras[i].narrow.toUpperCase();\n\n            if (strict) {\n                switch (format) {\n                    case 'N':\n                    case 'NN':\n                    case 'NNN':\n                        if (abbr === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNN':\n                        if (name === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNNN':\n                        if (narrow === eraName) {\n                            return eras[i];\n                        }\n                        break;\n                }\n            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n                return eras[i];\n            }\n        }\n    }\n\n    function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? +1 : -1;\n        if (year === undefined) {\n            return hooks(era.since).year();\n        } else {\n            return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n    }\n\n    function getEraName() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].name;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].name;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraNarrow() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].narrow;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].narrow;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraAbbr() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].abbr;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].abbr;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraYear() {\n        var i,\n            l,\n            dir,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (\n                (eras[i].since <= val && val <= eras[i].until) ||\n                (eras[i].until <= val && val <= eras[i].since)\n            ) {\n                return (\n                    (this.year() - hooks(eras[i].since).year()) * dir +\n                    eras[i].offset\n                );\n            }\n        }\n\n        return this.year();\n    }\n\n    function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNameRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n    }\n\n    function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n    }\n\n    function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n    }\n\n    function matchEraAbbr(isStrict, locale) {\n        return locale.erasAbbrRegex(isStrict);\n    }\n\n    function matchEraName(isStrict, locale) {\n        return locale.erasNameRegex(isStrict);\n    }\n\n    function matchEraNarrow(isStrict, locale) {\n        return locale.erasNarrowRegex(isStrict);\n    }\n\n    function matchEraYearOrdinal(isStrict, locale) {\n        return locale._eraYearOrdinalRegex || matchUnsigned;\n    }\n\n    function computeErasParse() {\n        var abbrPieces = [],\n            namePieces = [],\n            narrowPieces = [],\n            mixedPieces = [],\n            i,\n            l,\n            eras = this.eras();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            namePieces.push(regexEscape(eras[i].name));\n            abbrPieces.push(regexEscape(eras[i].abbr));\n            narrowPieces.push(regexEscape(eras[i].narrow));\n\n            mixedPieces.push(regexEscape(eras[i].name));\n            mixedPieces.push(regexEscape(eras[i].abbr));\n            mixedPieces.push(regexEscape(eras[i].narrow));\n        }\n\n        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n        this._erasNarrowRegex = new RegExp(\n            '^(' + narrowPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken(token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg', 'weekYear');\n    addWeekYearFormatToken('ggggg', 'weekYear');\n    addWeekYearFormatToken('GGGG', 'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n    // PARSING\n\n    addRegexToken('G', matchSigned);\n    addRegexToken('g', matchSigned);\n    addRegexToken('GG', match1to2, match2);\n    addRegexToken('gg', match1to2, match2);\n    addRegexToken('GGGG', match1to4, match4);\n    addRegexToken('gggg', match1to4, match4);\n    addRegexToken('GGGGG', match1to6, match6);\n    addRegexToken('ggggg', match1to6, match6);\n\n    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (\n        input,\n        week,\n        config,\n        token\n    ) {\n        week[token.substr(0, 2)] = toInt(input);\n    });\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.week(),\n            this.weekday(),\n            this.localeData()._week.dow,\n            this.localeData()._week.doy\n        );\n    }\n\n    function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.isoWeek(),\n            this.isoWeekday(),\n            1,\n            4\n        );\n    }\n\n    function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 1, 4);\n    }\n\n    function getWeeksInYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter(input) {\n        return input == null\n            ? Math.ceil((this.month() + 1) / 3)\n            : this.month((input - 1) * 3 + (this.month() % 3));\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D', match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict\n            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n            : locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD', match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear(input) {\n        var dayOfYear =\n            Math.round(\n                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n            ) + 1;\n        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m', match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s', match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S', match1to3, match1);\n    addRegexToken('SS', match1to3, match2);\n    addRegexToken('SSS', match1to3, match3);\n\n    var token, getSetMillisecond;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n\n    getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z', 0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr() {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName() {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add = add;\n    proto.calendar = calendar$1;\n    proto.clone = clone;\n    proto.diff = diff;\n    proto.endOf = endOf;\n    proto.format = format;\n    proto.from = from;\n    proto.fromNow = fromNow;\n    proto.to = to;\n    proto.toNow = toNow;\n    proto.get = stringGet;\n    proto.invalidAt = invalidAt;\n    proto.isAfter = isAfter;\n    proto.isBefore = isBefore;\n    proto.isBetween = isBetween;\n    proto.isSame = isSame;\n    proto.isSameOrAfter = isSameOrAfter;\n    proto.isSameOrBefore = isSameOrBefore;\n    proto.isValid = isValid$2;\n    proto.lang = lang;\n    proto.locale = locale;\n    proto.localeData = localeData;\n    proto.max = prototypeMax;\n    proto.min = prototypeMin;\n    proto.parsingFlags = parsingFlags;\n    proto.set = stringSet;\n    proto.startOf = startOf;\n    proto.subtract = subtract;\n    proto.toArray = toArray;\n    proto.toObject = toObject;\n    proto.toDate = toDate;\n    proto.toISOString = toISOString;\n    proto.inspect = inspect;\n    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n            return 'Moment<' + this.format() + '>';\n        };\n    }\n    proto.toJSON = toJSON;\n    proto.toString = toString;\n    proto.unix = unix;\n    proto.valueOf = valueOf;\n    proto.creationData = creationData;\n    proto.eraName = getEraName;\n    proto.eraNarrow = getEraNarrow;\n    proto.eraAbbr = getEraAbbr;\n    proto.eraYear = getEraYear;\n    proto.year = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week = proto.weeks = getSetWeek;\n    proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n    proto.weeksInYear = getWeeksInYear;\n    proto.weeksInWeekYear = getWeeksInWeekYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n    proto.date = getSetDayOfMonth;\n    proto.day = proto.days = getSetDayOfWeek;\n    proto.weekday = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset = getSetOffset;\n    proto.utc = setOffsetToUTC;\n    proto.local = setOffsetToLocal;\n    proto.parseZone = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST = isDaylightSavingTime;\n    proto.isLocal = isLocal;\n    proto.isUtcOffset = isUtcOffset;\n    proto.isUtc = isUtc;\n    proto.isUTC = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates = deprecate(\n        'dates accessor is deprecated. Use date instead.',\n        getSetDayOfMonth\n    );\n    proto.months = deprecate(\n        'months accessor is deprecated. Use month instead',\n        getSetMonth\n    );\n    proto.years = deprecate(\n        'years accessor is deprecated. Use year instead',\n        getSetYear\n    );\n    proto.zone = deprecate(\n        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n        getSetZone\n    );\n    proto.isDSTShifted = deprecate(\n        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n        isDaylightSavingTimeShifted\n    );\n\n    function createUnix(input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone() {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat(string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar = calendar;\n    proto$1.longDateFormat = longDateFormat;\n    proto$1.invalidDate = invalidDate;\n    proto$1.ordinal = ordinal;\n    proto$1.preparse = preParsePostFormat;\n    proto$1.postformat = preParsePostFormat;\n    proto$1.relativeTime = relativeTime;\n    proto$1.pastFuture = pastFuture;\n    proto$1.set = set;\n    proto$1.eras = localeEras;\n    proto$1.erasParse = localeErasParse;\n    proto$1.erasConvertYear = localeErasConvertYear;\n    proto$1.erasAbbrRegex = erasAbbrRegex;\n    proto$1.erasNameRegex = erasNameRegex;\n    proto$1.erasNarrowRegex = erasNarrowRegex;\n\n    proto$1.months = localeMonths;\n    proto$1.monthsShort = localeMonthsShort;\n    proto$1.monthsParse = localeMonthsParse;\n    proto$1.monthsRegex = monthsRegex;\n    proto$1.monthsShortRegex = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays = localeWeekdays;\n    proto$1.weekdaysMin = localeWeekdaysMin;\n    proto$1.weekdaysShort = localeWeekdaysShort;\n    proto$1.weekdaysParse = localeWeekdaysParse;\n\n    proto$1.weekdaysRegex = weekdaysRegex;\n    proto$1.weekdaysShortRegex = weekdaysShortRegex;\n    proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1(format, index, field, setter) {\n        var locale = getLocale(),\n            utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl(format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i,\n            out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl(localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0,\n            i,\n            out = [];\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths(format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort(format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        eras: [\n            {\n                since: '0001-01-01',\n                until: +Infinity,\n                offset: 1,\n                name: 'Anno Domini',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: 'Before Christ',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    toInt((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate(\n        'moment.lang is deprecated. Use moment.locale instead.',\n        getSetGlobalLocale\n    );\n    hooks.langData = deprecate(\n        'moment.langData is deprecated. Use moment.localeData instead.',\n        getLocale\n    );\n\n    var mathAbs = Math.abs;\n\n    function abs() {\n        var data = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days = mathAbs(this._days);\n        this._months = mathAbs(this._months);\n\n        data.milliseconds = mathAbs(data.milliseconds);\n        data.seconds = mathAbs(data.seconds);\n        data.minutes = mathAbs(data.minutes);\n        data.hours = mathAbs(data.hours);\n        data.months = mathAbs(data.months);\n        data.years = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1(duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days += direction * other._days;\n        duration._months += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1(input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1(input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil(number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble() {\n        var milliseconds = this._milliseconds,\n            days = this._days,\n            months = this._months,\n            data = this._data,\n            seconds,\n            minutes,\n            hours,\n            years,\n            monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (\n            !(\n                (milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0)\n            )\n        ) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds = absFloor(milliseconds / 1000);\n        data.seconds = seconds % 60;\n\n        minutes = absFloor(seconds / 60);\n        data.minutes = minutes % 60;\n\n        hours = absFloor(minutes / 60);\n        data.hours = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days = days;\n        data.months = months;\n        data.years = years;\n\n        return this;\n    }\n\n    function daysToMonths(days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return (days * 4800) / 146097;\n    }\n\n    function monthsToDays(months) {\n        // the reverse of daysToMonths\n        return (months * 146097) / 4800;\n    }\n\n    function as(units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days,\n            months,\n            milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':\n                    return months;\n                case 'quarter':\n                    return months / 3;\n                case 'year':\n                    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week':\n                    return days / 7 + milliseconds / 6048e5;\n                case 'day':\n                    return days + milliseconds / 864e5;\n                case 'hour':\n                    return days * 24 + milliseconds / 36e5;\n                case 'minute':\n                    return days * 1440 + milliseconds / 6e4;\n                case 'second':\n                    return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond':\n                    return Math.floor(days * 864e5) + milliseconds;\n                default:\n                    throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function valueOf$1() {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs(alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms'),\n        asSeconds = makeAs('s'),\n        asMinutes = makeAs('m'),\n        asHours = makeAs('h'),\n        asDays = makeAs('d'),\n        asWeeks = makeAs('w'),\n        asMonths = makeAs('M'),\n        asQuarters = makeAs('Q'),\n        asYears = makeAs('y');\n\n    function clone$1() {\n        return createDuration(this);\n    }\n\n    function get$2(units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds'),\n        seconds = makeGetter('seconds'),\n        minutes = makeGetter('minutes'),\n        hours = makeGetter('hours'),\n        days = makeGetter('days'),\n        months = makeGetter('months'),\n        years = makeGetter('years');\n\n    function weeks() {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round,\n        thresholds = {\n            ss: 44, // a few seconds to seconds\n            s: 45, // seconds to minute\n            m: 45, // minutes to hour\n            h: 22, // hours to day\n            d: 26, // days to month/week\n            w: null, // weeks to month\n            M: 11, // months to year\n        };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n        var duration = createDuration(posNegDuration).abs(),\n            seconds = round(duration.as('s')),\n            minutes = round(duration.as('m')),\n            hours = round(duration.as('h')),\n            days = round(duration.as('d')),\n            months = round(duration.as('M')),\n            weeks = round(duration.as('w')),\n            years = round(duration.as('y')),\n            a =\n                (seconds <= thresholds.ss && ['s', seconds]) ||\n                (seconds < thresholds.s && ['ss', seconds]) ||\n                (minutes <= 1 && ['m']) ||\n                (minutes < thresholds.m && ['mm', minutes]) ||\n                (hours <= 1 && ['h']) ||\n                (hours < thresholds.h && ['hh', hours]) ||\n                (days <= 1 && ['d']) ||\n                (days < thresholds.d && ['dd', days]);\n\n        if (thresholds.w != null) {\n            a =\n                a ||\n                (weeks <= 1 && ['w']) ||\n                (weeks < thresholds.w && ['ww', weeks]);\n        }\n        a = a ||\n            (months <= 1 && ['M']) ||\n            (months < thresholds.M && ['MM', months]) ||\n            (years <= 1 && ['y']) || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding(roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof roundingFunction === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold(threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var withSuffix = false,\n            th = thresholds,\n            locale,\n            output;\n\n        if (typeof argWithSuffix === 'object') {\n            argThresholds = argWithSuffix;\n            argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === 'boolean') {\n            withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === 'object') {\n            th = Object.assign({}, thresholds, argThresholds);\n            if (argThresholds.s != null && argThresholds.ss == null) {\n                th.ss = argThresholds.s - 1;\n            }\n        }\n\n        locale = this.localeData();\n        output = relativeTime$1(this, !withSuffix, th, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return (x > 0) - (x < 0) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000,\n            days = abs$1(this._days),\n            months = abs$1(this._months),\n            minutes,\n            hours,\n            years,\n            s,\n            total = this.asSeconds(),\n            totalSign,\n            ymSign,\n            daysSign,\n            hmsSign;\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes = absFloor(seconds / 60);\n        hours = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n        totalSign = total < 0 ? '-' : '';\n        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return (\n            totalSign +\n            'P' +\n            (years ? ymSign + years + 'Y' : '') +\n            (months ? ymSign + months + 'M' : '') +\n            (days ? daysSign + days + 'D' : '') +\n            (hours || minutes || seconds ? 'T' : '') +\n            (hours ? hmsSign + hours + 'H' : '') +\n            (minutes ? hmsSign + minutes + 'M' : '') +\n            (seconds ? hmsSign + s + 'S' : '')\n        );\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid = isValid$1;\n    proto$2.abs = abs;\n    proto$2.add = add$1;\n    proto$2.subtract = subtract$1;\n    proto$2.as = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds = asSeconds;\n    proto$2.asMinutes = asMinutes;\n    proto$2.asHours = asHours;\n    proto$2.asDays = asDays;\n    proto$2.asWeeks = asWeeks;\n    proto$2.asMonths = asMonths;\n    proto$2.asQuarters = asQuarters;\n    proto$2.asYears = asYears;\n    proto$2.valueOf = valueOf$1;\n    proto$2._bubble = bubble;\n    proto$2.clone = clone$1;\n    proto$2.get = get$2;\n    proto$2.milliseconds = milliseconds;\n    proto$2.seconds = seconds;\n    proto$2.minutes = minutes;\n    proto$2.hours = hours;\n    proto$2.days = days;\n    proto$2.weeks = weeks;\n    proto$2.months = months;\n    proto$2.years = years;\n    proto$2.humanize = humanize;\n    proto$2.toISOString = toISOString$1;\n    proto$2.toString = toISOString$1;\n    proto$2.toJSON = toISOString$1;\n    proto$2.locale = locale;\n    proto$2.localeData = localeData;\n\n    proto$2.toIsoString = deprecate(\n        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n        toISOString$1\n    );\n    proto$2.lang = lang;\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    //! moment.js\n\n    hooks.version = '2.29.1';\n\n    setHookCallback(createLocal);\n\n    hooks.fn = proto;\n    hooks.min = min;\n    hooks.max = max;\n    hooks.now = now;\n    hooks.utc = createUTC;\n    hooks.unix = createUnix;\n    hooks.months = listMonths;\n    hooks.isDate = isDate;\n    hooks.locale = getSetGlobalLocale;\n    hooks.invalid = createInvalid;\n    hooks.duration = createDuration;\n    hooks.isMoment = isMoment;\n    hooks.weekdays = listWeekdays;\n    hooks.parseZone = createInZone;\n    hooks.localeData = getLocale;\n    hooks.isDuration = isDuration;\n    hooks.monthsShort = listMonthsShort;\n    hooks.weekdaysMin = listWeekdaysMin;\n    hooks.defineLocale = defineLocale;\n    hooks.updateLocale = updateLocale;\n    hooks.locales = listLocales;\n    hooks.weekdaysShort = listWeekdaysShort;\n    hooks.normalizeUnits = normalizeUnits;\n    hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat = getCalendarFormat;\n    hooks.prototype = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n        TIME: 'HH:mm', // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n        MONTH: 'YYYY-MM', // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n","/*!\n * Chart.js v2.9.4\n * https://www.chartjs.org\n * (c) 2020 Chart.js Contributors\n * Released under the MIT License\n */\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(function() { try { return require('moment'); } catch(e) { } }()) :\ntypeof define === 'function' && define.amd ? define(['require'], function(require) { return factory(function() { try { return require('moment'); } catch(e) { } }()); }) :\n(global = global || self, global.Chart = factory(global.moment));\n}(this, (function (moment) { 'use strict';\n\nmoment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nfunction getCjsExportFromNamespace (n) {\n\treturn n && n['default'] || n;\n}\n\nvar colorName = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\n\nvar conversions = createCommonjsModule(function (module) {\n/* MIT license */\n\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n//       values that give correct `typeof` results).\n//       do not use box values types (i.e. Number(), String(), etc.)\n\nvar reverseKeywords = {};\nfor (var key in colorName) {\n\tif (colorName.hasOwnProperty(key)) {\n\t\treverseKeywords[colorName[key]] = key;\n\t}\n}\n\nvar convert = module.exports = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\n// hide .channels and .labels properties\nfor (var model in convert) {\n\tif (convert.hasOwnProperty(model)) {\n\t\tif (!('channels' in convert[model])) {\n\t\t\tthrow new Error('missing channels property: ' + model);\n\t\t}\n\n\t\tif (!('labels' in convert[model])) {\n\t\t\tthrow new Error('missing channel labels property: ' + model);\n\t\t}\n\n\t\tif (convert[model].labels.length !== convert[model].channels) {\n\t\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t\t}\n\n\t\tvar channels = convert[model].channels;\n\t\tvar labels = convert[model].labels;\n\t\tdelete convert[model].channels;\n\t\tdelete convert[model].labels;\n\t\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\t\tObject.defineProperty(convert[model], 'labels', {value: labels});\n\t}\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar min = Math.min(r, g, b);\n\tvar max = Math.max(r, g, b);\n\tvar delta = max - min;\n\tvar h;\n\tvar s;\n\tvar l;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tl = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tvar rdif;\n\tvar gdif;\n\tvar bdif;\n\tvar h;\n\tvar s;\n\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar v = Math.max(r, g, b);\n\tvar diff = v - Math.min(r, g, b);\n\tvar diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = s = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tvar r = rgb[0];\n\tvar g = rgb[1];\n\tvar b = rgb[2];\n\tvar h = convert.rgb.hsl(rgb)[0];\n\tvar w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar c;\n\tvar m;\n\tvar y;\n\tvar k;\n\n\tk = Math.min(1 - r, 1 - g, 1 - b);\n\tc = (1 - r - k) / (1 - k) || 0;\n\tm = (1 - g - k) / (1 - k) || 0;\n\ty = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\n/**\n * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n * */\nfunction comparativeDistance(x, y) {\n\treturn (\n\t\tMath.pow(x[0] - y[0], 2) +\n\t\tMath.pow(x[1] - y[1], 2) +\n\t\tMath.pow(x[2] - y[2], 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tvar reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tvar currentClosestDistance = Infinity;\n\tvar currentClosestKeyword;\n\n\tfor (var keyword in colorName) {\n\t\tif (colorName.hasOwnProperty(keyword)) {\n\t\t\tvar value = colorName[keyword];\n\n\t\t\t// Compute comparative distance\n\t\t\tvar distance = comparativeDistance(rgb, value);\n\n\t\t\t// Check if its less, if so set as closest\n\t\t\tif (distance < currentClosestDistance) {\n\t\t\t\tcurrentClosestDistance = distance;\n\t\t\t\tcurrentClosestKeyword = keyword;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn colorName[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\n\t// assume sRGB\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n\tvar x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tvar y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tvar z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tvar xyz = convert.rgb.xyz(rgb);\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tvar h = hsl[0] / 360;\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar t1;\n\tvar t2;\n\tvar t3;\n\tvar rgb;\n\tvar val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tt1 = 2 * l - t2;\n\n\trgb = [0, 0, 0];\n\tfor (var i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tvar h = hsl[0];\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar smin = s;\n\tvar lmin = Math.max(l, 0.01);\n\tvar sv;\n\tvar v;\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tv = (l + s) / 2;\n\tsv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tvar h = hsv[0] / 60;\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar hi = Math.floor(h) % 6;\n\n\tvar f = h - Math.floor(h);\n\tvar p = 255 * v * (1 - s);\n\tvar q = 255 * v * (1 - (s * f));\n\tvar t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tvar h = hsv[0];\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar vmin = Math.max(v, 0.01);\n\tvar lmin;\n\tvar sl;\n\tvar l;\n\n\tl = (2 - s) * v;\n\tlmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tvar h = hwb[0] / 360;\n\tvar wh = hwb[1] / 100;\n\tvar bl = hwb[2] / 100;\n\tvar ratio = wh + bl;\n\tvar i;\n\tvar v;\n\tvar f;\n\tvar n;\n\n\t// wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\ti = Math.floor(6 * h);\n\tv = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tn = wh + f * (v - wh); // linear interpolation\n\n\tvar r;\n\tvar g;\n\tvar b;\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tvar c = cmyk[0] / 100;\n\tvar m = cmyk[1] / 100;\n\tvar y = cmyk[2] / 100;\n\tvar k = cmyk[3] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = 1 - Math.min(1, c * (1 - k) + k);\n\tg = 1 - Math.min(1, m * (1 - k) + k);\n\tb = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tvar x = xyz[0] / 100;\n\tvar y = xyz[1] / 100;\n\tvar z = xyz[2] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar x;\n\tvar y;\n\tvar z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tvar y2 = Math.pow(y, 3);\n\tvar x2 = Math.pow(x, 3);\n\tvar z2 = Math.pow(z, 3);\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar hr;\n\tvar h;\n\tvar c;\n\n\thr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tc = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tvar l = lch[0];\n\tvar c = lch[1];\n\tvar h = lch[2];\n\tvar a;\n\tvar b;\n\tvar hr;\n\n\thr = h / 360 * 2 * Math.PI;\n\ta = c * Math.cos(hr);\n\tb = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\tvar value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tvar ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\n\t// we use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tvar ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tvar color = args % 10;\n\n\t// handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tvar mult = (~~(args > 50) + 1) * 0.5;\n\tvar r = ((color & 1) * mult) * 255;\n\tvar g = (((color >> 1) & 1) * mult) * 255;\n\tvar b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// handle greyscale\n\tif (args >= 232) {\n\t\tvar c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tvar rem;\n\tvar r = Math.floor(args / 36) / 5 * 255;\n\tvar g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tvar b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tvar integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tvar match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tvar colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(function (char) {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tvar integer = parseInt(colorString, 16);\n\tvar r = (integer >> 16) & 0xFF;\n\tvar g = (integer >> 8) & 0xFF;\n\tvar b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar max = Math.max(Math.max(r, g), b);\n\tvar min = Math.min(Math.min(r, g), b);\n\tvar chroma = (max - min);\n\tvar grayscale;\n\tvar hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma + 4;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar c = 1;\n\tvar f = 0;\n\n\tif (l < 0.5) {\n\t\tc = 2.0 * s * l;\n\t} else {\n\t\tc = 2.0 * s * (1.0 - l);\n\t}\n\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\n\tvar c = s * v;\n\tvar f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tvar h = hcg[0] / 360;\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tvar pure = [0, 0, 0];\n\tvar hi = (h % 1) * 6;\n\tvar v = hi % 1;\n\tvar w = 1 - v;\n\tvar mg = 0;\n\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar v = c + g * (1.0 - c);\n\tvar f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar l = g * (1.0 - c) + 0.5 * c;\n\tvar s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\tvar v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tvar w = hwb[1] / 100;\n\tvar b = hwb[2] / 100;\n\tvar v = 1 - b;\n\tvar c = v - w;\n\tvar g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = convert.gray.hsv = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tvar val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tvar integer = (val << 16) + (val << 8) + val;\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tvar val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n});\nvar conversions_1 = conversions.rgb;\nvar conversions_2 = conversions.hsl;\nvar conversions_3 = conversions.hsv;\nvar conversions_4 = conversions.hwb;\nvar conversions_5 = conversions.cmyk;\nvar conversions_6 = conversions.xyz;\nvar conversions_7 = conversions.lab;\nvar conversions_8 = conversions.lch;\nvar conversions_9 = conversions.hex;\nvar conversions_10 = conversions.keyword;\nvar conversions_11 = conversions.ansi16;\nvar conversions_12 = conversions.ansi256;\nvar conversions_13 = conversions.hcg;\nvar conversions_14 = conversions.apple;\nvar conversions_15 = conversions.gray;\n\n/*\n\tthis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tvar graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tvar models = Object.keys(conversions);\n\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tvar graph = buildGraph();\n\tvar queue = [fromModel]; // unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tvar current = queue.pop();\n\t\tvar adjacents = Object.keys(conversions[current]);\n\n\t\tfor (var len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tvar adjacent = adjacents[i];\n\t\t\tvar node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tvar path = [graph[toModel].parent, toModel];\n\tvar fn = conversions[graph[toModel].parent][toModel];\n\n\tvar cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nvar route = function (fromModel) {\n\tvar graph = deriveBFS(fromModel);\n\tvar conversion = {};\n\n\tvar models = Object.keys(graph);\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tvar toModel = models[i];\n\t\tvar node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// no possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\nvar convert = {};\n\nvar models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\tvar result = fn(args);\n\n\t\t// we're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (var len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(function (fromModel) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tvar routes = route(fromModel);\n\tvar routeModels = Object.keys(routes);\n\n\trouteModels.forEach(function (toModel) {\n\t\tvar fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nvar colorConvert = convert;\n\nvar colorName$1 = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\n\n/* MIT license */\n\n\nvar colorString = {\n   getRgba: getRgba,\n   getHsla: getHsla,\n   getRgb: getRgb,\n   getHsl: getHsl,\n   getHwb: getHwb,\n   getAlpha: getAlpha,\n\n   hexString: hexString,\n   rgbString: rgbString,\n   rgbaString: rgbaString,\n   percentString: percentString,\n   percentaString: percentaString,\n   hslString: hslString,\n   hslaString: hslaString,\n   hwbString: hwbString,\n   keyword: keyword\n};\n\nfunction getRgba(string) {\n   if (!string) {\n      return;\n   }\n   var abbr =  /^#([a-fA-F0-9]{3,4})$/i,\n       hex =  /^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i,\n       rgba = /^rgba?\\(\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n       per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n       keyword = /(\\w+)/;\n\n   var rgb = [0, 0, 0],\n       a = 1,\n       match = string.match(abbr),\n       hexAlpha = \"\";\n   if (match) {\n      match = match[1];\n      hexAlpha = match[3];\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = parseInt(match[i] + match[i], 16);\n      }\n      if (hexAlpha) {\n         a = Math.round((parseInt(hexAlpha + hexAlpha, 16) / 255) * 100) / 100;\n      }\n   }\n   else if (match = string.match(hex)) {\n      hexAlpha = match[2];\n      match = match[1];\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);\n      }\n      if (hexAlpha) {\n         a = Math.round((parseInt(hexAlpha, 16) / 255) * 100) / 100;\n      }\n   }\n   else if (match = string.match(rgba)) {\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = parseInt(match[i + 1]);\n      }\n      a = parseFloat(match[4]);\n   }\n   else if (match = string.match(per)) {\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n      }\n      a = parseFloat(match[4]);\n   }\n   else if (match = string.match(keyword)) {\n      if (match[1] == \"transparent\") {\n         return [0, 0, 0, 0];\n      }\n      rgb = colorName$1[match[1]];\n      if (!rgb) {\n         return;\n      }\n   }\n\n   for (var i = 0; i < rgb.length; i++) {\n      rgb[i] = scale(rgb[i], 0, 255);\n   }\n   if (!a && a != 0) {\n      a = 1;\n   }\n   else {\n      a = scale(a, 0, 1);\n   }\n   rgb[3] = a;\n   return rgb;\n}\n\nfunction getHsla(string) {\n   if (!string) {\n      return;\n   }\n   var hsl = /^hsla?\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n   var match = string.match(hsl);\n   if (match) {\n      var alpha = parseFloat(match[4]);\n      var h = scale(parseInt(match[1]), 0, 360),\n          s = scale(parseFloat(match[2]), 0, 100),\n          l = scale(parseFloat(match[3]), 0, 100),\n          a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n      return [h, s, l, a];\n   }\n}\n\nfunction getHwb(string) {\n   if (!string) {\n      return;\n   }\n   var hwb = /^hwb\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n   var match = string.match(hwb);\n   if (match) {\n    var alpha = parseFloat(match[4]);\n      var h = scale(parseInt(match[1]), 0, 360),\n          w = scale(parseFloat(match[2]), 0, 100),\n          b = scale(parseFloat(match[3]), 0, 100),\n          a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n      return [h, w, b, a];\n   }\n}\n\nfunction getRgb(string) {\n   var rgba = getRgba(string);\n   return rgba && rgba.slice(0, 3);\n}\n\nfunction getHsl(string) {\n  var hsla = getHsla(string);\n  return hsla && hsla.slice(0, 3);\n}\n\nfunction getAlpha(string) {\n   var vals = getRgba(string);\n   if (vals) {\n      return vals[3];\n   }\n   else if (vals = getHsla(string)) {\n      return vals[3];\n   }\n   else if (vals = getHwb(string)) {\n      return vals[3];\n   }\n}\n\n// generators\nfunction hexString(rgba, a) {\n   var a = (a !== undefined && rgba.length === 3) ? a : rgba[3];\n   return \"#\" + hexDouble(rgba[0]) \n              + hexDouble(rgba[1])\n              + hexDouble(rgba[2])\n              + (\n                 (a >= 0 && a < 1)\n                 ? hexDouble(Math.round(a * 255))\n                 : \"\"\n              );\n}\n\nfunction rgbString(rgba, alpha) {\n   if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n      return rgbaString(rgba, alpha);\n   }\n   return \"rgb(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \")\";\n}\n\nfunction rgbaString(rgba, alpha) {\n   if (alpha === undefined) {\n      alpha = (rgba[3] !== undefined ? rgba[3] : 1);\n   }\n   return \"rgba(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2]\n           + \", \" + alpha + \")\";\n}\n\nfunction percentString(rgba, alpha) {\n   if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n      return percentaString(rgba, alpha);\n   }\n   var r = Math.round(rgba[0]/255 * 100),\n       g = Math.round(rgba[1]/255 * 100),\n       b = Math.round(rgba[2]/255 * 100);\n\n   return \"rgb(\" + r + \"%, \" + g + \"%, \" + b + \"%)\";\n}\n\nfunction percentaString(rgba, alpha) {\n   var r = Math.round(rgba[0]/255 * 100),\n       g = Math.round(rgba[1]/255 * 100),\n       b = Math.round(rgba[2]/255 * 100);\n   return \"rgba(\" + r + \"%, \" + g + \"%, \" + b + \"%, \" + (alpha || rgba[3] || 1) + \")\";\n}\n\nfunction hslString(hsla, alpha) {\n   if (alpha < 1 || (hsla[3] && hsla[3] < 1)) {\n      return hslaString(hsla, alpha);\n   }\n   return \"hsl(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%)\";\n}\n\nfunction hslaString(hsla, alpha) {\n   if (alpha === undefined) {\n      alpha = (hsla[3] !== undefined ? hsla[3] : 1);\n   }\n   return \"hsla(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%, \"\n           + alpha + \")\";\n}\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\nfunction hwbString(hwb, alpha) {\n   if (alpha === undefined) {\n      alpha = (hwb[3] !== undefined ? hwb[3] : 1);\n   }\n   return \"hwb(\" + hwb[0] + \", \" + hwb[1] + \"%, \" + hwb[2] + \"%\"\n           + (alpha !== undefined && alpha !== 1 ? \", \" + alpha : \"\") + \")\";\n}\n\nfunction keyword(rgb) {\n  return reverseNames[rgb.slice(0, 3)];\n}\n\n// helpers\nfunction scale(num, min, max) {\n   return Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n  var str = num.toString(16).toUpperCase();\n  return (str.length < 2) ? \"0\" + str : str;\n}\n\n\n//create a list of reverse color names\nvar reverseNames = {};\nfor (var name in colorName$1) {\n   reverseNames[colorName$1[name]] = name;\n}\n\n/* MIT license */\n\n\n\nvar Color = function (obj) {\n\tif (obj instanceof Color) {\n\t\treturn obj;\n\t}\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(obj);\n\t}\n\n\tthis.valid = false;\n\tthis.values = {\n\t\trgb: [0, 0, 0],\n\t\thsl: [0, 0, 0],\n\t\thsv: [0, 0, 0],\n\t\thwb: [0, 0, 0],\n\t\tcmyk: [0, 0, 0, 0],\n\t\talpha: 1\n\t};\n\n\t// parse Color() argument\n\tvar vals;\n\tif (typeof obj === 'string') {\n\t\tvals = colorString.getRgba(obj);\n\t\tif (vals) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals = colorString.getHsla(obj)) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals = colorString.getHwb(obj)) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t}\n\t} else if (typeof obj === 'object') {\n\t\tvals = obj;\n\t\tif (vals.r !== undefined || vals.red !== undefined) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals.l !== undefined || vals.lightness !== undefined) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals.v !== undefined || vals.value !== undefined) {\n\t\t\tthis.setValues('hsv', vals);\n\t\t} else if (vals.w !== undefined || vals.whiteness !== undefined) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t} else if (vals.c !== undefined || vals.cyan !== undefined) {\n\t\t\tthis.setValues('cmyk', vals);\n\t\t}\n\t}\n};\n\nColor.prototype = {\n\tisValid: function () {\n\t\treturn this.valid;\n\t},\n\trgb: function () {\n\t\treturn this.setSpace('rgb', arguments);\n\t},\n\thsl: function () {\n\t\treturn this.setSpace('hsl', arguments);\n\t},\n\thsv: function () {\n\t\treturn this.setSpace('hsv', arguments);\n\t},\n\thwb: function () {\n\t\treturn this.setSpace('hwb', arguments);\n\t},\n\tcmyk: function () {\n\t\treturn this.setSpace('cmyk', arguments);\n\t},\n\n\trgbArray: function () {\n\t\treturn this.values.rgb;\n\t},\n\thslArray: function () {\n\t\treturn this.values.hsl;\n\t},\n\thsvArray: function () {\n\t\treturn this.values.hsv;\n\t},\n\thwbArray: function () {\n\t\tvar values = this.values;\n\t\tif (values.alpha !== 1) {\n\t\t\treturn values.hwb.concat([values.alpha]);\n\t\t}\n\t\treturn values.hwb;\n\t},\n\tcmykArray: function () {\n\t\treturn this.values.cmyk;\n\t},\n\trgbaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.rgb.concat([values.alpha]);\n\t},\n\thslaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.hsl.concat([values.alpha]);\n\t},\n\talpha: function (val) {\n\t\tif (val === undefined) {\n\t\t\treturn this.values.alpha;\n\t\t}\n\t\tthis.setValues('alpha', val);\n\t\treturn this;\n\t},\n\n\tred: function (val) {\n\t\treturn this.setChannel('rgb', 0, val);\n\t},\n\tgreen: function (val) {\n\t\treturn this.setChannel('rgb', 1, val);\n\t},\n\tblue: function (val) {\n\t\treturn this.setChannel('rgb', 2, val);\n\t},\n\thue: function (val) {\n\t\tif (val) {\n\t\t\tval %= 360;\n\t\t\tval = val < 0 ? 360 + val : val;\n\t\t}\n\t\treturn this.setChannel('hsl', 0, val);\n\t},\n\tsaturation: function (val) {\n\t\treturn this.setChannel('hsl', 1, val);\n\t},\n\tlightness: function (val) {\n\t\treturn this.setChannel('hsl', 2, val);\n\t},\n\tsaturationv: function (val) {\n\t\treturn this.setChannel('hsv', 1, val);\n\t},\n\twhiteness: function (val) {\n\t\treturn this.setChannel('hwb', 1, val);\n\t},\n\tblackness: function (val) {\n\t\treturn this.setChannel('hwb', 2, val);\n\t},\n\tvalue: function (val) {\n\t\treturn this.setChannel('hsv', 2, val);\n\t},\n\tcyan: function (val) {\n\t\treturn this.setChannel('cmyk', 0, val);\n\t},\n\tmagenta: function (val) {\n\t\treturn this.setChannel('cmyk', 1, val);\n\t},\n\tyellow: function (val) {\n\t\treturn this.setChannel('cmyk', 2, val);\n\t},\n\tblack: function (val) {\n\t\treturn this.setChannel('cmyk', 3, val);\n\t},\n\n\thexString: function () {\n\t\treturn colorString.hexString(this.values.rgb);\n\t},\n\trgbString: function () {\n\t\treturn colorString.rgbString(this.values.rgb, this.values.alpha);\n\t},\n\trgbaString: function () {\n\t\treturn colorString.rgbaString(this.values.rgb, this.values.alpha);\n\t},\n\tpercentString: function () {\n\t\treturn colorString.percentString(this.values.rgb, this.values.alpha);\n\t},\n\thslString: function () {\n\t\treturn colorString.hslString(this.values.hsl, this.values.alpha);\n\t},\n\thslaString: function () {\n\t\treturn colorString.hslaString(this.values.hsl, this.values.alpha);\n\t},\n\thwbString: function () {\n\t\treturn colorString.hwbString(this.values.hwb, this.values.alpha);\n\t},\n\tkeyword: function () {\n\t\treturn colorString.keyword(this.values.rgb, this.values.alpha);\n\t},\n\n\trgbNumber: function () {\n\t\tvar rgb = this.values.rgb;\n\t\treturn (rgb[0] << 16) | (rgb[1] << 8) | rgb[2];\n\t},\n\n\tluminosity: function () {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tvar rgb = this.values.rgb;\n\t\tvar lum = [];\n\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\tvar chan = rgb[i] / 255;\n\t\t\tlum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);\n\t\t}\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast: function (color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tvar lum1 = this.luminosity();\n\t\tvar lum2 = color2.luminosity();\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel: function (color2) {\n\t\tvar contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7.1) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tdark: function () {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tvar rgb = this.values.rgb;\n\t\tvar yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n\t\treturn yiq < 128;\n\t},\n\n\tlight: function () {\n\t\treturn !this.dark();\n\t},\n\n\tnegate: function () {\n\t\tvar rgb = [];\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\trgb[i] = 255 - this.values.rgb[i];\n\t\t}\n\t\tthis.setValues('rgb', rgb);\n\t\treturn this;\n\t},\n\n\tlighten: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] += hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdarken: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] -= hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tsaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] += hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdesaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] -= hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\twhiten: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[1] += hwb[1] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tblacken: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[2] += hwb[2] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tgreyscale: function () {\n\t\tvar rgb = this.values.rgb;\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tvar val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\tthis.setValues('rgb', [val, val, val]);\n\t\treturn this;\n\t},\n\n\tclearer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha - (alpha * ratio));\n\t\treturn this;\n\t},\n\n\topaquer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha + (alpha * ratio));\n\t\treturn this;\n\t},\n\n\trotate: function (degrees) {\n\t\tvar hsl = this.values.hsl;\n\t\tvar hue = (hsl[0] + degrees) % 360;\n\t\thsl[0] = hue < 0 ? 360 + hue : hue;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\t/**\n\t * Ported from sass implementation in C\n\t * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t */\n\tmix: function (mixinColor, weight) {\n\t\tvar color1 = this;\n\t\tvar color2 = mixinColor;\n\t\tvar p = weight === undefined ? 0.5 : weight;\n\n\t\tvar w = 2 * p - 1;\n\t\tvar a = color1.alpha() - color2.alpha();\n\n\t\tvar w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\tvar w2 = 1 - w1;\n\n\t\treturn this\n\t\t\t.rgb(\n\t\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\t\tw1 * color1.blue() + w2 * color2.blue()\n\t\t\t)\n\t\t\t.alpha(color1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n\n\ttoJSON: function () {\n\t\treturn this.rgb();\n\t},\n\n\tclone: function () {\n\t\t// NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,\n\t\t// making the final build way to big to embed in Chart.js. So let's do it manually,\n\t\t// assuming that values to clone are 1 dimension arrays containing only numbers,\n\t\t// except 'alpha' which is a number.\n\t\tvar result = new Color();\n\t\tvar source = this.values;\n\t\tvar target = result.values;\n\t\tvar value, type;\n\n\t\tfor (var prop in source) {\n\t\t\tif (source.hasOwnProperty(prop)) {\n\t\t\t\tvalue = source[prop];\n\t\t\t\ttype = ({}).toString.call(value);\n\t\t\t\tif (type === '[object Array]') {\n\t\t\t\t\ttarget[prop] = value.slice(0);\n\t\t\t\t} else if (type === '[object Number]') {\n\t\t\t\t\ttarget[prop] = value;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('unexpected color value:', value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n};\n\nColor.prototype.spaces = {\n\trgb: ['red', 'green', 'blue'],\n\thsl: ['hue', 'saturation', 'lightness'],\n\thsv: ['hue', 'saturation', 'value'],\n\thwb: ['hue', 'whiteness', 'blackness'],\n\tcmyk: ['cyan', 'magenta', 'yellow', 'black']\n};\n\nColor.prototype.maxes = {\n\trgb: [255, 255, 255],\n\thsl: [360, 100, 100],\n\thsv: [360, 100, 100],\n\thwb: [360, 100, 100],\n\tcmyk: [100, 100, 100, 100]\n};\n\nColor.prototype.getValues = function (space) {\n\tvar values = this.values;\n\tvar vals = {};\n\n\tfor (var i = 0; i < space.length; i++) {\n\t\tvals[space.charAt(i)] = values[space][i];\n\t}\n\n\tif (values.alpha !== 1) {\n\t\tvals.a = values.alpha;\n\t}\n\n\t// {r: 255, g: 255, b: 255, a: 0.4}\n\treturn vals;\n};\n\nColor.prototype.setValues = function (space, vals) {\n\tvar values = this.values;\n\tvar spaces = this.spaces;\n\tvar maxes = this.maxes;\n\tvar alpha = 1;\n\tvar i;\n\n\tthis.valid = true;\n\n\tif (space === 'alpha') {\n\t\talpha = vals;\n\t} else if (vals.length) {\n\t\t// [10, 10, 10]\n\t\tvalues[space] = vals.slice(0, space.length);\n\t\talpha = vals[space.length];\n\t} else if (vals[space.charAt(0)] !== undefined) {\n\t\t// {r: 10, g: 10, b: 10}\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[space.charAt(i)];\n\t\t}\n\n\t\talpha = vals.a;\n\t} else if (vals[spaces[space][0]] !== undefined) {\n\t\t// {red: 10, green: 10, blue: 10}\n\t\tvar chans = spaces[space];\n\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[chans[i]];\n\t\t}\n\n\t\talpha = vals.alpha;\n\t}\n\n\tvalues.alpha = Math.max(0, Math.min(1, (alpha === undefined ? values.alpha : alpha)));\n\n\tif (space === 'alpha') {\n\t\treturn false;\n\t}\n\n\tvar capped;\n\n\t// cap values of the space prior converting all values\n\tfor (i = 0; i < space.length; i++) {\n\t\tcapped = Math.max(0, Math.min(maxes[space][i], values[space][i]));\n\t\tvalues[space][i] = Math.round(capped);\n\t}\n\n\t// convert to all the other color spaces\n\tfor (var sname in spaces) {\n\t\tif (sname !== space) {\n\t\t\tvalues[sname] = colorConvert[space][sname](values[space]);\n\t\t}\n\t}\n\n\treturn true;\n};\n\nColor.prototype.setSpace = function (space, args) {\n\tvar vals = args[0];\n\n\tif (vals === undefined) {\n\t\t// color.rgb()\n\t\treturn this.getValues(space);\n\t}\n\n\t// color.rgb(10, 10, 10)\n\tif (typeof vals === 'number') {\n\t\tvals = Array.prototype.slice.call(args);\n\t}\n\n\tthis.setValues(space, vals);\n\treturn this;\n};\n\nColor.prototype.setChannel = function (space, index, val) {\n\tvar svalues = this.values[space];\n\tif (val === undefined) {\n\t\t// color.red()\n\t\treturn svalues[index];\n\t} else if (val === svalues[index]) {\n\t\t// color.red(color.red())\n\t\treturn this;\n\t}\n\n\t// color.red(100)\n\tsvalues[index] = val;\n\tthis.setValues(space, svalues);\n\n\treturn this;\n};\n\nif (typeof window !== 'undefined') {\n\twindow.Color = Color;\n}\n\nvar chartjsColor = Color;\n\nfunction isValidKey(key) {\r\n\treturn ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\r\n}\r\n\r\n/**\r\n * @namespace Chart.helpers\r\n */\r\nvar helpers = {\r\n\t/**\r\n\t * An empty function that can be used, for example, for optional callback.\r\n\t */\r\n\tnoop: function() {},\r\n\r\n\t/**\r\n\t * Returns a unique id, sequentially generated from a global variable.\r\n\t * @returns {number}\r\n\t * @function\r\n\t */\r\n\tuid: (function() {\r\n\t\tvar id = 0;\r\n\t\treturn function() {\r\n\t\t\treturn id++;\r\n\t\t};\r\n\t}()),\r\n\r\n\t/**\r\n\t * Returns true if `value` is neither null nor undefined, else returns false.\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t * @since 2.7.0\r\n\t */\r\n\tisNullOrUndef: function(value) {\r\n\t\treturn value === null || typeof value === 'undefined';\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if `value` is an array (including typed arrays), else returns false.\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t * @function\r\n\t */\r\n\tisArray: function(value) {\r\n\t\tif (Array.isArray && Array.isArray(value)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar type = Object.prototype.toString.call(value);\r\n\t\tif (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if `value` is an object (excluding null), else returns false.\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t * @since 2.7.0\r\n\t */\r\n\tisObject: function(value) {\r\n\t\treturn value !== null && Object.prototype.toString.call(value) === '[object Object]';\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if `value` is a finite number, else returns false\r\n\t * @param {*} value  - The value to test.\r\n\t * @returns {boolean}\r\n\t */\r\n\tisFinite: function(value) {\r\n\t\treturn (typeof value === 'number' || value instanceof Number) && isFinite(value);\r\n\t},\r\n\r\n\t/**\r\n\t * Returns `value` if defined, else returns `defaultValue`.\r\n\t * @param {*} value - The value to return if defined.\r\n\t * @param {*} defaultValue - The value to return if `value` is undefined.\r\n\t * @returns {*}\r\n\t */\r\n\tvalueOrDefault: function(value, defaultValue) {\r\n\t\treturn typeof value === 'undefined' ? defaultValue : value;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns value at the given `index` in array if defined, else returns `defaultValue`.\r\n\t * @param {Array} value - The array to lookup for value at `index`.\r\n\t * @param {number} index - The index in `value` to lookup for value.\r\n\t * @param {*} defaultValue - The value to return if `value[index]` is undefined.\r\n\t * @returns {*}\r\n\t */\r\n\tvalueAtIndexOrDefault: function(value, index, defaultValue) {\r\n\t\treturn helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue);\r\n\t},\r\n\r\n\t/**\r\n\t * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\r\n\t * value returned by `fn`. If `fn` is not a function, this method returns undefined.\r\n\t * @param {function} fn - The function to call.\r\n\t * @param {Array|undefined|null} args - The arguments with which `fn` should be called.\r\n\t * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\r\n\t * @returns {*}\r\n\t */\r\n\tcallback: function(fn, args, thisArg) {\r\n\t\tif (fn && typeof fn.call === 'function') {\r\n\t\t\treturn fn.apply(thisArg, args);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Note(SB) for performance sake, this method should only be used when loopable type\r\n\t * is unknown or in none intensive code (not called often and small loopable). Else\r\n\t * it's preferable to use a regular for() loop and save extra function calls.\r\n\t * @param {object|Array} loopable - The object or array to be iterated.\r\n\t * @param {function} fn - The function to call for each item.\r\n\t * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\r\n\t * @param {boolean} [reverse] - If true, iterates backward on the loopable.\r\n\t */\r\n\teach: function(loopable, fn, thisArg, reverse) {\r\n\t\tvar i, len, keys;\r\n\t\tif (helpers.isArray(loopable)) {\r\n\t\t\tlen = loopable.length;\r\n\t\t\tif (reverse) {\r\n\t\t\t\tfor (i = len - 1; i >= 0; i--) {\r\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfor (i = 0; i < len; i++) {\r\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if (helpers.isObject(loopable)) {\r\n\t\t\tkeys = Object.keys(loopable);\r\n\t\t\tlen = keys.length;\r\n\t\t\tfor (i = 0; i < len; i++) {\r\n\t\t\t\tfn.call(thisArg, loopable[keys[i]], keys[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\r\n\t * @see https://stackoverflow.com/a/14853974\r\n\t * @param {Array} a0 - The array to compare\r\n\t * @param {Array} a1 - The array to compare\r\n\t * @returns {boolean}\r\n\t */\r\n\tarrayEquals: function(a0, a1) {\r\n\t\tvar i, ilen, v0, v1;\r\n\r\n\t\tif (!a0 || !a1 || a0.length !== a1.length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = a0.length; i < ilen; ++i) {\r\n\t\t\tv0 = a0[i];\r\n\t\t\tv1 = a1[i];\r\n\r\n\t\t\tif (v0 instanceof Array && v1 instanceof Array) {\r\n\t\t\t\tif (!helpers.arrayEquals(v0, v1)) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t} else if (v0 !== v1) {\r\n\t\t\t\t// NOTE: two different object instances will never be equal: {x:20} != {x:20}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns a deep copy of `source` without keeping references on objects and arrays.\r\n\t * @param {*} source - The value to clone.\r\n\t * @returns {*}\r\n\t */\r\n\tclone: function(source) {\r\n\t\tif (helpers.isArray(source)) {\r\n\t\t\treturn source.map(helpers.clone);\r\n\t\t}\r\n\r\n\t\tif (helpers.isObject(source)) {\r\n\t\t\tvar target = Object.create(source);\r\n\t\t\tvar keys = Object.keys(source);\r\n\t\t\tvar klen = keys.length;\r\n\t\t\tvar k = 0;\r\n\r\n\t\t\tfor (; k < klen; ++k) {\r\n\t\t\t\ttarget[keys[k]] = helpers.clone(source[keys[k]]);\r\n\t\t\t}\r\n\r\n\t\t\treturn target;\r\n\t\t}\r\n\r\n\t\treturn source;\r\n\t},\r\n\r\n\t/**\r\n\t * The default merger when Chart.helpers.merge is called without merger option.\r\n\t * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\r\n\t * @private\r\n\t */\r\n\t_merger: function(key, target, source, options) {\r\n\t\tif (!isValidKey(key)) {\r\n\t\t\t// We want to ensure we do not copy prototypes over\r\n\t\t\t// as this can pollute global namespaces\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar tval = target[key];\r\n\t\tvar sval = source[key];\r\n\r\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\r\n\t\t\thelpers.merge(tval, sval, options);\r\n\t\t} else {\r\n\t\t\ttarget[key] = helpers.clone(sval);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Merges source[key] in target[key] only if target[key] is undefined.\r\n\t * @private\r\n\t */\r\n\t_mergerIf: function(key, target, source) {\r\n\t\tif (!isValidKey(key)) {\r\n\t\t\t// We want to ensure we do not copy prototypes over\r\n\t\t\t// as this can pollute global namespaces\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar tval = target[key];\r\n\t\tvar sval = source[key];\r\n\r\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\r\n\t\t\thelpers.mergeIf(tval, sval);\r\n\t\t} else if (!target.hasOwnProperty(key)) {\r\n\t\t\ttarget[key] = helpers.clone(sval);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Recursively deep copies `source` properties into `target` with the given `options`.\r\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\r\n\t * @param {object} target - The target object in which all sources are merged into.\r\n\t * @param {object|object[]} source - Object(s) to merge into `target`.\r\n\t * @param {object} [options] - Merging options:\r\n\t * @param {function} [options.merger] - The merge method (key, target, source, options)\r\n\t * @returns {object} The `target` object.\r\n\t */\r\n\tmerge: function(target, source, options) {\r\n\t\tvar sources = helpers.isArray(source) ? source : [source];\r\n\t\tvar ilen = sources.length;\r\n\t\tvar merge, i, keys, klen, k;\r\n\r\n\t\tif (!helpers.isObject(target)) {\r\n\t\t\treturn target;\r\n\t\t}\r\n\r\n\t\toptions = options || {};\r\n\t\tmerge = options.merger || helpers._merger;\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tsource = sources[i];\r\n\t\t\tif (!helpers.isObject(source)) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tkeys = Object.keys(source);\r\n\t\t\tfor (k = 0, klen = keys.length; k < klen; ++k) {\r\n\t\t\t\tmerge(keys[k], target, source, options);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn target;\r\n\t},\r\n\r\n\t/**\r\n\t * Recursively deep copies `source` properties into `target` *only* if not defined in target.\r\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\r\n\t * @param {object} target - The target object in which all sources are merged into.\r\n\t * @param {object|object[]} source - Object(s) to merge into `target`.\r\n\t * @returns {object} The `target` object.\r\n\t */\r\n\tmergeIf: function(target, source) {\r\n\t\treturn helpers.merge(target, source, {merger: helpers._mergerIf});\r\n\t},\r\n\r\n\t/**\r\n\t * Applies the contents of two or more objects together into the first object.\r\n\t * @param {object} target - The target object in which all objects are merged into.\r\n\t * @param {object} arg1 - Object containing additional properties to merge in target.\r\n\t * @param {object} argN - Additional objects containing properties to merge in target.\r\n\t * @returns {object} The `target` object.\r\n\t */\r\n\textend: Object.assign || function(target) {\r\n\t\treturn helpers.merge(target, [].slice.call(arguments, 1), {\r\n\t\t\tmerger: function(key, dst, src) {\r\n\t\t\t\tdst[key] = src[key];\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t/**\r\n\t * Basic javascript inheritance based on the model created in Backbone.js\r\n\t */\r\n\tinherits: function(extensions) {\r\n\t\tvar me = this;\r\n\t\tvar ChartElement = (extensions && extensions.hasOwnProperty('constructor')) ? extensions.constructor : function() {\r\n\t\t\treturn me.apply(this, arguments);\r\n\t\t};\r\n\r\n\t\tvar Surrogate = function() {\r\n\t\t\tthis.constructor = ChartElement;\r\n\t\t};\r\n\r\n\t\tSurrogate.prototype = me.prototype;\r\n\t\tChartElement.prototype = new Surrogate();\r\n\t\tChartElement.extend = helpers.inherits;\r\n\r\n\t\tif (extensions) {\r\n\t\t\thelpers.extend(ChartElement.prototype, extensions);\r\n\t\t}\r\n\r\n\t\tChartElement.__super__ = me.prototype;\r\n\t\treturn ChartElement;\r\n\t},\r\n\r\n\t_deprecated: function(scope, value, previous, current) {\r\n\t\tif (value !== undefined) {\r\n\t\t\tconsole.warn(scope + ': \"' + previous +\r\n\t\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\r\n\t\t}\r\n\t}\r\n};\r\n\r\nvar helpers_core = helpers;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.callback instead.\r\n * @function Chart.helpers.callCallback\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.callCallback = helpers.callback;\r\n\r\n/**\r\n * Provided for backward compatibility, use Array.prototype.indexOf instead.\r\n * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+\r\n * @function Chart.helpers.indexOf\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.indexOf = function(array, item, fromIndex) {\r\n\treturn Array.prototype.indexOf.call(array, item, fromIndex);\r\n};\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead.\r\n * @function Chart.helpers.getValueOrDefault\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.getValueOrDefault = helpers.valueOrDefault;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead.\r\n * @function Chart.helpers.getValueAtIndexOrDefault\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\n/**\r\n * Easing functions adapted from Robert Penner's easing equations.\r\n * @namespace Chart.helpers.easingEffects\r\n * @see http://www.robertpenner.com/easing/\r\n */\r\nvar effects = {\r\n\tlinear: function(t) {\r\n\t\treturn t;\r\n\t},\r\n\r\n\teaseInQuad: function(t) {\r\n\t\treturn t * t;\r\n\t},\r\n\r\n\teaseOutQuad: function(t) {\r\n\t\treturn -t * (t - 2);\r\n\t},\r\n\r\n\teaseInOutQuad: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t;\r\n\t\t}\r\n\t\treturn -0.5 * ((--t) * (t - 2) - 1);\r\n\t},\r\n\r\n\teaseInCubic: function(t) {\r\n\t\treturn t * t * t;\r\n\t},\r\n\r\n\teaseOutCubic: function(t) {\r\n\t\treturn (t = t - 1) * t * t + 1;\r\n\t},\r\n\r\n\teaseInOutCubic: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t * t;\r\n\t\t}\r\n\t\treturn 0.5 * ((t -= 2) * t * t + 2);\r\n\t},\r\n\r\n\teaseInQuart: function(t) {\r\n\t\treturn t * t * t * t;\r\n\t},\r\n\r\n\teaseOutQuart: function(t) {\r\n\t\treturn -((t = t - 1) * t * t * t - 1);\r\n\t},\r\n\r\n\teaseInOutQuart: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t * t * t;\r\n\t\t}\r\n\t\treturn -0.5 * ((t -= 2) * t * t * t - 2);\r\n\t},\r\n\r\n\teaseInQuint: function(t) {\r\n\t\treturn t * t * t * t * t;\r\n\t},\r\n\r\n\teaseOutQuint: function(t) {\r\n\t\treturn (t = t - 1) * t * t * t * t + 1;\r\n\t},\r\n\r\n\teaseInOutQuint: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t * t * t * t;\r\n\t\t}\r\n\t\treturn 0.5 * ((t -= 2) * t * t * t * t + 2);\r\n\t},\r\n\r\n\teaseInSine: function(t) {\r\n\t\treturn -Math.cos(t * (Math.PI / 2)) + 1;\r\n\t},\r\n\r\n\teaseOutSine: function(t) {\r\n\t\treturn Math.sin(t * (Math.PI / 2));\r\n\t},\r\n\r\n\teaseInOutSine: function(t) {\r\n\t\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\r\n\t},\r\n\r\n\teaseInExpo: function(t) {\r\n\t\treturn (t === 0) ? 0 : Math.pow(2, 10 * (t - 1));\r\n\t},\r\n\r\n\teaseOutExpo: function(t) {\r\n\t\treturn (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1;\r\n\t},\r\n\r\n\teaseInOutExpo: function(t) {\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif (t === 1) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * Math.pow(2, 10 * (t - 1));\r\n\t\t}\r\n\t\treturn 0.5 * (-Math.pow(2, -10 * --t) + 2);\r\n\t},\r\n\r\n\teaseInCirc: function(t) {\r\n\t\tif (t >= 1) {\r\n\t\t\treturn t;\r\n\t\t}\r\n\t\treturn -(Math.sqrt(1 - t * t) - 1);\r\n\t},\r\n\r\n\teaseOutCirc: function(t) {\r\n\t\treturn Math.sqrt(1 - (t = t - 1) * t);\r\n\t},\r\n\r\n\teaseInOutCirc: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn -0.5 * (Math.sqrt(1 - t * t) - 1);\r\n\t\t}\r\n\t\treturn 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\r\n\t},\r\n\r\n\teaseInElastic: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tvar p = 0;\r\n\t\tvar a = 1;\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif (t === 1) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif (!p) {\r\n\t\t\tp = 0.3;\r\n\t\t}\r\n\t\tif (a < 1) {\r\n\t\t\ta = 1;\r\n\t\t\ts = p / 4;\r\n\t\t} else {\r\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\r\n\t\t}\r\n\t\treturn -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\r\n\t},\r\n\r\n\teaseOutElastic: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tvar p = 0;\r\n\t\tvar a = 1;\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif (t === 1) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif (!p) {\r\n\t\t\tp = 0.3;\r\n\t\t}\r\n\t\tif (a < 1) {\r\n\t\t\ta = 1;\r\n\t\t\ts = p / 4;\r\n\t\t} else {\r\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\r\n\t\t}\r\n\t\treturn a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;\r\n\t},\r\n\r\n\teaseInOutElastic: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tvar p = 0;\r\n\t\tvar a = 1;\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif ((t /= 0.5) === 2) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif (!p) {\r\n\t\t\tp = 0.45;\r\n\t\t}\r\n\t\tif (a < 1) {\r\n\t\t\ta = 1;\r\n\t\t\ts = p / 4;\r\n\t\t} else {\r\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\r\n\t\t}\r\n\t\tif (t < 1) {\r\n\t\t\treturn -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\r\n\t\t}\r\n\t\treturn a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1;\r\n\t},\r\n\teaseInBack: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\treturn t * t * ((s + 1) * t - s);\r\n\t},\r\n\r\n\teaseOutBack: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\treturn (t = t - 1) * t * ((s + 1) * t + s) + 1;\r\n\t},\r\n\r\n\teaseInOutBack: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\r\n\t\t}\r\n\t\treturn 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\r\n\t},\r\n\r\n\teaseInBounce: function(t) {\r\n\t\treturn 1 - effects.easeOutBounce(1 - t);\r\n\t},\r\n\r\n\teaseOutBounce: function(t) {\r\n\t\tif (t < (1 / 2.75)) {\r\n\t\t\treturn 7.5625 * t * t;\r\n\t\t}\r\n\t\tif (t < (2 / 2.75)) {\r\n\t\t\treturn 7.5625 * (t -= (1.5 / 2.75)) * t + 0.75;\r\n\t\t}\r\n\t\tif (t < (2.5 / 2.75)) {\r\n\t\t\treturn 7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375;\r\n\t\t}\r\n\t\treturn 7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375;\r\n\t},\r\n\r\n\teaseInOutBounce: function(t) {\r\n\t\tif (t < 0.5) {\r\n\t\t\treturn effects.easeInBounce(t * 2) * 0.5;\r\n\t\t}\r\n\t\treturn effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\r\n\t}\r\n};\r\n\r\nvar helpers_easing = {\r\n\teffects: effects\r\n};\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.easing.effects instead.\r\n * @function Chart.helpers.easingEffects\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.easingEffects = effects;\n\nvar PI = Math.PI;\r\nvar RAD_PER_DEG = PI / 180;\r\nvar DOUBLE_PI = PI * 2;\r\nvar HALF_PI = PI / 2;\r\nvar QUARTER_PI = PI / 4;\r\nvar TWO_THIRDS_PI = PI * 2 / 3;\r\n\r\n/**\r\n * @namespace Chart.helpers.canvas\r\n */\r\nvar exports$1 = {\r\n\t/**\r\n\t * Clears the entire canvas associated to the given `chart`.\r\n\t * @param {Chart} chart - The chart for which to clear the canvas.\r\n\t */\r\n\tclear: function(chart) {\r\n\t\tchart.ctx.clearRect(0, 0, chart.width, chart.height);\r\n\t},\r\n\r\n\t/**\r\n\t * Creates a \"path\" for a rectangle with rounded corners at position (x, y) with a\r\n\t * given size (width, height) and the same `radius` for all corners.\r\n\t * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context.\r\n\t * @param {number} x - The x axis of the coordinate for the rectangle starting point.\r\n\t * @param {number} y - The y axis of the coordinate for the rectangle starting point.\r\n\t * @param {number} width - The rectangle's width.\r\n\t * @param {number} height - The rectangle's height.\r\n\t * @param {number} radius - The rounded amount (in pixels) for the four corners.\r\n\t * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object?\r\n\t */\r\n\troundedRect: function(ctx, x, y, width, height, radius) {\r\n\t\tif (radius) {\r\n\t\t\tvar r = Math.min(radius, height / 2, width / 2);\r\n\t\t\tvar left = x + r;\r\n\t\t\tvar top = y + r;\r\n\t\t\tvar right = x + width - r;\r\n\t\t\tvar bottom = y + height - r;\r\n\r\n\t\t\tctx.moveTo(x, top);\r\n\t\t\tif (left < right && top < bottom) {\r\n\t\t\t\tctx.arc(left, top, r, -PI, -HALF_PI);\r\n\t\t\t\tctx.arc(right, top, r, -HALF_PI, 0);\r\n\t\t\t\tctx.arc(right, bottom, r, 0, HALF_PI);\r\n\t\t\t\tctx.arc(left, bottom, r, HALF_PI, PI);\r\n\t\t\t} else if (left < right) {\r\n\t\t\t\tctx.moveTo(left, y);\r\n\t\t\t\tctx.arc(right, top, r, -HALF_PI, HALF_PI);\r\n\t\t\t\tctx.arc(left, top, r, HALF_PI, PI + HALF_PI);\r\n\t\t\t} else if (top < bottom) {\r\n\t\t\t\tctx.arc(left, top, r, -PI, 0);\r\n\t\t\t\tctx.arc(left, bottom, r, 0, PI);\r\n\t\t\t} else {\r\n\t\t\t\tctx.arc(left, top, r, -PI, PI);\r\n\t\t\t}\r\n\t\t\tctx.closePath();\r\n\t\t\tctx.moveTo(x, y);\r\n\t\t} else {\r\n\t\t\tctx.rect(x, y, width, height);\r\n\t\t}\r\n\t},\r\n\r\n\tdrawPoint: function(ctx, style, radius, x, y, rotation) {\r\n\t\tvar type, xOffset, yOffset, size, cornerRadius;\r\n\t\tvar rad = (rotation || 0) * RAD_PER_DEG;\r\n\r\n\t\tif (style && typeof style === 'object') {\r\n\t\t\ttype = style.toString();\r\n\t\t\tif (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\r\n\t\t\t\tctx.save();\r\n\t\t\t\tctx.translate(x, y);\r\n\t\t\t\tctx.rotate(rad);\r\n\t\t\t\tctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\r\n\t\t\t\tctx.restore();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (isNaN(radius) || radius <= 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tctx.beginPath();\r\n\r\n\t\tswitch (style) {\r\n\t\t// Default includes circle\r\n\t\tdefault:\r\n\t\t\tctx.arc(x, y, radius, 0, DOUBLE_PI);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'triangle':\r\n\t\t\tctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\r\n\t\t\trad += TWO_THIRDS_PI;\r\n\t\t\tctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\r\n\t\t\trad += TWO_THIRDS_PI;\r\n\t\t\tctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'rectRounded':\r\n\t\t\t// NOTE: the rounded rect implementation changed to use `arc` instead of\r\n\t\t\t// `quadraticCurveTo` since it generates better results when rect is\r\n\t\t\t// almost a circle. 0.516 (instead of 0.5) produces results with visually\r\n\t\t\t// closer proportion to the previous impl and it is inscribed in the\r\n\t\t\t// circle with `radius`. For more details, see the following PRs:\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/5597\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/5858\r\n\t\t\tcornerRadius = radius * 0.516;\r\n\t\t\tsize = radius - cornerRadius;\r\n\t\t\txOffset = Math.cos(rad + QUARTER_PI) * size;\r\n\t\t\tyOffset = Math.sin(rad + QUARTER_PI) * size;\r\n\t\t\tctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\r\n\t\t\tctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\r\n\t\t\tctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\r\n\t\t\tctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'rect':\r\n\t\t\tif (!rotation) {\r\n\t\t\t\tsize = Math.SQRT1_2 * radius;\r\n\t\t\t\tctx.rect(x - size, y - size, 2 * size, 2 * size);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\trad += QUARTER_PI;\r\n\t\t\t/* falls through */\r\n\t\tcase 'rectRot':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'crossRot':\r\n\t\t\trad += QUARTER_PI;\r\n\t\t\t/* falls through */\r\n\t\tcase 'cross':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\tbreak;\r\n\t\tcase 'star':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\trad += QUARTER_PI;\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\tbreak;\r\n\t\tcase 'line':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tbreak;\r\n\t\tcase 'dash':\r\n\t\t\tctx.moveTo(x, y);\r\n\t\t\tctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tctx.fill();\r\n\t\tctx.stroke();\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if the point is inside the rectangle\r\n\t * @param {object} point - The point to test\r\n\t * @param {object} area - The rectangle\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\t_isPointInArea: function(point, area) {\r\n\t\tvar epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\r\n\r\n\t\treturn point.x > area.left - epsilon && point.x < area.right + epsilon &&\r\n\t\t\tpoint.y > area.top - epsilon && point.y < area.bottom + epsilon;\r\n\t},\r\n\r\n\tclipArea: function(ctx, area) {\r\n\t\tctx.save();\r\n\t\tctx.beginPath();\r\n\t\tctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\r\n\t\tctx.clip();\r\n\t},\r\n\r\n\tunclipArea: function(ctx) {\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\tlineTo: function(ctx, previous, target, flip) {\r\n\t\tvar stepped = target.steppedLine;\r\n\t\tif (stepped) {\r\n\t\t\tif (stepped === 'middle') {\r\n\t\t\t\tvar midpoint = (previous.x + target.x) / 2.0;\r\n\t\t\t\tctx.lineTo(midpoint, flip ? target.y : previous.y);\r\n\t\t\t\tctx.lineTo(midpoint, flip ? previous.y : target.y);\r\n\t\t\t} else if ((stepped === 'after' && !flip) || (stepped !== 'after' && flip)) {\r\n\t\t\t\tctx.lineTo(previous.x, target.y);\r\n\t\t\t} else {\r\n\t\t\t\tctx.lineTo(target.x, previous.y);\r\n\t\t\t}\r\n\t\t\tctx.lineTo(target.x, target.y);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!target.tension) {\r\n\t\t\tctx.lineTo(target.x, target.y);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tctx.bezierCurveTo(\r\n\t\t\tflip ? previous.controlPointPreviousX : previous.controlPointNextX,\r\n\t\t\tflip ? previous.controlPointPreviousY : previous.controlPointNextY,\r\n\t\t\tflip ? target.controlPointNextX : target.controlPointPreviousX,\r\n\t\t\tflip ? target.controlPointNextY : target.controlPointPreviousY,\r\n\t\t\ttarget.x,\r\n\t\t\ttarget.y);\r\n\t}\r\n};\r\n\r\nvar helpers_canvas = exports$1;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.canvas.clear instead.\r\n * @namespace Chart.helpers.clear\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.clear = exports$1.clear;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead.\r\n * @namespace Chart.helpers.drawRoundedRectangle\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.drawRoundedRectangle = function(ctx) {\r\n\tctx.beginPath();\r\n\texports$1.roundedRect.apply(exports$1, arguments);\r\n};\n\nvar defaults = {\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_set: function(scope, values) {\r\n\t\treturn helpers_core.merge(this[scope] || (this[scope] = {}), values);\r\n\t}\r\n};\r\n\r\n// TODO(v3): remove 'global' from namespace.  all default are global and\r\n// there's inconsistency around which options are under 'global'\r\ndefaults._set('global', {\r\n\tdefaultColor: 'rgba(0,0,0,0.1)',\r\n\tdefaultFontColor: '#666',\r\n\tdefaultFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\r\n\tdefaultFontSize: 12,\r\n\tdefaultFontStyle: 'normal',\r\n\tdefaultLineHeight: 1.2,\r\n\tshowLines: true\r\n});\r\n\r\nvar core_defaults = defaults;\n\nvar valueOrDefault = helpers_core.valueOrDefault;\r\n\r\n/**\r\n * Converts the given font object into a CSS font string.\r\n * @param {object} font - A font object.\r\n * @return {string} The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\r\n * @private\r\n */\r\nfunction toFontString(font) {\r\n\tif (!font || helpers_core.isNullOrUndef(font.size) || helpers_core.isNullOrUndef(font.family)) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (font.style ? font.style + ' ' : '')\r\n\t\t+ (font.weight ? font.weight + ' ' : '')\r\n\t\t+ font.size + 'px '\r\n\t\t+ font.family;\r\n}\r\n\r\n/**\r\n * @alias Chart.helpers.options\r\n * @namespace\r\n */\r\nvar helpers_options = {\r\n\t/**\r\n\t * Converts the given line height `value` in pixels for a specific font `size`.\r\n\t * @param {number|string} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\r\n\t * @param {number} size - The font size (in pixels) used to resolve relative `value`.\r\n\t * @returns {number} The effective line height in pixels (size * 1.2 if value is invalid).\r\n\t * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\r\n\t * @since 2.7.0\r\n\t */\r\n\ttoLineHeight: function(value, size) {\r\n\t\tvar matches = ('' + value).match(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\r\n\t\tif (!matches || matches[1] === 'normal') {\r\n\t\t\treturn size * 1.2;\r\n\t\t}\r\n\r\n\t\tvalue = +matches[2];\r\n\r\n\t\tswitch (matches[3]) {\r\n\t\tcase 'px':\r\n\t\t\treturn value;\r\n\t\tcase '%':\r\n\t\t\tvalue /= 100;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn size * value;\r\n\t},\r\n\r\n\t/**\r\n\t * Converts the given value into a padding object with pre-computed width/height.\r\n\t * @param {number|object} value - If a number, set the value to all TRBL component,\r\n\t *  else, if and object, use defined properties and sets undefined ones to 0.\r\n\t * @returns {object} The padding values (top, right, bottom, left, width, height)\r\n\t * @since 2.7.0\r\n\t */\r\n\ttoPadding: function(value) {\r\n\t\tvar t, r, b, l;\r\n\r\n\t\tif (helpers_core.isObject(value)) {\r\n\t\t\tt = +value.top || 0;\r\n\t\t\tr = +value.right || 0;\r\n\t\t\tb = +value.bottom || 0;\r\n\t\t\tl = +value.left || 0;\r\n\t\t} else {\r\n\t\t\tt = r = b = l = +value || 0;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttop: t,\r\n\t\t\tright: r,\r\n\t\t\tbottom: b,\r\n\t\t\tleft: l,\r\n\t\t\theight: t + b,\r\n\t\t\twidth: l + r\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Parses font options and returns the font object.\r\n\t * @param {object} options - A object that contains font options to be parsed.\r\n\t * @return {object} The font object.\r\n\t * @todo Support font.* options and renamed to toFont().\r\n\t * @private\r\n\t */\r\n\t_parseFont: function(options) {\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize);\r\n\t\tvar font = {\r\n\t\t\tfamily: valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily),\r\n\t\t\tlineHeight: helpers_core.options.toLineHeight(valueOrDefault(options.lineHeight, globalDefaults.defaultLineHeight), size),\r\n\t\t\tsize: size,\r\n\t\t\tstyle: valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle),\r\n\t\t\tweight: null,\r\n\t\t\tstring: ''\r\n\t\t};\r\n\r\n\t\tfont.string = toFontString(font);\r\n\t\treturn font;\r\n\t},\r\n\r\n\t/**\r\n\t * Evaluates the given `inputs` sequentially and returns the first defined value.\r\n\t * @param {Array} inputs - An array of values, falling back to the last value.\r\n\t * @param {object} [context] - If defined and the current value is a function, the value\r\n\t * is called with `context` as first argument and the result becomes the new input.\r\n\t * @param {number} [index] - If defined and the current value is an array, the value\r\n\t * at `index` become the new input.\r\n\t * @param {object} [info] - object to return information about resolution in\r\n\t * @param {boolean} [info.cacheable] - Will be set to `false` if option is not cacheable.\r\n\t * @since 2.7.0\r\n\t */\r\n\tresolve: function(inputs, context, index, info) {\r\n\t\tvar cacheable = true;\r\n\t\tvar i, ilen, value;\r\n\r\n\t\tfor (i = 0, ilen = inputs.length; i < ilen; ++i) {\r\n\t\t\tvalue = inputs[i];\r\n\t\t\tif (value === undefined) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tif (context !== undefined && typeof value === 'function') {\r\n\t\t\t\tvalue = value(context);\r\n\t\t\t\tcacheable = false;\r\n\t\t\t}\r\n\t\t\tif (index !== undefined && helpers_core.isArray(value)) {\r\n\t\t\t\tvalue = value[index];\r\n\t\t\t\tcacheable = false;\r\n\t\t\t}\r\n\t\t\tif (value !== undefined) {\r\n\t\t\t\tif (info && !cacheable) {\r\n\t\t\t\t\tinfo.cacheable = false;\r\n\t\t\t\t}\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\n\n/**\r\n * @alias Chart.helpers.math\r\n * @namespace\r\n */\r\nvar exports$2 = {\r\n\t/**\r\n\t * Returns an array of factors sorted from 1 to sqrt(value)\r\n\t * @private\r\n\t */\r\n\t_factorize: function(value) {\r\n\t\tvar result = [];\r\n\t\tvar sqrt = Math.sqrt(value);\r\n\t\tvar i;\r\n\r\n\t\tfor (i = 1; i < sqrt; i++) {\r\n\t\t\tif (value % i === 0) {\r\n\t\t\t\tresult.push(i);\r\n\t\t\t\tresult.push(value / i);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (sqrt === (sqrt | 0)) { // if value is a square number\r\n\t\t\tresult.push(sqrt);\r\n\t\t}\r\n\r\n\t\tresult.sort(function(a, b) {\r\n\t\t\treturn a - b;\r\n\t\t}).pop();\r\n\t\treturn result;\r\n\t},\r\n\r\n\tlog10: Math.log10 || function(x) {\r\n\t\tvar exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10.\r\n\t\t// Check for whole powers of 10,\r\n\t\t// which due to floating point rounding error should be corrected.\r\n\t\tvar powerOf10 = Math.round(exponent);\r\n\t\tvar isPowerOf10 = x === Math.pow(10, powerOf10);\r\n\r\n\t\treturn isPowerOf10 ? powerOf10 : exponent;\r\n\t}\r\n};\r\n\r\nvar helpers_math = exports$2;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.math.log10 instead.\r\n * @namespace Chart.helpers.log10\r\n * @deprecated since version 2.9.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.log10 = exports$2.log10;\n\nvar getRtlAdapter = function(rectX, width) {\r\n\treturn {\r\n\t\tx: function(x) {\r\n\t\t\treturn rectX + rectX + width - x;\r\n\t\t},\r\n\t\tsetWidth: function(w) {\r\n\t\t\twidth = w;\r\n\t\t},\r\n\t\ttextAlign: function(align) {\r\n\t\t\tif (align === 'center') {\r\n\t\t\t\treturn align;\r\n\t\t\t}\r\n\t\t\treturn align === 'right' ? 'left' : 'right';\r\n\t\t},\r\n\t\txPlus: function(x, value) {\r\n\t\t\treturn x - value;\r\n\t\t},\r\n\t\tleftForLtr: function(x, itemWidth) {\r\n\t\t\treturn x - itemWidth;\r\n\t\t},\r\n\t};\r\n};\r\n\r\nvar getLtrAdapter = function() {\r\n\treturn {\r\n\t\tx: function(x) {\r\n\t\t\treturn x;\r\n\t\t},\r\n\t\tsetWidth: function(w) { // eslint-disable-line no-unused-vars\r\n\t\t},\r\n\t\ttextAlign: function(align) {\r\n\t\t\treturn align;\r\n\t\t},\r\n\t\txPlus: function(x, value) {\r\n\t\t\treturn x + value;\r\n\t\t},\r\n\t\tleftForLtr: function(x, _itemWidth) { // eslint-disable-line no-unused-vars\r\n\t\t\treturn x;\r\n\t\t},\r\n\t};\r\n};\r\n\r\nvar getAdapter = function(rtl, rectX, width) {\r\n\treturn rtl ? getRtlAdapter(rectX, width) : getLtrAdapter();\r\n};\r\n\r\nvar overrideTextDirection = function(ctx, direction) {\r\n\tvar style, original;\r\n\tif (direction === 'ltr' || direction === 'rtl') {\r\n\t\tstyle = ctx.canvas.style;\r\n\t\toriginal = [\r\n\t\t\tstyle.getPropertyValue('direction'),\r\n\t\t\tstyle.getPropertyPriority('direction'),\r\n\t\t];\r\n\r\n\t\tstyle.setProperty('direction', direction, 'important');\r\n\t\tctx.prevTextDirection = original;\r\n\t}\r\n};\r\n\r\nvar restoreTextDirection = function(ctx) {\r\n\tvar original = ctx.prevTextDirection;\r\n\tif (original !== undefined) {\r\n\t\tdelete ctx.prevTextDirection;\r\n\t\tctx.canvas.style.setProperty('direction', original[0], original[1]);\r\n\t}\r\n};\r\n\r\nvar helpers_rtl = {\r\n\tgetRtlAdapter: getAdapter,\r\n\toverrideTextDirection: overrideTextDirection,\r\n\trestoreTextDirection: restoreTextDirection,\r\n};\n\nvar helpers$1 = helpers_core;\r\nvar easing = helpers_easing;\r\nvar canvas = helpers_canvas;\r\nvar options = helpers_options;\r\nvar math = helpers_math;\r\nvar rtl = helpers_rtl;\nhelpers$1.easing = easing;\nhelpers$1.canvas = canvas;\nhelpers$1.options = options;\nhelpers$1.math = math;\nhelpers$1.rtl = rtl;\n\nfunction interpolate(start, view, model, ease) {\r\n\tvar keys = Object.keys(model);\r\n\tvar i, ilen, key, actual, origin, target, type, c0, c1;\r\n\r\n\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\r\n\t\tkey = keys[i];\r\n\r\n\t\ttarget = model[key];\r\n\r\n\t\t// if a value is added to the model after pivot() has been called, the view\r\n\t\t// doesn't contain it, so let's initialize the view to the target value.\r\n\t\tif (!view.hasOwnProperty(key)) {\r\n\t\t\tview[key] = target;\r\n\t\t}\r\n\r\n\t\tactual = view[key];\r\n\r\n\t\tif (actual === target || key[0] === '_') {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tif (!start.hasOwnProperty(key)) {\r\n\t\t\tstart[key] = actual;\r\n\t\t}\r\n\r\n\t\torigin = start[key];\r\n\r\n\t\ttype = typeof target;\r\n\r\n\t\tif (type === typeof origin) {\r\n\t\t\tif (type === 'string') {\r\n\t\t\t\tc0 = chartjsColor(origin);\r\n\t\t\t\tif (c0.valid) {\r\n\t\t\t\t\tc1 = chartjsColor(target);\r\n\t\t\t\t\tif (c1.valid) {\r\n\t\t\t\t\t\tview[key] = c1.mix(c0, ease).rgbString();\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else if (helpers$1.isFinite(origin) && helpers$1.isFinite(target)) {\r\n\t\t\t\tview[key] = origin + (target - origin) * ease;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tview[key] = target;\r\n\t}\r\n}\r\n\r\nvar Element = function(configuration) {\r\n\thelpers$1.extend(this, configuration);\r\n\tthis.initialize.apply(this, arguments);\r\n};\r\n\r\nhelpers$1.extend(Element.prototype, {\r\n\t_type: undefined,\r\n\r\n\tinitialize: function() {\r\n\t\tthis.hidden = false;\r\n\t},\r\n\r\n\tpivot: function() {\r\n\t\tvar me = this;\r\n\t\tif (!me._view) {\r\n\t\t\tme._view = helpers$1.extend({}, me._model);\r\n\t\t}\r\n\t\tme._start = {};\r\n\t\treturn me;\r\n\t},\r\n\r\n\ttransition: function(ease) {\r\n\t\tvar me = this;\r\n\t\tvar model = me._model;\r\n\t\tvar start = me._start;\r\n\t\tvar view = me._view;\r\n\r\n\t\t// No animation -> No Transition\r\n\t\tif (!model || ease === 1) {\r\n\t\t\tme._view = helpers$1.extend({}, model);\r\n\t\t\tme._start = null;\r\n\t\t\treturn me;\r\n\t\t}\r\n\r\n\t\tif (!view) {\r\n\t\t\tview = me._view = {};\r\n\t\t}\r\n\r\n\t\tif (!start) {\r\n\t\t\tstart = me._start = {};\r\n\t\t}\r\n\r\n\t\tinterpolate(start, view, model, ease);\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\treturn {\r\n\t\t\tx: this._model.x,\r\n\t\t\ty: this._model.y\r\n\t\t};\r\n\t},\r\n\r\n\thasValue: function() {\r\n\t\treturn helpers$1.isNumber(this._model.x) && helpers$1.isNumber(this._model.y);\r\n\t}\r\n});\r\n\r\nElement.extend = helpers$1.inherits;\r\n\r\nvar core_element = Element;\n\nvar exports$3 = core_element.extend({\r\n\tchart: null, // the animation associated chart instance\r\n\tcurrentStep: 0, // the current animation step\r\n\tnumSteps: 60, // default number of steps\r\n\teasing: '', // the easing to use for this animation\r\n\trender: null, // render function used by the animation service\r\n\r\n\tonAnimationProgress: null, // user specified callback to fire on each step of the animation\r\n\tonAnimationComplete: null, // user specified callback to fire when the animation finishes\r\n});\r\n\r\nvar core_animation = exports$3;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.Animation instead\r\n * @prop Chart.Animation#animationObject\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n */\r\nObject.defineProperty(exports$3.prototype, 'animationObject', {\r\n\tget: function() {\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.Animation#chart instead\r\n * @prop Chart.Animation#chartInstance\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n */\r\nObject.defineProperty(exports$3.prototype, 'chartInstance', {\r\n\tget: function() {\r\n\t\treturn this.chart;\r\n\t},\r\n\tset: function(value) {\r\n\t\tthis.chart = value;\r\n\t}\r\n});\n\ncore_defaults._set('global', {\r\n\tanimation: {\r\n\t\tduration: 1000,\r\n\t\teasing: 'easeOutQuart',\r\n\t\tonProgress: helpers$1.noop,\r\n\t\tonComplete: helpers$1.noop\r\n\t}\r\n});\r\n\r\nvar core_animations = {\r\n\tanimations: [],\r\n\trequest: null,\r\n\r\n\t/**\r\n\t * @param {Chart} chart - The chart to animate.\r\n\t * @param {Chart.Animation} animation - The animation that we will animate.\r\n\t * @param {number} duration - The animation duration in ms.\r\n\t * @param {boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions\r\n\t */\r\n\taddAnimation: function(chart, animation, duration, lazy) {\r\n\t\tvar animations = this.animations;\r\n\t\tvar i, ilen;\r\n\r\n\t\tanimation.chart = chart;\r\n\t\tanimation.startTime = Date.now();\r\n\t\tanimation.duration = duration;\r\n\r\n\t\tif (!lazy) {\r\n\t\t\tchart.animating = true;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = animations.length; i < ilen; ++i) {\r\n\t\t\tif (animations[i].chart === chart) {\r\n\t\t\t\tanimations[i] = animation;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tanimations.push(animation);\r\n\r\n\t\t// If there are no animations queued, manually kickstart a digest, for lack of a better word\r\n\t\tif (animations.length === 1) {\r\n\t\t\tthis.requestAnimationFrame();\r\n\t\t}\r\n\t},\r\n\r\n\tcancelAnimation: function(chart) {\r\n\t\tvar index = helpers$1.findIndex(this.animations, function(animation) {\r\n\t\t\treturn animation.chart === chart;\r\n\t\t});\r\n\r\n\t\tif (index !== -1) {\r\n\t\t\tthis.animations.splice(index, 1);\r\n\t\t\tchart.animating = false;\r\n\t\t}\r\n\t},\r\n\r\n\trequestAnimationFrame: function() {\r\n\t\tvar me = this;\r\n\t\tif (me.request === null) {\r\n\t\t\t// Skip animation frame requests until the active one is executed.\r\n\t\t\t// This can happen when processing mouse events, e.g. 'mousemove'\r\n\t\t\t// and 'mouseout' events will trigger multiple renders.\r\n\t\t\tme.request = helpers$1.requestAnimFrame.call(window, function() {\r\n\t\t\t\tme.request = null;\r\n\t\t\t\tme.startDigest();\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tstartDigest: function() {\r\n\t\tvar me = this;\r\n\r\n\t\tme.advance();\r\n\r\n\t\t// Do we have more stuff to animate?\r\n\t\tif (me.animations.length > 0) {\r\n\t\t\tme.requestAnimationFrame();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tadvance: function() {\r\n\t\tvar animations = this.animations;\r\n\t\tvar animation, chart, numSteps, nextStep;\r\n\t\tvar i = 0;\r\n\r\n\t\t// 1 animation per chart, so we are looping charts here\r\n\t\twhile (i < animations.length) {\r\n\t\t\tanimation = animations[i];\r\n\t\t\tchart = animation.chart;\r\n\t\t\tnumSteps = animation.numSteps;\r\n\r\n\t\t\t// Make sure that currentStep starts at 1\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/6104\r\n\t\t\tnextStep = Math.floor((Date.now() - animation.startTime) / animation.duration * numSteps) + 1;\r\n\t\t\tanimation.currentStep = Math.min(nextStep, numSteps);\r\n\r\n\t\t\thelpers$1.callback(animation.render, [chart, animation], chart);\r\n\t\t\thelpers$1.callback(animation.onAnimationProgress, [animation], chart);\r\n\r\n\t\t\tif (animation.currentStep >= numSteps) {\r\n\t\t\t\thelpers$1.callback(animation.onAnimationComplete, [animation], chart);\r\n\t\t\t\tchart.animating = false;\r\n\t\t\t\tanimations.splice(i, 1);\r\n\t\t\t} else {\r\n\t\t\t\t++i;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\n\nvar resolve = helpers$1.options.resolve;\r\n\r\nvar arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\r\n\r\n/**\r\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\r\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\r\n * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.\r\n */\r\nfunction listenArrayEvents(array, listener) {\r\n\tif (array._chartjs) {\r\n\t\tarray._chartjs.listeners.push(listener);\r\n\t\treturn;\r\n\t}\r\n\r\n\tObject.defineProperty(array, '_chartjs', {\r\n\t\tconfigurable: true,\r\n\t\tenumerable: false,\r\n\t\tvalue: {\r\n\t\t\tlisteners: [listener]\r\n\t\t}\r\n\t});\r\n\r\n\tarrayEvents.forEach(function(key) {\r\n\t\tvar method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);\r\n\t\tvar base = array[key];\r\n\r\n\t\tObject.defineProperty(array, key, {\r\n\t\t\tconfigurable: true,\r\n\t\t\tenumerable: false,\r\n\t\t\tvalue: function() {\r\n\t\t\t\tvar args = Array.prototype.slice.call(arguments);\r\n\t\t\t\tvar res = base.apply(this, args);\r\n\r\n\t\t\t\thelpers$1.each(array._chartjs.listeners, function(object) {\r\n\t\t\t\t\tif (typeof object[method] === 'function') {\r\n\t\t\t\t\t\tobject[method].apply(object, args);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n}\r\n\r\n/**\r\n * Removes the given array event listener and cleanup extra attached properties (such as\r\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\r\n */\r\nfunction unlistenArrayEvents(array, listener) {\r\n\tvar stub = array._chartjs;\r\n\tif (!stub) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar listeners = stub.listeners;\r\n\tvar index = listeners.indexOf(listener);\r\n\tif (index !== -1) {\r\n\t\tlisteners.splice(index, 1);\r\n\t}\r\n\r\n\tif (listeners.length > 0) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tarrayEvents.forEach(function(key) {\r\n\t\tdelete array[key];\r\n\t});\r\n\r\n\tdelete array._chartjs;\r\n}\r\n\r\n// Base class for all dataset controllers (line, bar, etc)\r\nvar DatasetController = function(chart, datasetIndex) {\r\n\tthis.initialize(chart, datasetIndex);\r\n};\r\n\r\nhelpers$1.extend(DatasetController.prototype, {\r\n\r\n\t/**\r\n\t * Element type used to generate a meta dataset (e.g. Chart.element.Line).\r\n\t * @type {Chart.core.element}\r\n\t */\r\n\tdatasetElementType: null,\r\n\r\n\t/**\r\n\t * Element type used to generate a meta data (e.g. Chart.element.Point).\r\n\t * @type {Chart.core.element}\r\n\t */\r\n\tdataElementType: null,\r\n\r\n\t/**\r\n\t * Dataset element option keys to be resolved in _resolveDatasetElementOptions.\r\n\t * A derived controller may override this to resolve controller-specific options.\r\n\t * The keys defined here are for backward compatibility for legend styles.\r\n\t * @private\r\n\t */\r\n\t_datasetElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderCapStyle',\r\n\t\t'borderColor',\r\n\t\t'borderDash',\r\n\t\t'borderDashOffset',\r\n\t\t'borderJoinStyle',\r\n\t\t'borderWidth'\r\n\t],\r\n\r\n\t/**\r\n\t * Data element option keys to be resolved in _resolveDataElementOptions.\r\n\t * A derived controller may override this to resolve controller-specific options.\r\n\t * The keys defined here are for backward compatibility for legend styles.\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'pointStyle'\r\n\t],\r\n\r\n\tinitialize: function(chart, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tme.chart = chart;\r\n\t\tme.index = datasetIndex;\r\n\t\tme.linkScales();\r\n\t\tme.addElements();\r\n\t\tme._type = me.getMeta().type;\r\n\t},\r\n\r\n\tupdateIndex: function(datasetIndex) {\r\n\t\tthis.index = datasetIndex;\r\n\t},\r\n\r\n\tlinkScales: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar chart = me.chart;\r\n\t\tvar scales = chart.scales;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar scalesOpts = chart.options.scales;\r\n\r\n\t\tif (meta.xAxisID === null || !(meta.xAxisID in scales) || dataset.xAxisID) {\r\n\t\t\tmeta.xAxisID = dataset.xAxisID || scalesOpts.xAxes[0].id;\r\n\t\t}\r\n\t\tif (meta.yAxisID === null || !(meta.yAxisID in scales) || dataset.yAxisID) {\r\n\t\t\tmeta.yAxisID = dataset.yAxisID || scalesOpts.yAxes[0].id;\r\n\t\t}\r\n\t},\r\n\r\n\tgetDataset: function() {\r\n\t\treturn this.chart.data.datasets[this.index];\r\n\t},\r\n\r\n\tgetMeta: function() {\r\n\t\treturn this.chart.getDatasetMeta(this.index);\r\n\t},\r\n\r\n\tgetScaleForId: function(scaleID) {\r\n\t\treturn this.chart.scales[scaleID];\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.getMeta().yAxisID;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.getMeta().xAxisID;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScale: function() {\r\n\t\treturn this.getScaleForId(this._getValueScaleId());\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScale: function() {\r\n\t\treturn this.getScaleForId(this._getIndexScaleId());\r\n\t},\r\n\r\n\treset: function() {\r\n\t\tthis._update(true);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tdestroy: function() {\r\n\t\tif (this._data) {\r\n\t\t\tunlistenArrayEvents(this._data, this);\r\n\t\t}\r\n\t},\r\n\r\n\tcreateMetaDataset: function() {\r\n\t\tvar me = this;\r\n\t\tvar type = me.datasetElementType;\r\n\t\treturn type && new type({\r\n\t\t\t_chart: me.chart,\r\n\t\t\t_datasetIndex: me.index\r\n\t\t});\r\n\t},\r\n\r\n\tcreateMetaData: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar type = me.dataElementType;\r\n\t\treturn type && new type({\r\n\t\t\t_chart: me.chart,\r\n\t\t\t_datasetIndex: me.index,\r\n\t\t\t_index: index\r\n\t\t});\r\n\t},\r\n\r\n\taddElements: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar data = me.getDataset().data || [];\r\n\t\tvar metaData = meta.data;\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = data.length; i < ilen; ++i) {\r\n\t\t\tmetaData[i] = metaData[i] || me.createMetaData(i);\r\n\t\t}\r\n\r\n\t\tmeta.dataset = meta.dataset || me.createMetaDataset();\r\n\t},\r\n\r\n\taddElementAndReset: function(index) {\r\n\t\tvar element = this.createMetaData(index);\r\n\t\tthis.getMeta().data.splice(index, 0, element);\r\n\t\tthis.updateElement(element, index, true);\r\n\t},\r\n\r\n\tbuildOrUpdateElements: function() {\r\n\t\tvar me = this;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar data = dataset.data || (dataset.data = []);\r\n\r\n\t\t// In order to correctly handle data addition/deletion animation (an thus simulate\r\n\t\t// real-time charts), we need to monitor these data modifications and synchronize\r\n\t\t// the internal meta data accordingly.\r\n\t\tif (me._data !== data) {\r\n\t\t\tif (me._data) {\r\n\t\t\t\t// This case happens when the user replaced the data array instance.\r\n\t\t\t\tunlistenArrayEvents(me._data, me);\r\n\t\t\t}\r\n\r\n\t\t\tif (data && Object.isExtensible(data)) {\r\n\t\t\t\tlistenArrayEvents(data, me);\r\n\t\t\t}\r\n\t\t\tme._data = data;\r\n\t\t}\r\n\r\n\t\t// Re-sync meta data in case the user replaced the data array or if we missed\r\n\t\t// any updates and so make sure that we handle number of datapoints changing.\r\n\t\tme.resyncElements();\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the merged user-supplied and default dataset-level options\r\n\t * @private\r\n\t */\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tme._config = helpers$1.merge(Object.create(null), [\r\n\t\t\tme.chart.options.datasets[me._type],\r\n\t\t\tme.getDataset(),\r\n\t\t], {\r\n\t\t\tmerger: function(key, target, source) {\r\n\t\t\t\tif (key !== '_meta' && key !== 'data') {\r\n\t\t\t\t\thelpers$1._merger(key, target, source);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_update: function(reset) {\r\n\t\tvar me = this;\r\n\t\tme._configure();\r\n\t\tme._cachedDataOpts = null;\r\n\t\tme.update(reset);\r\n\t},\r\n\r\n\tupdate: helpers$1.noop,\r\n\r\n\ttransition: function(easingValue) {\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar elements = meta.data || [];\r\n\t\tvar ilen = elements.length;\r\n\t\tvar i = 0;\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\telements[i].transition(easingValue);\r\n\t\t}\r\n\r\n\t\tif (meta.dataset) {\r\n\t\t\tmeta.dataset.transition(easingValue);\r\n\t\t}\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar elements = meta.data || [];\r\n\t\tvar ilen = elements.length;\r\n\t\tvar i = 0;\r\n\r\n\t\tif (meta.dataset) {\r\n\t\t\tmeta.dataset.draw();\r\n\t\t}\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\telements[i].draw();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Returns a set of predefined style properties that should be used to represent the dataset\r\n\t * or the data if the index is specified\r\n\t * @param {number} index - data index\r\n\t * @return {IStyleInterface} style object\r\n\t */\r\n\tgetStyle: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar dataset = meta.dataset;\r\n\t\tvar style;\r\n\r\n\t\tme._configure();\r\n\t\tif (dataset && index === undefined) {\r\n\t\t\tstyle = me._resolveDatasetElementOptions(dataset || {});\r\n\t\t} else {\r\n\t\t\tindex = index || 0;\r\n\t\t\tstyle = me._resolveDataElementOptions(meta.data[index] || {}, index);\r\n\t\t}\r\n\r\n\t\tif (style.fill === false || style.fill === null) {\r\n\t\t\tstyle.backgroundColor = style.borderColor;\r\n\t\t}\r\n\r\n\t\treturn style;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDatasetElementOptions: function(element, hover) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasetOpts = me._config;\r\n\t\tvar custom = element.custom || {};\r\n\t\tvar options = chart.options.elements[me.datasetElementType.prototype._type] || {};\r\n\t\tvar elementOptions = me._datasetElementOptions;\r\n\t\tvar values = {};\r\n\t\tvar i, ilen, key, readKey;\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: chart,\r\n\t\t\tdataset: me.getDataset(),\r\n\t\t\tdatasetIndex: me.index,\r\n\t\t\thover: hover\r\n\t\t};\r\n\r\n\t\tfor (i = 0, ilen = elementOptions.length; i < ilen; ++i) {\r\n\t\t\tkey = elementOptions[i];\r\n\t\t\treadKey = hover ? 'hover' + key.charAt(0).toUpperCase() + key.slice(1) : key;\r\n\t\t\tvalues[key] = resolve([\r\n\t\t\t\tcustom[readKey],\r\n\t\t\t\tdatasetOpts[readKey],\r\n\t\t\t\toptions[readKey]\r\n\t\t\t], context);\r\n\t\t}\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDataElementOptions: function(element, index) {\r\n\t\tvar me = this;\r\n\t\tvar custom = element && element.custom;\r\n\t\tvar cached = me._cachedDataOpts;\r\n\t\tif (cached && !custom) {\r\n\t\t\treturn cached;\r\n\t\t}\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasetOpts = me._config;\r\n\t\tvar options = chart.options.elements[me.dataElementType.prototype._type] || {};\r\n\t\tvar elementOptions = me._dataElementOptions;\r\n\t\tvar values = {};\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: chart,\r\n\t\t\tdataIndex: index,\r\n\t\t\tdataset: me.getDataset(),\r\n\t\t\tdatasetIndex: me.index\r\n\t\t};\r\n\r\n\t\t// `resolve` sets cacheable to `false` if any option is indexed or scripted\r\n\t\tvar info = {cacheable: !custom};\r\n\r\n\t\tvar keys, i, ilen, key;\r\n\r\n\t\tcustom = custom || {};\r\n\r\n\t\tif (helpers$1.isArray(elementOptions)) {\r\n\t\t\tfor (i = 0, ilen = elementOptions.length; i < ilen; ++i) {\r\n\t\t\t\tkey = elementOptions[i];\r\n\t\t\t\tvalues[key] = resolve([\r\n\t\t\t\t\tcustom[key],\r\n\t\t\t\t\tdatasetOpts[key],\r\n\t\t\t\t\toptions[key]\r\n\t\t\t\t], context, index, info);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tkeys = Object.keys(elementOptions);\r\n\t\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\r\n\t\t\t\tkey = keys[i];\r\n\t\t\t\tvalues[key] = resolve([\r\n\t\t\t\t\tcustom[key],\r\n\t\t\t\t\tdatasetOpts[elementOptions[key]],\r\n\t\t\t\t\tdatasetOpts[key],\r\n\t\t\t\t\toptions[key]\r\n\t\t\t\t], context, index, info);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (info.cacheable) {\r\n\t\t\tme._cachedDataOpts = Object.freeze(values);\r\n\t\t}\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\tremoveHoverStyle: function(element) {\r\n\t\thelpers$1.merge(element._model, element.$previousStyle || {});\r\n\t\tdelete element.$previousStyle;\r\n\t},\r\n\r\n\tsetHoverStyle: function(element) {\r\n\t\tvar dataset = this.chart.data.datasets[element._datasetIndex];\r\n\t\tvar index = element._index;\r\n\t\tvar custom = element.custom || {};\r\n\t\tvar model = element._model;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\telement.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = resolve([custom.hoverBackgroundColor, dataset.hoverBackgroundColor, getHoverColor(model.backgroundColor)], undefined, index);\r\n\t\tmodel.borderColor = resolve([custom.hoverBorderColor, dataset.hoverBorderColor, getHoverColor(model.borderColor)], undefined, index);\r\n\t\tmodel.borderWidth = resolve([custom.hoverBorderWidth, dataset.hoverBorderWidth, model.borderWidth], undefined, index);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_removeDatasetHoverStyle: function() {\r\n\t\tvar element = this.getMeta().dataset;\r\n\r\n\t\tif (element) {\r\n\t\t\tthis.removeHoverStyle(element);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_setDatasetHoverStyle: function() {\r\n\t\tvar element = this.getMeta().dataset;\r\n\t\tvar prev = {};\r\n\t\tvar i, ilen, key, keys, hoverOptions, model;\r\n\r\n\t\tif (!element) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmodel = element._model;\r\n\t\thoverOptions = this._resolveDatasetElementOptions(element, true);\r\n\r\n\t\tkeys = Object.keys(hoverOptions);\r\n\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\r\n\t\t\tkey = keys[i];\r\n\t\t\tprev[key] = model[key];\r\n\t\t\tmodel[key] = hoverOptions[key];\r\n\t\t}\r\n\r\n\t\telement.$previousStyle = prev;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tresyncElements: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar data = me.getDataset().data;\r\n\t\tvar numMeta = meta.data.length;\r\n\t\tvar numData = data.length;\r\n\r\n\t\tif (numData < numMeta) {\r\n\t\t\tmeta.data.splice(numData, numMeta - numData);\r\n\t\t} else if (numData > numMeta) {\r\n\t\t\tme.insertElements(numMeta, numData - numMeta);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tinsertElements: function(start, count) {\r\n\t\tfor (var i = 0; i < count; ++i) {\r\n\t\t\tthis.addElementAndReset(start + i);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataPush: function() {\r\n\t\tvar count = arguments.length;\r\n\t\tthis.insertElements(this.getDataset().data.length - count, count);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataPop: function() {\r\n\t\tthis.getMeta().data.pop();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataShift: function() {\r\n\t\tthis.getMeta().data.shift();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataSplice: function(start, count) {\r\n\t\tthis.getMeta().data.splice(start, count);\r\n\t\tthis.insertElements(start, arguments.length - 2);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataUnshift: function() {\r\n\t\tthis.insertElements(0, arguments.length);\r\n\t}\r\n});\r\n\r\nDatasetController.extend = helpers$1.inherits;\r\n\r\nvar core_datasetController = DatasetController;\n\nvar TAU = Math.PI * 2;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\tarc: {\r\n\t\t\tbackgroundColor: core_defaults.global.defaultColor,\r\n\t\t\tborderColor: '#fff',\r\n\t\t\tborderWidth: 2,\r\n\t\t\tborderAlign: 'center'\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction clipArc(ctx, arc) {\r\n\tvar startAngle = arc.startAngle;\r\n\tvar endAngle = arc.endAngle;\r\n\tvar pixelMargin = arc.pixelMargin;\r\n\tvar angleMargin = pixelMargin / arc.outerRadius;\r\n\tvar x = arc.x;\r\n\tvar y = arc.y;\r\n\r\n\t// Draw an inner border by cliping the arc and drawing a double-width border\r\n\t// Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\r\n\tctx.beginPath();\r\n\tctx.arc(x, y, arc.outerRadius, startAngle - angleMargin, endAngle + angleMargin);\r\n\tif (arc.innerRadius > pixelMargin) {\r\n\t\tangleMargin = pixelMargin / arc.innerRadius;\r\n\t\tctx.arc(x, y, arc.innerRadius - pixelMargin, endAngle + angleMargin, startAngle - angleMargin, true);\r\n\t} else {\r\n\t\tctx.arc(x, y, pixelMargin, endAngle + Math.PI / 2, startAngle - Math.PI / 2);\r\n\t}\r\n\tctx.closePath();\r\n\tctx.clip();\r\n}\r\n\r\nfunction drawFullCircleBorders(ctx, vm, arc, inner) {\r\n\tvar endAngle = arc.endAngle;\r\n\tvar i;\r\n\r\n\tif (inner) {\r\n\t\tarc.endAngle = arc.startAngle + TAU;\r\n\t\tclipArc(ctx, arc);\r\n\t\tarc.endAngle = endAngle;\r\n\t\tif (arc.endAngle === arc.startAngle && arc.fullCircles) {\r\n\t\t\tarc.endAngle += TAU;\r\n\t\t\tarc.fullCircles--;\r\n\t\t}\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.startAngle + TAU, arc.startAngle, true);\r\n\tfor (i = 0; i < arc.fullCircles; ++i) {\r\n\t\tctx.stroke();\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.startAngle + TAU);\r\n\tfor (i = 0; i < arc.fullCircles; ++i) {\r\n\t\tctx.stroke();\r\n\t}\r\n}\r\n\r\nfunction drawBorder(ctx, vm, arc) {\r\n\tvar inner = vm.borderAlign === 'inner';\r\n\r\n\tif (inner) {\r\n\t\tctx.lineWidth = vm.borderWidth * 2;\r\n\t\tctx.lineJoin = 'round';\r\n\t} else {\r\n\t\tctx.lineWidth = vm.borderWidth;\r\n\t\tctx.lineJoin = 'bevel';\r\n\t}\r\n\r\n\tif (arc.fullCircles) {\r\n\t\tdrawFullCircleBorders(ctx, vm, arc, inner);\r\n\t}\r\n\r\n\tif (inner) {\r\n\t\tclipArc(ctx, arc);\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.endAngle);\r\n\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\r\n\tctx.closePath();\r\n\tctx.stroke();\r\n}\r\n\r\nvar element_arc = core_element.extend({\r\n\t_type: 'arc',\r\n\r\n\tinLabelRange: function(mouseX) {\r\n\t\tvar vm = this._view;\r\n\r\n\t\tif (vm) {\r\n\t\t\treturn (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2));\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\tinRange: function(chartX, chartY) {\r\n\t\tvar vm = this._view;\r\n\r\n\t\tif (vm) {\r\n\t\t\tvar pointRelativePosition = helpers$1.getAngleFromPoint(vm, {x: chartX, y: chartY});\r\n\t\t\tvar angle = pointRelativePosition.angle;\r\n\t\t\tvar distance = pointRelativePosition.distance;\r\n\r\n\t\t\t// Sanitise angle range\r\n\t\t\tvar startAngle = vm.startAngle;\r\n\t\t\tvar endAngle = vm.endAngle;\r\n\t\t\twhile (endAngle < startAngle) {\r\n\t\t\t\tendAngle += TAU;\r\n\t\t\t}\r\n\t\t\twhile (angle > endAngle) {\r\n\t\t\t\tangle -= TAU;\r\n\t\t\t}\r\n\t\t\twhile (angle < startAngle) {\r\n\t\t\t\tangle += TAU;\r\n\t\t\t}\r\n\r\n\t\t\t// Check if within the range of the open/close angle\r\n\t\t\tvar betweenAngles = (angle >= startAngle && angle <= endAngle);\r\n\t\t\tvar withinRadius = (distance >= vm.innerRadius && distance <= vm.outerRadius);\r\n\r\n\t\t\treturn (betweenAngles && withinRadius);\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\tgetCenterPoint: function() {\r\n\t\tvar vm = this._view;\r\n\t\tvar halfAngle = (vm.startAngle + vm.endAngle) / 2;\r\n\t\tvar halfRadius = (vm.innerRadius + vm.outerRadius) / 2;\r\n\t\treturn {\r\n\t\t\tx: vm.x + Math.cos(halfAngle) * halfRadius,\r\n\t\t\ty: vm.y + Math.sin(halfAngle) * halfRadius\r\n\t\t};\r\n\t},\r\n\r\n\tgetArea: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\tvar vm = this._view;\r\n\t\tvar centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2);\r\n\t\tvar rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;\r\n\r\n\t\treturn {\r\n\t\t\tx: vm.x + (Math.cos(centreAngle) * rangeFromCentre),\r\n\t\t\ty: vm.y + (Math.sin(centreAngle) * rangeFromCentre)\r\n\t\t};\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\t\tvar pixelMargin = (vm.borderAlign === 'inner') ? 0.33 : 0;\r\n\t\tvar arc = {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y,\r\n\t\t\tinnerRadius: vm.innerRadius,\r\n\t\t\touterRadius: Math.max(vm.outerRadius - pixelMargin, 0),\r\n\t\t\tpixelMargin: pixelMargin,\r\n\t\t\tstartAngle: vm.startAngle,\r\n\t\t\tendAngle: vm.endAngle,\r\n\t\t\tfullCircles: Math.floor(vm.circumference / TAU)\r\n\t\t};\r\n\t\tvar i;\r\n\r\n\t\tctx.save();\r\n\r\n\t\tctx.fillStyle = vm.backgroundColor;\r\n\t\tctx.strokeStyle = vm.borderColor;\r\n\r\n\t\tif (arc.fullCircles) {\r\n\t\t\tarc.endAngle = arc.startAngle + TAU;\r\n\t\t\tctx.beginPath();\r\n\t\t\tctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);\r\n\t\t\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\r\n\t\t\tctx.closePath();\r\n\t\t\tfor (i = 0; i < arc.fullCircles; ++i) {\r\n\t\t\t\tctx.fill();\r\n\t\t\t}\r\n\t\t\tarc.endAngle = arc.startAngle + vm.circumference % TAU;\r\n\t\t}\r\n\r\n\t\tctx.beginPath();\r\n\t\tctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);\r\n\t\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\r\n\t\tctx.closePath();\r\n\t\tctx.fill();\r\n\r\n\t\tif (vm.borderWidth) {\r\n\t\t\tdrawBorder(ctx, vm, arc);\r\n\t\t}\r\n\r\n\t\tctx.restore();\r\n\t}\r\n});\n\nvar valueOrDefault$1 = helpers$1.valueOrDefault;\r\n\r\nvar defaultColor = core_defaults.global.defaultColor;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\tline: {\r\n\t\t\ttension: 0.4,\r\n\t\t\tbackgroundColor: defaultColor,\r\n\t\t\tborderWidth: 3,\r\n\t\t\tborderColor: defaultColor,\r\n\t\t\tborderCapStyle: 'butt',\r\n\t\t\tborderDash: [],\r\n\t\t\tborderDashOffset: 0.0,\r\n\t\t\tborderJoinStyle: 'miter',\r\n\t\t\tcapBezierPoints: true,\r\n\t\t\tfill: true, // do we fill in the area between the line and its base axis\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar element_line = core_element.extend({\r\n\t_type: 'line',\r\n\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar vm = me._view;\r\n\t\tvar ctx = me._chart.ctx;\r\n\t\tvar spanGaps = vm.spanGaps;\r\n\t\tvar points = me._children.slice(); // clone array\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar globalOptionLineElements = globalDefaults.elements.line;\r\n\t\tvar lastDrawnIndex = -1;\r\n\t\tvar closePath = me._loop;\r\n\t\tvar index, previous, currentVM;\r\n\r\n\t\tif (!points.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (me._loop) {\r\n\t\t\tfor (index = 0; index < points.length; ++index) {\r\n\t\t\t\tprevious = helpers$1.previousItem(points, index);\r\n\t\t\t\t// If the line has an open path, shift the point array\r\n\t\t\t\tif (!points[index]._view.skip && previous._view.skip) {\r\n\t\t\t\t\tpoints = points.slice(index).concat(points.slice(0, index));\r\n\t\t\t\t\tclosePath = spanGaps;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// If the line has a close path, add the first point again\r\n\t\t\tif (closePath) {\r\n\t\t\t\tpoints.push(points[0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\r\n\t\t// Stroke Line Options\r\n\t\tctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle;\r\n\r\n\t\t// IE 9 and 10 do not support line dash\r\n\t\tif (ctx.setLineDash) {\r\n\t\t\tctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);\r\n\t\t}\r\n\r\n\t\tctx.lineDashOffset = valueOrDefault$1(vm.borderDashOffset, globalOptionLineElements.borderDashOffset);\r\n\t\tctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;\r\n\t\tctx.lineWidth = valueOrDefault$1(vm.borderWidth, globalOptionLineElements.borderWidth);\r\n\t\tctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor;\r\n\r\n\t\t// Stroke Line\r\n\t\tctx.beginPath();\r\n\r\n\t\t// First point moves to it's starting position no matter what\r\n\t\tcurrentVM = points[0]._view;\r\n\t\tif (!currentVM.skip) {\r\n\t\t\tctx.moveTo(currentVM.x, currentVM.y);\r\n\t\t\tlastDrawnIndex = 0;\r\n\t\t}\r\n\r\n\t\tfor (index = 1; index < points.length; ++index) {\r\n\t\t\tcurrentVM = points[index]._view;\r\n\t\t\tprevious = lastDrawnIndex === -1 ? helpers$1.previousItem(points, index) : points[lastDrawnIndex];\r\n\r\n\t\t\tif (!currentVM.skip) {\r\n\t\t\t\tif ((lastDrawnIndex !== (index - 1) && !spanGaps) || lastDrawnIndex === -1) {\r\n\t\t\t\t\t// There was a gap and this is the first point after the gap\r\n\t\t\t\t\tctx.moveTo(currentVM.x, currentVM.y);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Line to next point\r\n\t\t\t\t\thelpers$1.canvas.lineTo(ctx, previous._view, currentVM);\r\n\t\t\t\t}\r\n\t\t\t\tlastDrawnIndex = index;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (closePath) {\r\n\t\t\tctx.closePath();\r\n\t\t}\r\n\r\n\t\tctx.stroke();\r\n\t\tctx.restore();\r\n\t}\r\n});\n\nvar valueOrDefault$2 = helpers$1.valueOrDefault;\r\n\r\nvar defaultColor$1 = core_defaults.global.defaultColor;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\tpoint: {\r\n\t\t\tradius: 3,\r\n\t\t\tpointStyle: 'circle',\r\n\t\t\tbackgroundColor: defaultColor$1,\r\n\t\t\tborderColor: defaultColor$1,\r\n\t\t\tborderWidth: 1,\r\n\t\t\t// Hover\r\n\t\t\thitRadius: 1,\r\n\t\t\thoverRadius: 4,\r\n\t\t\thoverBorderWidth: 1\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction xRange(mouseX) {\r\n\tvar vm = this._view;\r\n\treturn vm ? (Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius) : false;\r\n}\r\n\r\nfunction yRange(mouseY) {\r\n\tvar vm = this._view;\r\n\treturn vm ? (Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius) : false;\r\n}\r\n\r\nvar element_point = core_element.extend({\r\n\t_type: 'point',\r\n\r\n\tinRange: function(mouseX, mouseY) {\r\n\t\tvar vm = this._view;\r\n\t\treturn vm ? ((Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2)) < Math.pow(vm.hitRadius + vm.radius, 2)) : false;\r\n\t},\r\n\r\n\tinLabelRange: xRange,\r\n\tinXRange: xRange,\r\n\tinYRange: yRange,\r\n\r\n\tgetCenterPoint: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y\r\n\t\t};\r\n\t},\r\n\r\n\tgetArea: function() {\r\n\t\treturn Math.PI * Math.pow(this._view.radius, 2);\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y,\r\n\t\t\tpadding: vm.radius + vm.borderWidth\r\n\t\t};\r\n\t},\r\n\r\n\tdraw: function(chartArea) {\r\n\t\tvar vm = this._view;\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar pointStyle = vm.pointStyle;\r\n\t\tvar rotation = vm.rotation;\r\n\t\tvar radius = vm.radius;\r\n\t\tvar x = vm.x;\r\n\t\tvar y = vm.y;\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar defaultColor = globalDefaults.defaultColor; // eslint-disable-line no-shadow\r\n\r\n\t\tif (vm.skip) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Clipping for Points.\r\n\t\tif (chartArea === undefined || helpers$1.canvas._isPointInArea(vm, chartArea)) {\r\n\t\t\tctx.strokeStyle = vm.borderColor || defaultColor;\r\n\t\t\tctx.lineWidth = valueOrDefault$2(vm.borderWidth, globalDefaults.elements.point.borderWidth);\r\n\t\t\tctx.fillStyle = vm.backgroundColor || defaultColor;\r\n\t\t\thelpers$1.canvas.drawPoint(ctx, pointStyle, radius, x, y, rotation);\r\n\t\t}\r\n\t}\r\n});\n\nvar defaultColor$2 = core_defaults.global.defaultColor;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\trectangle: {\r\n\t\t\tbackgroundColor: defaultColor$2,\r\n\t\t\tborderColor: defaultColor$2,\r\n\t\t\tborderSkipped: 'bottom',\r\n\t\t\tborderWidth: 0\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction isVertical(vm) {\r\n\treturn vm && vm.width !== undefined;\r\n}\r\n\r\n/**\r\n * Helper function to get the bounds of the bar regardless of the orientation\r\n * @param bar {Chart.Element.Rectangle} the bar\r\n * @return {Bounds} bounds of the bar\r\n * @private\r\n */\r\nfunction getBarBounds(vm) {\r\n\tvar x1, x2, y1, y2, half;\r\n\r\n\tif (isVertical(vm)) {\r\n\t\thalf = vm.width / 2;\r\n\t\tx1 = vm.x - half;\r\n\t\tx2 = vm.x + half;\r\n\t\ty1 = Math.min(vm.y, vm.base);\r\n\t\ty2 = Math.max(vm.y, vm.base);\r\n\t} else {\r\n\t\thalf = vm.height / 2;\r\n\t\tx1 = Math.min(vm.x, vm.base);\r\n\t\tx2 = Math.max(vm.x, vm.base);\r\n\t\ty1 = vm.y - half;\r\n\t\ty2 = vm.y + half;\r\n\t}\r\n\r\n\treturn {\r\n\t\tleft: x1,\r\n\t\ttop: y1,\r\n\t\tright: x2,\r\n\t\tbottom: y2\r\n\t};\r\n}\r\n\r\nfunction swap(orig, v1, v2) {\r\n\treturn orig === v1 ? v2 : orig === v2 ? v1 : orig;\r\n}\r\n\r\nfunction parseBorderSkipped(vm) {\r\n\tvar edge = vm.borderSkipped;\r\n\tvar res = {};\r\n\r\n\tif (!edge) {\r\n\t\treturn res;\r\n\t}\r\n\r\n\tif (vm.horizontal) {\r\n\t\tif (vm.base > vm.x) {\r\n\t\t\tedge = swap(edge, 'left', 'right');\r\n\t\t}\r\n\t} else if (vm.base < vm.y) {\r\n\t\tedge = swap(edge, 'bottom', 'top');\r\n\t}\r\n\r\n\tres[edge] = true;\r\n\treturn res;\r\n}\r\n\r\nfunction parseBorderWidth(vm, maxW, maxH) {\r\n\tvar value = vm.borderWidth;\r\n\tvar skip = parseBorderSkipped(vm);\r\n\tvar t, r, b, l;\r\n\r\n\tif (helpers$1.isObject(value)) {\r\n\t\tt = +value.top || 0;\r\n\t\tr = +value.right || 0;\r\n\t\tb = +value.bottom || 0;\r\n\t\tl = +value.left || 0;\r\n\t} else {\r\n\t\tt = r = b = l = +value || 0;\r\n\t}\r\n\r\n\treturn {\r\n\t\tt: skip.top || (t < 0) ? 0 : t > maxH ? maxH : t,\r\n\t\tr: skip.right || (r < 0) ? 0 : r > maxW ? maxW : r,\r\n\t\tb: skip.bottom || (b < 0) ? 0 : b > maxH ? maxH : b,\r\n\t\tl: skip.left || (l < 0) ? 0 : l > maxW ? maxW : l\r\n\t};\r\n}\r\n\r\nfunction boundingRects(vm) {\r\n\tvar bounds = getBarBounds(vm);\r\n\tvar width = bounds.right - bounds.left;\r\n\tvar height = bounds.bottom - bounds.top;\r\n\tvar border = parseBorderWidth(vm, width / 2, height / 2);\r\n\r\n\treturn {\r\n\t\touter: {\r\n\t\t\tx: bounds.left,\r\n\t\t\ty: bounds.top,\r\n\t\t\tw: width,\r\n\t\t\th: height\r\n\t\t},\r\n\t\tinner: {\r\n\t\t\tx: bounds.left + border.l,\r\n\t\t\ty: bounds.top + border.t,\r\n\t\t\tw: width - border.l - border.r,\r\n\t\t\th: height - border.t - border.b\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction inRange(vm, x, y) {\r\n\tvar skipX = x === null;\r\n\tvar skipY = y === null;\r\n\tvar bounds = !vm || (skipX && skipY) ? false : getBarBounds(vm);\r\n\r\n\treturn bounds\r\n\t\t&& (skipX || x >= bounds.left && x <= bounds.right)\r\n\t\t&& (skipY || y >= bounds.top && y <= bounds.bottom);\r\n}\r\n\r\nvar element_rectangle = core_element.extend({\r\n\t_type: 'rectangle',\r\n\r\n\tdraw: function() {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\t\tvar rects = boundingRects(vm);\r\n\t\tvar outer = rects.outer;\r\n\t\tvar inner = rects.inner;\r\n\r\n\t\tctx.fillStyle = vm.backgroundColor;\r\n\t\tctx.fillRect(outer.x, outer.y, outer.w, outer.h);\r\n\r\n\t\tif (outer.w === inner.w && outer.h === inner.h) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\t\tctx.beginPath();\r\n\t\tctx.rect(outer.x, outer.y, outer.w, outer.h);\r\n\t\tctx.clip();\r\n\t\tctx.fillStyle = vm.borderColor;\r\n\t\tctx.rect(inner.x, inner.y, inner.w, inner.h);\r\n\t\tctx.fill('evenodd');\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\theight: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn vm.base - vm.y;\r\n\t},\r\n\r\n\tinRange: function(mouseX, mouseY) {\r\n\t\treturn inRange(this._view, mouseX, mouseY);\r\n\t},\r\n\r\n\tinLabelRange: function(mouseX, mouseY) {\r\n\t\tvar vm = this._view;\r\n\t\treturn isVertical(vm)\r\n\t\t\t? inRange(vm, mouseX, null)\r\n\t\t\t: inRange(vm, null, mouseY);\r\n\t},\r\n\r\n\tinXRange: function(mouseX) {\r\n\t\treturn inRange(this._view, mouseX, null);\r\n\t},\r\n\r\n\tinYRange: function(mouseY) {\r\n\t\treturn inRange(this._view, null, mouseY);\r\n\t},\r\n\r\n\tgetCenterPoint: function() {\r\n\t\tvar vm = this._view;\r\n\t\tvar x, y;\r\n\t\tif (isVertical(vm)) {\r\n\t\t\tx = vm.x;\r\n\t\t\ty = (vm.y + vm.base) / 2;\r\n\t\t} else {\r\n\t\t\tx = (vm.x + vm.base) / 2;\r\n\t\t\ty = vm.y;\r\n\t\t}\r\n\r\n\t\treturn {x: x, y: y};\r\n\t},\r\n\r\n\tgetArea: function() {\r\n\t\tvar vm = this._view;\r\n\r\n\t\treturn isVertical(vm)\r\n\t\t\t? vm.width * Math.abs(vm.y - vm.base)\r\n\t\t\t: vm.height * Math.abs(vm.x - vm.base);\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y\r\n\t\t};\r\n\t}\r\n});\n\nvar elements = {};\r\nvar Arc = element_arc;\r\nvar Line = element_line;\r\nvar Point = element_point;\r\nvar Rectangle = element_rectangle;\nelements.Arc = Arc;\nelements.Line = Line;\nelements.Point = Point;\nelements.Rectangle = Rectangle;\n\nvar deprecated = helpers$1._deprecated;\r\nvar valueOrDefault$3 = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('bar', {\r\n\thover: {\r\n\t\tmode: 'label'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'category',\r\n\t\t\toffset: true,\r\n\t\t\tgridLines: {\r\n\t\t\t\toffsetGridLines: true\r\n\t\t\t}\r\n\t\t}],\r\n\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'linear'\r\n\t\t}]\r\n\t}\r\n});\r\n\r\ncore_defaults._set('global', {\r\n\tdatasets: {\r\n\t\tbar: {\r\n\t\t\tcategoryPercentage: 0.8,\r\n\t\t\tbarPercentage: 0.9\r\n\t\t}\r\n\t}\r\n});\r\n\r\n/**\r\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\r\n * @private\r\n */\r\nfunction computeMinSampleSize(scale, pixels) {\r\n\tvar min = scale._length;\r\n\tvar prev, curr, i, ilen;\r\n\r\n\tfor (i = 1, ilen = pixels.length; i < ilen; ++i) {\r\n\t\tmin = Math.min(min, Math.abs(pixels[i] - pixels[i - 1]));\r\n\t}\r\n\r\n\tfor (i = 0, ilen = scale.getTicks().length; i < ilen; ++i) {\r\n\t\tcurr = scale.getPixelForTick(i);\r\n\t\tmin = i > 0 ? Math.min(min, Math.abs(curr - prev)) : min;\r\n\t\tprev = curr;\r\n\t}\r\n\r\n\treturn min;\r\n}\r\n\r\n/**\r\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\r\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\r\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\r\n * @private\r\n */\r\nfunction computeFitCategoryTraits(index, ruler, options) {\r\n\tvar thickness = options.barThickness;\r\n\tvar count = ruler.stackCount;\r\n\tvar curr = ruler.pixels[index];\r\n\tvar min = helpers$1.isNullOrUndef(thickness)\r\n\t\t? computeMinSampleSize(ruler.scale, ruler.pixels)\r\n\t\t: -1;\r\n\tvar size, ratio;\r\n\r\n\tif (helpers$1.isNullOrUndef(thickness)) {\r\n\t\tsize = min * options.categoryPercentage;\r\n\t\tratio = options.barPercentage;\r\n\t} else {\r\n\t\t// When bar thickness is enforced, category and bar percentages are ignored.\r\n\t\t// Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\r\n\t\t// and deprecate barPercentage since this value is ignored when thickness is absolute.\r\n\t\tsize = thickness * count;\r\n\t\tratio = 1;\r\n\t}\r\n\r\n\treturn {\r\n\t\tchunk: size / count,\r\n\t\tratio: ratio,\r\n\t\tstart: curr - (size / 2)\r\n\t};\r\n}\r\n\r\n/**\r\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\r\n * percentage options are 1), based on the previous and following categories. This mode\r\n * generates bars with different widths when data are not evenly spaced.\r\n * @private\r\n */\r\nfunction computeFlexCategoryTraits(index, ruler, options) {\r\n\tvar pixels = ruler.pixels;\r\n\tvar curr = pixels[index];\r\n\tvar prev = index > 0 ? pixels[index - 1] : null;\r\n\tvar next = index < pixels.length - 1 ? pixels[index + 1] : null;\r\n\tvar percent = options.categoryPercentage;\r\n\tvar start, size;\r\n\r\n\tif (prev === null) {\r\n\t\t// first data: its size is double based on the next point or,\r\n\t\t// if it's also the last data, we use the scale size.\r\n\t\tprev = curr - (next === null ? ruler.end - ruler.start : next - curr);\r\n\t}\r\n\r\n\tif (next === null) {\r\n\t\t// last data: its size is also double based on the previous point.\r\n\t\tnext = curr + curr - prev;\r\n\t}\r\n\r\n\tstart = curr - (curr - Math.min(prev, next)) / 2 * percent;\r\n\tsize = Math.abs(next - prev) / 2 * percent;\r\n\r\n\treturn {\r\n\t\tchunk: size / ruler.stackCount,\r\n\t\tratio: options.barPercentage,\r\n\t\tstart: start\r\n\t};\r\n}\r\n\r\nvar controller_bar = core_datasetController.extend({\r\n\r\n\tdataElementType: elements.Rectangle,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderSkipped',\r\n\t\t'borderWidth',\r\n\t\t'barPercentage',\r\n\t\t'barThickness',\r\n\t\t'categoryPercentage',\r\n\t\t'maxBarThickness',\r\n\t\t'minBarLength'\r\n\t],\r\n\r\n\tinitialize: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta, scaleOpts;\r\n\r\n\t\tcore_datasetController.prototype.initialize.apply(me, arguments);\r\n\r\n\t\tmeta = me.getMeta();\r\n\t\tmeta.stack = me.getDataset().stack;\r\n\t\tmeta.bar = true;\r\n\r\n\t\tscaleOpts = me._getIndexScale().options;\r\n\t\tdeprecated('bar chart', scaleOpts.barPercentage, 'scales.[x/y]Axes.barPercentage', 'dataset.barPercentage');\r\n\t\tdeprecated('bar chart', scaleOpts.barThickness, 'scales.[x/y]Axes.barThickness', 'dataset.barThickness');\r\n\t\tdeprecated('bar chart', scaleOpts.categoryPercentage, 'scales.[x/y]Axes.categoryPercentage', 'dataset.categoryPercentage');\r\n\t\tdeprecated('bar chart', me._getValueScale().options.minBarLength, 'scales.[x/y]Axes.minBarLength', 'dataset.minBarLength');\r\n\t\tdeprecated('bar chart', scaleOpts.maxBarThickness, 'scales.[x/y]Axes.maxBarThickness', 'dataset.maxBarThickness');\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar rects = me.getMeta().data;\r\n\t\tvar i, ilen;\r\n\r\n\t\tme._ruler = me.getRuler();\r\n\r\n\t\tfor (i = 0, ilen = rects.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(rects[i], i, reset);\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(rectangle, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar options = me._resolveDataElementOptions(rectangle, index);\r\n\r\n\t\trectangle._xScale = me.getScaleForId(meta.xAxisID);\r\n\t\trectangle._yScale = me.getScaleForId(meta.yAxisID);\r\n\t\trectangle._datasetIndex = me.index;\r\n\t\trectangle._index = index;\r\n\t\trectangle._model = {\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderSkipped: options.borderSkipped,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\tdatasetLabel: dataset.label,\r\n\t\t\tlabel: me.chart.data.labels[index]\r\n\t\t};\r\n\r\n\t\tif (helpers$1.isArray(dataset.data[index])) {\r\n\t\t\trectangle._model.borderSkipped = null;\r\n\t\t}\r\n\r\n\t\tme._updateElementGeometry(rectangle, index, reset, options);\r\n\r\n\t\trectangle.pivot();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_updateElementGeometry: function(rectangle, index, reset, options) {\r\n\t\tvar me = this;\r\n\t\tvar model = rectangle._model;\r\n\t\tvar vscale = me._getValueScale();\r\n\t\tvar base = vscale.getBasePixel();\r\n\t\tvar horizontal = vscale.isHorizontal();\r\n\t\tvar ruler = me._ruler || me.getRuler();\r\n\t\tvar vpixels = me.calculateBarValuePixels(me.index, index, options);\r\n\t\tvar ipixels = me.calculateBarIndexPixels(me.index, index, ruler, options);\r\n\r\n\t\tmodel.horizontal = horizontal;\r\n\t\tmodel.base = reset ? base : vpixels.base;\r\n\t\tmodel.x = horizontal ? reset ? base : vpixels.head : ipixels.center;\r\n\t\tmodel.y = horizontal ? ipixels.center : reset ? base : vpixels.head;\r\n\t\tmodel.height = horizontal ? ipixels.size : undefined;\r\n\t\tmodel.width = horizontal ? undefined : ipixels.size;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the stacks based on groups and bar visibility.\r\n\t * @param {number} [last] - The dataset index\r\n\t * @returns {string[]} The list of stack IDs\r\n\t * @private\r\n\t */\r\n\t_getStacks: function(last) {\r\n\t\tvar me = this;\r\n\t\tvar scale = me._getIndexScale();\r\n\t\tvar metasets = scale._getMatchingVisibleMetas(me._type);\r\n\t\tvar stacked = scale.options.stacked;\r\n\t\tvar ilen = metasets.length;\r\n\t\tvar stacks = [];\r\n\t\tvar i, meta;\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tmeta = metasets[i];\r\n\t\t\t// stacked   | meta.stack\r\n\t\t\t//           | found | not found | undefined\r\n\t\t\t// false     |   x   |     x     |     x\r\n\t\t\t// true      |       |     x     |\r\n\t\t\t// undefined |       |     x     |     x\r\n\t\t\tif (stacked === false || stacks.indexOf(meta.stack) === -1 ||\r\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\r\n\t\t\t\tstacks.push(meta.stack);\r\n\t\t\t}\r\n\t\t\tif (meta.index === last) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn stacks;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the effective number of stacks based on groups and bar visibility.\r\n\t * @private\r\n\t */\r\n\tgetStackCount: function() {\r\n\t\treturn this._getStacks().length;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\r\n\t * @param {number} [datasetIndex] - The dataset index\r\n\t * @param {string} [name] - The stack name to find\r\n\t * @returns {number} The stack index\r\n\t * @private\r\n\t */\r\n\tgetStackIndex: function(datasetIndex, name) {\r\n\t\tvar stacks = this._getStacks(datasetIndex);\r\n\t\tvar index = (name !== undefined)\r\n\t\t\t? stacks.indexOf(name)\r\n\t\t\t: -1; // indexOf returns -1 if element is not present\r\n\r\n\t\treturn (index === -1)\r\n\t\t\t? stacks.length - 1\r\n\t\t\t: index;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tgetRuler: function() {\r\n\t\tvar me = this;\r\n\t\tvar scale = me._getIndexScale();\r\n\t\tvar pixels = [];\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) {\r\n\t\t\tpixels.push(scale.getPixelForValue(null, i, me.index));\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tpixels: pixels,\r\n\t\t\tstart: scale._startPixel,\r\n\t\t\tend: scale._endPixel,\r\n\t\t\tstackCount: me.getStackCount(),\r\n\t\t\tscale: scale\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Note: pixel values are not clamped to the scale area.\r\n\t * @private\r\n\t */\r\n\tcalculateBarValuePixels: function(datasetIndex, index, options) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar scale = me._getValueScale();\r\n\t\tvar isHorizontal = scale.isHorizontal();\r\n\t\tvar datasets = chart.data.datasets;\r\n\t\tvar metasets = scale._getMatchingVisibleMetas(me._type);\r\n\t\tvar value = scale._parseValue(datasets[datasetIndex].data[index]);\r\n\t\tvar minBarLength = options.minBarLength;\r\n\t\tvar stacked = scale.options.stacked;\r\n\t\tvar stack = me.getMeta().stack;\r\n\t\tvar start = value.start === undefined ? 0 : value.max >= 0 && value.min >= 0 ? value.min : value.max;\r\n\t\tvar length = value.start === undefined ? value.end : value.max >= 0 && value.min >= 0 ? value.max - value.min : value.min - value.max;\r\n\t\tvar ilen = metasets.length;\r\n\t\tvar i, imeta, ivalue, base, head, size, stackLength;\r\n\r\n\t\tif (stacked || (stacked === undefined && stack !== undefined)) {\r\n\t\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\t\timeta = metasets[i];\r\n\r\n\t\t\t\tif (imeta.index === datasetIndex) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (imeta.stack === stack) {\r\n\t\t\t\t\tstackLength = scale._parseValue(datasets[imeta.index].data[index]);\r\n\t\t\t\t\tivalue = stackLength.start === undefined ? stackLength.end : stackLength.min >= 0 && stackLength.max >= 0 ? stackLength.max : stackLength.min;\r\n\r\n\t\t\t\t\tif ((value.min < 0 && ivalue < 0) || (value.max >= 0 && ivalue > 0)) {\r\n\t\t\t\t\t\tstart += ivalue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tbase = scale.getPixelForValue(start);\r\n\t\thead = scale.getPixelForValue(start + length);\r\n\t\tsize = head - base;\r\n\r\n\t\tif (minBarLength !== undefined && Math.abs(size) < minBarLength) {\r\n\t\t\tsize = minBarLength;\r\n\t\t\tif (length >= 0 && !isHorizontal || length < 0 && isHorizontal) {\r\n\t\t\t\thead = base - minBarLength;\r\n\t\t\t} else {\r\n\t\t\t\thead = base + minBarLength;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tsize: size,\r\n\t\t\tbase: base,\r\n\t\t\thead: head,\r\n\t\t\tcenter: head + size / 2\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tcalculateBarIndexPixels: function(datasetIndex, index, ruler, options) {\r\n\t\tvar me = this;\r\n\t\tvar range = options.barThickness === 'flex'\r\n\t\t\t? computeFlexCategoryTraits(index, ruler, options)\r\n\t\t\t: computeFitCategoryTraits(index, ruler, options);\r\n\r\n\t\tvar stackIndex = me.getStackIndex(datasetIndex, me.getMeta().stack);\r\n\t\tvar center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\r\n\t\tvar size = Math.min(\r\n\t\t\tvalueOrDefault$3(options.maxBarThickness, Infinity),\r\n\t\t\trange.chunk * range.ratio);\r\n\r\n\t\treturn {\r\n\t\t\tbase: center - size / 2,\r\n\t\t\thead: center + size / 2,\r\n\t\t\tcenter: center,\r\n\t\t\tsize: size\r\n\t\t};\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar scale = me._getValueScale();\r\n\t\tvar rects = me.getMeta().data;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar ilen = rects.length;\r\n\t\tvar i = 0;\r\n\r\n\t\thelpers$1.canvas.clipArea(chart.ctx, chart.chartArea);\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\tvar val = scale._parseValue(dataset.data[i]);\r\n\t\t\tif (!isNaN(val.min) && !isNaN(val.max)) {\r\n\t\t\t\trects[i].draw();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\thelpers$1.canvas.unclipArea(chart.ctx);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDataElementOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar values = helpers$1.extend({}, core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments));\r\n\t\tvar indexOpts = me._getIndexScale().options;\r\n\t\tvar valueOpts = me._getValueScale().options;\r\n\r\n\t\tvalues.barPercentage = valueOrDefault$3(indexOpts.barPercentage, values.barPercentage);\r\n\t\tvalues.barThickness = valueOrDefault$3(indexOpts.barThickness, values.barThickness);\r\n\t\tvalues.categoryPercentage = valueOrDefault$3(indexOpts.categoryPercentage, values.categoryPercentage);\r\n\t\tvalues.maxBarThickness = valueOrDefault$3(indexOpts.maxBarThickness, values.maxBarThickness);\r\n\t\tvalues.minBarLength = valueOrDefault$3(valueOpts.minBarLength, values.minBarLength);\r\n\r\n\t\treturn values;\r\n\t}\r\n\r\n});\n\nvar valueOrDefault$4 = helpers$1.valueOrDefault;\r\nvar resolve$1 = helpers$1.options.resolve;\r\n\r\ncore_defaults._set('bubble', {\r\n\thover: {\r\n\t\tmode: 'single'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'linear', // bubble should probably use a linear scale by default\r\n\t\t\tposition: 'bottom',\r\n\t\t\tid: 'x-axis-0' // need an ID so datasets can reference the scale\r\n\t\t}],\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'linear',\r\n\t\t\tposition: 'left',\r\n\t\t\tid: 'y-axis-0'\r\n\t\t}]\r\n\t},\r\n\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\t// Title doesn't make sense for scatter since we format the data as a point\r\n\t\t\t\treturn '';\r\n\t\t\t},\r\n\t\t\tlabel: function(item, data) {\r\n\t\t\t\tvar datasetLabel = data.datasets[item.datasetIndex].label || '';\r\n\t\t\t\tvar dataPoint = data.datasets[item.datasetIndex].data[item.index];\r\n\t\t\t\treturn datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_bubble = core_datasetController.extend({\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tdataElementType: elements.Point,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'hoverBackgroundColor',\r\n\t\t'hoverBorderColor',\r\n\t\t'hoverBorderWidth',\r\n\t\t'hoverRadius',\r\n\t\t'hitRadius',\r\n\t\t'pointStyle',\r\n\t\t'rotation'\r\n\t],\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar points = meta.data;\r\n\r\n\t\t// Update Points\r\n\t\thelpers$1.each(points, function(point, index) {\r\n\t\t\tme.updateElement(point, index, reset);\r\n\t\t});\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tupdateElement: function(point, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar xScale = me.getScaleForId(meta.xAxisID);\r\n\t\tvar yScale = me.getScaleForId(meta.yAxisID);\r\n\t\tvar options = me._resolveDataElementOptions(point, index);\r\n\t\tvar data = me.getDataset().data[index];\r\n\t\tvar dsIndex = me.index;\r\n\r\n\t\tvar x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex);\r\n\t\tvar y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);\r\n\r\n\t\tpoint._xScale = xScale;\r\n\t\tpoint._yScale = yScale;\r\n\t\tpoint._options = options;\r\n\t\tpoint._datasetIndex = dsIndex;\r\n\t\tpoint._index = index;\r\n\t\tpoint._model = {\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\thitRadius: options.hitRadius,\r\n\t\t\tpointStyle: options.pointStyle,\r\n\t\t\trotation: options.rotation,\r\n\t\t\tradius: reset ? 0 : options.radius,\r\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\r\n\t\t\tx: x,\r\n\t\t\ty: y,\r\n\t\t};\r\n\r\n\t\tpoint.pivot();\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(point) {\r\n\t\tvar model = point._model;\r\n\t\tvar options = point._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tpoint.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t\tradius: model.radius\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$4(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$4(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$4(options.hoverBorderWidth, options.borderWidth);\r\n\t\tmodel.radius = options.radius + options.hoverRadius;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDataElementOptions: function(point, index) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar data = dataset.data[index] || {};\r\n\t\tvar values = core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments);\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: chart,\r\n\t\t\tdataIndex: index,\r\n\t\t\tdataset: dataset,\r\n\t\t\tdatasetIndex: me.index\r\n\t\t};\r\n\r\n\t\t// In case values were cached (and thus frozen), we need to clone the values\r\n\t\tif (me._cachedDataOpts === values) {\r\n\t\t\tvalues = helpers$1.extend({}, values);\r\n\t\t}\r\n\r\n\t\t// Custom radius resolution\r\n\t\tvalues.radius = resolve$1([\r\n\t\t\tcustom.radius,\r\n\t\t\tdata.r,\r\n\t\t\tme._config.radius,\r\n\t\t\tchart.options.elements.point.radius\r\n\t\t], context, index);\r\n\r\n\t\treturn values;\r\n\t}\r\n});\n\nvar valueOrDefault$5 = helpers$1.valueOrDefault;\r\n\r\nvar PI$1 = Math.PI;\r\nvar DOUBLE_PI$1 = PI$1 * 2;\r\nvar HALF_PI$1 = PI$1 / 2;\r\n\r\ncore_defaults._set('doughnut', {\r\n\tanimation: {\r\n\t\t// Boolean - Whether we animate the rotation of the Doughnut\r\n\t\tanimateRotate: true,\r\n\t\t// Boolean - Whether we animate scaling the Doughnut from the centre\r\n\t\tanimateScale: false\r\n\t},\r\n\thover: {\r\n\t\tmode: 'single'\r\n\t},\r\n\tlegendCallback: function(chart) {\r\n\t\tvar list = document.createElement('ul');\r\n\t\tvar data = chart.data;\r\n\t\tvar datasets = data.datasets;\r\n\t\tvar labels = data.labels;\r\n\t\tvar i, ilen, listItem, listItemSpan;\r\n\r\n\t\tlist.setAttribute('class', chart.id + '-legend');\r\n\t\tif (datasets.length) {\r\n\t\t\tfor (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {\r\n\t\t\t\tlistItem = list.appendChild(document.createElement('li'));\r\n\t\t\t\tlistItemSpan = listItem.appendChild(document.createElement('span'));\r\n\t\t\t\tlistItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];\r\n\t\t\t\tif (labels[i]) {\r\n\t\t\t\t\tlistItem.appendChild(document.createTextNode(labels[i]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn list.outerHTML;\r\n\t},\r\n\tlegend: {\r\n\t\tlabels: {\r\n\t\t\tgenerateLabels: function(chart) {\r\n\t\t\t\tvar data = chart.data;\r\n\t\t\t\tif (data.labels.length && data.datasets.length) {\r\n\t\t\t\t\treturn data.labels.map(function(label, i) {\r\n\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\r\n\t\t\t\t\t\tvar style = meta.controller.getStyle(i);\r\n\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\ttext: label,\r\n\t\t\t\t\t\t\tfillStyle: style.backgroundColor,\r\n\t\t\t\t\t\t\tstrokeStyle: style.borderColor,\r\n\t\t\t\t\t\t\tlineWidth: style.borderWidth,\r\n\t\t\t\t\t\t\thidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,\r\n\r\n\t\t\t\t\t\t\t// Extra data used for toggling the correct item\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tonClick: function(e, legendItem) {\r\n\t\t\tvar index = legendItem.index;\r\n\t\t\tvar chart = this.chart;\r\n\t\t\tvar i, ilen, meta;\r\n\r\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\t// toggle visibility of index if exists\r\n\t\t\t\tif (meta.data[index]) {\r\n\t\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tchart.update();\r\n\t\t}\r\n\t},\r\n\r\n\t// The percentage of the chart that we cut out of the middle.\r\n\tcutoutPercentage: 50,\r\n\r\n\t// The rotation of the chart, where the first data arc begins.\r\n\trotation: -HALF_PI$1,\r\n\r\n\t// The total circumference of the chart.\r\n\tcircumference: DOUBLE_PI$1,\r\n\r\n\t// Need to override these to give a nice default\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\treturn '';\r\n\t\t\t},\r\n\t\t\tlabel: function(tooltipItem, data) {\r\n\t\t\t\tvar dataLabel = data.labels[tooltipItem.index];\r\n\t\t\t\tvar value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];\r\n\r\n\t\t\t\tif (helpers$1.isArray(dataLabel)) {\r\n\t\t\t\t\t// show value on first line of multiline label\r\n\t\t\t\t\t// need to clone because we are changing the value\r\n\t\t\t\t\tdataLabel = dataLabel.slice();\r\n\t\t\t\t\tdataLabel[0] += value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdataLabel += value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn dataLabel;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_doughnut = core_datasetController.extend({\r\n\r\n\tdataElementType: elements.Arc,\r\n\r\n\tlinkScales: helpers$1.noop,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'borderAlign',\r\n\t\t'hoverBackgroundColor',\r\n\t\t'hoverBorderColor',\r\n\t\t'hoverBorderWidth',\r\n\t],\r\n\r\n\t// Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly\r\n\tgetRingIndex: function(datasetIndex) {\r\n\t\tvar ringIndex = 0;\r\n\r\n\t\tfor (var j = 0; j < datasetIndex; ++j) {\r\n\t\t\tif (this.chart.isDatasetVisible(j)) {\r\n\t\t\t\t++ringIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ringIndex;\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar chartArea = chart.chartArea;\r\n\t\tvar opts = chart.options;\r\n\t\tvar ratioX = 1;\r\n\t\tvar ratioY = 1;\r\n\t\tvar offsetX = 0;\r\n\t\tvar offsetY = 0;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar arcs = meta.data;\r\n\t\tvar cutout = opts.cutoutPercentage / 100 || 0;\r\n\t\tvar circumference = opts.circumference;\r\n\t\tvar chartWeight = me._getRingWeight(me.index);\r\n\t\tvar maxWidth, maxHeight, i, ilen;\r\n\r\n\t\t// If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\r\n\t\tif (circumference < DOUBLE_PI$1) {\r\n\t\t\tvar startAngle = opts.rotation % DOUBLE_PI$1;\r\n\t\t\tstartAngle += startAngle >= PI$1 ? -DOUBLE_PI$1 : startAngle < -PI$1 ? DOUBLE_PI$1 : 0;\r\n\t\t\tvar endAngle = startAngle + circumference;\r\n\t\t\tvar startX = Math.cos(startAngle);\r\n\t\t\tvar startY = Math.sin(startAngle);\r\n\t\t\tvar endX = Math.cos(endAngle);\r\n\t\t\tvar endY = Math.sin(endAngle);\r\n\t\t\tvar contains0 = (startAngle <= 0 && endAngle >= 0) || endAngle >= DOUBLE_PI$1;\r\n\t\t\tvar contains90 = (startAngle <= HALF_PI$1 && endAngle >= HALF_PI$1) || endAngle >= DOUBLE_PI$1 + HALF_PI$1;\r\n\t\t\tvar contains180 = startAngle === -PI$1 || endAngle >= PI$1;\r\n\t\t\tvar contains270 = (startAngle <= -HALF_PI$1 && endAngle >= -HALF_PI$1) || endAngle >= PI$1 + HALF_PI$1;\r\n\t\t\tvar minX = contains180 ? -1 : Math.min(startX, startX * cutout, endX, endX * cutout);\r\n\t\t\tvar minY = contains270 ? -1 : Math.min(startY, startY * cutout, endY, endY * cutout);\r\n\t\t\tvar maxX = contains0 ? 1 : Math.max(startX, startX * cutout, endX, endX * cutout);\r\n\t\t\tvar maxY = contains90 ? 1 : Math.max(startY, startY * cutout, endY, endY * cutout);\r\n\t\t\tratioX = (maxX - minX) / 2;\r\n\t\t\tratioY = (maxY - minY) / 2;\r\n\t\t\toffsetX = -(maxX + minX) / 2;\r\n\t\t\toffsetY = -(maxY + minY) / 2;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tarcs[i]._options = me._resolveDataElementOptions(arcs[i], i);\r\n\t\t}\r\n\r\n\t\tchart.borderWidth = me.getMaxBorderWidth();\r\n\t\tmaxWidth = (chartArea.right - chartArea.left - chart.borderWidth) / ratioX;\r\n\t\tmaxHeight = (chartArea.bottom - chartArea.top - chart.borderWidth) / ratioY;\r\n\t\tchart.outerRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\r\n\t\tchart.innerRadius = Math.max(chart.outerRadius * cutout, 0);\r\n\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / (me._getVisibleDatasetWeightTotal() || 1);\r\n\t\tchart.offsetX = offsetX * chart.outerRadius;\r\n\t\tchart.offsetY = offsetY * chart.outerRadius;\r\n\r\n\t\tmeta.total = me.calculateTotal();\r\n\r\n\t\tme.outerRadius = chart.outerRadius - chart.radiusLength * me._getRingWeightOffset(me.index);\r\n\t\tme.innerRadius = Math.max(me.outerRadius - chart.radiusLength * chartWeight, 0);\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(arcs[i], i, reset);\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(arc, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar chartArea = chart.chartArea;\r\n\t\tvar opts = chart.options;\r\n\t\tvar animationOpts = opts.animation;\r\n\t\tvar centerX = (chartArea.left + chartArea.right) / 2;\r\n\t\tvar centerY = (chartArea.top + chartArea.bottom) / 2;\r\n\t\tvar startAngle = opts.rotation; // non reset case handled later\r\n\t\tvar endAngle = opts.rotation; // non reset case handled later\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / DOUBLE_PI$1);\r\n\t\tvar innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius;\r\n\t\tvar outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius;\r\n\t\tvar options = arc._options || {};\r\n\r\n\t\thelpers$1.extend(arc, {\r\n\t\t\t// Utility\r\n\t\t\t_datasetIndex: me.index,\r\n\t\t\t_index: index,\r\n\r\n\t\t\t// Desired view properties\r\n\t\t\t_model: {\r\n\t\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\t\tborderColor: options.borderColor,\r\n\t\t\t\tborderWidth: options.borderWidth,\r\n\t\t\t\tborderAlign: options.borderAlign,\r\n\t\t\t\tx: centerX + chart.offsetX,\r\n\t\t\t\ty: centerY + chart.offsetY,\r\n\t\t\t\tstartAngle: startAngle,\r\n\t\t\t\tendAngle: endAngle,\r\n\t\t\t\tcircumference: circumference,\r\n\t\t\t\touterRadius: outerRadius,\r\n\t\t\t\tinnerRadius: innerRadius,\r\n\t\t\t\tlabel: helpers$1.valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tvar model = arc._model;\r\n\r\n\t\t// Set correct angles if not resetting\r\n\t\tif (!reset || !animationOpts.animateRotate) {\r\n\t\t\tif (index === 0) {\r\n\t\t\t\tmodel.startAngle = opts.rotation;\r\n\t\t\t} else {\r\n\t\t\t\tmodel.startAngle = me.getMeta().data[index - 1]._model.endAngle;\r\n\t\t\t}\r\n\r\n\t\t\tmodel.endAngle = model.startAngle + model.circumference;\r\n\t\t}\r\n\r\n\t\tarc.pivot();\r\n\t},\r\n\r\n\tcalculateTotal: function() {\r\n\t\tvar dataset = this.getDataset();\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar total = 0;\r\n\t\tvar value;\r\n\r\n\t\thelpers$1.each(meta.data, function(element, index) {\r\n\t\t\tvalue = dataset.data[index];\r\n\t\t\tif (!isNaN(value) && !element.hidden) {\r\n\t\t\t\ttotal += Math.abs(value);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t/* if (total === 0) {\r\n\t\t\ttotal = NaN;\r\n\t\t}*/\r\n\r\n\t\treturn total;\r\n\t},\r\n\r\n\tcalculateCircumference: function(value) {\r\n\t\tvar total = this.getMeta().total;\r\n\t\tif (total > 0 && !isNaN(value)) {\r\n\t\t\treturn DOUBLE_PI$1 * (Math.abs(value) / total);\r\n\t\t}\r\n\t\treturn 0;\r\n\t},\r\n\r\n\t// gets the max border or hover width to properly scale pie charts\r\n\tgetMaxBorderWidth: function(arcs) {\r\n\t\tvar me = this;\r\n\t\tvar max = 0;\r\n\t\tvar chart = me.chart;\r\n\t\tvar i, ilen, meta, arc, controller, options, borderWidth, hoverWidth;\r\n\r\n\t\tif (!arcs) {\r\n\t\t\t// Find the outmost visible dataset\r\n\t\t\tfor (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\r\n\t\t\t\tif (chart.isDatasetVisible(i)) {\r\n\t\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\t\tarcs = meta.data;\r\n\t\t\t\t\tif (i !== me.index) {\r\n\t\t\t\t\t\tcontroller = meta.controller;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!arcs) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tarc = arcs[i];\r\n\t\t\tif (controller) {\r\n\t\t\t\tcontroller._configure();\r\n\t\t\t\toptions = controller._resolveDataElementOptions(arc, i);\r\n\t\t\t} else {\r\n\t\t\t\toptions = arc._options;\r\n\t\t\t}\r\n\t\t\tif (options.borderAlign !== 'inner') {\r\n\t\t\t\tborderWidth = options.borderWidth;\r\n\t\t\t\thoverWidth = options.hoverBorderWidth;\r\n\r\n\t\t\t\tmax = borderWidth > max ? borderWidth : max;\r\n\t\t\t\tmax = hoverWidth > max ? hoverWidth : max;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn max;\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(arc) {\r\n\t\tvar model = arc._model;\r\n\t\tvar options = arc._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tarc.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$5(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$5(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$5(options.hoverBorderWidth, options.borderWidth);\r\n\t},\r\n\r\n\t/**\r\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\r\n\t * @private\r\n\t */\r\n\t_getRingWeightOffset: function(datasetIndex) {\r\n\t\tvar ringWeightOffset = 0;\r\n\r\n\t\tfor (var i = 0; i < datasetIndex; ++i) {\r\n\t\t\tif (this.chart.isDatasetVisible(i)) {\r\n\t\t\t\tringWeightOffset += this._getRingWeight(i);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ringWeightOffset;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getRingWeight: function(dataSetIndex) {\r\n\t\treturn Math.max(valueOrDefault$5(this.chart.data.datasets[dataSetIndex].weight, 1), 0);\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the sum of all visibile data set weights.  This value can be 0.\r\n\t * @private\r\n\t */\r\n\t_getVisibleDatasetWeightTotal: function() {\r\n\t\treturn this._getRingWeightOffset(this.chart.data.datasets.length);\r\n\t}\r\n});\n\ncore_defaults._set('horizontalBar', {\r\n\thover: {\r\n\t\tmode: 'index',\r\n\t\taxis: 'y'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'linear',\r\n\t\t\tposition: 'bottom'\r\n\t\t}],\r\n\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'category',\r\n\t\t\tposition: 'left',\r\n\t\t\toffset: true,\r\n\t\t\tgridLines: {\r\n\t\t\t\toffsetGridLines: true\r\n\t\t\t}\r\n\t\t}]\r\n\t},\r\n\r\n\telements: {\r\n\t\trectangle: {\r\n\t\t\tborderSkipped: 'left'\r\n\t\t}\r\n\t},\r\n\r\n\ttooltips: {\r\n\t\tmode: 'index',\r\n\t\taxis: 'y'\r\n\t}\r\n});\r\n\r\ncore_defaults._set('global', {\r\n\tdatasets: {\r\n\t\thorizontalBar: {\r\n\t\t\tcategoryPercentage: 0.8,\r\n\t\t\tbarPercentage: 0.9\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_horizontalBar = controller_bar.extend({\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.getMeta().xAxisID;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.getMeta().yAxisID;\r\n\t}\r\n});\n\nvar valueOrDefault$6 = helpers$1.valueOrDefault;\r\nvar resolve$2 = helpers$1.options.resolve;\r\nvar isPointInArea = helpers$1.canvas._isPointInArea;\r\n\r\ncore_defaults._set('line', {\r\n\tshowLines: true,\r\n\tspanGaps: false,\r\n\r\n\thover: {\r\n\t\tmode: 'label'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'category',\r\n\t\t\tid: 'x-axis-0'\r\n\t\t}],\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'linear',\r\n\t\t\tid: 'y-axis-0'\r\n\t\t}]\r\n\t}\r\n});\r\n\r\nfunction scaleClip(scale, halfBorderWidth) {\r\n\tvar tickOpts = scale && scale.options.ticks || {};\r\n\tvar reverse = tickOpts.reverse;\r\n\tvar min = tickOpts.min === undefined ? halfBorderWidth : 0;\r\n\tvar max = tickOpts.max === undefined ? halfBorderWidth : 0;\r\n\treturn {\r\n\t\tstart: reverse ? max : min,\r\n\t\tend: reverse ? min : max\r\n\t};\r\n}\r\n\r\nfunction defaultClip(xScale, yScale, borderWidth) {\r\n\tvar halfBorderWidth = borderWidth / 2;\r\n\tvar x = scaleClip(xScale, halfBorderWidth);\r\n\tvar y = scaleClip(yScale, halfBorderWidth);\r\n\r\n\treturn {\r\n\t\ttop: y.end,\r\n\t\tright: x.end,\r\n\t\tbottom: y.start,\r\n\t\tleft: x.start\r\n\t};\r\n}\r\n\r\nfunction toClip(value) {\r\n\tvar t, r, b, l;\r\n\r\n\tif (helpers$1.isObject(value)) {\r\n\t\tt = value.top;\r\n\t\tr = value.right;\r\n\t\tb = value.bottom;\r\n\t\tl = value.left;\r\n\t} else {\r\n\t\tt = r = b = l = value;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttop: t,\r\n\t\tright: r,\r\n\t\tbottom: b,\r\n\t\tleft: l\r\n\t};\r\n}\r\n\r\n\r\nvar controller_line = core_datasetController.extend({\r\n\r\n\tdatasetElementType: elements.Line,\r\n\r\n\tdataElementType: elements.Point,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_datasetElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderCapStyle',\r\n\t\t'borderColor',\r\n\t\t'borderDash',\r\n\t\t'borderDashOffset',\r\n\t\t'borderJoinStyle',\r\n\t\t'borderWidth',\r\n\t\t'cubicInterpolationMode',\r\n\t\t'fill'\r\n\t],\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: {\r\n\t\tbackgroundColor: 'pointBackgroundColor',\r\n\t\tborderColor: 'pointBorderColor',\r\n\t\tborderWidth: 'pointBorderWidth',\r\n\t\thitRadius: 'pointHitRadius',\r\n\t\thoverBackgroundColor: 'pointHoverBackgroundColor',\r\n\t\thoverBorderColor: 'pointHoverBorderColor',\r\n\t\thoverBorderWidth: 'pointHoverBorderWidth',\r\n\t\thoverRadius: 'pointHoverRadius',\r\n\t\tpointStyle: 'pointStyle',\r\n\t\tradius: 'pointRadius',\r\n\t\trotation: 'pointRotation'\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar line = meta.dataset;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar options = me.chart.options;\r\n\t\tvar config = me._config;\r\n\t\tvar showLine = me._showLine = valueOrDefault$6(config.showLine, options.showLines);\r\n\t\tvar i, ilen;\r\n\r\n\t\tme._xScale = me.getScaleForId(meta.xAxisID);\r\n\t\tme._yScale = me.getScaleForId(meta.yAxisID);\r\n\r\n\t\t// Update Line\r\n\t\tif (showLine) {\r\n\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\r\n\t\t\tif (config.tension !== undefined && config.lineTension === undefined) {\r\n\t\t\t\tconfig.lineTension = config.tension;\r\n\t\t\t}\r\n\r\n\t\t\t// Utility\r\n\t\t\tline._scale = me._yScale;\r\n\t\t\tline._datasetIndex = me.index;\r\n\t\t\t// Data\r\n\t\t\tline._children = points;\r\n\t\t\t// Model\r\n\t\t\tline._model = me._resolveDatasetElementOptions(line);\r\n\r\n\t\t\tline.pivot();\r\n\t\t}\r\n\r\n\t\t// Update Points\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(points[i], i, reset);\r\n\t\t}\r\n\r\n\t\tif (showLine && line._model.tension !== 0) {\r\n\t\t\tme.updateBezierControlPoints();\r\n\t\t}\r\n\r\n\t\t// Now pivot the point for animation\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tpoints[i].pivot();\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(point, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar datasetIndex = me.index;\r\n\t\tvar value = dataset.data[index];\r\n\t\tvar xScale = me._xScale;\r\n\t\tvar yScale = me._yScale;\r\n\t\tvar lineModel = meta.dataset._model;\r\n\t\tvar x, y;\r\n\r\n\t\tvar options = me._resolveDataElementOptions(point, index);\r\n\r\n\t\tx = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex);\r\n\t\ty = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex);\r\n\r\n\t\t// Utility\r\n\t\tpoint._xScale = xScale;\r\n\t\tpoint._yScale = yScale;\r\n\t\tpoint._options = options;\r\n\t\tpoint._datasetIndex = datasetIndex;\r\n\t\tpoint._index = index;\r\n\r\n\t\t// Desired view properties\r\n\t\tpoint._model = {\r\n\t\t\tx: x,\r\n\t\t\ty: y,\r\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\r\n\t\t\t// Appearance\r\n\t\t\tradius: options.radius,\r\n\t\t\tpointStyle: options.pointStyle,\r\n\t\t\trotation: options.rotation,\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\ttension: valueOrDefault$6(custom.tension, lineModel ? lineModel.tension : 0),\r\n\t\t\tsteppedLine: lineModel ? lineModel.steppedLine : false,\r\n\t\t\t// Tooltip\r\n\t\t\thitRadius: options.hitRadius\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDatasetElementOptions: function(element) {\r\n\t\tvar me = this;\r\n\t\tvar config = me._config;\r\n\t\tvar custom = element.custom || {};\r\n\t\tvar options = me.chart.options;\r\n\t\tvar lineOptions = options.elements.line;\r\n\t\tvar values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments);\r\n\r\n\t\t// The default behavior of lines is to break at null values, according\r\n\t\t// to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158\r\n\t\t// This option gives lines the ability to span gaps\r\n\t\tvalues.spanGaps = valueOrDefault$6(config.spanGaps, options.spanGaps);\r\n\t\tvalues.tension = valueOrDefault$6(config.lineTension, lineOptions.tension);\r\n\t\tvalues.steppedLine = resolve$2([custom.steppedLine, config.steppedLine, lineOptions.stepped]);\r\n\t\tvalues.clip = toClip(valueOrDefault$6(config.clip, defaultClip(me._xScale, me._yScale, values.borderWidth)));\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\tcalculatePointY: function(value, index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar yScale = me._yScale;\r\n\t\tvar sumPos = 0;\r\n\t\tvar sumNeg = 0;\r\n\t\tvar i, ds, dsMeta, stackedRightValue, rightValue, metasets, ilen;\r\n\r\n\t\tif (yScale.options.stacked) {\r\n\t\t\trightValue = +yScale.getRightValue(value);\r\n\t\t\tmetasets = chart._getSortedVisibleDatasetMetas();\r\n\t\t\tilen = metasets.length;\r\n\r\n\t\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\t\tdsMeta = metasets[i];\r\n\t\t\t\tif (dsMeta.index === datasetIndex) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tds = chart.data.datasets[dsMeta.index];\r\n\t\t\t\tif (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id) {\r\n\t\t\t\t\tstackedRightValue = +yScale.getRightValue(ds.data[index]);\r\n\t\t\t\t\tif (stackedRightValue < 0) {\r\n\t\t\t\t\t\tsumNeg += stackedRightValue || 0;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsumPos += stackedRightValue || 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (rightValue < 0) {\r\n\t\t\t\treturn yScale.getPixelForValue(sumNeg + rightValue);\r\n\t\t\t}\r\n\t\t\treturn yScale.getPixelForValue(sumPos + rightValue);\r\n\t\t}\r\n\t\treturn yScale.getPixelForValue(value);\r\n\t},\r\n\r\n\tupdateBezierControlPoints: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar lineModel = meta.dataset._model;\r\n\t\tvar area = chart.chartArea;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar i, ilen, model, controlPoints;\r\n\r\n\t\t// Only consider points that are drawn in case the spanGaps option is used\r\n\t\tif (lineModel.spanGaps) {\r\n\t\t\tpoints = points.filter(function(pt) {\r\n\t\t\t\treturn !pt._model.skip;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction capControlPoint(pt, min, max) {\r\n\t\t\treturn Math.max(Math.min(pt, max), min);\r\n\t\t}\r\n\r\n\t\tif (lineModel.cubicInterpolationMode === 'monotone') {\r\n\t\t\thelpers$1.splineCurveMonotone(points);\r\n\t\t} else {\r\n\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\t\tmodel = points[i]._model;\r\n\t\t\t\tcontrolPoints = helpers$1.splineCurve(\r\n\t\t\t\t\thelpers$1.previousItem(points, i)._model,\r\n\t\t\t\t\tmodel,\r\n\t\t\t\t\thelpers$1.nextItem(points, i)._model,\r\n\t\t\t\t\tlineModel.tension\r\n\t\t\t\t);\r\n\t\t\t\tmodel.controlPointPreviousX = controlPoints.previous.x;\r\n\t\t\t\tmodel.controlPointPreviousY = controlPoints.previous.y;\r\n\t\t\t\tmodel.controlPointNextX = controlPoints.next.x;\r\n\t\t\t\tmodel.controlPointNextY = controlPoints.next.y;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (chart.options.elements.line.capBezierPoints) {\r\n\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\t\tmodel = points[i]._model;\r\n\t\t\t\tif (isPointInArea(model, area)) {\r\n\t\t\t\t\tif (i > 0 && isPointInArea(points[i - 1]._model, area)) {\r\n\t\t\t\t\t\tmodel.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);\r\n\t\t\t\t\t\tmodel.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (i < points.length - 1 && isPointInArea(points[i + 1]._model, area)) {\r\n\t\t\t\t\t\tmodel.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);\r\n\t\t\t\t\t\tmodel.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar points = meta.data || [];\r\n\t\tvar area = chart.chartArea;\r\n\t\tvar canvas = chart.canvas;\r\n\t\tvar i = 0;\r\n\t\tvar ilen = points.length;\r\n\t\tvar clip;\r\n\r\n\t\tif (me._showLine) {\r\n\t\t\tclip = meta.dataset._model.clip;\r\n\r\n\t\t\thelpers$1.canvas.clipArea(chart.ctx, {\r\n\t\t\t\tleft: clip.left === false ? 0 : area.left - clip.left,\r\n\t\t\t\tright: clip.right === false ? canvas.width : area.right + clip.right,\r\n\t\t\t\ttop: clip.top === false ? 0 : area.top - clip.top,\r\n\t\t\t\tbottom: clip.bottom === false ? canvas.height : area.bottom + clip.bottom\r\n\t\t\t});\r\n\r\n\t\t\tmeta.dataset.draw();\r\n\r\n\t\t\thelpers$1.canvas.unclipArea(chart.ctx);\r\n\t\t}\r\n\r\n\t\t// Draw the points\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\tpoints[i].draw(area);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(point) {\r\n\t\tvar model = point._model;\r\n\t\tvar options = point._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tpoint.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t\tradius: model.radius\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$6(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$6(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$6(options.hoverBorderWidth, options.borderWidth);\r\n\t\tmodel.radius = valueOrDefault$6(options.hoverRadius, options.radius);\r\n\t},\r\n});\n\nvar resolve$3 = helpers$1.options.resolve;\r\n\r\ncore_defaults._set('polarArea', {\r\n\tscale: {\r\n\t\ttype: 'radialLinear',\r\n\t\tangleLines: {\r\n\t\t\tdisplay: false\r\n\t\t},\r\n\t\tgridLines: {\r\n\t\t\tcircular: true\r\n\t\t},\r\n\t\tpointLabels: {\r\n\t\t\tdisplay: false\r\n\t\t},\r\n\t\tticks: {\r\n\t\t\tbeginAtZero: true\r\n\t\t}\r\n\t},\r\n\r\n\t// Boolean - Whether to animate the rotation of the chart\r\n\tanimation: {\r\n\t\tanimateRotate: true,\r\n\t\tanimateScale: true\r\n\t},\r\n\r\n\tstartAngle: -0.5 * Math.PI,\r\n\tlegendCallback: function(chart) {\r\n\t\tvar list = document.createElement('ul');\r\n\t\tvar data = chart.data;\r\n\t\tvar datasets = data.datasets;\r\n\t\tvar labels = data.labels;\r\n\t\tvar i, ilen, listItem, listItemSpan;\r\n\r\n\t\tlist.setAttribute('class', chart.id + '-legend');\r\n\t\tif (datasets.length) {\r\n\t\t\tfor (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {\r\n\t\t\t\tlistItem = list.appendChild(document.createElement('li'));\r\n\t\t\t\tlistItemSpan = listItem.appendChild(document.createElement('span'));\r\n\t\t\t\tlistItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];\r\n\t\t\t\tif (labels[i]) {\r\n\t\t\t\t\tlistItem.appendChild(document.createTextNode(labels[i]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn list.outerHTML;\r\n\t},\r\n\tlegend: {\r\n\t\tlabels: {\r\n\t\t\tgenerateLabels: function(chart) {\r\n\t\t\t\tvar data = chart.data;\r\n\t\t\t\tif (data.labels.length && data.datasets.length) {\r\n\t\t\t\t\treturn data.labels.map(function(label, i) {\r\n\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\r\n\t\t\t\t\t\tvar style = meta.controller.getStyle(i);\r\n\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\ttext: label,\r\n\t\t\t\t\t\t\tfillStyle: style.backgroundColor,\r\n\t\t\t\t\t\t\tstrokeStyle: style.borderColor,\r\n\t\t\t\t\t\t\tlineWidth: style.borderWidth,\r\n\t\t\t\t\t\t\thidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,\r\n\r\n\t\t\t\t\t\t\t// Extra data used for toggling the correct item\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tonClick: function(e, legendItem) {\r\n\t\t\tvar index = legendItem.index;\r\n\t\t\tvar chart = this.chart;\r\n\t\t\tvar i, ilen, meta;\r\n\r\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\r\n\t\t\t}\r\n\r\n\t\t\tchart.update();\r\n\t\t}\r\n\t},\r\n\r\n\t// Need to override these to give a nice default\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\treturn '';\r\n\t\t\t},\r\n\t\t\tlabel: function(item, data) {\r\n\t\t\t\treturn data.labels[item.index] + ': ' + item.yLabel;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_polarArea = core_datasetController.extend({\r\n\r\n\tdataElementType: elements.Arc,\r\n\r\n\tlinkScales: helpers$1.noop,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'borderAlign',\r\n\t\t'hoverBackgroundColor',\r\n\t\t'hoverBorderColor',\r\n\t\t'hoverBorderWidth',\r\n\t],\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar start = me.chart.options.startAngle || 0;\r\n\t\tvar starts = me._starts = [];\r\n\t\tvar angles = me._angles = [];\r\n\t\tvar arcs = meta.data;\r\n\t\tvar i, ilen, angle;\r\n\r\n\t\tme._updateRadius();\r\n\r\n\t\tmeta.count = me.countVisibleElements();\r\n\r\n\t\tfor (i = 0, ilen = dataset.data.length; i < ilen; i++) {\r\n\t\t\tstarts[i] = start;\r\n\t\t\tangle = me._computeAngle(i);\r\n\t\t\tangles[i] = angle;\r\n\t\t\tstart += angle;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tarcs[i]._options = me._resolveDataElementOptions(arcs[i], i);\r\n\t\t\tme.updateElement(arcs[i], i, reset);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_updateRadius: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar chartArea = chart.chartArea;\r\n\t\tvar opts = chart.options;\r\n\t\tvar minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\r\n\r\n\t\tchart.outerRadius = Math.max(minSize / 2, 0);\r\n\t\tchart.innerRadius = Math.max(opts.cutoutPercentage ? (chart.outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\r\n\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\r\n\r\n\t\tme.outerRadius = chart.outerRadius - (chart.radiusLength * me.index);\r\n\t\tme.innerRadius = me.outerRadius - chart.radiusLength;\r\n\t},\r\n\r\n\tupdateElement: function(arc, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar opts = chart.options;\r\n\t\tvar animationOpts = opts.animation;\r\n\t\tvar scale = chart.scale;\r\n\t\tvar labels = chart.data.labels;\r\n\r\n\t\tvar centerX = scale.xCenter;\r\n\t\tvar centerY = scale.yCenter;\r\n\r\n\t\t// var negHalfPI = -0.5 * Math.PI;\r\n\t\tvar datasetStartAngle = opts.startAngle;\r\n\t\tvar distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\r\n\t\tvar startAngle = me._starts[index];\r\n\t\tvar endAngle = startAngle + (arc.hidden ? 0 : me._angles[index]);\r\n\r\n\t\tvar resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\r\n\t\tvar options = arc._options || {};\r\n\r\n\t\thelpers$1.extend(arc, {\r\n\t\t\t// Utility\r\n\t\t\t_datasetIndex: me.index,\r\n\t\t\t_index: index,\r\n\t\t\t_scale: scale,\r\n\r\n\t\t\t// Desired view properties\r\n\t\t\t_model: {\r\n\t\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\t\tborderColor: options.borderColor,\r\n\t\t\t\tborderWidth: options.borderWidth,\r\n\t\t\t\tborderAlign: options.borderAlign,\r\n\t\t\t\tx: centerX,\r\n\t\t\t\ty: centerY,\r\n\t\t\t\tinnerRadius: 0,\r\n\t\t\t\touterRadius: reset ? resetRadius : distance,\r\n\t\t\t\tstartAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,\r\n\t\t\t\tendAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,\r\n\t\t\t\tlabel: helpers$1.valueAtIndexOrDefault(labels, index, labels[index])\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tarc.pivot();\r\n\t},\r\n\r\n\tcountVisibleElements: function() {\r\n\t\tvar dataset = this.getDataset();\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar count = 0;\r\n\r\n\t\thelpers$1.each(meta.data, function(element, index) {\r\n\t\t\tif (!isNaN(dataset.data[index]) && !element.hidden) {\r\n\t\t\t\tcount++;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn count;\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(arc) {\r\n\t\tvar model = arc._model;\r\n\t\tvar options = arc._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\t\tvar valueOrDefault = helpers$1.valueOrDefault;\r\n\r\n\t\tarc.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault(options.hoverBorderWidth, options.borderWidth);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_computeAngle: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar count = this.getMeta().count;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar meta = me.getMeta();\r\n\r\n\t\tif (isNaN(dataset.data[index]) || meta.data[index].hidden) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: me.chart,\r\n\t\t\tdataIndex: index,\r\n\t\t\tdataset: dataset,\r\n\t\t\tdatasetIndex: me.index\r\n\t\t};\r\n\r\n\t\treturn resolve$3([\r\n\t\t\tme.chart.options.elements.arc.angle,\r\n\t\t\t(2 * Math.PI) / count\r\n\t\t], context, index);\r\n\t}\r\n});\n\ncore_defaults._set('pie', helpers$1.clone(core_defaults.doughnut));\r\ncore_defaults._set('pie', {\r\n\tcutoutPercentage: 0\r\n});\r\n\r\n// Pie charts are Doughnut chart with different defaults\r\nvar controller_pie = controller_doughnut;\n\nvar valueOrDefault$7 = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('radar', {\r\n\tspanGaps: false,\r\n\tscale: {\r\n\t\ttype: 'radialLinear'\r\n\t},\r\n\telements: {\r\n\t\tline: {\r\n\t\t\tfill: 'start',\r\n\t\t\ttension: 0 // no bezier in radar\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_radar = core_datasetController.extend({\r\n\tdatasetElementType: elements.Line,\r\n\r\n\tdataElementType: elements.Point,\r\n\r\n\tlinkScales: helpers$1.noop,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_datasetElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderWidth',\r\n\t\t'borderColor',\r\n\t\t'borderCapStyle',\r\n\t\t'borderDash',\r\n\t\t'borderDashOffset',\r\n\t\t'borderJoinStyle',\r\n\t\t'fill'\r\n\t],\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: {\r\n\t\tbackgroundColor: 'pointBackgroundColor',\r\n\t\tborderColor: 'pointBorderColor',\r\n\t\tborderWidth: 'pointBorderWidth',\r\n\t\thitRadius: 'pointHitRadius',\r\n\t\thoverBackgroundColor: 'pointHoverBackgroundColor',\r\n\t\thoverBorderColor: 'pointHoverBorderColor',\r\n\t\thoverBorderWidth: 'pointHoverBorderWidth',\r\n\t\thoverRadius: 'pointHoverRadius',\r\n\t\tpointStyle: 'pointStyle',\r\n\t\tradius: 'pointRadius',\r\n\t\trotation: 'pointRotation'\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar line = meta.dataset;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar scale = me.chart.scale;\r\n\t\tvar config = me._config;\r\n\t\tvar i, ilen;\r\n\r\n\t\t// Compatibility: If the properties are defined with only the old name, use those values\r\n\t\tif (config.tension !== undefined && config.lineTension === undefined) {\r\n\t\t\tconfig.lineTension = config.tension;\r\n\t\t}\r\n\r\n\t\t// Utility\r\n\t\tline._scale = scale;\r\n\t\tline._datasetIndex = me.index;\r\n\t\t// Data\r\n\t\tline._children = points;\r\n\t\tline._loop = true;\r\n\t\t// Model\r\n\t\tline._model = me._resolveDatasetElementOptions(line);\r\n\r\n\t\tline.pivot();\r\n\r\n\t\t// Update Points\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(points[i], i, reset);\r\n\t\t}\r\n\r\n\t\t// Update bezier control points\r\n\t\tme.updateBezierControlPoints();\r\n\r\n\t\t// Now pivot the point for animation\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tpoints[i].pivot();\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(point, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar scale = me.chart.scale;\r\n\t\tvar pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);\r\n\t\tvar options = me._resolveDataElementOptions(point, index);\r\n\t\tvar lineModel = me.getMeta().dataset._model;\r\n\t\tvar x = reset ? scale.xCenter : pointPosition.x;\r\n\t\tvar y = reset ? scale.yCenter : pointPosition.y;\r\n\r\n\t\t// Utility\r\n\t\tpoint._scale = scale;\r\n\t\tpoint._options = options;\r\n\t\tpoint._datasetIndex = me.index;\r\n\t\tpoint._index = index;\r\n\r\n\t\t// Desired view properties\r\n\t\tpoint._model = {\r\n\t\t\tx: x, // value not used in dataset scale, but we want a consistent API between scales\r\n\t\t\ty: y,\r\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\r\n\t\t\t// Appearance\r\n\t\t\tradius: options.radius,\r\n\t\t\tpointStyle: options.pointStyle,\r\n\t\t\trotation: options.rotation,\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\ttension: valueOrDefault$7(custom.tension, lineModel ? lineModel.tension : 0),\r\n\r\n\t\t\t// Tooltip\r\n\t\t\thitRadius: options.hitRadius\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDatasetElementOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar config = me._config;\r\n\t\tvar options = me.chart.options;\r\n\t\tvar values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments);\r\n\r\n\t\tvalues.spanGaps = valueOrDefault$7(config.spanGaps, options.spanGaps);\r\n\t\tvalues.tension = valueOrDefault$7(config.lineTension, options.elements.line.tension);\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\tupdateBezierControlPoints: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar area = me.chart.chartArea;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar i, ilen, model, controlPoints;\r\n\r\n\t\t// Only consider points that are drawn in case the spanGaps option is used\r\n\t\tif (meta.dataset._model.spanGaps) {\r\n\t\t\tpoints = points.filter(function(pt) {\r\n\t\t\t\treturn !pt._model.skip;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction capControlPoint(pt, min, max) {\r\n\t\t\treturn Math.max(Math.min(pt, max), min);\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tmodel = points[i]._model;\r\n\t\t\tcontrolPoints = helpers$1.splineCurve(\r\n\t\t\t\thelpers$1.previousItem(points, i, true)._model,\r\n\t\t\t\tmodel,\r\n\t\t\t\thelpers$1.nextItem(points, i, true)._model,\r\n\t\t\t\tmodel.tension\r\n\t\t\t);\r\n\r\n\t\t\t// Prevent the bezier going outside of the bounds of the graph\r\n\t\t\tmodel.controlPointPreviousX = capControlPoint(controlPoints.previous.x, area.left, area.right);\r\n\t\t\tmodel.controlPointPreviousY = capControlPoint(controlPoints.previous.y, area.top, area.bottom);\r\n\t\t\tmodel.controlPointNextX = capControlPoint(controlPoints.next.x, area.left, area.right);\r\n\t\t\tmodel.controlPointNextY = capControlPoint(controlPoints.next.y, area.top, area.bottom);\r\n\t\t}\r\n\t},\r\n\r\n\tsetHoverStyle: function(point) {\r\n\t\tvar model = point._model;\r\n\t\tvar options = point._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tpoint.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t\tradius: model.radius\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$7(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$7(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$7(options.hoverBorderWidth, options.borderWidth);\r\n\t\tmodel.radius = valueOrDefault$7(options.hoverRadius, options.radius);\r\n\t}\r\n});\n\ncore_defaults._set('scatter', {\r\n\thover: {\r\n\t\tmode: 'single'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\tid: 'x-axis-1',    // need an ID so datasets can reference the scale\r\n\t\t\ttype: 'linear',    // scatter should not use a category axis\r\n\t\t\tposition: 'bottom'\r\n\t\t}],\r\n\t\tyAxes: [{\r\n\t\t\tid: 'y-axis-1',\r\n\t\t\ttype: 'linear',\r\n\t\t\tposition: 'left'\r\n\t\t}]\r\n\t},\r\n\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\treturn '';     // doesn't make sense for scatter since data are formatted as a point\r\n\t\t\t},\r\n\t\t\tlabel: function(item) {\r\n\t\t\t\treturn '(' + item.xLabel + ', ' + item.yLabel + ')';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\ncore_defaults._set('global', {\r\n\tdatasets: {\r\n\t\tscatter: {\r\n\t\t\tshowLine: false\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// Scatter charts use line controllers\r\nvar controller_scatter = controller_line;\n\n// NOTE export a map in which the key represents the controller type, not\r\n// the class, and so must be CamelCase in order to be correctly retrieved\r\n// by the controller in core.controller.js (`controllers[meta.type]`).\r\n\r\nvar controllers = {\r\n\tbar: controller_bar,\r\n\tbubble: controller_bubble,\r\n\tdoughnut: controller_doughnut,\r\n\thorizontalBar: controller_horizontalBar,\r\n\tline: controller_line,\r\n\tpolarArea: controller_polarArea,\r\n\tpie: controller_pie,\r\n\tradar: controller_radar,\r\n\tscatter: controller_scatter\r\n};\n\n/**\r\n * Helper function to get relative position for an event\r\n * @param {Event|IEvent} event - The event to get the position for\r\n * @param {Chart} chart - The chart\r\n * @returns {object} the event position\r\n */\r\nfunction getRelativePosition(e, chart) {\r\n\tif (e.native) {\r\n\t\treturn {\r\n\t\t\tx: e.x,\r\n\t\t\ty: e.y\r\n\t\t};\r\n\t}\r\n\r\n\treturn helpers$1.getRelativePosition(e, chart);\r\n}\r\n\r\n/**\r\n * Helper function to traverse all of the visible elements in the chart\r\n * @param {Chart} chart - the chart\r\n * @param {function} handler - the callback to execute for each visible item\r\n */\r\nfunction parseVisibleItems(chart, handler) {\r\n\tvar metasets = chart._getSortedVisibleDatasetMetas();\r\n\tvar metadata, i, j, ilen, jlen, element;\r\n\r\n\tfor (i = 0, ilen = metasets.length; i < ilen; ++i) {\r\n\t\tmetadata = metasets[i].data;\r\n\t\tfor (j = 0, jlen = metadata.length; j < jlen; ++j) {\r\n\t\t\telement = metadata[j];\r\n\t\t\tif (!element._view.skip) {\r\n\t\t\t\thandler(element);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Helper function to get the items that intersect the event position\r\n * @param {ChartElement[]} items - elements to filter\r\n * @param {object} position - the point to be nearest to\r\n * @return {ChartElement[]} the nearest items\r\n */\r\nfunction getIntersectItems(chart, position) {\r\n\tvar elements = [];\r\n\r\n\tparseVisibleItems(chart, function(element) {\r\n\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\telements.push(element);\r\n\t\t}\r\n\t});\r\n\r\n\treturn elements;\r\n}\r\n\r\n/**\r\n * Helper function to get the items nearest to the event position considering all visible items in teh chart\r\n * @param {Chart} chart - the chart to look at elements from\r\n * @param {object} position - the point to be nearest to\r\n * @param {boolean} intersect - if true, only consider items that intersect the position\r\n * @param {function} distanceMetric - function to provide the distance between points\r\n * @return {ChartElement[]} the nearest items\r\n */\r\nfunction getNearestItems(chart, position, intersect, distanceMetric) {\r\n\tvar minDistance = Number.POSITIVE_INFINITY;\r\n\tvar nearestItems = [];\r\n\r\n\tparseVisibleItems(chart, function(element) {\r\n\t\tif (intersect && !element.inRange(position.x, position.y)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar center = element.getCenterPoint();\r\n\t\tvar distance = distanceMetric(position, center);\r\n\t\tif (distance < minDistance) {\r\n\t\t\tnearestItems = [element];\r\n\t\t\tminDistance = distance;\r\n\t\t} else if (distance === minDistance) {\r\n\t\t\t// Can have multiple items at the same distance in which case we sort by size\r\n\t\t\tnearestItems.push(element);\r\n\t\t}\r\n\t});\r\n\r\n\treturn nearestItems;\r\n}\r\n\r\n/**\r\n * Get a distance metric function for two points based on the\r\n * axis mode setting\r\n * @param {string} axis - the axis mode. x|y|xy\r\n */\r\nfunction getDistanceMetricForAxis(axis) {\r\n\tvar useX = axis.indexOf('x') !== -1;\r\n\tvar useY = axis.indexOf('y') !== -1;\r\n\r\n\treturn function(pt1, pt2) {\r\n\t\tvar deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\r\n\t\tvar deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\r\n\t\treturn Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\r\n\t};\r\n}\r\n\r\nfunction indexMode(chart, e, options) {\r\n\tvar position = getRelativePosition(e, chart);\r\n\t// Default axis for index mode is 'x' to match old behaviour\r\n\toptions.axis = options.axis || 'x';\r\n\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\r\n\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\r\n\tvar elements = [];\r\n\r\n\tif (!items.length) {\r\n\t\treturn [];\r\n\t}\r\n\r\n\tchart._getSortedVisibleDatasetMetas().forEach(function(meta) {\r\n\t\tvar element = meta.data[items[0]._index];\r\n\r\n\t\t// don't count items that are skipped (null data)\r\n\t\tif (element && !element._view.skip) {\r\n\t\t\telements.push(element);\r\n\t\t}\r\n\t});\r\n\r\n\treturn elements;\r\n}\r\n\r\n/**\r\n * @interface IInteractionOptions\r\n */\r\n/**\r\n * If true, only consider items that intersect the point\r\n * @name IInterfaceOptions#boolean\r\n * @type Boolean\r\n */\r\n\r\n/**\r\n * Contains interaction related functions\r\n * @namespace Chart.Interaction\r\n */\r\nvar core_interaction = {\r\n\t// Helper function for different modes\r\n\tmodes: {\r\n\t\tsingle: function(chart, e) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\tvar elements = [];\r\n\r\n\t\t\tparseVisibleItems(chart, function(element) {\r\n\t\t\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\t\t\telements.push(element);\r\n\t\t\t\t\treturn elements;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\treturn elements.slice(0, 1);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * @function Chart.Interaction.modes.label\r\n\t\t * @deprecated since version 2.4.0\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\tlabel: indexMode,\r\n\r\n\t\t/**\r\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\r\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\r\n\t\t * @function Chart.Interaction.modes.index\r\n\t\t * @since v2.4.0\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use during interaction\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tindex: indexMode,\r\n\r\n\t\t/**\r\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\r\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\r\n\t\t * @function Chart.Interaction.modes.dataset\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use during interaction\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tdataset: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\toptions.axis = options.axis || 'xy';\r\n\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\r\n\t\t\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\r\n\r\n\t\t\tif (items.length > 0) {\r\n\t\t\t\titems = chart.getDatasetMeta(items[0]._datasetIndex).data;\r\n\t\t\t}\r\n\r\n\t\t\treturn items;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * @function Chart.Interaction.modes.x-axis\r\n\t\t * @deprecated since version 2.4.0. Use index mode and intersect == true\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\t'x-axis': function(chart, e) {\r\n\t\t\treturn indexMode(chart, e, {intersect: false});\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Point mode returns all elements that hit test based on the event position\r\n\t\t * of the event\r\n\t\t * @function Chart.Interaction.modes.intersect\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tpoint: function(chart, e) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\treturn getIntersectItems(chart, position);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * nearest mode returns the element closest to the point\r\n\t\t * @function Chart.Interaction.modes.intersect\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tnearest: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\toptions.axis = options.axis || 'xy';\r\n\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\r\n\t\t\treturn getNearestItems(chart, position, options.intersect, distanceMetric);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * x mode returns the elements that hit-test at the current x coordinate\r\n\t\t * @function Chart.Interaction.modes.x\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tx: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\tvar items = [];\r\n\t\t\tvar intersectsItem = false;\r\n\r\n\t\t\tparseVisibleItems(chart, function(element) {\r\n\t\t\t\tif (element.inXRange(position.x)) {\r\n\t\t\t\t\titems.push(element);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\t\t\tintersectsItem = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// If we want to trigger on an intersect and we don't have any items\r\n\t\t\t// that intersect the position, return nothing\r\n\t\t\tif (options.intersect && !intersectsItem) {\r\n\t\t\t\titems = [];\r\n\t\t\t}\r\n\t\t\treturn items;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * y mode returns the elements that hit-test at the current y coordinate\r\n\t\t * @function Chart.Interaction.modes.y\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\ty: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\tvar items = [];\r\n\t\t\tvar intersectsItem = false;\r\n\r\n\t\t\tparseVisibleItems(chart, function(element) {\r\n\t\t\t\tif (element.inYRange(position.y)) {\r\n\t\t\t\t\titems.push(element);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\t\t\tintersectsItem = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// If we want to trigger on an intersect and we don't have any items\r\n\t\t\t// that intersect the position, return nothing\r\n\t\t\tif (options.intersect && !intersectsItem) {\r\n\t\t\t\titems = [];\r\n\t\t\t}\r\n\t\t\treturn items;\r\n\t\t}\r\n\t}\r\n};\n\nvar extend = helpers$1.extend;\r\n\r\nfunction filterByPosition(array, position) {\r\n\treturn helpers$1.where(array, function(v) {\r\n\t\treturn v.pos === position;\r\n\t});\r\n}\r\n\r\nfunction sortByWeight(array, reverse) {\r\n\treturn array.sort(function(a, b) {\r\n\t\tvar v0 = reverse ? b : a;\r\n\t\tvar v1 = reverse ? a : b;\r\n\t\treturn v0.weight === v1.weight ?\r\n\t\t\tv0.index - v1.index :\r\n\t\t\tv0.weight - v1.weight;\r\n\t});\r\n}\r\n\r\nfunction wrapBoxes(boxes) {\r\n\tvar layoutBoxes = [];\r\n\tvar i, ilen, box;\r\n\r\n\tfor (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\r\n\t\tbox = boxes[i];\r\n\t\tlayoutBoxes.push({\r\n\t\t\tindex: i,\r\n\t\t\tbox: box,\r\n\t\t\tpos: box.position,\r\n\t\t\thorizontal: box.isHorizontal(),\r\n\t\t\tweight: box.weight\r\n\t\t});\r\n\t}\r\n\treturn layoutBoxes;\r\n}\r\n\r\nfunction setLayoutDims(layouts, params) {\r\n\tvar i, ilen, layout;\r\n\tfor (i = 0, ilen = layouts.length; i < ilen; ++i) {\r\n\t\tlayout = layouts[i];\r\n\t\t// store width used instead of chartArea.w in fitBoxes\r\n\t\tlayout.width = layout.horizontal\r\n\t\t\t? layout.box.fullWidth && params.availableWidth\r\n\t\t\t: params.vBoxMaxWidth;\r\n\t\t// store height used instead of chartArea.h in fitBoxes\r\n\t\tlayout.height = layout.horizontal && params.hBoxMaxHeight;\r\n\t}\r\n}\r\n\r\nfunction buildLayoutBoxes(boxes) {\r\n\tvar layoutBoxes = wrapBoxes(boxes);\r\n\tvar left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\r\n\tvar right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\r\n\tvar top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\r\n\tvar bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\r\n\r\n\treturn {\r\n\t\tleftAndTop: left.concat(top),\r\n\t\trightAndBottom: right.concat(bottom),\r\n\t\tchartArea: filterByPosition(layoutBoxes, 'chartArea'),\r\n\t\tvertical: left.concat(right),\r\n\t\thorizontal: top.concat(bottom)\r\n\t};\r\n}\r\n\r\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\r\n\treturn Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\r\n}\r\n\r\nfunction updateDims(chartArea, params, layout) {\r\n\tvar box = layout.box;\r\n\tvar maxPadding = chartArea.maxPadding;\r\n\tvar newWidth, newHeight;\r\n\r\n\tif (layout.size) {\r\n\t\t// this layout was already counted for, lets first reduce old size\r\n\t\tchartArea[layout.pos] -= layout.size;\r\n\t}\r\n\tlayout.size = layout.horizontal ? box.height : box.width;\r\n\tchartArea[layout.pos] += layout.size;\r\n\r\n\tif (box.getPadding) {\r\n\t\tvar boxPadding = box.getPadding();\r\n\t\tmaxPadding.top = Math.max(maxPadding.top, boxPadding.top);\r\n\t\tmaxPadding.left = Math.max(maxPadding.left, boxPadding.left);\r\n\t\tmaxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\r\n\t\tmaxPadding.right = Math.max(maxPadding.right, boxPadding.right);\r\n\t}\r\n\r\n\tnewWidth = params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right');\r\n\tnewHeight = params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom');\r\n\r\n\tif (newWidth !== chartArea.w || newHeight !== chartArea.h) {\r\n\t\tchartArea.w = newWidth;\r\n\t\tchartArea.h = newHeight;\r\n\r\n\t\t// return true if chart area changed in layout's direction\r\n\t\tvar sizes = layout.horizontal ? [newWidth, chartArea.w] : [newHeight, chartArea.h];\r\n\t\treturn sizes[0] !== sizes[1] && (!isNaN(sizes[0]) || !isNaN(sizes[1]));\r\n\t}\r\n}\r\n\r\nfunction handleMaxPadding(chartArea) {\r\n\tvar maxPadding = chartArea.maxPadding;\r\n\r\n\tfunction updatePos(pos) {\r\n\t\tvar change = Math.max(maxPadding[pos] - chartArea[pos], 0);\r\n\t\tchartArea[pos] += change;\r\n\t\treturn change;\r\n\t}\r\n\tchartArea.y += updatePos('top');\r\n\tchartArea.x += updatePos('left');\r\n\tupdatePos('right');\r\n\tupdatePos('bottom');\r\n}\r\n\r\nfunction getMargins(horizontal, chartArea) {\r\n\tvar maxPadding = chartArea.maxPadding;\r\n\r\n\tfunction marginForPositions(positions) {\r\n\t\tvar margin = {left: 0, top: 0, right: 0, bottom: 0};\r\n\t\tpositions.forEach(function(pos) {\r\n\t\t\tmargin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\r\n\t\t});\r\n\t\treturn margin;\r\n\t}\r\n\r\n\treturn horizontal\r\n\t\t? marginForPositions(['left', 'right'])\r\n\t\t: marginForPositions(['top', 'bottom']);\r\n}\r\n\r\nfunction fitBoxes(boxes, chartArea, params) {\r\n\tvar refitBoxes = [];\r\n\tvar i, ilen, layout, box, refit, changed;\r\n\r\n\tfor (i = 0, ilen = boxes.length; i < ilen; ++i) {\r\n\t\tlayout = boxes[i];\r\n\t\tbox = layout.box;\r\n\r\n\t\tbox.update(\r\n\t\t\tlayout.width || chartArea.w,\r\n\t\t\tlayout.height || chartArea.h,\r\n\t\t\tgetMargins(layout.horizontal, chartArea)\r\n\t\t);\r\n\t\tif (updateDims(chartArea, params, layout)) {\r\n\t\t\tchanged = true;\r\n\t\t\tif (refitBoxes.length) {\r\n\t\t\t\t// Dimensions changed and there were non full width boxes before this\r\n\t\t\t\t// -> we have to refit those\r\n\t\t\t\trefit = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!box.fullWidth) { // fullWidth boxes don't need to be re-fitted in any case\r\n\t\t\trefitBoxes.push(layout);\r\n\t\t}\r\n\t}\r\n\r\n\treturn refit ? fitBoxes(refitBoxes, chartArea, params) || changed : changed;\r\n}\r\n\r\nfunction placeBoxes(boxes, chartArea, params) {\r\n\tvar userPadding = params.padding;\r\n\tvar x = chartArea.x;\r\n\tvar y = chartArea.y;\r\n\tvar i, ilen, layout, box;\r\n\r\n\tfor (i = 0, ilen = boxes.length; i < ilen; ++i) {\r\n\t\tlayout = boxes[i];\r\n\t\tbox = layout.box;\r\n\t\tif (layout.horizontal) {\r\n\t\t\tbox.left = box.fullWidth ? userPadding.left : chartArea.left;\r\n\t\t\tbox.right = box.fullWidth ? params.outerWidth - userPadding.right : chartArea.left + chartArea.w;\r\n\t\t\tbox.top = y;\r\n\t\t\tbox.bottom = y + box.height;\r\n\t\t\tbox.width = box.right - box.left;\r\n\t\t\ty = box.bottom;\r\n\t\t} else {\r\n\t\t\tbox.left = x;\r\n\t\t\tbox.right = x + box.width;\r\n\t\t\tbox.top = chartArea.top;\r\n\t\t\tbox.bottom = chartArea.top + chartArea.h;\r\n\t\t\tbox.height = box.bottom - box.top;\r\n\t\t\tx = box.right;\r\n\t\t}\r\n\t}\r\n\r\n\tchartArea.x = x;\r\n\tchartArea.y = y;\r\n}\r\n\r\ncore_defaults._set('global', {\r\n\tlayout: {\r\n\t\tpadding: {\r\n\t\t\ttop: 0,\r\n\t\t\tright: 0,\r\n\t\t\tbottom: 0,\r\n\t\t\tleft: 0\r\n\t\t}\r\n\t}\r\n});\r\n\r\n/**\r\n * @interface ILayoutItem\r\n * @prop {string} position - The position of the item in the chart layout. Possible values are\r\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\r\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\r\n * @prop {boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down\r\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\r\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\r\n * @prop {function} getPadding -  Returns an object with padding on the edges\r\n * @prop {number} width - Width of item. Must be valid after update()\r\n * @prop {number} height - Height of item. Must be valid after update()\r\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\r\n */\r\n\r\n// The layout service is very self explanatory.  It's responsible for the layout within a chart.\r\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\r\n// It is this service's responsibility of carrying out that layout.\r\nvar core_layouts = {\r\n\tdefaults: {},\r\n\r\n\t/**\r\n\t * Register a box to a chart.\r\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\r\n\t * @param {Chart} chart - the chart to use\r\n\t * @param {ILayoutItem} item - the item to add to be layed out\r\n\t */\r\n\taddBox: function(chart, item) {\r\n\t\tif (!chart.boxes) {\r\n\t\t\tchart.boxes = [];\r\n\t\t}\r\n\r\n\t\t// initialize item with default values\r\n\t\titem.fullWidth = item.fullWidth || false;\r\n\t\titem.position = item.position || 'top';\r\n\t\titem.weight = item.weight || 0;\r\n\t\titem._layers = item._layers || function() {\r\n\t\t\treturn [{\r\n\t\t\t\tz: 0,\r\n\t\t\t\tdraw: function() {\r\n\t\t\t\t\titem.draw.apply(item, arguments);\r\n\t\t\t\t}\r\n\t\t\t}];\r\n\t\t};\r\n\r\n\t\tchart.boxes.push(item);\r\n\t},\r\n\r\n\t/**\r\n\t * Remove a layoutItem from a chart\r\n\t * @param {Chart} chart - the chart to remove the box from\r\n\t * @param {ILayoutItem} layoutItem - the item to remove from the layout\r\n\t */\r\n\tremoveBox: function(chart, layoutItem) {\r\n\t\tvar index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\r\n\t\tif (index !== -1) {\r\n\t\t\tchart.boxes.splice(index, 1);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Sets (or updates) options on the given `item`.\r\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\r\n\t * @param {ILayoutItem} item - the item to configure with the given options\r\n\t * @param {object} options - the new item options.\r\n\t */\r\n\tconfigure: function(chart, item, options) {\r\n\t\tvar props = ['fullWidth', 'position', 'weight'];\r\n\t\tvar ilen = props.length;\r\n\t\tvar i = 0;\r\n\t\tvar prop;\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\tprop = props[i];\r\n\t\t\tif (options.hasOwnProperty(prop)) {\r\n\t\t\t\titem[prop] = options[prop];\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Fits boxes of the given chart into the given size by having each box measure itself\r\n\t * then running a fitting algorithm\r\n\t * @param {Chart} chart - the chart\r\n\t * @param {number} width - the width to fit into\r\n\t * @param {number} height - the height to fit into\r\n\t */\r\n\tupdate: function(chart, width, height) {\r\n\t\tif (!chart) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar layoutOptions = chart.options.layout || {};\r\n\t\tvar padding = helpers$1.options.toPadding(layoutOptions.padding);\r\n\r\n\t\tvar availableWidth = width - padding.width;\r\n\t\tvar availableHeight = height - padding.height;\r\n\t\tvar boxes = buildLayoutBoxes(chart.boxes);\r\n\t\tvar verticalBoxes = boxes.vertical;\r\n\t\tvar horizontalBoxes = boxes.horizontal;\r\n\r\n\t\t// Essentially we now have any number of boxes on each of the 4 sides.\r\n\t\t// Our canvas looks like the following.\r\n\t\t// The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\r\n\t\t// B1 is the bottom axis\r\n\t\t// There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\r\n\t\t// These locations are single-box locations only, when trying to register a chartArea location that is already taken,\r\n\t\t// an error will be thrown.\r\n\t\t//\r\n\t\t// |----------------------------------------------------|\r\n\t\t// |                  T1 (Full Width)                   |\r\n\t\t// |----------------------------------------------------|\r\n\t\t// |    |    |                 T2                  |    |\r\n\t\t// |    |----|-------------------------------------|----|\r\n\t\t// |    |    | C1 |                           | C2 |    |\r\n\t\t// |    |    |----|                           |----|    |\r\n\t\t// |    |    |                                     |    |\r\n\t\t// | L1 | L2 |           ChartArea (C0)            | R1 |\r\n\t\t// |    |    |                                     |    |\r\n\t\t// |    |    |----|                           |----|    |\r\n\t\t// |    |    | C3 |                           | C4 |    |\r\n\t\t// |    |----|-------------------------------------|----|\r\n\t\t// |    |    |                 B1                  |    |\r\n\t\t// |----------------------------------------------------|\r\n\t\t// |                  B2 (Full Width)                   |\r\n\t\t// |----------------------------------------------------|\r\n\t\t//\r\n\r\n\t\tvar params = Object.freeze({\r\n\t\t\touterWidth: width,\r\n\t\t\touterHeight: height,\r\n\t\t\tpadding: padding,\r\n\t\t\tavailableWidth: availableWidth,\r\n\t\t\tvBoxMaxWidth: availableWidth / 2 / verticalBoxes.length,\r\n\t\t\thBoxMaxHeight: availableHeight / 2\r\n\t\t});\r\n\t\tvar chartArea = extend({\r\n\t\t\tmaxPadding: extend({}, padding),\r\n\t\t\tw: availableWidth,\r\n\t\t\th: availableHeight,\r\n\t\t\tx: padding.left,\r\n\t\t\ty: padding.top\r\n\t\t}, padding);\r\n\r\n\t\tsetLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\r\n\r\n\t\t// First fit vertical boxes\r\n\t\tfitBoxes(verticalBoxes, chartArea, params);\r\n\r\n\t\t// Then fit horizontal boxes\r\n\t\tif (fitBoxes(horizontalBoxes, chartArea, params)) {\r\n\t\t\t// if the area changed, re-fit vertical boxes\r\n\t\t\tfitBoxes(verticalBoxes, chartArea, params);\r\n\t\t}\r\n\r\n\t\thandleMaxPadding(chartArea);\r\n\r\n\t\t// Finally place the boxes to correct coordinates\r\n\t\tplaceBoxes(boxes.leftAndTop, chartArea, params);\r\n\r\n\t\t// Move to opposite side of chart\r\n\t\tchartArea.x += chartArea.w;\r\n\t\tchartArea.y += chartArea.h;\r\n\r\n\t\tplaceBoxes(boxes.rightAndBottom, chartArea, params);\r\n\r\n\t\tchart.chartArea = {\r\n\t\t\tleft: chartArea.left,\r\n\t\t\ttop: chartArea.top,\r\n\t\t\tright: chartArea.left + chartArea.w,\r\n\t\t\tbottom: chartArea.top + chartArea.h\r\n\t\t};\r\n\r\n\t\t// Finally update boxes in chartArea (radial scale for example)\r\n\t\thelpers$1.each(boxes.chartArea, function(layout) {\r\n\t\t\tvar box = layout.box;\r\n\t\t\textend(box, chart.chartArea);\r\n\t\t\tbox.update(chartArea.w, chartArea.h);\r\n\t\t});\r\n\t}\r\n};\n\n/**\r\n * Platform fallback implementation (minimal).\r\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\r\n */\r\n\r\nvar platform_basic = {\r\n\tacquireContext: function(item) {\r\n\t\tif (item && item.canvas) {\r\n\t\t\t// Support for any object associated to a canvas (including a context2d)\r\n\t\t\titem = item.canvas;\r\n\t\t}\r\n\r\n\t\treturn item && item.getContext('2d') || null;\r\n\t}\r\n};\n\nvar platform_dom = \"/*\\r\\n * DOM element rendering detection\\r\\n * https://davidwalsh.name/detect-node-insertion\\r\\n */\\r\\n@keyframes chartjs-render-animation {\\r\\n\\tfrom { opacity: 0.99; }\\r\\n\\tto { opacity: 1; }\\r\\n}\\r\\n\\r\\n.chartjs-render-monitor {\\r\\n\\tanimation: chartjs-render-animation 0.001s;\\r\\n}\\r\\n\\r\\n/*\\r\\n * DOM element resizing detection\\r\\n * https://github.com/marcj/css-element-queries\\r\\n */\\r\\n.chartjs-size-monitor,\\r\\n.chartjs-size-monitor-expand,\\r\\n.chartjs-size-monitor-shrink {\\r\\n\\tposition: absolute;\\r\\n\\tdirection: ltr;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n\\tright: 0;\\r\\n\\tbottom: 0;\\r\\n\\toverflow: hidden;\\r\\n\\tpointer-events: none;\\r\\n\\tvisibility: hidden;\\r\\n\\tz-index: -1;\\r\\n}\\r\\n\\r\\n.chartjs-size-monitor-expand > div {\\r\\n\\tposition: absolute;\\r\\n\\twidth: 1000000px;\\r\\n\\theight: 1000000px;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n}\\r\\n\\r\\n.chartjs-size-monitor-shrink > div {\\r\\n\\tposition: absolute;\\r\\n\\twidth: 200%;\\r\\n\\theight: 200%;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n}\\r\\n\";\n\nvar platform_dom$1 = /*#__PURE__*/Object.freeze({\n__proto__: null,\n'default': platform_dom\n});\n\nvar stylesheet = getCjsExportFromNamespace(platform_dom$1);\n\nvar EXPANDO_KEY = '$chartjs';\r\nvar CSS_PREFIX = 'chartjs-';\r\nvar CSS_SIZE_MONITOR = CSS_PREFIX + 'size-monitor';\r\nvar CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor';\r\nvar CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation';\r\nvar ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart'];\r\n\r\n/**\r\n * DOM event types -> Chart.js event types.\r\n * Note: only events with different types are mapped.\r\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\r\n */\r\nvar EVENT_TYPES = {\r\n\ttouchstart: 'mousedown',\r\n\ttouchmove: 'mousemove',\r\n\ttouchend: 'mouseup',\r\n\tpointerenter: 'mouseenter',\r\n\tpointerdown: 'mousedown',\r\n\tpointermove: 'mousemove',\r\n\tpointerup: 'mouseup',\r\n\tpointerleave: 'mouseout',\r\n\tpointerout: 'mouseout'\r\n};\r\n\r\n/**\r\n * The \"used\" size is the final value of a dimension property after all calculations have\r\n * been performed. This method uses the computed style of `element` but returns undefined\r\n * if the computed style is not expressed in pixels. That can happen in some cases where\r\n * `element` has a size relative to its parent and this last one is not yet displayed,\r\n * for example because of `display: none` on a parent node.\r\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\r\n * @returns {number} Size in pixels or undefined if unknown.\r\n */\r\nfunction readUsedSize(element, property) {\r\n\tvar value = helpers$1.getStyle(element, property);\r\n\tvar matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\r\n\treturn matches ? Number(matches[1]) : undefined;\r\n}\r\n\r\n/**\r\n * Initializes the canvas style and render size without modifying the canvas display size,\r\n * since responsiveness is handled by the controller.resize() method. The config is used\r\n * to determine the aspect ratio to apply in case no explicit height has been specified.\r\n */\r\nfunction initCanvas(canvas, config) {\r\n\tvar style = canvas.style;\r\n\r\n\t// NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\r\n\t// returns null or '' if no explicit value has been set to the canvas attribute.\r\n\tvar renderHeight = canvas.getAttribute('height');\r\n\tvar renderWidth = canvas.getAttribute('width');\r\n\r\n\t// Chart.js modifies some canvas values that we want to restore on destroy\r\n\tcanvas[EXPANDO_KEY] = {\r\n\t\tinitial: {\r\n\t\t\theight: renderHeight,\r\n\t\t\twidth: renderWidth,\r\n\t\t\tstyle: {\r\n\t\t\t\tdisplay: style.display,\r\n\t\t\t\theight: style.height,\r\n\t\t\t\twidth: style.width\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Force canvas to display as block to avoid extra space caused by inline\r\n\t// elements, which would interfere with the responsive resize process.\r\n\t// https://github.com/chartjs/Chart.js/issues/2538\r\n\tstyle.display = style.display || 'block';\r\n\r\n\tif (renderWidth === null || renderWidth === '') {\r\n\t\tvar displayWidth = readUsedSize(canvas, 'width');\r\n\t\tif (displayWidth !== undefined) {\r\n\t\t\tcanvas.width = displayWidth;\r\n\t\t}\r\n\t}\r\n\r\n\tif (renderHeight === null || renderHeight === '') {\r\n\t\tif (canvas.style.height === '') {\r\n\t\t\t// If no explicit render height and style height, let's apply the aspect ratio,\r\n\t\t\t// which one can be specified by the user but also by charts as default option\r\n\t\t\t// (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\r\n\t\t\tcanvas.height = canvas.width / (config.options.aspectRatio || 2);\r\n\t\t} else {\r\n\t\t\tvar displayHeight = readUsedSize(canvas, 'height');\r\n\t\t\tif (displayWidth !== undefined) {\r\n\t\t\t\tcanvas.height = displayHeight;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn canvas;\r\n}\r\n\r\n/**\r\n * Detects support for options object argument in addEventListener.\r\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\r\n * @private\r\n */\r\nvar supportsEventListenerOptions = (function() {\r\n\tvar supports = false;\r\n\ttry {\r\n\t\tvar options = Object.defineProperty({}, 'passive', {\r\n\t\t\t// eslint-disable-next-line getter-return\r\n\t\t\tget: function() {\r\n\t\t\t\tsupports = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\twindow.addEventListener('e', null, options);\r\n\t} catch (e) {\r\n\t\t// continue regardless of error\r\n\t}\r\n\treturn supports;\r\n}());\r\n\r\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\r\n// https://github.com/chartjs/Chart.js/issues/4287\r\nvar eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\r\n\r\nfunction addListener(node, type, listener) {\r\n\tnode.addEventListener(type, listener, eventListenerOptions);\r\n}\r\n\r\nfunction removeListener(node, type, listener) {\r\n\tnode.removeEventListener(type, listener, eventListenerOptions);\r\n}\r\n\r\nfunction createEvent(type, chart, x, y, nativeEvent) {\r\n\treturn {\r\n\t\ttype: type,\r\n\t\tchart: chart,\r\n\t\tnative: nativeEvent || null,\r\n\t\tx: x !== undefined ? x : null,\r\n\t\ty: y !== undefined ? y : null,\r\n\t};\r\n}\r\n\r\nfunction fromNativeEvent(event, chart) {\r\n\tvar type = EVENT_TYPES[event.type] || event.type;\r\n\tvar pos = helpers$1.getRelativePosition(event, chart);\r\n\treturn createEvent(type, chart, pos.x, pos.y, event);\r\n}\r\n\r\nfunction throttled(fn, thisArg) {\r\n\tvar ticking = false;\r\n\tvar args = [];\r\n\r\n\treturn function() {\r\n\t\targs = Array.prototype.slice.call(arguments);\r\n\t\tthisArg = thisArg || this;\r\n\r\n\t\tif (!ticking) {\r\n\t\t\tticking = true;\r\n\t\t\thelpers$1.requestAnimFrame.call(window, function() {\r\n\t\t\t\tticking = false;\r\n\t\t\t\tfn.apply(thisArg, args);\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction createDiv(cls) {\r\n\tvar el = document.createElement('div');\r\n\tel.className = cls || '';\r\n\treturn el;\r\n}\r\n\r\n// Implementation based on https://github.com/marcj/css-element-queries\r\nfunction createResizer(handler) {\r\n\tvar maxSize = 1000000;\r\n\r\n\t// NOTE(SB) Don't use innerHTML because it could be considered unsafe.\r\n\t// https://github.com/chartjs/Chart.js/issues/5902\r\n\tvar resizer = createDiv(CSS_SIZE_MONITOR);\r\n\tvar expand = createDiv(CSS_SIZE_MONITOR + '-expand');\r\n\tvar shrink = createDiv(CSS_SIZE_MONITOR + '-shrink');\r\n\r\n\texpand.appendChild(createDiv());\r\n\tshrink.appendChild(createDiv());\r\n\r\n\tresizer.appendChild(expand);\r\n\tresizer.appendChild(shrink);\r\n\tresizer._reset = function() {\r\n\t\texpand.scrollLeft = maxSize;\r\n\t\texpand.scrollTop = maxSize;\r\n\t\tshrink.scrollLeft = maxSize;\r\n\t\tshrink.scrollTop = maxSize;\r\n\t};\r\n\r\n\tvar onScroll = function() {\r\n\t\tresizer._reset();\r\n\t\thandler();\r\n\t};\r\n\r\n\taddListener(expand, 'scroll', onScroll.bind(expand, 'expand'));\r\n\taddListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink'));\r\n\r\n\treturn resizer;\r\n}\r\n\r\n// https://davidwalsh.name/detect-node-insertion\r\nfunction watchForRender(node, handler) {\r\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\r\n\tvar proxy = expando.renderProxy = function(e) {\r\n\t\tif (e.animationName === CSS_RENDER_ANIMATION) {\r\n\t\t\thandler();\r\n\t\t}\r\n\t};\r\n\r\n\thelpers$1.each(ANIMATION_START_EVENTS, function(type) {\r\n\t\taddListener(node, type, proxy);\r\n\t});\r\n\r\n\t// #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class\r\n\t// is removed then added back immediately (same animation frame?). Accessing the\r\n\t// `offsetParent` property will force a reflow and re-evaluate the CSS animation.\r\n\t// https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics\r\n\t// https://github.com/chartjs/Chart.js/issues/4737\r\n\texpando.reflow = !!node.offsetParent;\r\n\r\n\tnode.classList.add(CSS_RENDER_MONITOR);\r\n}\r\n\r\nfunction unwatchForRender(node) {\r\n\tvar expando = node[EXPANDO_KEY] || {};\r\n\tvar proxy = expando.renderProxy;\r\n\r\n\tif (proxy) {\r\n\t\thelpers$1.each(ANIMATION_START_EVENTS, function(type) {\r\n\t\t\tremoveListener(node, type, proxy);\r\n\t\t});\r\n\r\n\t\tdelete expando.renderProxy;\r\n\t}\r\n\r\n\tnode.classList.remove(CSS_RENDER_MONITOR);\r\n}\r\n\r\nfunction addResizeListener(node, listener, chart) {\r\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\r\n\r\n\t// Let's keep track of this added resizer and thus avoid DOM query when removing it.\r\n\tvar resizer = expando.resizer = createResizer(throttled(function() {\r\n\t\tif (expando.resizer) {\r\n\t\t\tvar container = chart.options.maintainAspectRatio && node.parentNode;\r\n\t\t\tvar w = container ? container.clientWidth : 0;\r\n\t\t\tlistener(createEvent('resize', chart));\r\n\t\t\tif (container && container.clientWidth < w && chart.canvas) {\r\n\t\t\t\t// If the container size shrank during chart resize, let's assume\r\n\t\t\t\t// scrollbar appeared. So we resize again with the scrollbar visible -\r\n\t\t\t\t// effectively making chart smaller and the scrollbar hidden again.\r\n\t\t\t\t// Because we are inside `throttled`, and currently `ticking`, scroll\r\n\t\t\t\t// events are ignored during this whole 2 resize process.\r\n\t\t\t\t// If we assumed wrong and something else happened, we are resizing\r\n\t\t\t\t// twice in a frame (potential performance issue)\r\n\t\t\t\tlistener(createEvent('resize', chart));\r\n\t\t\t}\r\n\t\t}\r\n\t}));\r\n\r\n\t// The resizer needs to be attached to the node parent, so we first need to be\r\n\t// sure that `node` is attached to the DOM before injecting the resizer element.\r\n\twatchForRender(node, function() {\r\n\t\tif (expando.resizer) {\r\n\t\t\tvar container = node.parentNode;\r\n\t\t\tif (container && container !== resizer.parentNode) {\r\n\t\t\t\tcontainer.insertBefore(resizer, container.firstChild);\r\n\t\t\t}\r\n\r\n\t\t\t// The container size might have changed, let's reset the resizer state.\r\n\t\t\tresizer._reset();\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction removeResizeListener(node) {\r\n\tvar expando = node[EXPANDO_KEY] || {};\r\n\tvar resizer = expando.resizer;\r\n\r\n\tdelete expando.resizer;\r\n\tunwatchForRender(node);\r\n\r\n\tif (resizer && resizer.parentNode) {\r\n\t\tresizer.parentNode.removeChild(resizer);\r\n\t}\r\n}\r\n\r\n/**\r\n * Injects CSS styles inline if the styles are not already present.\r\n * @param {HTMLDocument|ShadowRoot} rootNode - the node to contain the <style>.\r\n * @param {string} css - the CSS to be injected.\r\n */\r\nfunction injectCSS(rootNode, css) {\r\n\t// https://stackoverflow.com/q/3922139\r\n\tvar expando = rootNode[EXPANDO_KEY] || (rootNode[EXPANDO_KEY] = {});\r\n\tif (!expando.containsStyles) {\r\n\t\texpando.containsStyles = true;\r\n\t\tcss = '/* Chart.js */\\n' + css;\r\n\t\tvar style = document.createElement('style');\r\n\t\tstyle.setAttribute('type', 'text/css');\r\n\t\tstyle.appendChild(document.createTextNode(css));\r\n\t\trootNode.appendChild(style);\r\n\t}\r\n}\r\n\r\nvar platform_dom$2 = {\r\n\t/**\r\n\t * When `true`, prevents the automatic injection of the stylesheet required to\r\n\t * correctly detect when the chart is added to the DOM and then resized. This\r\n\t * switch has been added to allow external stylesheet (`dist/Chart(.min)?.js`)\r\n\t * to be manually imported to make this library compatible with any CSP.\r\n\t * See https://github.com/chartjs/Chart.js/issues/5208\r\n\t */\r\n\tdisableCSSInjection: false,\r\n\r\n\t/**\r\n\t * This property holds whether this platform is enabled for the current environment.\r\n\t * Currently used by platform.js to select the proper implementation.\r\n\t * @private\r\n\t */\r\n\t_enabled: typeof window !== 'undefined' && typeof document !== 'undefined',\r\n\r\n\t/**\r\n\t * Initializes resources that depend on platform options.\r\n\t * @param {HTMLCanvasElement} canvas - The Canvas element.\r\n\t * @private\r\n\t */\r\n\t_ensureLoaded: function(canvas) {\r\n\t\tif (!this.disableCSSInjection) {\r\n\t\t\t// If the canvas is in a shadow DOM, then the styles must also be inserted\r\n\t\t\t// into the same shadow DOM.\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/5763\r\n\t\t\tvar root = canvas.getRootNode ? canvas.getRootNode() : document;\r\n\t\t\tvar targetNode = root.host ? root : document.head;\r\n\t\t\tinjectCSS(targetNode, stylesheet);\r\n\t\t}\r\n\t},\r\n\r\n\tacquireContext: function(item, config) {\r\n\t\tif (typeof item === 'string') {\r\n\t\t\titem = document.getElementById(item);\r\n\t\t} else if (item.length) {\r\n\t\t\t// Support for array based queries (such as jQuery)\r\n\t\t\titem = item[0];\r\n\t\t}\r\n\r\n\t\tif (item && item.canvas) {\r\n\t\t\t// Support for any object associated to a canvas (including a context2d)\r\n\t\t\titem = item.canvas;\r\n\t\t}\r\n\r\n\t\t// To prevent canvas fingerprinting, some add-ons undefine the getContext\r\n\t\t// method, for example: https://github.com/kkapsner/CanvasBlocker\r\n\t\t// https://github.com/chartjs/Chart.js/issues/2807\r\n\t\tvar context = item && item.getContext && item.getContext('2d');\r\n\r\n\t\t// `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the item is\r\n\t\t// inside an iframe or when running in a protected environment. We could guess the\r\n\t\t// types from their toString() value but let's keep things flexible and assume it's\r\n\t\t// a sufficient condition if the item has a context2D which has item as `canvas`.\r\n\t\t// https://github.com/chartjs/Chart.js/issues/3887\r\n\t\t// https://github.com/chartjs/Chart.js/issues/4102\r\n\t\t// https://github.com/chartjs/Chart.js/issues/4152\r\n\t\tif (context && context.canvas === item) {\r\n\t\t\t// Load platform resources on first chart creation, to make it possible to\r\n\t\t\t// import the library before setting platform options.\r\n\t\t\tthis._ensureLoaded(item);\r\n\t\t\tinitCanvas(item, config);\r\n\t\t\treturn context;\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t},\r\n\r\n\treleaseContext: function(context) {\r\n\t\tvar canvas = context.canvas;\r\n\t\tif (!canvas[EXPANDO_KEY]) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar initial = canvas[EXPANDO_KEY].initial;\r\n\t\t['height', 'width'].forEach(function(prop) {\r\n\t\t\tvar value = initial[prop];\r\n\t\t\tif (helpers$1.isNullOrUndef(value)) {\r\n\t\t\t\tcanvas.removeAttribute(prop);\r\n\t\t\t} else {\r\n\t\t\t\tcanvas.setAttribute(prop, value);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\thelpers$1.each(initial.style || {}, function(value, key) {\r\n\t\t\tcanvas.style[key] = value;\r\n\t\t});\r\n\r\n\t\t// The canvas render size might have been changed (and thus the state stack discarded),\r\n\t\t// we can't use save() and restore() to restore the initial state. So make sure that at\r\n\t\t// least the canvas context is reset to the default state by setting the canvas width.\r\n\t\t// https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\r\n\t\t// eslint-disable-next-line no-self-assign\r\n\t\tcanvas.width = canvas.width;\r\n\r\n\t\tdelete canvas[EXPANDO_KEY];\r\n\t},\r\n\r\n\taddEventListener: function(chart, type, listener) {\r\n\t\tvar canvas = chart.canvas;\r\n\t\tif (type === 'resize') {\r\n\t\t\t// Note: the resize event is not supported on all browsers.\r\n\t\t\taddResizeListener(canvas, listener, chart);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar expando = listener[EXPANDO_KEY] || (listener[EXPANDO_KEY] = {});\r\n\t\tvar proxies = expando.proxies || (expando.proxies = {});\r\n\t\tvar proxy = proxies[chart.id + '_' + type] = function(event) {\r\n\t\t\tlistener(fromNativeEvent(event, chart));\r\n\t\t};\r\n\r\n\t\taddListener(canvas, type, proxy);\r\n\t},\r\n\r\n\tremoveEventListener: function(chart, type, listener) {\r\n\t\tvar canvas = chart.canvas;\r\n\t\tif (type === 'resize') {\r\n\t\t\t// Note: the resize event is not supported on all browsers.\r\n\t\t\tremoveResizeListener(canvas);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar expando = listener[EXPANDO_KEY] || {};\r\n\t\tvar proxies = expando.proxies || {};\r\n\t\tvar proxy = proxies[chart.id + '_' + type];\r\n\t\tif (!proxy) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tremoveListener(canvas, type, proxy);\r\n\t}\r\n};\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use EventTarget.addEventListener instead.\r\n * EventTarget.addEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\r\n * @function Chart.helpers.addEvent\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers$1.addEvent = addListener;\r\n\r\n/**\r\n * Provided for backward compatibility, use EventTarget.removeEventListener instead.\r\n * EventTarget.removeEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener\r\n * @function Chart.helpers.removeEvent\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers$1.removeEvent = removeListener;\n\n// @TODO Make possible to select another platform at build time.\r\nvar implementation = platform_dom$2._enabled ? platform_dom$2 : platform_basic;\r\n\r\n/**\r\n * @namespace Chart.platform\r\n * @see https://chartjs.gitbooks.io/proposals/content/Platform.html\r\n * @since 2.4.0\r\n */\r\nvar platform = helpers$1.extend({\r\n\t/**\r\n\t * @since 2.7.0\r\n\t */\r\n\tinitialize: function() {},\r\n\r\n\t/**\r\n\t * Called at chart construction time, returns a context2d instance implementing\r\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\r\n\t * @param {*} item - The native item from which to acquire context (platform specific)\r\n\t * @param {object} options - The chart options\r\n\t * @returns {CanvasRenderingContext2D} context2d instance\r\n\t */\r\n\tacquireContext: function() {},\r\n\r\n\t/**\r\n\t * Called at chart destruction time, releases any resources associated to the context\r\n\t * previously returned by the acquireContext() method.\r\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\r\n\t * @returns {boolean} true if the method succeeded, else false\r\n\t */\r\n\treleaseContext: function() {},\r\n\r\n\t/**\r\n\t * Registers the specified listener on the given chart.\r\n\t * @param {Chart} chart - Chart from which to listen for event\r\n\t * @param {string} type - The ({@link IEvent}) type to listen for\r\n\t * @param {function} listener - Receives a notification (an object that implements\r\n\t * the {@link IEvent} interface) when an event of the specified type occurs.\r\n\t */\r\n\taddEventListener: function() {},\r\n\r\n\t/**\r\n\t * Removes the specified listener previously registered with addEventListener.\r\n\t * @param {Chart} chart - Chart from which to remove the listener\r\n\t * @param {string} type - The ({@link IEvent}) type to remove\r\n\t * @param {function} listener - The listener function to remove from the event target.\r\n\t */\r\n\tremoveEventListener: function() {}\r\n\r\n}, implementation);\n\ncore_defaults._set('global', {\r\n\tplugins: {}\r\n});\r\n\r\n/**\r\n * The plugin service singleton\r\n * @namespace Chart.plugins\r\n * @since 2.1.0\r\n */\r\nvar core_plugins = {\r\n\t/**\r\n\t * Globally registered plugins.\r\n\t * @private\r\n\t */\r\n\t_plugins: [],\r\n\r\n\t/**\r\n\t * This identifier is used to invalidate the descriptors cache attached to each chart\r\n\t * when a global plugin is registered or unregistered. In this case, the cache ID is\r\n\t * incremented and descriptors are regenerated during following API calls.\r\n\t * @private\r\n\t */\r\n\t_cacheId: 0,\r\n\r\n\t/**\r\n\t * Registers the given plugin(s) if not already registered.\r\n\t * @param {IPlugin[]|IPlugin} plugins plugin instance(s).\r\n\t */\r\n\tregister: function(plugins) {\r\n\t\tvar p = this._plugins;\r\n\t\t([]).concat(plugins).forEach(function(plugin) {\r\n\t\t\tif (p.indexOf(plugin) === -1) {\r\n\t\t\t\tp.push(plugin);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._cacheId++;\r\n\t},\r\n\r\n\t/**\r\n\t * Unregisters the given plugin(s) only if registered.\r\n\t * @param {IPlugin[]|IPlugin} plugins plugin instance(s).\r\n\t */\r\n\tunregister: function(plugins) {\r\n\t\tvar p = this._plugins;\r\n\t\t([]).concat(plugins).forEach(function(plugin) {\r\n\t\t\tvar idx = p.indexOf(plugin);\r\n\t\t\tif (idx !== -1) {\r\n\t\t\t\tp.splice(idx, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._cacheId++;\r\n\t},\r\n\r\n\t/**\r\n\t * Remove all registered plugins.\r\n\t * @since 2.1.5\r\n\t */\r\n\tclear: function() {\r\n\t\tthis._plugins = [];\r\n\t\tthis._cacheId++;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the number of registered plugins?\r\n\t * @returns {number}\r\n\t * @since 2.1.5\r\n\t */\r\n\tcount: function() {\r\n\t\treturn this._plugins.length;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns all registered plugin instances.\r\n\t * @returns {IPlugin[]} array of plugin objects.\r\n\t * @since 2.1.5\r\n\t */\r\n\tgetAll: function() {\r\n\t\treturn this._plugins;\r\n\t},\r\n\r\n\t/**\r\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\r\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\r\n\t * returned value can be used, for instance, to interrupt the current action.\r\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\r\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\r\n\t * @param {Array} [args] - Extra arguments to apply to the hook call.\r\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\r\n\t */\r\n\tnotify: function(chart, hook, args) {\r\n\t\tvar descriptors = this.descriptors(chart);\r\n\t\tvar ilen = descriptors.length;\r\n\t\tvar i, descriptor, plugin, params, method;\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tdescriptor = descriptors[i];\r\n\t\t\tplugin = descriptor.plugin;\r\n\t\t\tmethod = plugin[hook];\r\n\t\t\tif (typeof method === 'function') {\r\n\t\t\t\tparams = [chart].concat(args || []);\r\n\t\t\t\tparams.push(descriptor.options);\r\n\t\t\t\tif (method.apply(plugin, params) === false) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns descriptors of enabled plugins for the given chart.\r\n\t * @returns {object[]} [{ plugin, options }]\r\n\t * @private\r\n\t */\r\n\tdescriptors: function(chart) {\r\n\t\tvar cache = chart.$plugins || (chart.$plugins = {});\r\n\t\tif (cache.id === this._cacheId) {\r\n\t\t\treturn cache.descriptors;\r\n\t\t}\r\n\r\n\t\tvar plugins = [];\r\n\t\tvar descriptors = [];\r\n\t\tvar config = (chart && chart.config) || {};\r\n\t\tvar options = (config.options && config.options.plugins) || {};\r\n\r\n\t\tthis._plugins.concat(config.plugins || []).forEach(function(plugin) {\r\n\t\t\tvar idx = plugins.indexOf(plugin);\r\n\t\t\tif (idx !== -1) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar id = plugin.id;\r\n\t\t\tvar opts = options[id];\r\n\t\t\tif (opts === false) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (opts === true) {\r\n\t\t\t\topts = helpers$1.clone(core_defaults.global.plugins[id]);\r\n\t\t\t}\r\n\r\n\t\t\tplugins.push(plugin);\r\n\t\t\tdescriptors.push({\r\n\t\t\t\tplugin: plugin,\r\n\t\t\t\toptions: opts || {}\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tcache.descriptors = descriptors;\r\n\t\tcache.id = this._cacheId;\r\n\t\treturn descriptors;\r\n\t},\r\n\r\n\t/**\r\n\t * Invalidates cache for the given chart: descriptors hold a reference on plugin option,\r\n\t * but in some cases, this reference can be changed by the user when updating options.\r\n\t * https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\r\n\t * @private\r\n\t */\r\n\t_invalidate: function(chart) {\r\n\t\tdelete chart.$plugins;\r\n\t}\r\n};\n\nvar core_scaleService = {\r\n\t// Scale registration object. Extensions can register new scale types (such as log or DB scales) and then\r\n\t// use the new chart options to grab the correct scale\r\n\tconstructors: {},\r\n\t// Use a registration function so that we can move to an ES6 map when we no longer need to support\r\n\t// old browsers\r\n\r\n\t// Scale config defaults\r\n\tdefaults: {},\r\n\tregisterScaleType: function(type, scaleConstructor, scaleDefaults) {\r\n\t\tthis.constructors[type] = scaleConstructor;\r\n\t\tthis.defaults[type] = helpers$1.clone(scaleDefaults);\r\n\t},\r\n\tgetScaleConstructor: function(type) {\r\n\t\treturn this.constructors.hasOwnProperty(type) ? this.constructors[type] : undefined;\r\n\t},\r\n\tgetScaleDefaults: function(type) {\r\n\t\t// Return the scale defaults merged with the global settings so that we always use the latest ones\r\n\t\treturn this.defaults.hasOwnProperty(type) ? helpers$1.merge(Object.create(null), [core_defaults.scale, this.defaults[type]]) : {};\r\n\t},\r\n\tupdateScaleDefaults: function(type, additions) {\r\n\t\tvar me = this;\r\n\t\tif (me.defaults.hasOwnProperty(type)) {\r\n\t\t\tme.defaults[type] = helpers$1.extend(me.defaults[type], additions);\r\n\t\t}\r\n\t},\r\n\taddScalesToLayout: function(chart) {\r\n\t\t// Adds each scale to the chart.boxes array to be sized accordingly\r\n\t\thelpers$1.each(chart.scales, function(scale) {\r\n\t\t\t// Set ILayoutItem parameters for backwards compatibility\r\n\t\t\tscale.fullWidth = scale.options.fullWidth;\r\n\t\t\tscale.position = scale.options.position;\r\n\t\t\tscale.weight = scale.options.weight;\r\n\t\t\tcore_layouts.addBox(chart, scale);\r\n\t\t});\r\n\t}\r\n};\n\nvar valueOrDefault$8 = helpers$1.valueOrDefault;\r\nvar getRtlHelper = helpers$1.rtl.getRtlAdapter;\r\n\r\ncore_defaults._set('global', {\r\n\ttooltips: {\r\n\t\tenabled: true,\r\n\t\tcustom: null,\r\n\t\tmode: 'nearest',\r\n\t\tposition: 'average',\r\n\t\tintersect: true,\r\n\t\tbackgroundColor: 'rgba(0,0,0,0.8)',\r\n\t\ttitleFontStyle: 'bold',\r\n\t\ttitleSpacing: 2,\r\n\t\ttitleMarginBottom: 6,\r\n\t\ttitleFontColor: '#fff',\r\n\t\ttitleAlign: 'left',\r\n\t\tbodySpacing: 2,\r\n\t\tbodyFontColor: '#fff',\r\n\t\tbodyAlign: 'left',\r\n\t\tfooterFontStyle: 'bold',\r\n\t\tfooterSpacing: 2,\r\n\t\tfooterMarginTop: 6,\r\n\t\tfooterFontColor: '#fff',\r\n\t\tfooterAlign: 'left',\r\n\t\tyPadding: 6,\r\n\t\txPadding: 6,\r\n\t\tcaretPadding: 2,\r\n\t\tcaretSize: 5,\r\n\t\tcornerRadius: 6,\r\n\t\tmultiKeyBackground: '#fff',\r\n\t\tdisplayColors: true,\r\n\t\tborderColor: 'rgba(0,0,0,0)',\r\n\t\tborderWidth: 0,\r\n\t\tcallbacks: {\r\n\t\t\t// Args are: (tooltipItems, data)\r\n\t\t\tbeforeTitle: helpers$1.noop,\r\n\t\t\ttitle: function(tooltipItems, data) {\r\n\t\t\t\tvar title = '';\r\n\t\t\t\tvar labels = data.labels;\r\n\t\t\t\tvar labelCount = labels ? labels.length : 0;\r\n\r\n\t\t\t\tif (tooltipItems.length > 0) {\r\n\t\t\t\t\tvar item = tooltipItems[0];\r\n\t\t\t\t\tif (item.label) {\r\n\t\t\t\t\t\ttitle = item.label;\r\n\t\t\t\t\t} else if (item.xLabel) {\r\n\t\t\t\t\t\ttitle = item.xLabel;\r\n\t\t\t\t\t} else if (labelCount > 0 && item.index < labelCount) {\r\n\t\t\t\t\t\ttitle = labels[item.index];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn title;\r\n\t\t\t},\r\n\t\t\tafterTitle: helpers$1.noop,\r\n\r\n\t\t\t// Args are: (tooltipItems, data)\r\n\t\t\tbeforeBody: helpers$1.noop,\r\n\r\n\t\t\t// Args are: (tooltipItem, data)\r\n\t\t\tbeforeLabel: helpers$1.noop,\r\n\t\t\tlabel: function(tooltipItem, data) {\r\n\t\t\t\tvar label = data.datasets[tooltipItem.datasetIndex].label || '';\r\n\r\n\t\t\t\tif (label) {\r\n\t\t\t\t\tlabel += ': ';\r\n\t\t\t\t}\r\n\t\t\t\tif (!helpers$1.isNullOrUndef(tooltipItem.value)) {\r\n\t\t\t\t\tlabel += tooltipItem.value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tlabel += tooltipItem.yLabel;\r\n\t\t\t\t}\r\n\t\t\t\treturn label;\r\n\t\t\t},\r\n\t\t\tlabelColor: function(tooltipItem, chart) {\r\n\t\t\t\tvar meta = chart.getDatasetMeta(tooltipItem.datasetIndex);\r\n\t\t\t\tvar activeElement = meta.data[tooltipItem.index];\r\n\t\t\t\tvar view = activeElement._view;\r\n\t\t\t\treturn {\r\n\t\t\t\t\tborderColor: view.borderColor,\r\n\t\t\t\t\tbackgroundColor: view.backgroundColor\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t\tlabelTextColor: function() {\r\n\t\t\t\treturn this._options.bodyFontColor;\r\n\t\t\t},\r\n\t\t\tafterLabel: helpers$1.noop,\r\n\r\n\t\t\t// Args are: (tooltipItems, data)\r\n\t\t\tafterBody: helpers$1.noop,\r\n\r\n\t\t\t// Args are: (tooltipItems, data)\r\n\t\t\tbeforeFooter: helpers$1.noop,\r\n\t\t\tfooter: helpers$1.noop,\r\n\t\t\tafterFooter: helpers$1.noop\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar positioners = {\r\n\t/**\r\n\t * Average mode places the tooltip at the average position of the elements shown\r\n\t * @function Chart.Tooltip.positioners.average\r\n\t * @param elements {ChartElement[]} the elements being displayed in the tooltip\r\n\t * @returns {object} tooltip position\r\n\t */\r\n\taverage: function(elements) {\r\n\t\tif (!elements.length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar i, len;\r\n\t\tvar x = 0;\r\n\t\tvar y = 0;\r\n\t\tvar count = 0;\r\n\r\n\t\tfor (i = 0, len = elements.length; i < len; ++i) {\r\n\t\t\tvar el = elements[i];\r\n\t\t\tif (el && el.hasValue()) {\r\n\t\t\t\tvar pos = el.tooltipPosition();\r\n\t\t\t\tx += pos.x;\r\n\t\t\t\ty += pos.y;\r\n\t\t\t\t++count;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tx: x / count,\r\n\t\t\ty: y / count\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Gets the tooltip position nearest of the item nearest to the event position\r\n\t * @function Chart.Tooltip.positioners.nearest\r\n\t * @param elements {Chart.Element[]} the tooltip elements\r\n\t * @param eventPosition {object} the position of the event in canvas coordinates\r\n\t * @returns {object} the tooltip position\r\n\t */\r\n\tnearest: function(elements, eventPosition) {\r\n\t\tvar x = eventPosition.x;\r\n\t\tvar y = eventPosition.y;\r\n\t\tvar minDistance = Number.POSITIVE_INFINITY;\r\n\t\tvar i, len, nearestElement;\r\n\r\n\t\tfor (i = 0, len = elements.length; i < len; ++i) {\r\n\t\t\tvar el = elements[i];\r\n\t\t\tif (el && el.hasValue()) {\r\n\t\t\t\tvar center = el.getCenterPoint();\r\n\t\t\t\tvar d = helpers$1.distanceBetweenPoints(eventPosition, center);\r\n\r\n\t\t\t\tif (d < minDistance) {\r\n\t\t\t\t\tminDistance = d;\r\n\t\t\t\t\tnearestElement = el;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (nearestElement) {\r\n\t\t\tvar tp = nearestElement.tooltipPosition();\r\n\t\t\tx = tp.x;\r\n\t\t\ty = tp.y;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tx: x,\r\n\t\t\ty: y\r\n\t\t};\r\n\t}\r\n};\r\n\r\n// Helper to push or concat based on if the 2nd parameter is an array or not\r\nfunction pushOrConcat(base, toPush) {\r\n\tif (toPush) {\r\n\t\tif (helpers$1.isArray(toPush)) {\r\n\t\t\t// base = base.concat(toPush);\r\n\t\t\tArray.prototype.push.apply(base, toPush);\r\n\t\t} else {\r\n\t\t\tbase.push(toPush);\r\n\t\t}\r\n\t}\r\n\r\n\treturn base;\r\n}\r\n\r\n/**\r\n * Returns array of strings split by newline\r\n * @param {string} value - The value to split by newline.\r\n * @returns {string[]} value if newline present - Returned from String split() method\r\n * @function\r\n */\r\nfunction splitNewlines(str) {\r\n\tif ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\r\n\t\treturn str.split('\\n');\r\n\t}\r\n\treturn str;\r\n}\r\n\r\n\r\n/**\r\n * Private helper to create a tooltip item model\r\n * @param element - the chart element (point, arc, bar) to create the tooltip item for\r\n * @return new tooltip item\r\n */\r\nfunction createTooltipItem(element) {\r\n\tvar xScale = element._xScale;\r\n\tvar yScale = element._yScale || element._scale; // handle radar || polarArea charts\r\n\tvar index = element._index;\r\n\tvar datasetIndex = element._datasetIndex;\r\n\tvar controller = element._chart.getDatasetMeta(datasetIndex).controller;\r\n\tvar indexScale = controller._getIndexScale();\r\n\tvar valueScale = controller._getValueScale();\r\n\r\n\treturn {\r\n\t\txLabel: xScale ? xScale.getLabelForIndex(index, datasetIndex) : '',\r\n\t\tyLabel: yScale ? yScale.getLabelForIndex(index, datasetIndex) : '',\r\n\t\tlabel: indexScale ? '' + indexScale.getLabelForIndex(index, datasetIndex) : '',\r\n\t\tvalue: valueScale ? '' + valueScale.getLabelForIndex(index, datasetIndex) : '',\r\n\t\tindex: index,\r\n\t\tdatasetIndex: datasetIndex,\r\n\t\tx: element._model.x,\r\n\t\ty: element._model.y\r\n\t};\r\n}\r\n\r\n/**\r\n * Helper to get the reset model for the tooltip\r\n * @param tooltipOpts {object} the tooltip options\r\n */\r\nfunction getBaseModel(tooltipOpts) {\r\n\tvar globalDefaults = core_defaults.global;\r\n\r\n\treturn {\r\n\t\t// Positioning\r\n\t\txPadding: tooltipOpts.xPadding,\r\n\t\tyPadding: tooltipOpts.yPadding,\r\n\t\txAlign: tooltipOpts.xAlign,\r\n\t\tyAlign: tooltipOpts.yAlign,\r\n\r\n\t\t// Drawing direction and text direction\r\n\t\trtl: tooltipOpts.rtl,\r\n\t\ttextDirection: tooltipOpts.textDirection,\r\n\r\n\t\t// Body\r\n\t\tbodyFontColor: tooltipOpts.bodyFontColor,\r\n\t\t_bodyFontFamily: valueOrDefault$8(tooltipOpts.bodyFontFamily, globalDefaults.defaultFontFamily),\r\n\t\t_bodyFontStyle: valueOrDefault$8(tooltipOpts.bodyFontStyle, globalDefaults.defaultFontStyle),\r\n\t\t_bodyAlign: tooltipOpts.bodyAlign,\r\n\t\tbodyFontSize: valueOrDefault$8(tooltipOpts.bodyFontSize, globalDefaults.defaultFontSize),\r\n\t\tbodySpacing: tooltipOpts.bodySpacing,\r\n\r\n\t\t// Title\r\n\t\ttitleFontColor: tooltipOpts.titleFontColor,\r\n\t\t_titleFontFamily: valueOrDefault$8(tooltipOpts.titleFontFamily, globalDefaults.defaultFontFamily),\r\n\t\t_titleFontStyle: valueOrDefault$8(tooltipOpts.titleFontStyle, globalDefaults.defaultFontStyle),\r\n\t\ttitleFontSize: valueOrDefault$8(tooltipOpts.titleFontSize, globalDefaults.defaultFontSize),\r\n\t\t_titleAlign: tooltipOpts.titleAlign,\r\n\t\ttitleSpacing: tooltipOpts.titleSpacing,\r\n\t\ttitleMarginBottom: tooltipOpts.titleMarginBottom,\r\n\r\n\t\t// Footer\r\n\t\tfooterFontColor: tooltipOpts.footerFontColor,\r\n\t\t_footerFontFamily: valueOrDefault$8(tooltipOpts.footerFontFamily, globalDefaults.defaultFontFamily),\r\n\t\t_footerFontStyle: valueOrDefault$8(tooltipOpts.footerFontStyle, globalDefaults.defaultFontStyle),\r\n\t\tfooterFontSize: valueOrDefault$8(tooltipOpts.footerFontSize, globalDefaults.defaultFontSize),\r\n\t\t_footerAlign: tooltipOpts.footerAlign,\r\n\t\tfooterSpacing: tooltipOpts.footerSpacing,\r\n\t\tfooterMarginTop: tooltipOpts.footerMarginTop,\r\n\r\n\t\t// Appearance\r\n\t\tcaretSize: tooltipOpts.caretSize,\r\n\t\tcornerRadius: tooltipOpts.cornerRadius,\r\n\t\tbackgroundColor: tooltipOpts.backgroundColor,\r\n\t\topacity: 0,\r\n\t\tlegendColorBackground: tooltipOpts.multiKeyBackground,\r\n\t\tdisplayColors: tooltipOpts.displayColors,\r\n\t\tborderColor: tooltipOpts.borderColor,\r\n\t\tborderWidth: tooltipOpts.borderWidth\r\n\t};\r\n}\r\n\r\n/**\r\n * Get the size of the tooltip\r\n */\r\nfunction getTooltipSize(tooltip, model) {\r\n\tvar ctx = tooltip._chart.ctx;\r\n\r\n\tvar height = model.yPadding * 2; // Tooltip Padding\r\n\tvar width = 0;\r\n\r\n\t// Count of all lines in the body\r\n\tvar body = model.body;\r\n\tvar combinedBodyLength = body.reduce(function(count, bodyItem) {\r\n\t\treturn count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;\r\n\t}, 0);\r\n\tcombinedBodyLength += model.beforeBody.length + model.afterBody.length;\r\n\r\n\tvar titleLineCount = model.title.length;\r\n\tvar footerLineCount = model.footer.length;\r\n\tvar titleFontSize = model.titleFontSize;\r\n\tvar bodyFontSize = model.bodyFontSize;\r\n\tvar footerFontSize = model.footerFontSize;\r\n\r\n\theight += titleLineCount * titleFontSize; // Title Lines\r\n\theight += titleLineCount ? (titleLineCount - 1) * model.titleSpacing : 0; // Title Line Spacing\r\n\theight += titleLineCount ? model.titleMarginBottom : 0; // Title's bottom Margin\r\n\theight += combinedBodyLength * bodyFontSize; // Body Lines\r\n\theight += combinedBodyLength ? (combinedBodyLength - 1) * model.bodySpacing : 0; // Body Line Spacing\r\n\theight += footerLineCount ? model.footerMarginTop : 0; // Footer Margin\r\n\theight += footerLineCount * (footerFontSize); // Footer Lines\r\n\theight += footerLineCount ? (footerLineCount - 1) * model.footerSpacing : 0; // Footer Line Spacing\r\n\r\n\t// Title width\r\n\tvar widthPadding = 0;\r\n\tvar maxLineWidth = function(line) {\r\n\t\twidth = Math.max(width, ctx.measureText(line).width + widthPadding);\r\n\t};\r\n\r\n\tctx.font = helpers$1.fontString(titleFontSize, model._titleFontStyle, model._titleFontFamily);\r\n\thelpers$1.each(model.title, maxLineWidth);\r\n\r\n\t// Body width\r\n\tctx.font = helpers$1.fontString(bodyFontSize, model._bodyFontStyle, model._bodyFontFamily);\r\n\thelpers$1.each(model.beforeBody.concat(model.afterBody), maxLineWidth);\r\n\r\n\t// Body lines may include some extra width due to the color box\r\n\twidthPadding = model.displayColors ? (bodyFontSize + 2) : 0;\r\n\thelpers$1.each(body, function(bodyItem) {\r\n\t\thelpers$1.each(bodyItem.before, maxLineWidth);\r\n\t\thelpers$1.each(bodyItem.lines, maxLineWidth);\r\n\t\thelpers$1.each(bodyItem.after, maxLineWidth);\r\n\t});\r\n\r\n\t// Reset back to 0\r\n\twidthPadding = 0;\r\n\r\n\t// Footer width\r\n\tctx.font = helpers$1.fontString(footerFontSize, model._footerFontStyle, model._footerFontFamily);\r\n\thelpers$1.each(model.footer, maxLineWidth);\r\n\r\n\t// Add padding\r\n\twidth += 2 * model.xPadding;\r\n\r\n\treturn {\r\n\t\twidth: width,\r\n\t\theight: height\r\n\t};\r\n}\r\n\r\n/**\r\n * Helper to get the alignment of a tooltip given the size\r\n */\r\nfunction determineAlignment(tooltip, size) {\r\n\tvar model = tooltip._model;\r\n\tvar chart = tooltip._chart;\r\n\tvar chartArea = tooltip._chart.chartArea;\r\n\tvar xAlign = 'center';\r\n\tvar yAlign = 'center';\r\n\r\n\tif (model.y < size.height) {\r\n\t\tyAlign = 'top';\r\n\t} else if (model.y > (chart.height - size.height)) {\r\n\t\tyAlign = 'bottom';\r\n\t}\r\n\r\n\tvar lf, rf; // functions to determine left, right alignment\r\n\tvar olf, orf; // functions to determine if left/right alignment causes tooltip to go outside chart\r\n\tvar yf; // function to get the y alignment if the tooltip goes outside of the left or right edges\r\n\tvar midX = (chartArea.left + chartArea.right) / 2;\r\n\tvar midY = (chartArea.top + chartArea.bottom) / 2;\r\n\r\n\tif (yAlign === 'center') {\r\n\t\tlf = function(x) {\r\n\t\t\treturn x <= midX;\r\n\t\t};\r\n\t\trf = function(x) {\r\n\t\t\treturn x > midX;\r\n\t\t};\r\n\t} else {\r\n\t\tlf = function(x) {\r\n\t\t\treturn x <= (size.width / 2);\r\n\t\t};\r\n\t\trf = function(x) {\r\n\t\t\treturn x >= (chart.width - (size.width / 2));\r\n\t\t};\r\n\t}\r\n\r\n\tolf = function(x) {\r\n\t\treturn x + size.width + model.caretSize + model.caretPadding > chart.width;\r\n\t};\r\n\torf = function(x) {\r\n\t\treturn x - size.width - model.caretSize - model.caretPadding < 0;\r\n\t};\r\n\tyf = function(y) {\r\n\t\treturn y <= midY ? 'top' : 'bottom';\r\n\t};\r\n\r\n\tif (lf(model.x)) {\r\n\t\txAlign = 'left';\r\n\r\n\t\t// Is tooltip too wide and goes over the right side of the chart.?\r\n\t\tif (olf(model.x)) {\r\n\t\t\txAlign = 'center';\r\n\t\t\tyAlign = yf(model.y);\r\n\t\t}\r\n\t} else if (rf(model.x)) {\r\n\t\txAlign = 'right';\r\n\r\n\t\t// Is tooltip too wide and goes outside left edge of canvas?\r\n\t\tif (orf(model.x)) {\r\n\t\t\txAlign = 'center';\r\n\t\t\tyAlign = yf(model.y);\r\n\t\t}\r\n\t}\r\n\r\n\tvar opts = tooltip._options;\r\n\treturn {\r\n\t\txAlign: opts.xAlign ? opts.xAlign : xAlign,\r\n\t\tyAlign: opts.yAlign ? opts.yAlign : yAlign\r\n\t};\r\n}\r\n\r\n/**\r\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\r\n */\r\nfunction getBackgroundPoint(vm, size, alignment, chart) {\r\n\t// Background Position\r\n\tvar x = vm.x;\r\n\tvar y = vm.y;\r\n\r\n\tvar caretSize = vm.caretSize;\r\n\tvar caretPadding = vm.caretPadding;\r\n\tvar cornerRadius = vm.cornerRadius;\r\n\tvar xAlign = alignment.xAlign;\r\n\tvar yAlign = alignment.yAlign;\r\n\tvar paddingAndSize = caretSize + caretPadding;\r\n\tvar radiusAndPadding = cornerRadius + caretPadding;\r\n\r\n\tif (xAlign === 'right') {\r\n\t\tx -= size.width;\r\n\t} else if (xAlign === 'center') {\r\n\t\tx -= (size.width / 2);\r\n\t\tif (x + size.width > chart.width) {\r\n\t\t\tx = chart.width - size.width;\r\n\t\t}\r\n\t\tif (x < 0) {\r\n\t\t\tx = 0;\r\n\t\t}\r\n\t}\r\n\r\n\tif (yAlign === 'top') {\r\n\t\ty += paddingAndSize;\r\n\t} else if (yAlign === 'bottom') {\r\n\t\ty -= size.height + paddingAndSize;\r\n\t} else {\r\n\t\ty -= (size.height / 2);\r\n\t}\r\n\r\n\tif (yAlign === 'center') {\r\n\t\tif (xAlign === 'left') {\r\n\t\t\tx += paddingAndSize;\r\n\t\t} else if (xAlign === 'right') {\r\n\t\t\tx -= paddingAndSize;\r\n\t\t}\r\n\t} else if (xAlign === 'left') {\r\n\t\tx -= radiusAndPadding;\r\n\t} else if (xAlign === 'right') {\r\n\t\tx += radiusAndPadding;\r\n\t}\r\n\r\n\treturn {\r\n\t\tx: x,\r\n\t\ty: y\r\n\t};\r\n}\r\n\r\nfunction getAlignedX(vm, align) {\r\n\treturn align === 'center'\r\n\t\t? vm.x + vm.width / 2\r\n\t\t: align === 'right'\r\n\t\t\t? vm.x + vm.width - vm.xPadding\r\n\t\t\t: vm.x + vm.xPadding;\r\n}\r\n\r\n/**\r\n * Helper to build before and after body lines\r\n */\r\nfunction getBeforeAfterBodyLines(callback) {\r\n\treturn pushOrConcat([], splitNewlines(callback));\r\n}\r\n\r\nvar exports$4 = core_element.extend({\r\n\tinitialize: function() {\r\n\t\tthis._model = getBaseModel(this._options);\r\n\t\tthis._lastActive = [];\r\n\t},\r\n\r\n\t// Get the title\r\n\t// Args are: (tooltipItem, data)\r\n\tgetTitle: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me._options;\r\n\t\tvar callbacks = opts.callbacks;\r\n\r\n\t\tvar beforeTitle = callbacks.beforeTitle.apply(me, arguments);\r\n\t\tvar title = callbacks.title.apply(me, arguments);\r\n\t\tvar afterTitle = callbacks.afterTitle.apply(me, arguments);\r\n\r\n\t\tvar lines = [];\r\n\t\tlines = pushOrConcat(lines, splitNewlines(beforeTitle));\r\n\t\tlines = pushOrConcat(lines, splitNewlines(title));\r\n\t\tlines = pushOrConcat(lines, splitNewlines(afterTitle));\r\n\r\n\t\treturn lines;\r\n\t},\r\n\r\n\t// Args are: (tooltipItem, data)\r\n\tgetBeforeBody: function() {\r\n\t\treturn getBeforeAfterBodyLines(this._options.callbacks.beforeBody.apply(this, arguments));\r\n\t},\r\n\r\n\t// Args are: (tooltipItem, data)\r\n\tgetBody: function(tooltipItems, data) {\r\n\t\tvar me = this;\r\n\t\tvar callbacks = me._options.callbacks;\r\n\t\tvar bodyItems = [];\r\n\r\n\t\thelpers$1.each(tooltipItems, function(tooltipItem) {\r\n\t\t\tvar bodyItem = {\r\n\t\t\t\tbefore: [],\r\n\t\t\t\tlines: [],\r\n\t\t\t\tafter: []\r\n\t\t\t};\r\n\t\t\tpushOrConcat(bodyItem.before, splitNewlines(callbacks.beforeLabel.call(me, tooltipItem, data)));\r\n\t\t\tpushOrConcat(bodyItem.lines, callbacks.label.call(me, tooltipItem, data));\r\n\t\t\tpushOrConcat(bodyItem.after, splitNewlines(callbacks.afterLabel.call(me, tooltipItem, data)));\r\n\r\n\t\t\tbodyItems.push(bodyItem);\r\n\t\t});\r\n\r\n\t\treturn bodyItems;\r\n\t},\r\n\r\n\t// Args are: (tooltipItem, data)\r\n\tgetAfterBody: function() {\r\n\t\treturn getBeforeAfterBodyLines(this._options.callbacks.afterBody.apply(this, arguments));\r\n\t},\r\n\r\n\t// Get the footer and beforeFooter and afterFooter lines\r\n\t// Args are: (tooltipItem, data)\r\n\tgetFooter: function() {\r\n\t\tvar me = this;\r\n\t\tvar callbacks = me._options.callbacks;\r\n\r\n\t\tvar beforeFooter = callbacks.beforeFooter.apply(me, arguments);\r\n\t\tvar footer = callbacks.footer.apply(me, arguments);\r\n\t\tvar afterFooter = callbacks.afterFooter.apply(me, arguments);\r\n\r\n\t\tvar lines = [];\r\n\t\tlines = pushOrConcat(lines, splitNewlines(beforeFooter));\r\n\t\tlines = pushOrConcat(lines, splitNewlines(footer));\r\n\t\tlines = pushOrConcat(lines, splitNewlines(afterFooter));\r\n\r\n\t\treturn lines;\r\n\t},\r\n\r\n\tupdate: function(changed) {\r\n\t\tvar me = this;\r\n\t\tvar opts = me._options;\r\n\r\n\t\t// Need to regenerate the model because its faster than using extend and it is necessary due to the optimization in Chart.Element.transition\r\n\t\t// that does _view = _model if ease === 1. This causes the 2nd tooltip update to set properties in both the view and model at the same time\r\n\t\t// which breaks any animations.\r\n\t\tvar existingModel = me._model;\r\n\t\tvar model = me._model = getBaseModel(opts);\r\n\t\tvar active = me._active;\r\n\r\n\t\tvar data = me._data;\r\n\r\n\t\t// In the case where active.length === 0 we need to keep these at existing values for good animations\r\n\t\tvar alignment = {\r\n\t\t\txAlign: existingModel.xAlign,\r\n\t\t\tyAlign: existingModel.yAlign\r\n\t\t};\r\n\t\tvar backgroundPoint = {\r\n\t\t\tx: existingModel.x,\r\n\t\t\ty: existingModel.y\r\n\t\t};\r\n\t\tvar tooltipSize = {\r\n\t\t\twidth: existingModel.width,\r\n\t\t\theight: existingModel.height\r\n\t\t};\r\n\t\tvar tooltipPosition = {\r\n\t\t\tx: existingModel.caretX,\r\n\t\t\ty: existingModel.caretY\r\n\t\t};\r\n\r\n\t\tvar i, len;\r\n\r\n\t\tif (active.length) {\r\n\t\t\tmodel.opacity = 1;\r\n\r\n\t\t\tvar labelColors = [];\r\n\t\t\tvar labelTextColors = [];\r\n\t\t\ttooltipPosition = positioners[opts.position].call(me, active, me._eventPosition);\r\n\r\n\t\t\tvar tooltipItems = [];\r\n\t\t\tfor (i = 0, len = active.length; i < len; ++i) {\r\n\t\t\t\ttooltipItems.push(createTooltipItem(active[i]));\r\n\t\t\t}\r\n\r\n\t\t\t// If the user provided a filter function, use it to modify the tooltip items\r\n\t\t\tif (opts.filter) {\r\n\t\t\t\ttooltipItems = tooltipItems.filter(function(a) {\r\n\t\t\t\t\treturn opts.filter(a, data);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// If the user provided a sorting function, use it to modify the tooltip items\r\n\t\t\tif (opts.itemSort) {\r\n\t\t\t\ttooltipItems = tooltipItems.sort(function(a, b) {\r\n\t\t\t\t\treturn opts.itemSort(a, b, data);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// Determine colors for boxes\r\n\t\t\thelpers$1.each(tooltipItems, function(tooltipItem) {\r\n\t\t\t\tlabelColors.push(opts.callbacks.labelColor.call(me, tooltipItem, me._chart));\r\n\t\t\t\tlabelTextColors.push(opts.callbacks.labelTextColor.call(me, tooltipItem, me._chart));\r\n\t\t\t});\r\n\r\n\r\n\t\t\t// Build the Text Lines\r\n\t\t\tmodel.title = me.getTitle(tooltipItems, data);\r\n\t\t\tmodel.beforeBody = me.getBeforeBody(tooltipItems, data);\r\n\t\t\tmodel.body = me.getBody(tooltipItems, data);\r\n\t\t\tmodel.afterBody = me.getAfterBody(tooltipItems, data);\r\n\t\t\tmodel.footer = me.getFooter(tooltipItems, data);\r\n\r\n\t\t\t// Initial positioning and colors\r\n\t\t\tmodel.x = tooltipPosition.x;\r\n\t\t\tmodel.y = tooltipPosition.y;\r\n\t\t\tmodel.caretPadding = opts.caretPadding;\r\n\t\t\tmodel.labelColors = labelColors;\r\n\t\t\tmodel.labelTextColors = labelTextColors;\r\n\r\n\t\t\t// data points\r\n\t\t\tmodel.dataPoints = tooltipItems;\r\n\r\n\t\t\t// We need to determine alignment of the tooltip\r\n\t\t\ttooltipSize = getTooltipSize(this, model);\r\n\t\t\talignment = determineAlignment(this, tooltipSize);\r\n\t\t\t// Final Size and Position\r\n\t\t\tbackgroundPoint = getBackgroundPoint(model, tooltipSize, alignment, me._chart);\r\n\t\t} else {\r\n\t\t\tmodel.opacity = 0;\r\n\t\t}\r\n\r\n\t\tmodel.xAlign = alignment.xAlign;\r\n\t\tmodel.yAlign = alignment.yAlign;\r\n\t\tmodel.x = backgroundPoint.x;\r\n\t\tmodel.y = backgroundPoint.y;\r\n\t\tmodel.width = tooltipSize.width;\r\n\t\tmodel.height = tooltipSize.height;\r\n\r\n\t\t// Point where the caret on the tooltip points to\r\n\t\tmodel.caretX = tooltipPosition.x;\r\n\t\tmodel.caretY = tooltipPosition.y;\r\n\r\n\t\tme._model = model;\r\n\r\n\t\tif (changed && opts.custom) {\r\n\t\t\topts.custom.call(me, model);\r\n\t\t}\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\tdrawCaret: function(tooltipPoint, size) {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\t\tvar caretPosition = this.getCaretPosition(tooltipPoint, size, vm);\r\n\r\n\t\tctx.lineTo(caretPosition.x1, caretPosition.y1);\r\n\t\tctx.lineTo(caretPosition.x2, caretPosition.y2);\r\n\t\tctx.lineTo(caretPosition.x3, caretPosition.y3);\r\n\t},\r\n\tgetCaretPosition: function(tooltipPoint, size, vm) {\r\n\t\tvar x1, x2, x3, y1, y2, y3;\r\n\t\tvar caretSize = vm.caretSize;\r\n\t\tvar cornerRadius = vm.cornerRadius;\r\n\t\tvar xAlign = vm.xAlign;\r\n\t\tvar yAlign = vm.yAlign;\r\n\t\tvar ptX = tooltipPoint.x;\r\n\t\tvar ptY = tooltipPoint.y;\r\n\t\tvar width = size.width;\r\n\t\tvar height = size.height;\r\n\r\n\t\tif (yAlign === 'center') {\r\n\t\t\ty2 = ptY + (height / 2);\r\n\r\n\t\t\tif (xAlign === 'left') {\r\n\t\t\t\tx1 = ptX;\r\n\t\t\t\tx2 = x1 - caretSize;\r\n\t\t\t\tx3 = x1;\r\n\r\n\t\t\t\ty1 = y2 + caretSize;\r\n\t\t\t\ty3 = y2 - caretSize;\r\n\t\t\t} else {\r\n\t\t\t\tx1 = ptX + width;\r\n\t\t\t\tx2 = x1 + caretSize;\r\n\t\t\t\tx3 = x1;\r\n\r\n\t\t\t\ty1 = y2 - caretSize;\r\n\t\t\t\ty3 = y2 + caretSize;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (xAlign === 'left') {\r\n\t\t\t\tx2 = ptX + cornerRadius + (caretSize);\r\n\t\t\t\tx1 = x2 - caretSize;\r\n\t\t\t\tx3 = x2 + caretSize;\r\n\t\t\t} else if (xAlign === 'right') {\r\n\t\t\t\tx2 = ptX + width - cornerRadius - caretSize;\r\n\t\t\t\tx1 = x2 - caretSize;\r\n\t\t\t\tx3 = x2 + caretSize;\r\n\t\t\t} else {\r\n\t\t\t\tx2 = vm.caretX;\r\n\t\t\t\tx1 = x2 - caretSize;\r\n\t\t\t\tx3 = x2 + caretSize;\r\n\t\t\t}\r\n\t\t\tif (yAlign === 'top') {\r\n\t\t\t\ty1 = ptY;\r\n\t\t\t\ty2 = y1 - caretSize;\r\n\t\t\t\ty3 = y1;\r\n\t\t\t} else {\r\n\t\t\t\ty1 = ptY + height;\r\n\t\t\t\ty2 = y1 + caretSize;\r\n\t\t\t\ty3 = y1;\r\n\t\t\t\t// invert drawing order\r\n\t\t\t\tvar tmp = x3;\r\n\t\t\t\tx3 = x1;\r\n\t\t\t\tx1 = tmp;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn {x1: x1, x2: x2, x3: x3, y1: y1, y2: y2, y3: y3};\r\n\t},\r\n\r\n\tdrawTitle: function(pt, vm, ctx) {\r\n\t\tvar title = vm.title;\r\n\t\tvar length = title.length;\r\n\t\tvar titleFontSize, titleSpacing, i;\r\n\r\n\t\tif (length) {\r\n\t\t\tvar rtlHelper = getRtlHelper(vm.rtl, vm.x, vm.width);\r\n\r\n\t\t\tpt.x = getAlignedX(vm, vm._titleAlign);\r\n\r\n\t\t\tctx.textAlign = rtlHelper.textAlign(vm._titleAlign);\r\n\t\t\tctx.textBaseline = 'middle';\r\n\r\n\t\t\ttitleFontSize = vm.titleFontSize;\r\n\t\t\ttitleSpacing = vm.titleSpacing;\r\n\r\n\t\t\tctx.fillStyle = vm.titleFontColor;\r\n\t\t\tctx.font = helpers$1.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily);\r\n\r\n\t\t\tfor (i = 0; i < length; ++i) {\r\n\t\t\t\tctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFontSize / 2);\r\n\t\t\t\tpt.y += titleFontSize + titleSpacing; // Line Height and spacing\r\n\r\n\t\t\t\tif (i + 1 === length) {\r\n\t\t\t\t\tpt.y += vm.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tdrawBody: function(pt, vm, ctx) {\r\n\t\tvar bodyFontSize = vm.bodyFontSize;\r\n\t\tvar bodySpacing = vm.bodySpacing;\r\n\t\tvar bodyAlign = vm._bodyAlign;\r\n\t\tvar body = vm.body;\r\n\t\tvar drawColorBoxes = vm.displayColors;\r\n\t\tvar xLinePadding = 0;\r\n\t\tvar colorX = drawColorBoxes ? getAlignedX(vm, 'left') : 0;\r\n\r\n\t\tvar rtlHelper = getRtlHelper(vm.rtl, vm.x, vm.width);\r\n\r\n\t\tvar fillLineOfText = function(line) {\r\n\t\t\tctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyFontSize / 2);\r\n\t\t\tpt.y += bodyFontSize + bodySpacing;\r\n\t\t};\r\n\r\n\t\tvar bodyItem, textColor, labelColors, lines, i, j, ilen, jlen;\r\n\t\tvar bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\r\n\r\n\t\tctx.textAlign = bodyAlign;\r\n\t\tctx.textBaseline = 'middle';\r\n\t\tctx.font = helpers$1.fontString(bodyFontSize, vm._bodyFontStyle, vm._bodyFontFamily);\r\n\r\n\t\tpt.x = getAlignedX(vm, bodyAlignForCalculation);\r\n\r\n\t\t// Before body lines\r\n\t\tctx.fillStyle = vm.bodyFontColor;\r\n\t\thelpers$1.each(vm.beforeBody, fillLineOfText);\r\n\r\n\t\txLinePadding = drawColorBoxes && bodyAlignForCalculation !== 'right'\r\n\t\t\t? bodyAlign === 'center' ? (bodyFontSize / 2 + 1) : (bodyFontSize + 2)\r\n\t\t\t: 0;\r\n\r\n\t\t// Draw body lines now\r\n\t\tfor (i = 0, ilen = body.length; i < ilen; ++i) {\r\n\t\t\tbodyItem = body[i];\r\n\t\t\ttextColor = vm.labelTextColors[i];\r\n\t\t\tlabelColors = vm.labelColors[i];\r\n\r\n\t\t\tctx.fillStyle = textColor;\r\n\t\t\thelpers$1.each(bodyItem.before, fillLineOfText);\r\n\r\n\t\t\tlines = bodyItem.lines;\r\n\t\t\tfor (j = 0, jlen = lines.length; j < jlen; ++j) {\r\n\t\t\t\t// Draw Legend-like boxes if needed\r\n\t\t\t\tif (drawColorBoxes) {\r\n\t\t\t\t\tvar rtlColorX = rtlHelper.x(colorX);\r\n\r\n\t\t\t\t\t// Fill a white rect so that colours merge nicely if the opacity is < 1\r\n\t\t\t\t\tctx.fillStyle = vm.legendColorBackground;\r\n\t\t\t\t\tctx.fillRect(rtlHelper.leftForLtr(rtlColorX, bodyFontSize), pt.y, bodyFontSize, bodyFontSize);\r\n\r\n\t\t\t\t\t// Border\r\n\t\t\t\t\tctx.lineWidth = 1;\r\n\t\t\t\t\tctx.strokeStyle = labelColors.borderColor;\r\n\t\t\t\t\tctx.strokeRect(rtlHelper.leftForLtr(rtlColorX, bodyFontSize), pt.y, bodyFontSize, bodyFontSize);\r\n\r\n\t\t\t\t\t// Inner square\r\n\t\t\t\t\tctx.fillStyle = labelColors.backgroundColor;\r\n\t\t\t\t\tctx.fillRect(rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), bodyFontSize - 2), pt.y + 1, bodyFontSize - 2, bodyFontSize - 2);\r\n\t\t\t\t\tctx.fillStyle = textColor;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfillLineOfText(lines[j]);\r\n\t\t\t}\r\n\r\n\t\t\thelpers$1.each(bodyItem.after, fillLineOfText);\r\n\t\t}\r\n\r\n\t\t// Reset back to 0 for after body\r\n\t\txLinePadding = 0;\r\n\r\n\t\t// After body lines\r\n\t\thelpers$1.each(vm.afterBody, fillLineOfText);\r\n\t\tpt.y -= bodySpacing; // Remove last body spacing\r\n\t},\r\n\r\n\tdrawFooter: function(pt, vm, ctx) {\r\n\t\tvar footer = vm.footer;\r\n\t\tvar length = footer.length;\r\n\t\tvar footerFontSize, i;\r\n\r\n\t\tif (length) {\r\n\t\t\tvar rtlHelper = getRtlHelper(vm.rtl, vm.x, vm.width);\r\n\r\n\t\t\tpt.x = getAlignedX(vm, vm._footerAlign);\r\n\t\t\tpt.y += vm.footerMarginTop;\r\n\r\n\t\t\tctx.textAlign = rtlHelper.textAlign(vm._footerAlign);\r\n\t\t\tctx.textBaseline = 'middle';\r\n\r\n\t\t\tfooterFontSize = vm.footerFontSize;\r\n\r\n\t\t\tctx.fillStyle = vm.footerFontColor;\r\n\t\t\tctx.font = helpers$1.fontString(footerFontSize, vm._footerFontStyle, vm._footerFontFamily);\r\n\r\n\t\t\tfor (i = 0; i < length; ++i) {\r\n\t\t\t\tctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFontSize / 2);\r\n\t\t\t\tpt.y += footerFontSize + vm.footerSpacing;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tdrawBackground: function(pt, vm, ctx, tooltipSize) {\r\n\t\tctx.fillStyle = vm.backgroundColor;\r\n\t\tctx.strokeStyle = vm.borderColor;\r\n\t\tctx.lineWidth = vm.borderWidth;\r\n\t\tvar xAlign = vm.xAlign;\r\n\t\tvar yAlign = vm.yAlign;\r\n\t\tvar x = pt.x;\r\n\t\tvar y = pt.y;\r\n\t\tvar width = tooltipSize.width;\r\n\t\tvar height = tooltipSize.height;\r\n\t\tvar radius = vm.cornerRadius;\r\n\r\n\t\tctx.beginPath();\r\n\t\tctx.moveTo(x + radius, y);\r\n\t\tif (yAlign === 'top') {\r\n\t\t\tthis.drawCaret(pt, tooltipSize);\r\n\t\t}\r\n\t\tctx.lineTo(x + width - radius, y);\r\n\t\tctx.quadraticCurveTo(x + width, y, x + width, y + radius);\r\n\t\tif (yAlign === 'center' && xAlign === 'right') {\r\n\t\t\tthis.drawCaret(pt, tooltipSize);\r\n\t\t}\r\n\t\tctx.lineTo(x + width, y + height - radius);\r\n\t\tctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\r\n\t\tif (yAlign === 'bottom') {\r\n\t\t\tthis.drawCaret(pt, tooltipSize);\r\n\t\t}\r\n\t\tctx.lineTo(x + radius, y + height);\r\n\t\tctx.quadraticCurveTo(x, y + height, x, y + height - radius);\r\n\t\tif (yAlign === 'center' && xAlign === 'left') {\r\n\t\t\tthis.drawCaret(pt, tooltipSize);\r\n\t\t}\r\n\t\tctx.lineTo(x, y + radius);\r\n\t\tctx.quadraticCurveTo(x, y, x + radius, y);\r\n\t\tctx.closePath();\r\n\r\n\t\tctx.fill();\r\n\r\n\t\tif (vm.borderWidth > 0) {\r\n\t\t\tctx.stroke();\r\n\t\t}\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\r\n\t\tif (vm.opacity === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar tooltipSize = {\r\n\t\t\twidth: vm.width,\r\n\t\t\theight: vm.height\r\n\t\t};\r\n\t\tvar pt = {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y\r\n\t\t};\r\n\r\n\t\t// IE11/Edge does not like very small opacities, so snap to 0\r\n\t\tvar opacity = Math.abs(vm.opacity < 1e-3) ? 0 : vm.opacity;\r\n\r\n\t\t// Truthy/falsey value for empty tooltip\r\n\t\tvar hasTooltipContent = vm.title.length || vm.beforeBody.length || vm.body.length || vm.afterBody.length || vm.footer.length;\r\n\r\n\t\tif (this._options.enabled && hasTooltipContent) {\r\n\t\t\tctx.save();\r\n\t\t\tctx.globalAlpha = opacity;\r\n\r\n\t\t\t// Draw Background\r\n\t\t\tthis.drawBackground(pt, vm, ctx, tooltipSize);\r\n\r\n\t\t\t// Draw Title, Body, and Footer\r\n\t\t\tpt.y += vm.yPadding;\r\n\r\n\t\t\thelpers$1.rtl.overrideTextDirection(ctx, vm.textDirection);\r\n\r\n\t\t\t// Titles\r\n\t\t\tthis.drawTitle(pt, vm, ctx);\r\n\r\n\t\t\t// Body\r\n\t\t\tthis.drawBody(pt, vm, ctx);\r\n\r\n\t\t\t// Footer\r\n\t\t\tthis.drawFooter(pt, vm, ctx);\r\n\r\n\t\t\thelpers$1.rtl.restoreTextDirection(ctx, vm.textDirection);\r\n\r\n\t\t\tctx.restore();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Handle an event\r\n\t * @private\r\n\t * @param {IEvent} event - The event to handle\r\n\t * @returns {boolean} true if the tooltip changed\r\n\t */\r\n\thandleEvent: function(e) {\r\n\t\tvar me = this;\r\n\t\tvar options = me._options;\r\n\t\tvar changed = false;\r\n\r\n\t\tme._lastActive = me._lastActive || [];\r\n\r\n\t\t// Find Active Elements for tooltips\r\n\t\tif (e.type === 'mouseout') {\r\n\t\t\tme._active = [];\r\n\t\t} else {\r\n\t\t\tme._active = me._chart.getElementsAtEventForMode(e, options.mode, options);\r\n\t\t\tif (options.reverse) {\r\n\t\t\t\tme._active.reverse();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Remember Last Actives\r\n\t\tchanged = !helpers$1.arrayEquals(me._active, me._lastActive);\r\n\r\n\t\t// Only handle target event on tooltip change\r\n\t\tif (changed) {\r\n\t\t\tme._lastActive = me._active;\r\n\r\n\t\t\tif (options.enabled || options.custom) {\r\n\t\t\t\tme._eventPosition = {\r\n\t\t\t\t\tx: e.x,\r\n\t\t\t\t\ty: e.y\r\n\t\t\t\t};\r\n\r\n\t\t\t\tme.update(true);\r\n\t\t\t\tme.pivot();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn changed;\r\n\t}\r\n});\r\n\r\n/**\r\n * @namespace Chart.Tooltip.positioners\r\n */\r\nvar positioners_1 = positioners;\r\n\r\nvar core_tooltip = exports$4;\ncore_tooltip.positioners = positioners_1;\n\nvar valueOrDefault$9 = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {},\r\n\tevents: [\r\n\t\t'mousemove',\r\n\t\t'mouseout',\r\n\t\t'click',\r\n\t\t'touchstart',\r\n\t\t'touchmove'\r\n\t],\r\n\thover: {\r\n\t\tonHover: null,\r\n\t\tmode: 'nearest',\r\n\t\tintersect: true,\r\n\t\tanimationDuration: 400\r\n\t},\r\n\tonClick: null,\r\n\tmaintainAspectRatio: true,\r\n\tresponsive: true,\r\n\tresponsiveAnimationDuration: 0\r\n});\r\n\r\n/**\r\n * Recursively merge the given config objects representing the `scales` option\r\n * by incorporating scale defaults in `xAxes` and `yAxes` array items, then\r\n * returns a deep copy of the result, thus doesn't alter inputs.\r\n */\r\nfunction mergeScaleConfig(/* config objects ... */) {\r\n\treturn helpers$1.merge(Object.create(null), [].slice.call(arguments), {\r\n\t\tmerger: function(key, target, source, options) {\r\n\t\t\tif (key === 'xAxes' || key === 'yAxes') {\r\n\t\t\t\tvar slen = source[key].length;\r\n\t\t\t\tvar i, type, scale;\r\n\r\n\t\t\t\tif (!target[key]) {\r\n\t\t\t\t\ttarget[key] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (i = 0; i < slen; ++i) {\r\n\t\t\t\t\tscale = source[key][i];\r\n\t\t\t\t\ttype = valueOrDefault$9(scale.type, key === 'xAxes' ? 'category' : 'linear');\r\n\r\n\t\t\t\t\tif (i >= target[key].length) {\r\n\t\t\t\t\t\ttarget[key].push({});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!target[key][i].type || (scale.type && scale.type !== target[key][i].type)) {\r\n\t\t\t\t\t\t// new/untyped scale or type changed: let's apply the new defaults\r\n\t\t\t\t\t\t// then merge source scale to correctly overwrite the defaults.\r\n\t\t\t\t\t\thelpers$1.merge(target[key][i], [core_scaleService.getScaleDefaults(type), scale]);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// scales type are the same\r\n\t\t\t\t\t\thelpers$1.merge(target[key][i], scale);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\thelpers$1._merger(key, target, source, options);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n\r\n/**\r\n * Recursively merge the given config objects as the root options by handling\r\n * default scale options for the `scales` and `scale` properties, then returns\r\n * a deep copy of the result, thus doesn't alter inputs.\r\n */\r\nfunction mergeConfig(/* config objects ... */) {\r\n\treturn helpers$1.merge(Object.create(null), [].slice.call(arguments), {\r\n\t\tmerger: function(key, target, source, options) {\r\n\t\t\tvar tval = target[key] || Object.create(null);\r\n\t\t\tvar sval = source[key];\r\n\r\n\t\t\tif (key === 'scales') {\r\n\t\t\t\t// scale config merging is complex. Add our own function here for that\r\n\t\t\t\ttarget[key] = mergeScaleConfig(tval, sval);\r\n\t\t\t} else if (key === 'scale') {\r\n\t\t\t\t// used in polar area & radar charts since there is only one scale\r\n\t\t\t\ttarget[key] = helpers$1.merge(tval, [core_scaleService.getScaleDefaults(sval.type), sval]);\r\n\t\t\t} else {\r\n\t\t\t\thelpers$1._merger(key, target, source, options);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction initConfig(config) {\r\n\tconfig = config || Object.create(null);\r\n\r\n\t// Do NOT use mergeConfig for the data object because this method merges arrays\r\n\t// and so would change references to labels and datasets, preventing data updates.\r\n\tvar data = config.data = config.data || {};\r\n\tdata.datasets = data.datasets || [];\r\n\tdata.labels = data.labels || [];\r\n\r\n\tconfig.options = mergeConfig(\r\n\t\tcore_defaults.global,\r\n\t\tcore_defaults[config.type],\r\n\t\tconfig.options || {});\r\n\r\n\treturn config;\r\n}\r\n\r\nfunction updateConfig(chart) {\r\n\tvar newOptions = chart.options;\r\n\r\n\thelpers$1.each(chart.scales, function(scale) {\r\n\t\tcore_layouts.removeBox(chart, scale);\r\n\t});\r\n\r\n\tnewOptions = mergeConfig(\r\n\t\tcore_defaults.global,\r\n\t\tcore_defaults[chart.config.type],\r\n\t\tnewOptions);\r\n\r\n\tchart.options = chart.config.options = newOptions;\r\n\tchart.ensureScalesHaveIDs();\r\n\tchart.buildOrUpdateScales();\r\n\r\n\t// Tooltip\r\n\tchart.tooltip._options = newOptions.tooltips;\r\n\tchart.tooltip.initialize();\r\n}\r\n\r\nfunction nextAvailableScaleId(axesOpts, prefix, index) {\r\n\tvar id;\r\n\tvar hasId = function(obj) {\r\n\t\treturn obj.id === id;\r\n\t};\r\n\r\n\tdo {\r\n\t\tid = prefix + index++;\r\n\t} while (helpers$1.findIndex(axesOpts, hasId) >= 0);\r\n\r\n\treturn id;\r\n}\r\n\r\nfunction positionIsHorizontal(position) {\r\n\treturn position === 'top' || position === 'bottom';\r\n}\r\n\r\nfunction compare2Level(l1, l2) {\r\n\treturn function(a, b) {\r\n\t\treturn a[l1] === b[l1]\r\n\t\t\t? a[l2] - b[l2]\r\n\t\t\t: a[l1] - b[l1];\r\n\t};\r\n}\r\n\r\nvar Chart = function(item, config) {\r\n\tthis.construct(item, config);\r\n\treturn this;\r\n};\r\n\r\nhelpers$1.extend(Chart.prototype, /** @lends Chart */ {\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tconstruct: function(item, config) {\r\n\t\tvar me = this;\r\n\r\n\t\tconfig = initConfig(config);\r\n\r\n\t\tvar context = platform.acquireContext(item, config);\r\n\t\tvar canvas = context && context.canvas;\r\n\t\tvar height = canvas && canvas.height;\r\n\t\tvar width = canvas && canvas.width;\r\n\r\n\t\tme.id = helpers$1.uid();\r\n\t\tme.ctx = context;\r\n\t\tme.canvas = canvas;\r\n\t\tme.config = config;\r\n\t\tme.width = width;\r\n\t\tme.height = height;\r\n\t\tme.aspectRatio = height ? width / height : null;\r\n\t\tme.options = config.options;\r\n\t\tme._bufferedRender = false;\r\n\t\tme._layers = [];\r\n\r\n\t\t/**\r\n\t\t * Provided for backward compatibility, Chart and Chart.Controller have been merged,\r\n\t\t * the \"instance\" still need to be defined since it might be called from plugins.\r\n\t\t * @prop Chart#chart\r\n\t\t * @deprecated since version 2.6.0\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\tme.chart = me;\r\n\t\tme.controller = me; // chart.chart.controller #inception\r\n\r\n\t\t// Add the chart instance to the global namespace\r\n\t\tChart.instances[me.id] = me;\r\n\r\n\t\t// Define alias to the config data: `chart.data === chart.config.data`\r\n\t\tObject.defineProperty(me, 'data', {\r\n\t\t\tget: function() {\r\n\t\t\t\treturn me.config.data;\r\n\t\t\t},\r\n\t\t\tset: function(value) {\r\n\t\t\t\tme.config.data = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (!context || !canvas) {\r\n\t\t\t// The given item is not a compatible context2d element, let's return before finalizing\r\n\t\t\t// the chart initialization but after setting basic chart / controller properties that\r\n\t\t\t// can help to figure out that the chart is not valid (e.g chart.canvas !== null);\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/2807\r\n\t\t\tconsole.error(\"Failed to create chart: can't acquire context from the given item\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tme.initialize();\r\n\t\tme.update();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tinitialize: function() {\r\n\t\tvar me = this;\r\n\r\n\t\t// Before init plugin notification\r\n\t\tcore_plugins.notify(me, 'beforeInit');\r\n\r\n\t\thelpers$1.retinaScale(me, me.options.devicePixelRatio);\r\n\r\n\t\tme.bindEvents();\r\n\r\n\t\tif (me.options.responsive) {\r\n\t\t\t// Initial resize before chart draws (must be silent to preserve initial animations).\r\n\t\t\tme.resize(true);\r\n\t\t}\r\n\r\n\t\tme.initToolTip();\r\n\r\n\t\t// After init plugin notification\r\n\t\tcore_plugins.notify(me, 'afterInit');\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\tclear: function() {\r\n\t\thelpers$1.canvas.clear(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\tstop: function() {\r\n\t\t// Stops any current animation loop occurring\r\n\t\tcore_animations.cancelAnimation(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\tresize: function(silent) {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar canvas = me.canvas;\r\n\t\tvar aspectRatio = (options.maintainAspectRatio && me.aspectRatio) || null;\r\n\r\n\t\t// the canvas render width and height will be casted to integers so make sure that\r\n\t\t// the canvas display style uses the same integer values to avoid blurring effect.\r\n\r\n\t\t// Set to 0 instead of canvas.size because the size defaults to 300x150 if the element is collapsed\r\n\t\tvar newWidth = Math.max(0, Math.floor(helpers$1.getMaximumWidth(canvas)));\r\n\t\tvar newHeight = Math.max(0, Math.floor(aspectRatio ? newWidth / aspectRatio : helpers$1.getMaximumHeight(canvas)));\r\n\r\n\t\tif (me.width === newWidth && me.height === newHeight) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tcanvas.width = me.width = newWidth;\r\n\t\tcanvas.height = me.height = newHeight;\r\n\t\tcanvas.style.width = newWidth + 'px';\r\n\t\tcanvas.style.height = newHeight + 'px';\r\n\r\n\t\thelpers$1.retinaScale(me, options.devicePixelRatio);\r\n\r\n\t\tif (!silent) {\r\n\t\t\t// Notify any plugins about the resize\r\n\t\t\tvar newSize = {width: newWidth, height: newHeight};\r\n\t\t\tcore_plugins.notify(me, 'resize', [newSize]);\r\n\r\n\t\t\t// Notify of resize\r\n\t\t\tif (options.onResize) {\r\n\t\t\t\toptions.onResize(me, newSize);\r\n\t\t\t}\r\n\r\n\t\t\tme.stop();\r\n\t\t\tme.update({\r\n\t\t\t\tduration: options.responsiveAnimationDuration\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\tensureScalesHaveIDs: function() {\r\n\t\tvar options = this.options;\r\n\t\tvar scalesOptions = options.scales || {};\r\n\t\tvar scaleOptions = options.scale;\r\n\r\n\t\thelpers$1.each(scalesOptions.xAxes, function(xAxisOptions, index) {\r\n\t\t\tif (!xAxisOptions.id) {\r\n\t\t\t\txAxisOptions.id = nextAvailableScaleId(scalesOptions.xAxes, 'x-axis-', index);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\thelpers$1.each(scalesOptions.yAxes, function(yAxisOptions, index) {\r\n\t\t\tif (!yAxisOptions.id) {\r\n\t\t\t\tyAxisOptions.id = nextAvailableScaleId(scalesOptions.yAxes, 'y-axis-', index);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (scaleOptions) {\r\n\t\t\tscaleOptions.id = scaleOptions.id || 'scale';\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Builds a map of scale ID to scale object for future lookup.\r\n\t */\r\n\tbuildOrUpdateScales: function() {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar scales = me.scales || {};\r\n\t\tvar items = [];\r\n\t\tvar updated = Object.keys(scales).reduce(function(obj, id) {\r\n\t\t\tobj[id] = false;\r\n\t\t\treturn obj;\r\n\t\t}, {});\r\n\r\n\t\tif (options.scales) {\r\n\t\t\titems = items.concat(\r\n\t\t\t\t(options.scales.xAxes || []).map(function(xAxisOptions) {\r\n\t\t\t\t\treturn {options: xAxisOptions, dtype: 'category', dposition: 'bottom'};\r\n\t\t\t\t}),\r\n\t\t\t\t(options.scales.yAxes || []).map(function(yAxisOptions) {\r\n\t\t\t\t\treturn {options: yAxisOptions, dtype: 'linear', dposition: 'left'};\r\n\t\t\t\t})\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (options.scale) {\r\n\t\t\titems.push({\r\n\t\t\t\toptions: options.scale,\r\n\t\t\t\tdtype: 'radialLinear',\r\n\t\t\t\tisDefault: true,\r\n\t\t\t\tdposition: 'chartArea'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\thelpers$1.each(items, function(item) {\r\n\t\t\tvar scaleOptions = item.options;\r\n\t\t\tvar id = scaleOptions.id;\r\n\t\t\tvar scaleType = valueOrDefault$9(scaleOptions.type, item.dtype);\r\n\r\n\t\t\tif (positionIsHorizontal(scaleOptions.position) !== positionIsHorizontal(item.dposition)) {\r\n\t\t\t\tscaleOptions.position = item.dposition;\r\n\t\t\t}\r\n\r\n\t\t\tupdated[id] = true;\r\n\t\t\tvar scale = null;\r\n\t\t\tif (id in scales && scales[id].type === scaleType) {\r\n\t\t\t\tscale = scales[id];\r\n\t\t\t\tscale.options = scaleOptions;\r\n\t\t\t\tscale.ctx = me.ctx;\r\n\t\t\t\tscale.chart = me;\r\n\t\t\t} else {\r\n\t\t\t\tvar scaleClass = core_scaleService.getScaleConstructor(scaleType);\r\n\t\t\t\tif (!scaleClass) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tscale = new scaleClass({\r\n\t\t\t\t\tid: id,\r\n\t\t\t\t\ttype: scaleType,\r\n\t\t\t\t\toptions: scaleOptions,\r\n\t\t\t\t\tctx: me.ctx,\r\n\t\t\t\t\tchart: me\r\n\t\t\t\t});\r\n\t\t\t\tscales[scale.id] = scale;\r\n\t\t\t}\r\n\r\n\t\t\tscale.mergeTicksOptions();\r\n\r\n\t\t\t// TODO(SB): I think we should be able to remove this custom case (options.scale)\r\n\t\t\t// and consider it as a regular scale part of the \"scales\"\" map only! This would\r\n\t\t\t// make the logic easier and remove some useless? custom code.\r\n\t\t\tif (item.isDefault) {\r\n\t\t\t\tme.scale = scale;\r\n\t\t\t}\r\n\t\t});\r\n\t\t// clear up discarded scales\r\n\t\thelpers$1.each(updated, function(hasUpdated, id) {\r\n\t\t\tif (!hasUpdated) {\r\n\t\t\t\tdelete scales[id];\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tme.scales = scales;\r\n\r\n\t\tcore_scaleService.addScalesToLayout(this);\r\n\t},\r\n\r\n\tbuildOrUpdateControllers: function() {\r\n\t\tvar me = this;\r\n\t\tvar newControllers = [];\r\n\t\tvar datasets = me.data.datasets;\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = datasets.length; i < ilen; i++) {\r\n\t\t\tvar dataset = datasets[i];\r\n\t\t\tvar meta = me.getDatasetMeta(i);\r\n\t\t\tvar type = dataset.type || me.config.type;\r\n\r\n\t\t\tif (meta.type && meta.type !== type) {\r\n\t\t\t\tme.destroyDatasetMeta(i);\r\n\t\t\t\tmeta = me.getDatasetMeta(i);\r\n\t\t\t}\r\n\t\t\tmeta.type = type;\r\n\t\t\tmeta.order = dataset.order || 0;\r\n\t\t\tmeta.index = i;\r\n\r\n\t\t\tif (meta.controller) {\r\n\t\t\t\tmeta.controller.updateIndex(i);\r\n\t\t\t\tmeta.controller.linkScales();\r\n\t\t\t} else {\r\n\t\t\t\tvar ControllerClass = controllers[meta.type];\r\n\t\t\t\tif (ControllerClass === undefined) {\r\n\t\t\t\t\tthrow new Error('\"' + meta.type + '\" is not a chart type.');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmeta.controller = new ControllerClass(me, i);\r\n\t\t\t\tnewControllers.push(meta.controller);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn newControllers;\r\n\t},\r\n\r\n\t/**\r\n\t * Reset the elements of all datasets\r\n\t * @private\r\n\t */\r\n\tresetElements: function() {\r\n\t\tvar me = this;\r\n\t\thelpers$1.each(me.data.datasets, function(dataset, datasetIndex) {\r\n\t\t\tme.getDatasetMeta(datasetIndex).controller.reset();\r\n\t\t}, me);\r\n\t},\r\n\r\n\t/**\r\n\t* Resets the chart back to it's state before the initial animation\r\n\t*/\r\n\treset: function() {\r\n\t\tthis.resetElements();\r\n\t\tthis.tooltip.initialize();\r\n\t},\r\n\r\n\tupdate: function(config) {\r\n\t\tvar me = this;\r\n\t\tvar i, ilen;\r\n\r\n\t\tif (!config || typeof config !== 'object') {\r\n\t\t\t// backwards compatibility\r\n\t\t\tconfig = {\r\n\t\t\t\tduration: config,\r\n\t\t\t\tlazy: arguments[1]\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tupdateConfig(me);\r\n\r\n\t\t// plugins options references might have change, let's invalidate the cache\r\n\t\t// https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\r\n\t\tcore_plugins._invalidate(me);\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeUpdate') === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// In case the entire data object changed\r\n\t\tme.tooltip._data = me.data;\r\n\r\n\t\t// Make sure dataset controllers are updated and new controllers are reset\r\n\t\tvar newControllers = me.buildOrUpdateControllers();\r\n\r\n\t\t// Make sure all dataset controllers have correct meta data counts\r\n\t\tfor (i = 0, ilen = me.data.datasets.length; i < ilen; i++) {\r\n\t\t\tme.getDatasetMeta(i).controller.buildOrUpdateElements();\r\n\t\t}\r\n\r\n\t\tme.updateLayout();\r\n\r\n\t\t// Can only reset the new controllers after the scales have been updated\r\n\t\tif (me.options.animation && me.options.animation.duration) {\r\n\t\t\thelpers$1.each(newControllers, function(controller) {\r\n\t\t\t\tcontroller.reset();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tme.updateDatasets();\r\n\r\n\t\t// Need to reset tooltip in case it is displayed with elements that are removed\r\n\t\t// after update.\r\n\t\tme.tooltip.initialize();\r\n\r\n\t\t// Last active contains items that were previously in the tooltip.\r\n\t\t// When we reset the tooltip, we need to clear it\r\n\t\tme.lastActive = [];\r\n\r\n\t\t// Do this before render so that any plugins that need final scale updates can use it\r\n\t\tcore_plugins.notify(me, 'afterUpdate');\r\n\r\n\t\tme._layers.sort(compare2Level('z', '_idx'));\r\n\r\n\t\tif (me._bufferedRender) {\r\n\t\t\tme._bufferedRequest = {\r\n\t\t\t\tduration: config.duration,\r\n\t\t\t\teasing: config.easing,\r\n\t\t\t\tlazy: config.lazy\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tme.render(config);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\r\n\t * hook, in which case, plugins will not be called on `afterLayout`.\r\n\t * @private\r\n\t */\r\n\tupdateLayout: function() {\r\n\t\tvar me = this;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeLayout') === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tcore_layouts.update(this, this.width, this.height);\r\n\r\n\t\tme._layers = [];\r\n\t\thelpers$1.each(me.boxes, function(box) {\r\n\t\t\t// _configure is called twice, once in core.scale.update and once here.\r\n\t\t\t// Here the boxes are fully updated and at their final positions.\r\n\t\t\tif (box._configure) {\r\n\t\t\t\tbox._configure();\r\n\t\t\t}\r\n\t\t\tme._layers.push.apply(me._layers, box._layers());\r\n\t\t}, me);\r\n\r\n\t\tme._layers.forEach(function(item, index) {\r\n\t\t\titem._idx = index;\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * Provided for backward compatibility, use `afterLayout` instead.\r\n\t\t * @method IPlugin#afterScaleUpdate\r\n\t\t * @deprecated since version 2.5.0\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\tcore_plugins.notify(me, 'afterScaleUpdate');\r\n\t\tcore_plugins.notify(me, 'afterLayout');\r\n\t},\r\n\r\n\t/**\r\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\r\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\r\n\t * @private\r\n\t */\r\n\tupdateDatasets: function() {\r\n\t\tvar me = this;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDatasetsUpdate') === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\r\n\t\t\tme.updateDataset(i);\r\n\t\t}\r\n\r\n\t\tcore_plugins.notify(me, 'afterDatasetsUpdate');\r\n\t},\r\n\r\n\t/**\r\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\r\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\r\n\t * @private\r\n\t */\r\n\tupdateDataset: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getDatasetMeta(index);\r\n\t\tvar args = {\r\n\t\t\tmeta: meta,\r\n\t\t\tindex: index\r\n\t\t};\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDatasetUpdate', [args]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmeta.controller._update();\r\n\r\n\t\tcore_plugins.notify(me, 'afterDatasetUpdate', [args]);\r\n\t},\r\n\r\n\trender: function(config) {\r\n\t\tvar me = this;\r\n\r\n\t\tif (!config || typeof config !== 'object') {\r\n\t\t\t// backwards compatibility\r\n\t\t\tconfig = {\r\n\t\t\t\tduration: config,\r\n\t\t\t\tlazy: arguments[1]\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tvar animationOptions = me.options.animation;\r\n\t\tvar duration = valueOrDefault$9(config.duration, animationOptions && animationOptions.duration);\r\n\t\tvar lazy = config.lazy;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeRender') === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar onComplete = function(animation) {\r\n\t\t\tcore_plugins.notify(me, 'afterRender');\r\n\t\t\thelpers$1.callback(animationOptions && animationOptions.onComplete, [animation], me);\r\n\t\t};\r\n\r\n\t\tif (animationOptions && duration) {\r\n\t\t\tvar animation = new core_animation({\r\n\t\t\t\tnumSteps: duration / 16.66, // 60 fps\r\n\t\t\t\teasing: config.easing || animationOptions.easing,\r\n\r\n\t\t\t\trender: function(chart, animationObject) {\r\n\t\t\t\t\tvar easingFunction = helpers$1.easing.effects[animationObject.easing];\r\n\t\t\t\t\tvar currentStep = animationObject.currentStep;\r\n\t\t\t\t\tvar stepDecimal = currentStep / animationObject.numSteps;\r\n\r\n\t\t\t\t\tchart.draw(easingFunction(stepDecimal), stepDecimal, currentStep);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tonAnimationProgress: animationOptions.onProgress,\r\n\t\t\t\tonAnimationComplete: onComplete\r\n\t\t\t});\r\n\r\n\t\t\tcore_animations.addAnimation(me, animation, duration, lazy);\r\n\t\t} else {\r\n\t\t\tme.draw();\r\n\r\n\t\t\t// See https://github.com/chartjs/Chart.js/issues/3781\r\n\t\t\tonComplete(new core_animation({numSteps: 0, chart: me}));\r\n\t\t}\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\tdraw: function(easingValue) {\r\n\t\tvar me = this;\r\n\t\tvar i, layers;\r\n\r\n\t\tme.clear();\r\n\r\n\t\tif (helpers$1.isNullOrUndef(easingValue)) {\r\n\t\t\teasingValue = 1;\r\n\t\t}\r\n\r\n\t\tme.transition(easingValue);\r\n\r\n\t\tif (me.width <= 0 || me.height <= 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDraw', [easingValue]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Because of plugin hooks (before/afterDatasetsDraw), datasets can't\r\n\t\t// currently be part of layers. Instead, we draw\r\n\t\t// layers <= 0 before(default, backward compat), and the rest after\r\n\t\tlayers = me._layers;\r\n\t\tfor (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\r\n\t\t\tlayers[i].draw(me.chartArea);\r\n\t\t}\r\n\r\n\t\tme.drawDatasets(easingValue);\r\n\r\n\t\t// Rest of layers\r\n\t\tfor (; i < layers.length; ++i) {\r\n\t\t\tlayers[i].draw(me.chartArea);\r\n\t\t}\r\n\r\n\t\tme._drawTooltip(easingValue);\r\n\r\n\t\tcore_plugins.notify(me, 'afterDraw', [easingValue]);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\ttransition: function(easingValue) {\r\n\t\tvar me = this;\r\n\r\n\t\tfor (var i = 0, ilen = (me.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\tif (me.isDatasetVisible(i)) {\r\n\t\t\t\tme.getDatasetMeta(i).controller.transition(easingValue);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.tooltip.transition(easingValue);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getSortedDatasetMetas: function(filterVisible) {\r\n\t\tvar me = this;\r\n\t\tvar datasets = me.data.datasets || [];\r\n\t\tvar result = [];\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = datasets.length; i < ilen; ++i) {\r\n\t\t\tif (!filterVisible || me.isDatasetVisible(i)) {\r\n\t\t\t\tresult.push(me.getDatasetMeta(i));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tresult.sort(compare2Level('order', 'index'));\r\n\r\n\t\treturn result;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getSortedVisibleDatasetMetas: function() {\r\n\t\treturn this._getSortedDatasetMetas(true);\r\n\t},\r\n\r\n\t/**\r\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\r\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\r\n\t * @private\r\n\t */\r\n\tdrawDatasets: function(easingValue) {\r\n\t\tvar me = this;\r\n\t\tvar metasets, i;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDatasetsDraw', [easingValue]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmetasets = me._getSortedVisibleDatasetMetas();\r\n\t\tfor (i = metasets.length - 1; i >= 0; --i) {\r\n\t\t\tme.drawDataset(metasets[i], easingValue);\r\n\t\t}\r\n\r\n\t\tcore_plugins.notify(me, 'afterDatasetsDraw', [easingValue]);\r\n\t},\r\n\r\n\t/**\r\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\r\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\r\n\t * @private\r\n\t */\r\n\tdrawDataset: function(meta, easingValue) {\r\n\t\tvar me = this;\r\n\t\tvar args = {\r\n\t\t\tmeta: meta,\r\n\t\t\tindex: meta.index,\r\n\t\t\teasingValue: easingValue\r\n\t\t};\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDatasetDraw', [args]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmeta.controller.draw(easingValue);\r\n\r\n\t\tcore_plugins.notify(me, 'afterDatasetDraw', [args]);\r\n\t},\r\n\r\n\t/**\r\n\t * Draws tooltip unless a plugin returns `false` to the `beforeTooltipDraw`\r\n\t * hook, in which case, plugins will not be called on `afterTooltipDraw`.\r\n\t * @private\r\n\t */\r\n\t_drawTooltip: function(easingValue) {\r\n\t\tvar me = this;\r\n\t\tvar tooltip = me.tooltip;\r\n\t\tvar args = {\r\n\t\t\ttooltip: tooltip,\r\n\t\t\teasingValue: easingValue\r\n\t\t};\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeTooltipDraw', [args]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttooltip.draw();\r\n\r\n\t\tcore_plugins.notify(me, 'afterTooltipDraw', [args]);\r\n\t},\r\n\r\n\t/**\r\n\t * Get the single element that was clicked on\r\n\t * @return An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw\r\n\t */\r\n\tgetElementAtEvent: function(e) {\r\n\t\treturn core_interaction.modes.single(this, e);\r\n\t},\r\n\r\n\tgetElementsAtEvent: function(e) {\r\n\t\treturn core_interaction.modes.label(this, e, {intersect: true});\r\n\t},\r\n\r\n\tgetElementsAtXAxis: function(e) {\r\n\t\treturn core_interaction.modes['x-axis'](this, e, {intersect: true});\r\n\t},\r\n\r\n\tgetElementsAtEventForMode: function(e, mode, options) {\r\n\t\tvar method = core_interaction.modes[mode];\r\n\t\tif (typeof method === 'function') {\r\n\t\t\treturn method(this, e, options);\r\n\t\t}\r\n\r\n\t\treturn [];\r\n\t},\r\n\r\n\tgetDatasetAtEvent: function(e) {\r\n\t\treturn core_interaction.modes.dataset(this, e, {intersect: true});\r\n\t},\r\n\r\n\tgetDatasetMeta: function(datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar dataset = me.data.datasets[datasetIndex];\r\n\t\tif (!dataset._meta) {\r\n\t\t\tdataset._meta = {};\r\n\t\t}\r\n\r\n\t\tvar meta = dataset._meta[me.id];\r\n\t\tif (!meta) {\r\n\t\t\tmeta = dataset._meta[me.id] = {\r\n\t\t\t\ttype: null,\r\n\t\t\t\tdata: [],\r\n\t\t\t\tdataset: null,\r\n\t\t\t\tcontroller: null,\r\n\t\t\t\thidden: null,\t\t\t// See isDatasetVisible() comment\r\n\t\t\t\txAxisID: null,\r\n\t\t\t\tyAxisID: null,\r\n\t\t\t\torder: dataset.order || 0,\r\n\t\t\t\tindex: datasetIndex\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn meta;\r\n\t},\r\n\r\n\tgetVisibleDatasetCount: function() {\r\n\t\tvar count = 0;\r\n\t\tfor (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\r\n\t\t\tif (this.isDatasetVisible(i)) {\r\n\t\t\t\tcount++;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn count;\r\n\t},\r\n\r\n\tisDatasetVisible: function(datasetIndex) {\r\n\t\tvar meta = this.getDatasetMeta(datasetIndex);\r\n\r\n\t\t// meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\r\n\t\t// the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\r\n\t\treturn typeof meta.hidden === 'boolean' ? !meta.hidden : !this.data.datasets[datasetIndex].hidden;\r\n\t},\r\n\r\n\tgenerateLegend: function() {\r\n\t\treturn this.options.legendCallback(this);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tdestroyDatasetMeta: function(datasetIndex) {\r\n\t\tvar id = this.id;\r\n\t\tvar dataset = this.data.datasets[datasetIndex];\r\n\t\tvar meta = dataset._meta && dataset._meta[id];\r\n\r\n\t\tif (meta) {\r\n\t\t\tmeta.controller.destroy();\r\n\t\t\tdelete dataset._meta[id];\r\n\t\t}\r\n\t},\r\n\r\n\tdestroy: function() {\r\n\t\tvar me = this;\r\n\t\tvar canvas = me.canvas;\r\n\t\tvar i, ilen;\r\n\r\n\t\tme.stop();\r\n\r\n\t\t// dataset controllers need to cleanup associated data\r\n\t\tfor (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\r\n\t\t\tme.destroyDatasetMeta(i);\r\n\t\t}\r\n\r\n\t\tif (canvas) {\r\n\t\t\tme.unbindEvents();\r\n\t\t\thelpers$1.canvas.clear(me);\r\n\t\t\tplatform.releaseContext(me.ctx);\r\n\t\t\tme.canvas = null;\r\n\t\t\tme.ctx = null;\r\n\t\t}\r\n\r\n\t\tcore_plugins.notify(me, 'destroy');\r\n\r\n\t\tdelete Chart.instances[me.id];\r\n\t},\r\n\r\n\ttoBase64Image: function() {\r\n\t\treturn this.canvas.toDataURL.apply(this.canvas, arguments);\r\n\t},\r\n\r\n\tinitToolTip: function() {\r\n\t\tvar me = this;\r\n\t\tme.tooltip = new core_tooltip({\r\n\t\t\t_chart: me,\r\n\t\t\t_chartInstance: me, // deprecated, backward compatibility\r\n\t\t\t_data: me.data,\r\n\t\t\t_options: me.options.tooltips\r\n\t\t}, me);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tbindEvents: function() {\r\n\t\tvar me = this;\r\n\t\tvar listeners = me._listeners = {};\r\n\t\tvar listener = function() {\r\n\t\t\tme.eventHandler.apply(me, arguments);\r\n\t\t};\r\n\r\n\t\thelpers$1.each(me.options.events, function(type) {\r\n\t\t\tplatform.addEventListener(me, type, listener);\r\n\t\t\tlisteners[type] = listener;\r\n\t\t});\r\n\r\n\t\t// Elements used to detect size change should not be injected for non responsive charts.\r\n\t\t// See https://github.com/chartjs/Chart.js/issues/2210\r\n\t\tif (me.options.responsive) {\r\n\t\t\tlistener = function() {\r\n\t\t\t\tme.resize();\r\n\t\t\t};\r\n\r\n\t\t\tplatform.addEventListener(me, 'resize', listener);\r\n\t\t\tlisteners.resize = listener;\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tunbindEvents: function() {\r\n\t\tvar me = this;\r\n\t\tvar listeners = me._listeners;\r\n\t\tif (!listeners) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tdelete me._listeners;\r\n\t\thelpers$1.each(listeners, function(listener, type) {\r\n\t\t\tplatform.removeEventListener(me, type, listener);\r\n\t\t});\r\n\t},\r\n\r\n\tupdateHoverStyle: function(elements, mode, enabled) {\r\n\t\tvar prefix = enabled ? 'set' : 'remove';\r\n\t\tvar element, i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = elements.length; i < ilen; ++i) {\r\n\t\t\telement = elements[i];\r\n\t\t\tif (element) {\r\n\t\t\t\tthis.getDatasetMeta(element._datasetIndex).controller[prefix + 'HoverStyle'](element);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (mode === 'dataset') {\r\n\t\t\tthis.getDatasetMeta(elements[0]._datasetIndex).controller['_' + prefix + 'DatasetHoverStyle']();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\teventHandler: function(e) {\r\n\t\tvar me = this;\r\n\t\tvar tooltip = me.tooltip;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeEvent', [e]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Buffer any update calls so that renders do not occur\r\n\t\tme._bufferedRender = true;\r\n\t\tme._bufferedRequest = null;\r\n\r\n\t\tvar changed = me.handleEvent(e);\r\n\t\t// for smooth tooltip animations issue #4989\r\n\t\t// the tooltip should be the source of change\r\n\t\t// Animation check workaround:\r\n\t\t// tooltip._start will be null when tooltip isn't animating\r\n\t\tif (tooltip) {\r\n\t\t\tchanged = tooltip._start\r\n\t\t\t\t? tooltip.handleEvent(e)\r\n\t\t\t\t: changed | tooltip.handleEvent(e);\r\n\t\t}\r\n\r\n\t\tcore_plugins.notify(me, 'afterEvent', [e]);\r\n\r\n\t\tvar bufferedRequest = me._bufferedRequest;\r\n\t\tif (bufferedRequest) {\r\n\t\t\t// If we have an update that was triggered, we need to do a normal render\r\n\t\t\tme.render(bufferedRequest);\r\n\t\t} else if (changed && !me.animating) {\r\n\t\t\t// If entering, leaving, or changing elements, animate the change via pivot\r\n\t\t\tme.stop();\r\n\r\n\t\t\t// We only need to render at this point. Updating will cause scales to be\r\n\t\t\t// recomputed generating flicker & using more memory than necessary.\r\n\t\t\tme.render({\r\n\t\t\t\tduration: me.options.hover.animationDuration,\r\n\t\t\t\tlazy: true\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tme._bufferedRender = false;\r\n\t\tme._bufferedRequest = null;\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\t/**\r\n\t * Handle an event\r\n\t * @private\r\n\t * @param {IEvent} event the event to handle\r\n\t * @return {boolean} true if the chart needs to re-render\r\n\t */\r\n\thandleEvent: function(e) {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options || {};\r\n\t\tvar hoverOptions = options.hover;\r\n\t\tvar changed = false;\r\n\r\n\t\tme.lastActive = me.lastActive || [];\r\n\r\n\t\t// Find Active Elements for hover and tooltips\r\n\t\tif (e.type === 'mouseout') {\r\n\t\t\tme.active = [];\r\n\t\t} else {\r\n\t\t\tme.active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions);\r\n\t\t}\r\n\r\n\t\t// Invoke onHover hook\r\n\t\t// Need to call with native event here to not break backwards compatibility\r\n\t\thelpers$1.callback(options.onHover || options.hover.onHover, [e.native, me.active], me);\r\n\r\n\t\tif (e.type === 'mouseup' || e.type === 'click') {\r\n\t\t\tif (options.onClick) {\r\n\t\t\t\t// Use e.native here for backwards compatibility\r\n\t\t\t\toptions.onClick.call(me, e.native, me.active);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Remove styling for last active (even if it may still be active)\r\n\t\tif (me.lastActive.length) {\r\n\t\t\tme.updateHoverStyle(me.lastActive, hoverOptions.mode, false);\r\n\t\t}\r\n\r\n\t\t// Built in hover styling\r\n\t\tif (me.active.length && hoverOptions.mode) {\r\n\t\t\tme.updateHoverStyle(me.active, hoverOptions.mode, true);\r\n\t\t}\r\n\r\n\t\tchanged = !helpers$1.arrayEquals(me.active, me.lastActive);\r\n\r\n\t\t// Remember Last Actives\r\n\t\tme.lastActive = me.active;\r\n\r\n\t\treturn changed;\r\n\t}\r\n});\r\n\r\n/**\r\n * NOTE(SB) We actually don't use this container anymore but we need to keep it\r\n * for backward compatibility. Though, it can still be useful for plugins that\r\n * would need to work on multiple charts?!\r\n */\r\nChart.instances = {};\r\n\r\nvar core_controller = Chart;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart instead.\r\n * @class Chart.Controller\r\n * @deprecated since version 2.6\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nChart.Controller = Chart;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore.\r\n * @namespace Chart\r\n * @deprecated since version 2.8\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nChart.types = {};\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore.\r\n * @namespace Chart.helpers.configMerge\r\n * @deprecated since version 2.8.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers$1.configMerge = mergeConfig;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore.\r\n * @namespace Chart.helpers.scaleMerge\r\n * @deprecated since version 2.8.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers$1.scaleMerge = mergeScaleConfig;\n\nvar core_helpers = function() {\r\n\r\n\t// -- Basic js utility methods\r\n\r\n\thelpers$1.where = function(collection, filterCallback) {\r\n\t\tif (helpers$1.isArray(collection) && Array.prototype.filter) {\r\n\t\t\treturn collection.filter(filterCallback);\r\n\t\t}\r\n\t\tvar filtered = [];\r\n\r\n\t\thelpers$1.each(collection, function(item) {\r\n\t\t\tif (filterCallback(item)) {\r\n\t\t\t\tfiltered.push(item);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn filtered;\r\n\t};\r\n\thelpers$1.findIndex = Array.prototype.findIndex ?\r\n\t\tfunction(array, callback, scope) {\r\n\t\t\treturn array.findIndex(callback, scope);\r\n\t\t} :\r\n\t\tfunction(array, callback, scope) {\r\n\t\t\tscope = scope === undefined ? array : scope;\r\n\t\t\tfor (var i = 0, ilen = array.length; i < ilen; ++i) {\r\n\t\t\t\tif (callback.call(scope, array[i], i, array)) {\r\n\t\t\t\t\treturn i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn -1;\r\n\t\t};\r\n\thelpers$1.findNextWhere = function(arrayToSearch, filterCallback, startIndex) {\r\n\t\t// Default to start of the array\r\n\t\tif (helpers$1.isNullOrUndef(startIndex)) {\r\n\t\t\tstartIndex = -1;\r\n\t\t}\r\n\t\tfor (var i = startIndex + 1; i < arrayToSearch.length; i++) {\r\n\t\t\tvar currentItem = arrayToSearch[i];\r\n\t\t\tif (filterCallback(currentItem)) {\r\n\t\t\t\treturn currentItem;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\thelpers$1.findPreviousWhere = function(arrayToSearch, filterCallback, startIndex) {\r\n\t\t// Default to end of the array\r\n\t\tif (helpers$1.isNullOrUndef(startIndex)) {\r\n\t\t\tstartIndex = arrayToSearch.length;\r\n\t\t}\r\n\t\tfor (var i = startIndex - 1; i >= 0; i--) {\r\n\t\t\tvar currentItem = arrayToSearch[i];\r\n\t\t\tif (filterCallback(currentItem)) {\r\n\t\t\t\treturn currentItem;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// -- Math methods\r\n\thelpers$1.isNumber = function(n) {\r\n\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\r\n\t};\r\n\thelpers$1.almostEquals = function(x, y, epsilon) {\r\n\t\treturn Math.abs(x - y) < epsilon;\r\n\t};\r\n\thelpers$1.almostWhole = function(x, epsilon) {\r\n\t\tvar rounded = Math.round(x);\r\n\t\treturn ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\r\n\t};\r\n\thelpers$1.max = function(array) {\r\n\t\treturn array.reduce(function(max, value) {\r\n\t\t\tif (!isNaN(value)) {\r\n\t\t\t\treturn Math.max(max, value);\r\n\t\t\t}\r\n\t\t\treturn max;\r\n\t\t}, Number.NEGATIVE_INFINITY);\r\n\t};\r\n\thelpers$1.min = function(array) {\r\n\t\treturn array.reduce(function(min, value) {\r\n\t\t\tif (!isNaN(value)) {\r\n\t\t\t\treturn Math.min(min, value);\r\n\t\t\t}\r\n\t\t\treturn min;\r\n\t\t}, Number.POSITIVE_INFINITY);\r\n\t};\r\n\thelpers$1.sign = Math.sign ?\r\n\t\tfunction(x) {\r\n\t\t\treturn Math.sign(x);\r\n\t\t} :\r\n\t\tfunction(x) {\r\n\t\t\tx = +x; // convert to a number\r\n\t\t\tif (x === 0 || isNaN(x)) {\r\n\t\t\t\treturn x;\r\n\t\t\t}\r\n\t\t\treturn x > 0 ? 1 : -1;\r\n\t\t};\r\n\thelpers$1.toRadians = function(degrees) {\r\n\t\treturn degrees * (Math.PI / 180);\r\n\t};\r\n\thelpers$1.toDegrees = function(radians) {\r\n\t\treturn radians * (180 / Math.PI);\r\n\t};\r\n\r\n\t/**\r\n\t * Returns the number of decimal places\r\n\t * i.e. the number of digits after the decimal point, of the value of this Number.\r\n\t * @param {number} x - A number.\r\n\t * @returns {number} The number of decimal places.\r\n\t * @private\r\n\t */\r\n\thelpers$1._decimalPlaces = function(x) {\r\n\t\tif (!helpers$1.isFinite(x)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar e = 1;\r\n\t\tvar p = 0;\r\n\t\twhile (Math.round(x * e) / e !== x) {\r\n\t\t\te *= 10;\r\n\t\t\tp++;\r\n\t\t}\r\n\t\treturn p;\r\n\t};\r\n\r\n\t// Gets the angle from vertical upright to the point about a centre.\r\n\thelpers$1.getAngleFromPoint = function(centrePoint, anglePoint) {\r\n\t\tvar distanceFromXCenter = anglePoint.x - centrePoint.x;\r\n\t\tvar distanceFromYCenter = anglePoint.y - centrePoint.y;\r\n\t\tvar radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\r\n\r\n\t\tvar angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\r\n\r\n\t\tif (angle < (-0.5 * Math.PI)) {\r\n\t\t\tangle += 2.0 * Math.PI; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tangle: angle,\r\n\t\t\tdistance: radialDistanceFromCenter\r\n\t\t};\r\n\t};\r\n\thelpers$1.distanceBetweenPoints = function(pt1, pt2) {\r\n\t\treturn Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\r\n\t};\r\n\r\n\t/**\r\n\t * Provided for backward compatibility, not available anymore\r\n\t * @function Chart.helpers.aliasPixel\r\n\t * @deprecated since version 2.8.0\r\n\t * @todo remove at version 3\r\n\t */\r\n\thelpers$1.aliasPixel = function(pixelWidth) {\r\n\t\treturn (pixelWidth % 2 === 0) ? 0 : 0.5;\r\n\t};\r\n\r\n\t/**\r\n\t * Returns the aligned pixel value to avoid anti-aliasing blur\r\n\t * @param {Chart} chart - The chart instance.\r\n\t * @param {number} pixel - A pixel value.\r\n\t * @param {number} width - The width of the element.\r\n\t * @returns {number} The aligned pixel value.\r\n\t * @private\r\n\t */\r\n\thelpers$1._alignPixel = function(chart, pixel, width) {\r\n\t\tvar devicePixelRatio = chart.currentDevicePixelRatio;\r\n\t\tvar halfWidth = width / 2;\r\n\t\treturn Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\r\n\t};\r\n\r\n\thelpers$1.splineCurve = function(firstPoint, middlePoint, afterPoint, t) {\r\n\t\t// Props to Rob Spencer at scaled innovation for his post on splining between points\r\n\t\t// http://scaledinnovation.com/analytics/splines/aboutSplines.html\r\n\r\n\t\t// This function must also respect \"skipped\" points\r\n\r\n\t\tvar previous = firstPoint.skip ? middlePoint : firstPoint;\r\n\t\tvar current = middlePoint;\r\n\t\tvar next = afterPoint.skip ? middlePoint : afterPoint;\r\n\r\n\t\tvar d01 = Math.sqrt(Math.pow(current.x - previous.x, 2) + Math.pow(current.y - previous.y, 2));\r\n\t\tvar d12 = Math.sqrt(Math.pow(next.x - current.x, 2) + Math.pow(next.y - current.y, 2));\r\n\r\n\t\tvar s01 = d01 / (d01 + d12);\r\n\t\tvar s12 = d12 / (d01 + d12);\r\n\r\n\t\t// If all points are the same, s01 & s02 will be inf\r\n\t\ts01 = isNaN(s01) ? 0 : s01;\r\n\t\ts12 = isNaN(s12) ? 0 : s12;\r\n\r\n\t\tvar fa = t * s01; // scaling factor for triangle Ta\r\n\t\tvar fb = t * s12;\r\n\r\n\t\treturn {\r\n\t\t\tprevious: {\r\n\t\t\t\tx: current.x - fa * (next.x - previous.x),\r\n\t\t\t\ty: current.y - fa * (next.y - previous.y)\r\n\t\t\t},\r\n\t\t\tnext: {\r\n\t\t\t\tx: current.x + fb * (next.x - previous.x),\r\n\t\t\t\ty: current.y + fb * (next.y - previous.y)\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\thelpers$1.EPSILON = Number.EPSILON || 1e-14;\r\n\thelpers$1.splineCurveMonotone = function(points) {\r\n\t\t// This function calculates Bézier control points in a similar way than |splineCurve|,\r\n\t\t// but preserves monotonicity of the provided data and ensures no local extremums are added\r\n\t\t// between the dataset discrete points due to the interpolation.\r\n\t\t// See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\r\n\r\n\t\tvar pointsWithTangents = (points || []).map(function(point) {\r\n\t\t\treturn {\r\n\t\t\t\tmodel: point._model,\r\n\t\t\t\tdeltaK: 0,\r\n\t\t\t\tmK: 0\r\n\t\t\t};\r\n\t\t});\r\n\r\n\t\t// Calculate slopes (deltaK) and initialize tangents (mK)\r\n\t\tvar pointsLen = pointsWithTangents.length;\r\n\t\tvar i, pointBefore, pointCurrent, pointAfter;\r\n\t\tfor (i = 0; i < pointsLen; ++i) {\r\n\t\t\tpointCurrent = pointsWithTangents[i];\r\n\t\t\tif (pointCurrent.model.skip) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tpointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\r\n\t\t\tpointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\r\n\t\t\tif (pointAfter && !pointAfter.model.skip) {\r\n\t\t\t\tvar slopeDeltaX = (pointAfter.model.x - pointCurrent.model.x);\r\n\r\n\t\t\t\t// In the case of two points that appear at the same x pixel, slopeDeltaX is 0\r\n\t\t\t\tpointCurrent.deltaK = slopeDeltaX !== 0 ? (pointAfter.model.y - pointCurrent.model.y) / slopeDeltaX : 0;\r\n\t\t\t}\r\n\r\n\t\t\tif (!pointBefore || pointBefore.model.skip) {\r\n\t\t\t\tpointCurrent.mK = pointCurrent.deltaK;\r\n\t\t\t} else if (!pointAfter || pointAfter.model.skip) {\r\n\t\t\t\tpointCurrent.mK = pointBefore.deltaK;\r\n\t\t\t} else if (this.sign(pointBefore.deltaK) !== this.sign(pointCurrent.deltaK)) {\r\n\t\t\t\tpointCurrent.mK = 0;\r\n\t\t\t} else {\r\n\t\t\t\tpointCurrent.mK = (pointBefore.deltaK + pointCurrent.deltaK) / 2;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Adjust tangents to ensure monotonic properties\r\n\t\tvar alphaK, betaK, tauK, squaredMagnitude;\r\n\t\tfor (i = 0; i < pointsLen - 1; ++i) {\r\n\t\t\tpointCurrent = pointsWithTangents[i];\r\n\t\t\tpointAfter = pointsWithTangents[i + 1];\r\n\t\t\tif (pointCurrent.model.skip || pointAfter.model.skip) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (helpers$1.almostEquals(pointCurrent.deltaK, 0, this.EPSILON)) {\r\n\t\t\t\tpointCurrent.mK = pointAfter.mK = 0;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\talphaK = pointCurrent.mK / pointCurrent.deltaK;\r\n\t\t\tbetaK = pointAfter.mK / pointCurrent.deltaK;\r\n\t\t\tsquaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\r\n\t\t\tif (squaredMagnitude <= 9) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\ttauK = 3 / Math.sqrt(squaredMagnitude);\r\n\t\t\tpointCurrent.mK = alphaK * tauK * pointCurrent.deltaK;\r\n\t\t\tpointAfter.mK = betaK * tauK * pointCurrent.deltaK;\r\n\t\t}\r\n\r\n\t\t// Compute control points\r\n\t\tvar deltaX;\r\n\t\tfor (i = 0; i < pointsLen; ++i) {\r\n\t\t\tpointCurrent = pointsWithTangents[i];\r\n\t\t\tif (pointCurrent.model.skip) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tpointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\r\n\t\t\tpointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\r\n\t\t\tif (pointBefore && !pointBefore.model.skip) {\r\n\t\t\t\tdeltaX = (pointCurrent.model.x - pointBefore.model.x) / 3;\r\n\t\t\t\tpointCurrent.model.controlPointPreviousX = pointCurrent.model.x - deltaX;\r\n\t\t\t\tpointCurrent.model.controlPointPreviousY = pointCurrent.model.y - deltaX * pointCurrent.mK;\r\n\t\t\t}\r\n\t\t\tif (pointAfter && !pointAfter.model.skip) {\r\n\t\t\t\tdeltaX = (pointAfter.model.x - pointCurrent.model.x) / 3;\r\n\t\t\t\tpointCurrent.model.controlPointNextX = pointCurrent.model.x + deltaX;\r\n\t\t\t\tpointCurrent.model.controlPointNextY = pointCurrent.model.y + deltaX * pointCurrent.mK;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\thelpers$1.nextItem = function(collection, index, loop) {\r\n\t\tif (loop) {\r\n\t\t\treturn index >= collection.length - 1 ? collection[0] : collection[index + 1];\r\n\t\t}\r\n\t\treturn index >= collection.length - 1 ? collection[collection.length - 1] : collection[index + 1];\r\n\t};\r\n\thelpers$1.previousItem = function(collection, index, loop) {\r\n\t\tif (loop) {\r\n\t\t\treturn index <= 0 ? collection[collection.length - 1] : collection[index - 1];\r\n\t\t}\r\n\t\treturn index <= 0 ? collection[0] : collection[index - 1];\r\n\t};\r\n\t// Implementation of the nice number algorithm used in determining where axis labels will go\r\n\thelpers$1.niceNum = function(range, round) {\r\n\t\tvar exponent = Math.floor(helpers$1.log10(range));\r\n\t\tvar fraction = range / Math.pow(10, exponent);\r\n\t\tvar niceFraction;\r\n\r\n\t\tif (round) {\r\n\t\t\tif (fraction < 1.5) {\r\n\t\t\t\tniceFraction = 1;\r\n\t\t\t} else if (fraction < 3) {\r\n\t\t\t\tniceFraction = 2;\r\n\t\t\t} else if (fraction < 7) {\r\n\t\t\t\tniceFraction = 5;\r\n\t\t\t} else {\r\n\t\t\t\tniceFraction = 10;\r\n\t\t\t}\r\n\t\t} else if (fraction <= 1.0) {\r\n\t\t\tniceFraction = 1;\r\n\t\t} else if (fraction <= 2) {\r\n\t\t\tniceFraction = 2;\r\n\t\t} else if (fraction <= 5) {\r\n\t\t\tniceFraction = 5;\r\n\t\t} else {\r\n\t\t\tniceFraction = 10;\r\n\t\t}\r\n\r\n\t\treturn niceFraction * Math.pow(10, exponent);\r\n\t};\r\n\t// Request animation polyfill - https://www.paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n\thelpers$1.requestAnimFrame = (function() {\r\n\t\tif (typeof window === 'undefined') {\r\n\t\t\treturn function(callback) {\r\n\t\t\t\tcallback();\r\n\t\t\t};\r\n\t\t}\r\n\t\treturn window.requestAnimationFrame ||\r\n\t\t\twindow.webkitRequestAnimationFrame ||\r\n\t\t\twindow.mozRequestAnimationFrame ||\r\n\t\t\twindow.oRequestAnimationFrame ||\r\n\t\t\twindow.msRequestAnimationFrame ||\r\n\t\t\tfunction(callback) {\r\n\t\t\t\treturn window.setTimeout(callback, 1000 / 60);\r\n\t\t\t};\r\n\t}());\r\n\t// -- DOM methods\r\n\thelpers$1.getRelativePosition = function(evt, chart) {\r\n\t\tvar mouseX, mouseY;\r\n\t\tvar e = evt.originalEvent || evt;\r\n\t\tvar canvas = evt.target || evt.srcElement;\r\n\t\tvar boundingRect = canvas.getBoundingClientRect();\r\n\r\n\t\tvar touches = e.touches;\r\n\t\tif (touches && touches.length > 0) {\r\n\t\t\tmouseX = touches[0].clientX;\r\n\t\t\tmouseY = touches[0].clientY;\r\n\r\n\t\t} else {\r\n\t\t\tmouseX = e.clientX;\r\n\t\t\tmouseY = e.clientY;\r\n\t\t}\r\n\r\n\t\t// Scale mouse coordinates into canvas coordinates\r\n\t\t// by following the pattern laid out by 'jerryj' in the comments of\r\n\t\t// https://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/\r\n\t\tvar paddingLeft = parseFloat(helpers$1.getStyle(canvas, 'padding-left'));\r\n\t\tvar paddingTop = parseFloat(helpers$1.getStyle(canvas, 'padding-top'));\r\n\t\tvar paddingRight = parseFloat(helpers$1.getStyle(canvas, 'padding-right'));\r\n\t\tvar paddingBottom = parseFloat(helpers$1.getStyle(canvas, 'padding-bottom'));\r\n\t\tvar width = boundingRect.right - boundingRect.left - paddingLeft - paddingRight;\r\n\t\tvar height = boundingRect.bottom - boundingRect.top - paddingTop - paddingBottom;\r\n\r\n\t\t// We divide by the current device pixel ratio, because the canvas is scaled up by that amount in each direction. However\r\n\t\t// the backend model is in unscaled coordinates. Since we are going to deal with our model coordinates, we go back here\r\n\t\tmouseX = Math.round((mouseX - boundingRect.left - paddingLeft) / (width) * canvas.width / chart.currentDevicePixelRatio);\r\n\t\tmouseY = Math.round((mouseY - boundingRect.top - paddingTop) / (height) * canvas.height / chart.currentDevicePixelRatio);\r\n\r\n\t\treturn {\r\n\t\t\tx: mouseX,\r\n\t\t\ty: mouseY\r\n\t\t};\r\n\r\n\t};\r\n\r\n\t// Private helper function to convert max-width/max-height values that may be percentages into a number\r\n\tfunction parseMaxStyle(styleValue, node, parentProperty) {\r\n\t\tvar valueInPixels;\r\n\t\tif (typeof styleValue === 'string') {\r\n\t\t\tvalueInPixels = parseInt(styleValue, 10);\r\n\r\n\t\t\tif (styleValue.indexOf('%') !== -1) {\r\n\t\t\t\t// percentage * size in dimension\r\n\t\t\t\tvalueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tvalueInPixels = styleValue;\r\n\t\t}\r\n\r\n\t\treturn valueInPixels;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns if the given value contains an effective constraint.\r\n\t * @private\r\n\t */\r\n\tfunction isConstrainedValue(value) {\r\n\t\treturn value !== undefined && value !== null && value !== 'none';\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the max width or height of the given DOM node in a cross-browser compatible fashion\r\n\t * @param {HTMLElement} domNode - the node to check the constraint on\r\n\t * @param {string} maxStyle - the style that defines the maximum for the direction we are using ('max-width' / 'max-height')\r\n\t * @param {string} percentageProperty - property of parent to use when calculating width as a percentage\r\n\t * @see {@link https://www.nathanaeljones.com/blog/2013/reading-max-width-cross-browser}\r\n\t */\r\n\tfunction getConstraintDimension(domNode, maxStyle, percentageProperty) {\r\n\t\tvar view = document.defaultView;\r\n\t\tvar parentNode = helpers$1._getParentNode(domNode);\r\n\t\tvar constrainedNode = view.getComputedStyle(domNode)[maxStyle];\r\n\t\tvar constrainedContainer = view.getComputedStyle(parentNode)[maxStyle];\r\n\t\tvar hasCNode = isConstrainedValue(constrainedNode);\r\n\t\tvar hasCContainer = isConstrainedValue(constrainedContainer);\r\n\t\tvar infinity = Number.POSITIVE_INFINITY;\r\n\r\n\t\tif (hasCNode || hasCContainer) {\r\n\t\t\treturn Math.min(\r\n\t\t\t\thasCNode ? parseMaxStyle(constrainedNode, domNode, percentageProperty) : infinity,\r\n\t\t\t\thasCContainer ? parseMaxStyle(constrainedContainer, parentNode, percentageProperty) : infinity);\r\n\t\t}\r\n\r\n\t\treturn 'none';\r\n\t}\r\n\t// returns Number or undefined if no constraint\r\n\thelpers$1.getConstraintWidth = function(domNode) {\r\n\t\treturn getConstraintDimension(domNode, 'max-width', 'clientWidth');\r\n\t};\r\n\t// returns Number or undefined if no constraint\r\n\thelpers$1.getConstraintHeight = function(domNode) {\r\n\t\treturn getConstraintDimension(domNode, 'max-height', 'clientHeight');\r\n\t};\r\n\t/**\r\n\t * @private\r\n \t */\r\n\thelpers$1._calculatePadding = function(container, padding, parentDimension) {\r\n\t\tpadding = helpers$1.getStyle(container, padding);\r\n\r\n\t\treturn padding.indexOf('%') > -1 ? parentDimension * parseInt(padding, 10) / 100 : parseInt(padding, 10);\r\n\t};\r\n\t/**\r\n\t * @private\r\n\t */\r\n\thelpers$1._getParentNode = function(domNode) {\r\n\t\tvar parent = domNode.parentNode;\r\n\t\tif (parent && parent.toString() === '[object ShadowRoot]') {\r\n\t\t\tparent = parent.host;\r\n\t\t}\r\n\t\treturn parent;\r\n\t};\r\n\thelpers$1.getMaximumWidth = function(domNode) {\r\n\t\tvar container = helpers$1._getParentNode(domNode);\r\n\t\tif (!container) {\r\n\t\t\treturn domNode.clientWidth;\r\n\t\t}\r\n\r\n\t\tvar clientWidth = container.clientWidth;\r\n\t\tvar paddingLeft = helpers$1._calculatePadding(container, 'padding-left', clientWidth);\r\n\t\tvar paddingRight = helpers$1._calculatePadding(container, 'padding-right', clientWidth);\r\n\r\n\t\tvar w = clientWidth - paddingLeft - paddingRight;\r\n\t\tvar cw = helpers$1.getConstraintWidth(domNode);\r\n\t\treturn isNaN(cw) ? w : Math.min(w, cw);\r\n\t};\r\n\thelpers$1.getMaximumHeight = function(domNode) {\r\n\t\tvar container = helpers$1._getParentNode(domNode);\r\n\t\tif (!container) {\r\n\t\t\treturn domNode.clientHeight;\r\n\t\t}\r\n\r\n\t\tvar clientHeight = container.clientHeight;\r\n\t\tvar paddingTop = helpers$1._calculatePadding(container, 'padding-top', clientHeight);\r\n\t\tvar paddingBottom = helpers$1._calculatePadding(container, 'padding-bottom', clientHeight);\r\n\r\n\t\tvar h = clientHeight - paddingTop - paddingBottom;\r\n\t\tvar ch = helpers$1.getConstraintHeight(domNode);\r\n\t\treturn isNaN(ch) ? h : Math.min(h, ch);\r\n\t};\r\n\thelpers$1.getStyle = function(el, property) {\r\n\t\treturn el.currentStyle ?\r\n\t\t\tel.currentStyle[property] :\r\n\t\t\tdocument.defaultView.getComputedStyle(el, null).getPropertyValue(property);\r\n\t};\r\n\thelpers$1.retinaScale = function(chart, forceRatio) {\r\n\t\tvar pixelRatio = chart.currentDevicePixelRatio = forceRatio || (typeof window !== 'undefined' && window.devicePixelRatio) || 1;\r\n\t\tif (pixelRatio === 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar canvas = chart.canvas;\r\n\t\tvar height = chart.height;\r\n\t\tvar width = chart.width;\r\n\r\n\t\tcanvas.height = height * pixelRatio;\r\n\t\tcanvas.width = width * pixelRatio;\r\n\t\tchart.ctx.scale(pixelRatio, pixelRatio);\r\n\r\n\t\t// If no style has been set on the canvas, the render size is used as display size,\r\n\t\t// making the chart visually bigger, so let's enforce it to the \"correct\" values.\r\n\t\t// See https://github.com/chartjs/Chart.js/issues/3575\r\n\t\tif (!canvas.style.height && !canvas.style.width) {\r\n\t\t\tcanvas.style.height = height + 'px';\r\n\t\t\tcanvas.style.width = width + 'px';\r\n\t\t}\r\n\t};\r\n\t// -- Canvas methods\r\n\thelpers$1.fontString = function(pixelSize, fontStyle, fontFamily) {\r\n\t\treturn fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\r\n\t};\r\n\thelpers$1.longestText = function(ctx, font, arrayOfThings, cache) {\r\n\t\tcache = cache || {};\r\n\t\tvar data = cache.data = cache.data || {};\r\n\t\tvar gc = cache.garbageCollect = cache.garbageCollect || [];\r\n\r\n\t\tif (cache.font !== font) {\r\n\t\t\tdata = cache.data = {};\r\n\t\t\tgc = cache.garbageCollect = [];\r\n\t\t\tcache.font = font;\r\n\t\t}\r\n\r\n\t\tctx.font = font;\r\n\t\tvar longest = 0;\r\n\t\tvar ilen = arrayOfThings.length;\r\n\t\tvar i, j, jlen, thing, nestedThing;\r\n\t\tfor (i = 0; i < ilen; i++) {\r\n\t\t\tthing = arrayOfThings[i];\r\n\r\n\t\t\t// Undefined strings and arrays should not be measured\r\n\t\t\tif (thing !== undefined && thing !== null && helpers$1.isArray(thing) !== true) {\r\n\t\t\t\tlongest = helpers$1.measureText(ctx, data, gc, longest, thing);\r\n\t\t\t} else if (helpers$1.isArray(thing)) {\r\n\t\t\t\t// if it is an array lets measure each element\r\n\t\t\t\t// to do maybe simplify this function a bit so we can do this more recursively?\r\n\t\t\t\tfor (j = 0, jlen = thing.length; j < jlen; j++) {\r\n\t\t\t\t\tnestedThing = thing[j];\r\n\t\t\t\t\t// Undefined strings and arrays should not be measured\r\n\t\t\t\t\tif (nestedThing !== undefined && nestedThing !== null && !helpers$1.isArray(nestedThing)) {\r\n\t\t\t\t\t\tlongest = helpers$1.measureText(ctx, data, gc, longest, nestedThing);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar gcLen = gc.length / 2;\r\n\t\tif (gcLen > arrayOfThings.length) {\r\n\t\t\tfor (i = 0; i < gcLen; i++) {\r\n\t\t\t\tdelete data[gc[i]];\r\n\t\t\t}\r\n\t\t\tgc.splice(0, gcLen);\r\n\t\t}\r\n\t\treturn longest;\r\n\t};\r\n\thelpers$1.measureText = function(ctx, data, gc, longest, string) {\r\n\t\tvar textWidth = data[string];\r\n\t\tif (!textWidth) {\r\n\t\t\ttextWidth = data[string] = ctx.measureText(string).width;\r\n\t\t\tgc.push(string);\r\n\t\t}\r\n\t\tif (textWidth > longest) {\r\n\t\t\tlongest = textWidth;\r\n\t\t}\r\n\t\treturn longest;\r\n\t};\r\n\r\n\t/**\r\n\t * @deprecated\r\n\t */\r\n\thelpers$1.numberOfLabelLines = function(arrayOfThings) {\r\n\t\tvar numberOfLines = 1;\r\n\t\thelpers$1.each(arrayOfThings, function(thing) {\r\n\t\t\tif (helpers$1.isArray(thing)) {\r\n\t\t\t\tif (thing.length > numberOfLines) {\r\n\t\t\t\t\tnumberOfLines = thing.length;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn numberOfLines;\r\n\t};\r\n\r\n\thelpers$1.color = !chartjsColor ?\r\n\t\tfunction(value) {\r\n\t\t\tconsole.error('Color.js not found!');\r\n\t\t\treturn value;\r\n\t\t} :\r\n\t\tfunction(value) {\r\n\t\t\t/* global CanvasGradient */\r\n\t\t\tif (value instanceof CanvasGradient) {\r\n\t\t\t\tvalue = core_defaults.global.defaultColor;\r\n\t\t\t}\r\n\r\n\t\t\treturn chartjsColor(value);\r\n\t\t};\r\n\r\n\thelpers$1.getHoverColor = function(colorValue) {\r\n\t\t/* global CanvasPattern */\r\n\t\treturn (colorValue instanceof CanvasPattern || colorValue instanceof CanvasGradient) ?\r\n\t\t\tcolorValue :\r\n\t\t\thelpers$1.color(colorValue).saturate(0.5).darken(0.1).rgbString();\r\n\t};\r\n};\n\nfunction abstract() {\r\n\tthrow new Error(\r\n\t\t'This method is not implemented: either no adapter can ' +\r\n\t\t'be found or an incomplete integration was provided.'\r\n\t);\r\n}\r\n\r\n/**\r\n * Date adapter (current used by the time scale)\r\n * @namespace Chart._adapters._date\r\n * @memberof Chart._adapters\r\n * @private\r\n */\r\n\r\n/**\r\n * Currently supported unit string values.\r\n * @typedef {('millisecond'|'second'|'minute'|'hour'|'day'|'week'|'month'|'quarter'|'year')}\r\n * @memberof Chart._adapters._date\r\n * @name Unit\r\n */\r\n\r\n/**\r\n * @class\r\n */\r\nfunction DateAdapter(options) {\r\n\tthis.options = options || {};\r\n}\r\n\r\nhelpers$1.extend(DateAdapter.prototype, /** @lends DateAdapter */ {\r\n\t/**\r\n\t * Returns a map of time formats for the supported formatting units defined\r\n\t * in Unit as well as 'datetime' representing a detailed date/time string.\r\n\t * @returns {{string: string}}\r\n\t */\r\n\tformats: abstract,\r\n\r\n\t/**\r\n\t * Parses the given `value` and return the associated timestamp.\r\n\t * @param {any} value - the value to parse (usually comes from the data)\r\n\t * @param {string} [format] - the expected data format\r\n\t * @returns {(number|null)}\r\n\t * @function\r\n\t */\r\n\tparse: abstract,\r\n\r\n\t/**\r\n\t * Returns the formatted date in the specified `format` for a given `timestamp`.\r\n\t * @param {number} timestamp - the timestamp to format\r\n\t * @param {string} format - the date/time token\r\n\t * @return {string}\r\n\t * @function\r\n\t */\r\n\tformat: abstract,\r\n\r\n\t/**\r\n\t * Adds the specified `amount` of `unit` to the given `timestamp`.\r\n\t * @param {number} timestamp - the input timestamp\r\n\t * @param {number} amount - the amount to add\r\n\t * @param {Unit} unit - the unit as string\r\n\t * @return {number}\r\n\t * @function\r\n\t */\r\n\tadd: abstract,\r\n\r\n\t/**\r\n\t * Returns the number of `unit` between the given timestamps.\r\n\t * @param {number} max - the input timestamp (reference)\r\n\t * @param {number} min - the timestamp to substract\r\n\t * @param {Unit} unit - the unit as string\r\n\t * @return {number}\r\n\t * @function\r\n\t */\r\n\tdiff: abstract,\r\n\r\n\t/**\r\n\t * Returns start of `unit` for the given `timestamp`.\r\n\t * @param {number} timestamp - the input timestamp\r\n\t * @param {Unit} unit - the unit as string\r\n\t * @param {number} [weekday] - the ISO day of the week with 1 being Monday\r\n\t * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\r\n\t * @function\r\n\t */\r\n\tstartOf: abstract,\r\n\r\n\t/**\r\n\t * Returns end of `unit` for the given `timestamp`.\r\n\t * @param {number} timestamp - the input timestamp\r\n\t * @param {Unit} unit - the unit as string\r\n\t * @function\r\n\t */\r\n\tendOf: abstract,\r\n\r\n\t// DEPRECATIONS\r\n\r\n\t/**\r\n\t * Provided for backward compatibility for scale.getValueForPixel(),\r\n\t * this method should be overridden only by the moment adapter.\r\n\t * @deprecated since version 2.8.0\r\n\t * @todo remove at version 3\r\n\t * @private\r\n\t */\r\n\t_create: function(value) {\r\n\t\treturn value;\r\n\t}\r\n});\r\n\r\nDateAdapter.override = function(members) {\r\n\thelpers$1.extend(DateAdapter.prototype, members);\r\n};\r\n\r\nvar _date = DateAdapter;\n\nvar core_adapters = {\n\t_date: _date\n};\n\n/**\r\n * Namespace to hold static tick generation functions\r\n * @namespace Chart.Ticks\r\n */\r\nvar core_ticks = {\r\n\t/**\r\n\t * Namespace to hold formatters for different types of ticks\r\n\t * @namespace Chart.Ticks.formatters\r\n\t */\r\n\tformatters: {\r\n\t\t/**\r\n\t\t * Formatter for value labels\r\n\t\t * @method Chart.Ticks.formatters.values\r\n\t\t * @param value the value to display\r\n\t\t * @return {string|string[]} the label to display\r\n\t\t */\r\n\t\tvalues: function(value) {\r\n\t\t\treturn helpers$1.isArray(value) ? value : '' + value;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Formatter for linear numeric ticks\r\n\t\t * @method Chart.Ticks.formatters.linear\r\n\t\t * @param tickValue {number} the value to be formatted\r\n\t\t * @param index {number} the position of the tickValue parameter in the ticks array\r\n\t\t * @param ticks {number[]} the list of ticks being converted\r\n\t\t * @return {string} string representation of the tickValue parameter\r\n\t\t */\r\n\t\tlinear: function(tickValue, index, ticks) {\r\n\t\t\t// If we have lots of ticks, don't use the ones\r\n\t\t\tvar delta = ticks.length > 3 ? ticks[2] - ticks[1] : ticks[1] - ticks[0];\r\n\r\n\t\t\t// If we have a number like 2.5 as the delta, figure out how many decimal places we need\r\n\t\t\tif (Math.abs(delta) > 1) {\r\n\t\t\t\tif (tickValue !== Math.floor(tickValue)) {\r\n\t\t\t\t\t// not an integer\r\n\t\t\t\t\tdelta = tickValue - Math.floor(tickValue);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar logDelta = helpers$1.log10(Math.abs(delta));\r\n\t\t\tvar tickString = '';\r\n\r\n\t\t\tif (tickValue !== 0) {\r\n\t\t\t\tvar maxTick = Math.max(Math.abs(ticks[0]), Math.abs(ticks[ticks.length - 1]));\r\n\t\t\t\tif (maxTick < 1e-4) { // all ticks are small numbers; use scientific notation\r\n\t\t\t\t\tvar logTick = helpers$1.log10(Math.abs(tickValue));\r\n\t\t\t\t\tvar numExponential = Math.floor(logTick) - Math.floor(logDelta);\r\n\t\t\t\t\tnumExponential = Math.max(Math.min(numExponential, 20), 0);\r\n\t\t\t\t\ttickString = tickValue.toExponential(numExponential);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar numDecimal = -1 * Math.floor(logDelta);\r\n\t\t\t\t\tnumDecimal = Math.max(Math.min(numDecimal, 20), 0); // toFixed has a max of 20 decimal places\r\n\t\t\t\t\ttickString = tickValue.toFixed(numDecimal);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\ttickString = '0'; // never show decimal places for 0\r\n\t\t\t}\r\n\r\n\t\t\treturn tickString;\r\n\t\t},\r\n\r\n\t\tlogarithmic: function(tickValue, index, ticks) {\r\n\t\t\tvar remain = tickValue / (Math.pow(10, Math.floor(helpers$1.log10(tickValue))));\r\n\r\n\t\t\tif (tickValue === 0) {\r\n\t\t\t\treturn '0';\r\n\t\t\t} else if (remain === 1 || remain === 2 || remain === 5 || index === 0 || index === ticks.length - 1) {\r\n\t\t\t\treturn tickValue.toExponential();\r\n\t\t\t}\r\n\t\t\treturn '';\r\n\t\t}\r\n\t}\r\n};\n\nvar isArray = helpers$1.isArray;\r\nvar isNullOrUndef = helpers$1.isNullOrUndef;\r\nvar valueOrDefault$a = helpers$1.valueOrDefault;\r\nvar valueAtIndexOrDefault = helpers$1.valueAtIndexOrDefault;\r\n\r\ncore_defaults._set('scale', {\r\n\tdisplay: true,\r\n\tposition: 'left',\r\n\toffset: false,\r\n\r\n\t// grid line settings\r\n\tgridLines: {\r\n\t\tdisplay: true,\r\n\t\tcolor: 'rgba(0,0,0,0.1)',\r\n\t\tlineWidth: 1,\r\n\t\tdrawBorder: true,\r\n\t\tdrawOnChartArea: true,\r\n\t\tdrawTicks: true,\r\n\t\ttickMarkLength: 10,\r\n\t\tzeroLineWidth: 1,\r\n\t\tzeroLineColor: 'rgba(0,0,0,0.25)',\r\n\t\tzeroLineBorderDash: [],\r\n\t\tzeroLineBorderDashOffset: 0.0,\r\n\t\toffsetGridLines: false,\r\n\t\tborderDash: [],\r\n\t\tborderDashOffset: 0.0\r\n\t},\r\n\r\n\t// scale label\r\n\tscaleLabel: {\r\n\t\t// display property\r\n\t\tdisplay: false,\r\n\r\n\t\t// actual label\r\n\t\tlabelString: '',\r\n\r\n\t\t// top/bottom padding\r\n\t\tpadding: {\r\n\t\t\ttop: 4,\r\n\t\t\tbottom: 4\r\n\t\t}\r\n\t},\r\n\r\n\t// label settings\r\n\tticks: {\r\n\t\tbeginAtZero: false,\r\n\t\tminRotation: 0,\r\n\t\tmaxRotation: 50,\r\n\t\tmirror: false,\r\n\t\tpadding: 0,\r\n\t\treverse: false,\r\n\t\tdisplay: true,\r\n\t\tautoSkip: true,\r\n\t\tautoSkipPadding: 0,\r\n\t\tlabelOffset: 0,\r\n\t\t// We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\r\n\t\tcallback: core_ticks.formatters.values,\r\n\t\tminor: {},\r\n\t\tmajor: {}\r\n\t}\r\n});\r\n\r\n/** Returns a new array containing numItems from arr */\r\nfunction sample(arr, numItems) {\r\n\tvar result = [];\r\n\tvar increment = arr.length / numItems;\r\n\tvar i = 0;\r\n\tvar len = arr.length;\r\n\r\n\tfor (; i < len; i += increment) {\r\n\t\tresult.push(arr[Math.floor(i)]);\r\n\t}\r\n\treturn result;\r\n}\r\n\r\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\r\n\tvar length = scale.getTicks().length;\r\n\tvar validIndex = Math.min(index, length - 1);\r\n\tvar lineValue = scale.getPixelForTick(validIndex);\r\n\tvar start = scale._startPixel;\r\n\tvar end = scale._endPixel;\r\n\tvar epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\r\n\tvar offset;\r\n\r\n\tif (offsetGridLines) {\r\n\t\tif (length === 1) {\r\n\t\t\toffset = Math.max(lineValue - start, end - lineValue);\r\n\t\t} else if (index === 0) {\r\n\t\t\toffset = (scale.getPixelForTick(1) - lineValue) / 2;\r\n\t\t} else {\r\n\t\t\toffset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\r\n\t\t}\r\n\t\tlineValue += validIndex < index ? offset : -offset;\r\n\r\n\t\t// Return undefined if the pixel is out of the range\r\n\t\tif (lineValue < start - epsilon || lineValue > end + epsilon) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\treturn lineValue;\r\n}\r\n\r\nfunction garbageCollect(caches, length) {\r\n\thelpers$1.each(caches, function(cache) {\r\n\t\tvar gc = cache.gc;\r\n\t\tvar gcLen = gc.length / 2;\r\n\t\tvar i;\r\n\t\tif (gcLen > length) {\r\n\t\t\tfor (i = 0; i < gcLen; ++i) {\r\n\t\t\t\tdelete cache.data[gc[i]];\r\n\t\t\t}\r\n\t\t\tgc.splice(0, gcLen);\r\n\t\t}\r\n\t});\r\n}\r\n\r\n/**\r\n * Returns {width, height, offset} objects for the first, last, widest, highest tick\r\n * labels where offset indicates the anchor point offset from the top in pixels.\r\n */\r\nfunction computeLabelSizes(ctx, tickFonts, ticks, caches) {\r\n\tvar length = ticks.length;\r\n\tvar widths = [];\r\n\tvar heights = [];\r\n\tvar offsets = [];\r\n\tvar widestLabelSize = 0;\r\n\tvar highestLabelSize = 0;\r\n\tvar i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel, widest, highest;\r\n\r\n\tfor (i = 0; i < length; ++i) {\r\n\t\tlabel = ticks[i].label;\r\n\t\ttickFont = ticks[i].major ? tickFonts.major : tickFonts.minor;\r\n\t\tctx.font = fontString = tickFont.string;\r\n\t\tcache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\r\n\t\tlineHeight = tickFont.lineHeight;\r\n\t\twidth = height = 0;\r\n\t\t// Undefined labels and arrays should not be measured\r\n\t\tif (!isNullOrUndef(label) && !isArray(label)) {\r\n\t\t\twidth = helpers$1.measureText(ctx, cache.data, cache.gc, width, label);\r\n\t\t\theight = lineHeight;\r\n\t\t} else if (isArray(label)) {\r\n\t\t\t// if it is an array let's measure each element\r\n\t\t\tfor (j = 0, jlen = label.length; j < jlen; ++j) {\r\n\t\t\t\tnestedLabel = label[j];\r\n\t\t\t\t// Undefined labels and arrays should not be measured\r\n\t\t\t\tif (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\r\n\t\t\t\t\twidth = helpers$1.measureText(ctx, cache.data, cache.gc, width, nestedLabel);\r\n\t\t\t\t\theight += lineHeight;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\twidths.push(width);\r\n\t\theights.push(height);\r\n\t\toffsets.push(lineHeight / 2);\r\n\t\twidestLabelSize = Math.max(width, widestLabelSize);\r\n\t\thighestLabelSize = Math.max(height, highestLabelSize);\r\n\t}\r\n\tgarbageCollect(caches, length);\r\n\r\n\twidest = widths.indexOf(widestLabelSize);\r\n\thighest = heights.indexOf(highestLabelSize);\r\n\r\n\tfunction valueAt(idx) {\r\n\t\treturn {\r\n\t\t\twidth: widths[idx] || 0,\r\n\t\t\theight: heights[idx] || 0,\r\n\t\t\toffset: offsets[idx] || 0\r\n\t\t};\r\n\t}\r\n\r\n\treturn {\r\n\t\tfirst: valueAt(0),\r\n\t\tlast: valueAt(length - 1),\r\n\t\twidest: valueAt(widest),\r\n\t\thighest: valueAt(highest)\r\n\t};\r\n}\r\n\r\nfunction getTickMarkLength(options) {\r\n\treturn options.drawTicks ? options.tickMarkLength : 0;\r\n}\r\n\r\nfunction getScaleLabelHeight(options) {\r\n\tvar font, padding;\r\n\r\n\tif (!options.display) {\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tfont = helpers$1.options._parseFont(options);\r\n\tpadding = helpers$1.options.toPadding(options.padding);\r\n\r\n\treturn font.lineHeight + padding.height;\r\n}\r\n\r\nfunction parseFontOptions(options, nestedOpts) {\r\n\treturn helpers$1.extend(helpers$1.options._parseFont({\r\n\t\tfontFamily: valueOrDefault$a(nestedOpts.fontFamily, options.fontFamily),\r\n\t\tfontSize: valueOrDefault$a(nestedOpts.fontSize, options.fontSize),\r\n\t\tfontStyle: valueOrDefault$a(nestedOpts.fontStyle, options.fontStyle),\r\n\t\tlineHeight: valueOrDefault$a(nestedOpts.lineHeight, options.lineHeight)\r\n\t}), {\r\n\t\tcolor: helpers$1.options.resolve([nestedOpts.fontColor, options.fontColor, core_defaults.global.defaultFontColor])\r\n\t});\r\n}\r\n\r\nfunction parseTickFontOptions(options) {\r\n\tvar minor = parseFontOptions(options, options.minor);\r\n\tvar major = options.major.enabled ? parseFontOptions(options, options.major) : minor;\r\n\r\n\treturn {minor: minor, major: major};\r\n}\r\n\r\nfunction nonSkipped(ticksToFilter) {\r\n\tvar filtered = [];\r\n\tvar item, index, len;\r\n\tfor (index = 0, len = ticksToFilter.length; index < len; ++index) {\r\n\t\titem = ticksToFilter[index];\r\n\t\tif (typeof item._index !== 'undefined') {\r\n\t\t\tfiltered.push(item);\r\n\t\t}\r\n\t}\r\n\treturn filtered;\r\n}\r\n\r\nfunction getEvenSpacing(arr) {\r\n\tvar len = arr.length;\r\n\tvar i, diff;\r\n\r\n\tif (len < 2) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfor (diff = arr[0], i = 1; i < len; ++i) {\r\n\t\tif (arr[i] - arr[i - 1] !== diff) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\treturn diff;\r\n}\r\n\r\nfunction calculateSpacing(majorIndices, ticks, axisLength, ticksLimit) {\r\n\tvar evenMajorSpacing = getEvenSpacing(majorIndices);\r\n\tvar spacing = (ticks.length - 1) / ticksLimit;\r\n\tvar factors, factor, i, ilen;\r\n\r\n\t// If the major ticks are evenly spaced apart, place the minor ticks\r\n\t// so that they divide the major ticks into even chunks\r\n\tif (!evenMajorSpacing) {\r\n\t\treturn Math.max(spacing, 1);\r\n\t}\r\n\r\n\tfactors = helpers$1.math._factorize(evenMajorSpacing);\r\n\tfor (i = 0, ilen = factors.length - 1; i < ilen; i++) {\r\n\t\tfactor = factors[i];\r\n\t\tif (factor > spacing) {\r\n\t\t\treturn factor;\r\n\t\t}\r\n\t}\r\n\treturn Math.max(spacing, 1);\r\n}\r\n\r\nfunction getMajorIndices(ticks) {\r\n\tvar result = [];\r\n\tvar i, ilen;\r\n\tfor (i = 0, ilen = ticks.length; i < ilen; i++) {\r\n\t\tif (ticks[i].major) {\r\n\t\t\tresult.push(i);\r\n\t\t}\r\n\t}\r\n\treturn result;\r\n}\r\n\r\nfunction skipMajors(ticks, majorIndices, spacing) {\r\n\tvar count = 0;\r\n\tvar next = majorIndices[0];\r\n\tvar i, tick;\r\n\r\n\tspacing = Math.ceil(spacing);\r\n\tfor (i = 0; i < ticks.length; i++) {\r\n\t\ttick = ticks[i];\r\n\t\tif (i === next) {\r\n\t\t\ttick._index = i;\r\n\t\t\tcount++;\r\n\t\t\tnext = majorIndices[count * spacing];\r\n\t\t} else {\r\n\t\t\tdelete tick.label;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction skip(ticks, spacing, majorStart, majorEnd) {\r\n\tvar start = valueOrDefault$a(majorStart, 0);\r\n\tvar end = Math.min(valueOrDefault$a(majorEnd, ticks.length), ticks.length);\r\n\tvar count = 0;\r\n\tvar length, i, tick, next;\r\n\r\n\tspacing = Math.ceil(spacing);\r\n\tif (majorEnd) {\r\n\t\tlength = majorEnd - majorStart;\r\n\t\tspacing = length / Math.floor(length / spacing);\r\n\t}\r\n\r\n\tnext = start;\r\n\r\n\twhile (next < 0) {\r\n\t\tcount++;\r\n\t\tnext = Math.round(start + count * spacing);\r\n\t}\r\n\r\n\tfor (i = Math.max(start, 0); i < end; i++) {\r\n\t\ttick = ticks[i];\r\n\t\tif (i === next) {\r\n\t\t\ttick._index = i;\r\n\t\t\tcount++;\r\n\t\t\tnext = Math.round(start + count * spacing);\r\n\t\t} else {\r\n\t\t\tdelete tick.label;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nvar Scale = core_element.extend({\r\n\r\n\tzeroLineIndex: 0,\r\n\r\n\t/**\r\n\t * Get the padding needed for the scale\r\n\t * @method getPadding\r\n\t * @private\r\n\t * @returns {Padding} the necessary padding\r\n\t */\r\n\tgetPadding: function() {\r\n\t\tvar me = this;\r\n\t\treturn {\r\n\t\t\tleft: me.paddingLeft || 0,\r\n\t\t\ttop: me.paddingTop || 0,\r\n\t\t\tright: me.paddingRight || 0,\r\n\t\t\tbottom: me.paddingBottom || 0\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the scale tick objects ({label, major})\r\n\t * @since 2.7\r\n\t */\r\n\tgetTicks: function() {\r\n\t\treturn this._ticks;\r\n\t},\r\n\r\n\t/**\r\n\t* @private\r\n\t*/\r\n\t_getLabels: function() {\r\n\t\tvar data = this.chart.data;\r\n\t\treturn this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\r\n\t},\r\n\r\n\t// These methods are ordered by lifecyle. Utilities then follow.\r\n\t// Any function defined here is inherited by all scale types.\r\n\t// Any function can be extended by the scale type\r\n\r\n\t/**\r\n\t * Provided for backward compatibility, not available anymore\r\n\t * @function Chart.Scale.mergeTicksOptions\r\n\t * @deprecated since version 2.8.0\r\n\t * @todo remove at version 3\r\n\t */\r\n\tmergeTicksOptions: function() {\r\n\t\t// noop\r\n\t},\r\n\r\n\tbeforeUpdate: function() {\r\n\t\thelpers$1.callback(this.options.beforeUpdate, [this]);\r\n\t},\r\n\r\n\t/**\r\n\t * @param {number} maxWidth - the max width in pixels\r\n\t * @param {number} maxHeight - the max height in pixels\r\n\t * @param {object} margins - the space between the edge of the other scales and edge of the chart\r\n\t *   This space comes from two sources:\r\n\t *     - padding - space that's required to show the labels at the edges of the scale\r\n\t *     - thickness of scales or legends in another orientation\r\n\t */\r\n\tupdate: function(maxWidth, maxHeight, margins) {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar sampleSize = tickOpts.sampleSize;\r\n\t\tvar i, ilen, labels, ticks, samplingEnabled;\r\n\r\n\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\r\n\t\tme.beforeUpdate();\r\n\r\n\t\t// Absorb the master measurements\r\n\t\tme.maxWidth = maxWidth;\r\n\t\tme.maxHeight = maxHeight;\r\n\t\tme.margins = helpers$1.extend({\r\n\t\t\tleft: 0,\r\n\t\t\tright: 0,\r\n\t\t\ttop: 0,\r\n\t\t\tbottom: 0\r\n\t\t}, margins);\r\n\r\n\t\tme._ticks = null;\r\n\t\tme.ticks = null;\r\n\t\tme._labelSizes = null;\r\n\t\tme._maxLabelLines = 0;\r\n\t\tme.longestLabelWidth = 0;\r\n\t\tme.longestTextCache = me.longestTextCache || {};\r\n\t\tme._gridLineItems = null;\r\n\t\tme._labelItems = null;\r\n\r\n\t\t// Dimensions\r\n\t\tme.beforeSetDimensions();\r\n\t\tme.setDimensions();\r\n\t\tme.afterSetDimensions();\r\n\r\n\t\t// Data min/max\r\n\t\tme.beforeDataLimits();\r\n\t\tme.determineDataLimits();\r\n\t\tme.afterDataLimits();\r\n\r\n\t\t// Ticks - `this.ticks` is now DEPRECATED!\r\n\t\t// Internal ticks are now stored as objects in the PRIVATE `this._ticks` member\r\n\t\t// and must not be accessed directly from outside this class. `this.ticks` being\r\n\t\t// around for long time and not marked as private, we can't change its structure\r\n\t\t// without unexpected breaking changes. If you need to access the scale ticks,\r\n\t\t// use scale.getTicks() instead.\r\n\r\n\t\tme.beforeBuildTicks();\r\n\r\n\t\t// New implementations should return an array of objects but for BACKWARD COMPAT,\r\n\t\t// we still support no return (`this.ticks` internally set by calling this method).\r\n\t\tticks = me.buildTicks() || [];\r\n\r\n\t\t// Allow modification of ticks in callback.\r\n\t\tticks = me.afterBuildTicks(ticks) || ticks;\r\n\r\n\t\t// Ensure ticks contains ticks in new tick format\r\n\t\tif ((!ticks || !ticks.length) && me.ticks) {\r\n\t\t\tticks = [];\r\n\t\t\tfor (i = 0, ilen = me.ticks.length; i < ilen; ++i) {\r\n\t\t\t\tticks.push({\r\n\t\t\t\t\tvalue: me.ticks[i],\r\n\t\t\t\t\tmajor: false\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme._ticks = ticks;\r\n\r\n\t\t// Compute tick rotation and fit using a sampled subset of labels\r\n\t\t// We generally don't need to compute the size of every single label for determining scale size\r\n\t\tsamplingEnabled = sampleSize < ticks.length;\r\n\t\tlabels = me._convertTicksToLabels(samplingEnabled ? sample(ticks, sampleSize) : ticks);\r\n\r\n\t\t// _configure is called twice, once here, once from core.controller.updateLayout.\r\n\t\t// Here we haven't been positioned yet, but dimensions are correct.\r\n\t\t// Variables set in _configure are needed for calculateTickRotation, and\r\n\t\t// it's ok that coordinates are not correct there, only dimensions matter.\r\n\t\tme._configure();\r\n\r\n\t\t// Tick Rotation\r\n\t\tme.beforeCalculateTickRotation();\r\n\t\tme.calculateTickRotation();\r\n\t\tme.afterCalculateTickRotation();\r\n\r\n\t\tme.beforeFit();\r\n\t\tme.fit();\r\n\t\tme.afterFit();\r\n\r\n\t\t// Auto-skip\r\n\t\tme._ticksToDraw = tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto') ? me._autoSkip(ticks) : ticks;\r\n\r\n\t\tif (samplingEnabled) {\r\n\t\t\t// Generate labels using all non-skipped ticks\r\n\t\t\tlabels = me._convertTicksToLabels(me._ticksToDraw);\r\n\t\t}\r\n\r\n\t\tme.ticks = labels;   // BACKWARD COMPATIBILITY\r\n\r\n\t\t// IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\r\n\r\n\t\tme.afterUpdate();\r\n\r\n\t\t// TODO(v3): remove minSize as a public property and return value from all layout boxes. It is unused\r\n\t\t// make maxWidth and maxHeight private\r\n\t\treturn me.minSize;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tvar reversePixels = me.options.ticks.reverse;\r\n\t\tvar startPixel, endPixel;\r\n\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\tstartPixel = me.left;\r\n\t\t\tendPixel = me.right;\r\n\t\t} else {\r\n\t\t\tstartPixel = me.top;\r\n\t\t\tendPixel = me.bottom;\r\n\t\t\t// by default vertical scales are from bottom to top, so pixels are reversed\r\n\t\t\treversePixels = !reversePixels;\r\n\t\t}\r\n\t\tme._startPixel = startPixel;\r\n\t\tme._endPixel = endPixel;\r\n\t\tme._reversePixels = reversePixels;\r\n\t\tme._length = endPixel - startPixel;\r\n\t},\r\n\r\n\tafterUpdate: function() {\r\n\t\thelpers$1.callback(this.options.afterUpdate, [this]);\r\n\t},\r\n\r\n\t//\r\n\r\n\tbeforeSetDimensions: function() {\r\n\t\thelpers$1.callback(this.options.beforeSetDimensions, [this]);\r\n\t},\r\n\tsetDimensions: function() {\r\n\t\tvar me = this;\r\n\t\t// Set the unconstrained dimension before label rotation\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.width = me.maxWidth;\r\n\t\t\tme.left = 0;\r\n\t\t\tme.right = me.width;\r\n\t\t} else {\r\n\t\t\tme.height = me.maxHeight;\r\n\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.top = 0;\r\n\t\t\tme.bottom = me.height;\r\n\t\t}\r\n\r\n\t\t// Reset padding\r\n\t\tme.paddingLeft = 0;\r\n\t\tme.paddingTop = 0;\r\n\t\tme.paddingRight = 0;\r\n\t\tme.paddingBottom = 0;\r\n\t},\r\n\tafterSetDimensions: function() {\r\n\t\thelpers$1.callback(this.options.afterSetDimensions, [this]);\r\n\t},\r\n\r\n\t// Data limits\r\n\tbeforeDataLimits: function() {\r\n\t\thelpers$1.callback(this.options.beforeDataLimits, [this]);\r\n\t},\r\n\tdetermineDataLimits: helpers$1.noop,\r\n\tafterDataLimits: function() {\r\n\t\thelpers$1.callback(this.options.afterDataLimits, [this]);\r\n\t},\r\n\r\n\t//\r\n\tbeforeBuildTicks: function() {\r\n\t\thelpers$1.callback(this.options.beforeBuildTicks, [this]);\r\n\t},\r\n\tbuildTicks: helpers$1.noop,\r\n\tafterBuildTicks: function(ticks) {\r\n\t\tvar me = this;\r\n\t\t// ticks is empty for old axis implementations here\r\n\t\tif (isArray(ticks) && ticks.length) {\r\n\t\t\treturn helpers$1.callback(me.options.afterBuildTicks, [me, ticks]);\r\n\t\t}\r\n\t\t// Support old implementations (that modified `this.ticks` directly in buildTicks)\r\n\t\tme.ticks = helpers$1.callback(me.options.afterBuildTicks, [me, me.ticks]) || me.ticks;\r\n\t\treturn ticks;\r\n\t},\r\n\r\n\tbeforeTickToLabelConversion: function() {\r\n\t\thelpers$1.callback(this.options.beforeTickToLabelConversion, [this]);\r\n\t},\r\n\tconvertTicksToLabels: function() {\r\n\t\tvar me = this;\r\n\t\t// Convert ticks to strings\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tme.ticks = me.ticks.map(tickOpts.userCallback || tickOpts.callback, this);\r\n\t},\r\n\tafterTickToLabelConversion: function() {\r\n\t\thelpers$1.callback(this.options.afterTickToLabelConversion, [this]);\r\n\t},\r\n\r\n\t//\r\n\r\n\tbeforeCalculateTickRotation: function() {\r\n\t\thelpers$1.callback(this.options.beforeCalculateTickRotation, [this]);\r\n\t},\r\n\tcalculateTickRotation: function() {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar tickOpts = options.ticks;\r\n\t\tvar numTicks = me.getTicks().length;\r\n\t\tvar minRotation = tickOpts.minRotation || 0;\r\n\t\tvar maxRotation = tickOpts.maxRotation;\r\n\t\tvar labelRotation = minRotation;\r\n\t\tvar labelSizes, maxLabelWidth, maxLabelHeight, maxWidth, tickWidth, maxHeight, maxLabelDiagonal;\r\n\r\n\t\tif (!me._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !me.isHorizontal()) {\r\n\t\t\tme.labelRotation = minRotation;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlabelSizes = me._getLabelSizes();\r\n\t\tmaxLabelWidth = labelSizes.widest.width;\r\n\t\tmaxLabelHeight = labelSizes.highest.height - labelSizes.highest.offset;\r\n\r\n\t\t// Estimate the width of each grid based on the canvas width, the maximum\r\n\t\t// label width and the number of tick intervals\r\n\t\tmaxWidth = Math.min(me.maxWidth, me.chart.width - maxLabelWidth);\r\n\t\ttickWidth = options.offset ? me.maxWidth / numTicks : maxWidth / (numTicks - 1);\r\n\r\n\t\t// Allow 3 pixels x2 padding either side for label readability\r\n\t\tif (maxLabelWidth + 6 > tickWidth) {\r\n\t\t\ttickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\r\n\t\t\tmaxHeight = me.maxHeight - getTickMarkLength(options.gridLines)\r\n\t\t\t\t- tickOpts.padding - getScaleLabelHeight(options.scaleLabel);\r\n\t\t\tmaxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\r\n\t\t\tlabelRotation = helpers$1.toDegrees(Math.min(\r\n\t\t\t\tMath.asin(Math.min((labelSizes.highest.height + 6) / tickWidth, 1)),\r\n\t\t\t\tMath.asin(Math.min(maxHeight / maxLabelDiagonal, 1)) - Math.asin(maxLabelHeight / maxLabelDiagonal)\r\n\t\t\t));\r\n\t\t\tlabelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\r\n\t\t}\r\n\r\n\t\tme.labelRotation = labelRotation;\r\n\t},\r\n\tafterCalculateTickRotation: function() {\r\n\t\thelpers$1.callback(this.options.afterCalculateTickRotation, [this]);\r\n\t},\r\n\r\n\t//\r\n\r\n\tbeforeFit: function() {\r\n\t\thelpers$1.callback(this.options.beforeFit, [this]);\r\n\t},\r\n\tfit: function() {\r\n\t\tvar me = this;\r\n\t\t// Reset\r\n\t\tvar minSize = me.minSize = {\r\n\t\t\twidth: 0,\r\n\t\t\theight: 0\r\n\t\t};\r\n\r\n\t\tvar chart = me.chart;\r\n\t\tvar opts = me.options;\r\n\t\tvar tickOpts = opts.ticks;\r\n\t\tvar scaleLabelOpts = opts.scaleLabel;\r\n\t\tvar gridLineOpts = opts.gridLines;\r\n\t\tvar display = me._isVisible();\r\n\t\tvar isBottom = opts.position === 'bottom';\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\r\n\t\t// Width\r\n\t\tif (isHorizontal) {\r\n\t\t\tminSize.width = me.maxWidth;\r\n\t\t} else if (display) {\r\n\t\t\tminSize.width = getTickMarkLength(gridLineOpts) + getScaleLabelHeight(scaleLabelOpts);\r\n\t\t}\r\n\r\n\t\t// height\r\n\t\tif (!isHorizontal) {\r\n\t\t\tminSize.height = me.maxHeight; // fill all the height\r\n\t\t} else if (display) {\r\n\t\t\tminSize.height = getTickMarkLength(gridLineOpts) + getScaleLabelHeight(scaleLabelOpts);\r\n\t\t}\r\n\r\n\t\t// Don't bother fitting the ticks if we are not showing the labels\r\n\t\tif (tickOpts.display && display) {\r\n\t\t\tvar tickFonts = parseTickFontOptions(tickOpts);\r\n\t\t\tvar labelSizes = me._getLabelSizes();\r\n\t\t\tvar firstLabelSize = labelSizes.first;\r\n\t\t\tvar lastLabelSize = labelSizes.last;\r\n\t\t\tvar widestLabelSize = labelSizes.widest;\r\n\t\t\tvar highestLabelSize = labelSizes.highest;\r\n\t\t\tvar lineSpace = tickFonts.minor.lineHeight * 0.4;\r\n\t\t\tvar tickPadding = tickOpts.padding;\r\n\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\t// A horizontal axis is more constrained by the height.\r\n\t\t\t\tvar isRotated = me.labelRotation !== 0;\r\n\t\t\t\tvar angleRadians = helpers$1.toRadians(me.labelRotation);\r\n\t\t\t\tvar cosRotation = Math.cos(angleRadians);\r\n\t\t\t\tvar sinRotation = Math.sin(angleRadians);\r\n\r\n\t\t\t\tvar labelHeight = sinRotation * widestLabelSize.width\r\n\t\t\t\t\t+ cosRotation * (highestLabelSize.height - (isRotated ? highestLabelSize.offset : 0))\r\n\t\t\t\t\t+ (isRotated ? 0 : lineSpace); // padding\r\n\r\n\t\t\t\tminSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);\r\n\r\n\t\t\t\tvar offsetLeft = me.getPixelForTick(0) - me.left;\r\n\t\t\t\tvar offsetRight = me.right - me.getPixelForTick(me.getTicks().length - 1);\r\n\t\t\t\tvar paddingLeft, paddingRight;\r\n\r\n\t\t\t\t// Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\r\n\t\t\t\t// which means that the right padding is dominated by the font height\r\n\t\t\t\tif (isRotated) {\r\n\t\t\t\t\tpaddingLeft = isBottom ?\r\n\t\t\t\t\t\tcosRotation * firstLabelSize.width + sinRotation * firstLabelSize.offset :\r\n\t\t\t\t\t\tsinRotation * (firstLabelSize.height - firstLabelSize.offset);\r\n\t\t\t\t\tpaddingRight = isBottom ?\r\n\t\t\t\t\t\tsinRotation * (lastLabelSize.height - lastLabelSize.offset) :\r\n\t\t\t\t\t\tcosRotation * lastLabelSize.width + sinRotation * lastLabelSize.offset;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tpaddingLeft = firstLabelSize.width / 2;\r\n\t\t\t\t\tpaddingRight = lastLabelSize.width / 2;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Adjust padding taking into account changes in offsets\r\n\t\t\t\t// and add 3 px to move away from canvas edges\r\n\t\t\t\tme.paddingLeft = Math.max((paddingLeft - offsetLeft) * me.width / (me.width - offsetLeft), 0) + 3;\r\n\t\t\t\tme.paddingRight = Math.max((paddingRight - offsetRight) * me.width / (me.width - offsetRight), 0) + 3;\r\n\t\t\t} else {\r\n\t\t\t\t// A vertical axis is more constrained by the width. Labels are the\r\n\t\t\t\t// dominant factor here, so get that length first and account for padding\r\n\t\t\t\tvar labelWidth = tickOpts.mirror ? 0 :\r\n\t\t\t\t\t// use lineSpace for consistency with horizontal axis\r\n\t\t\t\t\t// tickPadding is not implemented for horizontal\r\n\t\t\t\t\twidestLabelSize.width + tickPadding + lineSpace;\r\n\r\n\t\t\t\tminSize.width = Math.min(me.maxWidth, minSize.width + labelWidth);\r\n\r\n\t\t\t\tme.paddingTop = firstLabelSize.height / 2;\r\n\t\t\t\tme.paddingBottom = lastLabelSize.height / 2;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.handleMargins();\r\n\r\n\t\tif (isHorizontal) {\r\n\t\t\tme.width = me._length = chart.width - me.margins.left - me.margins.right;\r\n\t\t\tme.height = minSize.height;\r\n\t\t} else {\r\n\t\t\tme.width = minSize.width;\r\n\t\t\tme.height = me._length = chart.height - me.margins.top - me.margins.bottom;\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Handle margins and padding interactions\r\n\t * @private\r\n\t */\r\n\thandleMargins: function() {\r\n\t\tvar me = this;\r\n\t\tif (me.margins) {\r\n\t\t\tme.margins.left = Math.max(me.paddingLeft, me.margins.left);\r\n\t\t\tme.margins.top = Math.max(me.paddingTop, me.margins.top);\r\n\t\t\tme.margins.right = Math.max(me.paddingRight, me.margins.right);\r\n\t\t\tme.margins.bottom = Math.max(me.paddingBottom, me.margins.bottom);\r\n\t\t}\r\n\t},\r\n\r\n\tafterFit: function() {\r\n\t\thelpers$1.callback(this.options.afterFit, [this]);\r\n\t},\r\n\r\n\t// Shared Methods\r\n\tisHorizontal: function() {\r\n\t\tvar pos = this.options.position;\r\n\t\treturn pos === 'top' || pos === 'bottom';\r\n\t},\r\n\tisFullWidth: function() {\r\n\t\treturn this.options.fullWidth;\r\n\t},\r\n\r\n\t// Get the correct value. NaN bad inputs, If the value type is object get the x or y based on whether we are horizontal or not\r\n\tgetRightValue: function(rawValue) {\r\n\t\t// Null and undefined values first\r\n\t\tif (isNullOrUndef(rawValue)) {\r\n\t\t\treturn NaN;\r\n\t\t}\r\n\t\t// isNaN(object) returns true, so make sure NaN is checking for a number; Discard Infinite values\r\n\t\tif ((typeof rawValue === 'number' || rawValue instanceof Number) && !isFinite(rawValue)) {\r\n\t\t\treturn NaN;\r\n\t\t}\r\n\r\n\t\t// If it is in fact an object, dive in one more level\r\n\t\tif (rawValue) {\r\n\t\t\tif (this.isHorizontal()) {\r\n\t\t\t\tif (rawValue.x !== undefined) {\r\n\t\t\t\t\treturn this.getRightValue(rawValue.x);\r\n\t\t\t\t}\r\n\t\t\t} else if (rawValue.y !== undefined) {\r\n\t\t\t\treturn this.getRightValue(rawValue.y);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Value is good, return it\r\n\t\treturn rawValue;\r\n\t},\r\n\r\n\t_convertTicksToLabels: function(ticks) {\r\n\t\tvar me = this;\r\n\t\tvar labels, i, ilen;\r\n\r\n\t\tme.ticks = ticks.map(function(tick) {\r\n\t\t\treturn tick.value;\r\n\t\t});\r\n\r\n\t\tme.beforeTickToLabelConversion();\r\n\r\n\t\t// New implementations should return the formatted tick labels but for BACKWARD\r\n\t\t// COMPAT, we still support no return (`this.ticks` internally changed by calling\r\n\t\t// this method and supposed to contain only string values).\r\n\t\tlabels = me.convertTicksToLabels(ticks) || me.ticks;\r\n\r\n\t\tme.afterTickToLabelConversion();\r\n\r\n\t\t// BACKWARD COMPAT: synchronize `_ticks` with labels (so potentially `this.ticks`)\r\n\t\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\r\n\t\t\tticks[i].label = labels[i];\r\n\t\t}\r\n\r\n\t\treturn labels;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getLabelSizes: function() {\r\n\t\tvar me = this;\r\n\t\tvar labelSizes = me._labelSizes;\r\n\r\n\t\tif (!labelSizes) {\r\n\t\t\tme._labelSizes = labelSizes = computeLabelSizes(me.ctx, parseTickFontOptions(me.options.ticks), me.getTicks(), me.longestTextCache);\r\n\t\t\tme.longestLabelWidth = labelSizes.widest.width;\r\n\t\t}\r\n\r\n\t\treturn labelSizes;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_parseValue: function(value) {\r\n\t\tvar start, end, min, max;\r\n\r\n\t\tif (isArray(value)) {\r\n\t\t\tstart = +this.getRightValue(value[0]);\r\n\t\t\tend = +this.getRightValue(value[1]);\r\n\t\t\tmin = Math.min(start, end);\r\n\t\t\tmax = Math.max(start, end);\r\n\t\t} else {\r\n\t\t\tvalue = +this.getRightValue(value);\r\n\t\t\tstart = undefined;\r\n\t\t\tend = value;\r\n\t\t\tmin = value;\r\n\t\t\tmax = value;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tmin: min,\r\n\t\t\tmax: max,\r\n\t\t\tstart: start,\r\n\t\t\tend: end\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t* @private\r\n\t*/\r\n\t_getScaleLabel: function(rawValue) {\r\n\t\tvar v = this._parseValue(rawValue);\r\n\t\tif (v.start !== undefined) {\r\n\t\t\treturn '[' + v.start + ', ' + v.end + ']';\r\n\t\t}\r\n\r\n\t\treturn +this.getRightValue(rawValue);\r\n\t},\r\n\r\n\t/**\r\n\t * Used to get the value to display in the tooltip for the data at the given index\r\n\t * @param index\r\n\t * @param datasetIndex\r\n\t */\r\n\tgetLabelForIndex: helpers$1.noop,\r\n\r\n\t/**\r\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t * @param value\r\n\t * @param index\r\n\t * @param datasetIndex\r\n\t */\r\n\tgetPixelForValue: helpers$1.noop,\r\n\r\n\t/**\r\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t * @param pixel\r\n\t */\r\n\tgetValueForPixel: helpers$1.noop,\r\n\r\n\t/**\r\n\t * Returns the location of the tick at the given index\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t */\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar offset = me.options.offset;\r\n\t\tvar numTicks = me._ticks.length;\r\n\t\tvar tickWidth = 1 / Math.max(numTicks - (offset ? 0 : 1), 1);\r\n\r\n\t\treturn index < 0 || index > numTicks - 1\r\n\t\t\t? null\r\n\t\t\t: me.getPixelForDecimal(index * tickWidth + (offset ? tickWidth / 2 : 0));\r\n\t},\r\n\r\n\t/**\r\n\t * Utility for getting the pixel location of a percentage of scale\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t */\r\n\tgetPixelForDecimal: function(decimal) {\r\n\t\tvar me = this;\r\n\r\n\t\tif (me._reversePixels) {\r\n\t\t\tdecimal = 1 - decimal;\r\n\t\t}\r\n\r\n\t\treturn me._startPixel + decimal * me._length;\r\n\t},\r\n\r\n\tgetDecimalForPixel: function(pixel) {\r\n\t\tvar decimal = (pixel - this._startPixel) / this._length;\r\n\t\treturn this._reversePixels ? 1 - decimal : decimal;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the pixel for the minimum chart value\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t */\r\n\tgetBasePixel: function() {\r\n\t\treturn this.getPixelForValue(this.getBaseValue());\r\n\t},\r\n\r\n\tgetBaseValue: function() {\r\n\t\tvar me = this;\r\n\t\tvar min = me.min;\r\n\t\tvar max = me.max;\r\n\r\n\t\treturn me.beginAtZero ? 0 :\r\n\t\t\tmin < 0 && max < 0 ? max :\r\n\t\t\tmin > 0 && max > 0 ? min :\r\n\t\t\t0;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns a subset of ticks to be plotted to avoid overlapping labels.\r\n\t * @private\r\n\t */\r\n\t_autoSkip: function(ticks) {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar axisLength = me._length;\r\n\t\tvar ticksLimit = tickOpts.maxTicksLimit || axisLength / me._tickSize() + 1;\r\n\t\tvar majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\r\n\t\tvar numMajorIndices = majorIndices.length;\r\n\t\tvar first = majorIndices[0];\r\n\t\tvar last = majorIndices[numMajorIndices - 1];\r\n\t\tvar i, ilen, spacing, avgMajorSpacing;\r\n\r\n\t\t// If there are too many major ticks to display them all\r\n\t\tif (numMajorIndices > ticksLimit) {\r\n\t\t\tskipMajors(ticks, majorIndices, numMajorIndices / ticksLimit);\r\n\t\t\treturn nonSkipped(ticks);\r\n\t\t}\r\n\r\n\t\tspacing = calculateSpacing(majorIndices, ticks, axisLength, ticksLimit);\r\n\r\n\t\tif (numMajorIndices > 0) {\r\n\t\t\tfor (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\r\n\t\t\t\tskip(ticks, spacing, majorIndices[i], majorIndices[i + 1]);\r\n\t\t\t}\r\n\t\t\tavgMajorSpacing = numMajorIndices > 1 ? (last - first) / (numMajorIndices - 1) : null;\r\n\t\t\tskip(ticks, spacing, helpers$1.isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\r\n\t\t\tskip(ticks, spacing, last, helpers$1.isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\r\n\t\t\treturn nonSkipped(ticks);\r\n\t\t}\r\n\t\tskip(ticks, spacing);\r\n\t\treturn nonSkipped(ticks);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_tickSize: function() {\r\n\t\tvar me = this;\r\n\t\tvar optionTicks = me.options.ticks;\r\n\r\n\t\t// Calculate space needed by label in axis direction.\r\n\t\tvar rot = helpers$1.toRadians(me.labelRotation);\r\n\t\tvar cos = Math.abs(Math.cos(rot));\r\n\t\tvar sin = Math.abs(Math.sin(rot));\r\n\r\n\t\tvar labelSizes = me._getLabelSizes();\r\n\t\tvar padding = optionTicks.autoSkipPadding || 0;\r\n\t\tvar w = labelSizes ? labelSizes.widest.width + padding : 0;\r\n\t\tvar h = labelSizes ? labelSizes.highest.height + padding : 0;\r\n\r\n\t\t// Calculate space needed for 1 tick in axis direction.\r\n\t\treturn me.isHorizontal()\r\n\t\t\t? h * cos > w * sin ? w / cos : h / sin\r\n\t\t\t: h * sin < w * cos ? h / cos : w / sin;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_isVisible: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar display = me.options.display;\r\n\t\tvar i, ilen, meta;\r\n\r\n\t\tif (display !== 'auto') {\r\n\t\t\treturn !!display;\r\n\t\t}\r\n\r\n\t\t// When 'auto', the scale is visible if at least one associated dataset is visible.\r\n\t\tfor (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\r\n\t\t\tif (chart.isDatasetVisible(i)) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\tif (meta.xAxisID === me.id || meta.yAxisID === me.id) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_computeGridLineItems: function(chartArea) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar options = me.options;\r\n\t\tvar gridLines = options.gridLines;\r\n\t\tvar position = options.position;\r\n\t\tvar offsetGridLines = gridLines.offsetGridLines;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tvar ticks = me._ticksToDraw;\r\n\t\tvar ticksLength = ticks.length + (offsetGridLines ? 1 : 0);\r\n\r\n\t\tvar tl = getTickMarkLength(gridLines);\r\n\t\tvar items = [];\r\n\t\tvar axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0;\r\n\t\tvar axisHalfWidth = axisWidth / 2;\r\n\t\tvar alignPixel = helpers$1._alignPixel;\r\n\t\tvar alignBorderValue = function(pixel) {\r\n\t\t\treturn alignPixel(chart, pixel, axisWidth);\r\n\t\t};\r\n\t\tvar borderValue, i, tick, lineValue, alignedLineValue;\r\n\t\tvar tx1, ty1, tx2, ty2, x1, y1, x2, y2, lineWidth, lineColor, borderDash, borderDashOffset;\r\n\r\n\t\tif (position === 'top') {\r\n\t\t\tborderValue = alignBorderValue(me.bottom);\r\n\t\t\tty1 = me.bottom - tl;\r\n\t\t\tty2 = borderValue - axisHalfWidth;\r\n\t\t\ty1 = alignBorderValue(chartArea.top) + axisHalfWidth;\r\n\t\t\ty2 = chartArea.bottom;\r\n\t\t} else if (position === 'bottom') {\r\n\t\t\tborderValue = alignBorderValue(me.top);\r\n\t\t\ty1 = chartArea.top;\r\n\t\t\ty2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\r\n\t\t\tty1 = borderValue + axisHalfWidth;\r\n\t\t\tty2 = me.top + tl;\r\n\t\t} else if (position === 'left') {\r\n\t\t\tborderValue = alignBorderValue(me.right);\r\n\t\t\ttx1 = me.right - tl;\r\n\t\t\ttx2 = borderValue - axisHalfWidth;\r\n\t\t\tx1 = alignBorderValue(chartArea.left) + axisHalfWidth;\r\n\t\t\tx2 = chartArea.right;\r\n\t\t} else {\r\n\t\t\tborderValue = alignBorderValue(me.left);\r\n\t\t\tx1 = chartArea.left;\r\n\t\t\tx2 = alignBorderValue(chartArea.right) - axisHalfWidth;\r\n\t\t\ttx1 = borderValue + axisHalfWidth;\r\n\t\t\ttx2 = me.left + tl;\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < ticksLength; ++i) {\r\n\t\t\ttick = ticks[i] || {};\r\n\r\n\t\t\t// autoskipper skipped this tick (#4635)\r\n\t\t\tif (isNullOrUndef(tick.label) && i < ticks.length) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (i === me.zeroLineIndex && options.offset === offsetGridLines) {\r\n\t\t\t\t// Draw the first index specially\r\n\t\t\t\tlineWidth = gridLines.zeroLineWidth;\r\n\t\t\t\tlineColor = gridLines.zeroLineColor;\r\n\t\t\t\tborderDash = gridLines.zeroLineBorderDash || [];\r\n\t\t\t\tborderDashOffset = gridLines.zeroLineBorderDashOffset || 0.0;\r\n\t\t\t} else {\r\n\t\t\t\tlineWidth = valueAtIndexOrDefault(gridLines.lineWidth, i, 1);\r\n\t\t\t\tlineColor = valueAtIndexOrDefault(gridLines.color, i, 'rgba(0,0,0,0.1)');\r\n\t\t\t\tborderDash = gridLines.borderDash || [];\r\n\t\t\t\tborderDashOffset = gridLines.borderDashOffset || 0.0;\r\n\t\t\t}\r\n\r\n\t\t\tlineValue = getPixelForGridLine(me, tick._index || i, offsetGridLines);\r\n\r\n\t\t\t// Skip if the pixel is out of the range\r\n\t\t\tif (lineValue === undefined) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\talignedLineValue = alignPixel(chart, lineValue, lineWidth);\r\n\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\ttx1 = tx2 = x1 = x2 = alignedLineValue;\r\n\t\t\t} else {\r\n\t\t\t\tty1 = ty2 = y1 = y2 = alignedLineValue;\r\n\t\t\t}\r\n\r\n\t\t\titems.push({\r\n\t\t\t\ttx1: tx1,\r\n\t\t\t\tty1: ty1,\r\n\t\t\t\ttx2: tx2,\r\n\t\t\t\tty2: ty2,\r\n\t\t\t\tx1: x1,\r\n\t\t\t\ty1: y1,\r\n\t\t\t\tx2: x2,\r\n\t\t\t\ty2: y2,\r\n\t\t\t\twidth: lineWidth,\r\n\t\t\t\tcolor: lineColor,\r\n\t\t\t\tborderDash: borderDash,\r\n\t\t\t\tborderDashOffset: borderDashOffset,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\titems.ticksLength = ticksLength;\r\n\t\titems.borderValue = borderValue;\r\n\r\n\t\treturn items;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_computeLabelItems: function() {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar optionTicks = options.ticks;\r\n\t\tvar position = options.position;\r\n\t\tvar isMirrored = optionTicks.mirror;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tvar ticks = me._ticksToDraw;\r\n\t\tvar fonts = parseTickFontOptions(optionTicks);\r\n\t\tvar tickPadding = optionTicks.padding;\r\n\t\tvar tl = getTickMarkLength(options.gridLines);\r\n\t\tvar rotation = -helpers$1.toRadians(me.labelRotation);\r\n\t\tvar items = [];\r\n\t\tvar i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\r\n\r\n\t\tif (position === 'top') {\r\n\t\t\ty = me.bottom - tl - tickPadding;\r\n\t\t\ttextAlign = !rotation ? 'center' : 'left';\r\n\t\t} else if (position === 'bottom') {\r\n\t\t\ty = me.top + tl + tickPadding;\r\n\t\t\ttextAlign = !rotation ? 'center' : 'right';\r\n\t\t} else if (position === 'left') {\r\n\t\t\tx = me.right - (isMirrored ? 0 : tl) - tickPadding;\r\n\t\t\ttextAlign = isMirrored ? 'left' : 'right';\r\n\t\t} else {\r\n\t\t\tx = me.left + (isMirrored ? 0 : tl) + tickPadding;\r\n\t\t\ttextAlign = isMirrored ? 'right' : 'left';\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\r\n\t\t\ttick = ticks[i];\r\n\t\t\tlabel = tick.label;\r\n\r\n\t\t\t// autoskipper skipped this tick (#4635)\r\n\t\t\tif (isNullOrUndef(label)) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tpixel = me.getPixelForTick(tick._index || i) + optionTicks.labelOffset;\r\n\t\t\tfont = tick.major ? fonts.major : fonts.minor;\r\n\t\t\tlineHeight = font.lineHeight;\r\n\t\t\tlineCount = isArray(label) ? label.length : 1;\r\n\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\tx = pixel;\r\n\t\t\t\ttextOffset = position === 'top'\r\n\t\t\t\t\t? ((!rotation ? 0.5 : 1) - lineCount) * lineHeight\r\n\t\t\t\t\t: (!rotation ? 0.5 : 0) * lineHeight;\r\n\t\t\t} else {\r\n\t\t\t\ty = pixel;\r\n\t\t\t\ttextOffset = (1 - lineCount) * lineHeight / 2;\r\n\t\t\t}\r\n\r\n\t\t\titems.push({\r\n\t\t\t\tx: x,\r\n\t\t\t\ty: y,\r\n\t\t\t\trotation: rotation,\r\n\t\t\t\tlabel: label,\r\n\t\t\t\tfont: font,\r\n\t\t\t\ttextOffset: textOffset,\r\n\t\t\t\ttextAlign: textAlign\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn items;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawGrid: function(chartArea) {\r\n\t\tvar me = this;\r\n\t\tvar gridLines = me.options.gridLines;\r\n\r\n\t\tif (!gridLines.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar chart = me.chart;\r\n\t\tvar alignPixel = helpers$1._alignPixel;\r\n\t\tvar axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0;\r\n\t\tvar items = me._gridLineItems || (me._gridLineItems = me._computeGridLineItems(chartArea));\r\n\t\tvar width, color, i, ilen, item;\r\n\r\n\t\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\r\n\t\t\titem = items[i];\r\n\t\t\twidth = item.width;\r\n\t\t\tcolor = item.color;\r\n\r\n\t\t\tif (width && color) {\r\n\t\t\t\tctx.save();\r\n\t\t\t\tctx.lineWidth = width;\r\n\t\t\t\tctx.strokeStyle = color;\r\n\t\t\t\tif (ctx.setLineDash) {\r\n\t\t\t\t\tctx.setLineDash(item.borderDash);\r\n\t\t\t\t\tctx.lineDashOffset = item.borderDashOffset;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tctx.beginPath();\r\n\r\n\t\t\t\tif (gridLines.drawTicks) {\r\n\t\t\t\t\tctx.moveTo(item.tx1, item.ty1);\r\n\t\t\t\t\tctx.lineTo(item.tx2, item.ty2);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (gridLines.drawOnChartArea) {\r\n\t\t\t\t\tctx.moveTo(item.x1, item.y1);\r\n\t\t\t\t\tctx.lineTo(item.x2, item.y2);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tctx.stroke();\r\n\t\t\t\tctx.restore();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (axisWidth) {\r\n\t\t\t// Draw the line at the edge of the axis\r\n\t\t\tvar firstLineWidth = axisWidth;\r\n\t\t\tvar lastLineWidth = valueAtIndexOrDefault(gridLines.lineWidth, items.ticksLength - 1, 1);\r\n\t\t\tvar borderValue = items.borderValue;\r\n\t\t\tvar x1, x2, y1, y2;\r\n\r\n\t\t\tif (me.isHorizontal()) {\r\n\t\t\t\tx1 = alignPixel(chart, me.left, firstLineWidth) - firstLineWidth / 2;\r\n\t\t\t\tx2 = alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2;\r\n\t\t\t\ty1 = y2 = borderValue;\r\n\t\t\t} else {\r\n\t\t\t\ty1 = alignPixel(chart, me.top, firstLineWidth) - firstLineWidth / 2;\r\n\t\t\t\ty2 = alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;\r\n\t\t\t\tx1 = x2 = borderValue;\r\n\t\t\t}\r\n\r\n\t\t\tctx.lineWidth = axisWidth;\r\n\t\t\tctx.strokeStyle = valueAtIndexOrDefault(gridLines.color, 0);\r\n\t\t\tctx.beginPath();\r\n\t\t\tctx.moveTo(x1, y1);\r\n\t\t\tctx.lineTo(x2, y2);\r\n\t\t\tctx.stroke();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawLabels: function() {\r\n\t\tvar me = this;\r\n\t\tvar optionTicks = me.options.ticks;\r\n\r\n\t\tif (!optionTicks.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar items = me._labelItems || (me._labelItems = me._computeLabelItems());\r\n\t\tvar i, j, ilen, jlen, item, tickFont, label, y;\r\n\r\n\t\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\r\n\t\t\titem = items[i];\r\n\t\t\ttickFont = item.font;\r\n\r\n\t\t\t// Make sure we draw text in the correct color and font\r\n\t\t\tctx.save();\r\n\t\t\tctx.translate(item.x, item.y);\r\n\t\t\tctx.rotate(item.rotation);\r\n\t\t\tctx.font = tickFont.string;\r\n\t\t\tctx.fillStyle = tickFont.color;\r\n\t\t\tctx.textBaseline = 'middle';\r\n\t\t\tctx.textAlign = item.textAlign;\r\n\r\n\t\t\tlabel = item.label;\r\n\t\t\ty = item.textOffset;\r\n\t\t\tif (isArray(label)) {\r\n\t\t\t\tfor (j = 0, jlen = label.length; j < jlen; ++j) {\r\n\t\t\t\t\t// We just make sure the multiline element is a string here..\r\n\t\t\t\t\tctx.fillText('' + label[j], 0, y);\r\n\t\t\t\t\ty += tickFont.lineHeight;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tctx.fillText(label, 0, y);\r\n\t\t\t}\r\n\t\t\tctx.restore();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawTitle: function() {\r\n\t\tvar me = this;\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar options = me.options;\r\n\t\tvar scaleLabel = options.scaleLabel;\r\n\r\n\t\tif (!scaleLabel.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar scaleLabelFontColor = valueOrDefault$a(scaleLabel.fontColor, core_defaults.global.defaultFontColor);\r\n\t\tvar scaleLabelFont = helpers$1.options._parseFont(scaleLabel);\r\n\t\tvar scaleLabelPadding = helpers$1.options.toPadding(scaleLabel.padding);\r\n\t\tvar halfLineHeight = scaleLabelFont.lineHeight / 2;\r\n\t\tvar position = options.position;\r\n\t\tvar rotation = 0;\r\n\t\tvar scaleLabelX, scaleLabelY;\r\n\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\tscaleLabelX = me.left + me.width / 2; // midpoint of the width\r\n\t\t\tscaleLabelY = position === 'bottom'\r\n\t\t\t\t? me.bottom - halfLineHeight - scaleLabelPadding.bottom\r\n\t\t\t\t: me.top + halfLineHeight + scaleLabelPadding.top;\r\n\t\t} else {\r\n\t\t\tvar isLeft = position === 'left';\r\n\t\t\tscaleLabelX = isLeft\r\n\t\t\t\t? me.left + halfLineHeight + scaleLabelPadding.top\r\n\t\t\t\t: me.right - halfLineHeight - scaleLabelPadding.top;\r\n\t\t\tscaleLabelY = me.top + me.height / 2;\r\n\t\t\trotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI;\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\t\tctx.translate(scaleLabelX, scaleLabelY);\r\n\t\tctx.rotate(rotation);\r\n\t\tctx.textAlign = 'center';\r\n\t\tctx.textBaseline = 'middle';\r\n\t\tctx.fillStyle = scaleLabelFontColor; // render in correct colour\r\n\t\tctx.font = scaleLabelFont.string;\r\n\t\tctx.fillText(scaleLabel.labelString, 0, 0);\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\tdraw: function(chartArea) {\r\n\t\tvar me = this;\r\n\r\n\t\tif (!me._isVisible()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tme._drawGrid(chartArea);\r\n\t\tme._drawTitle();\r\n\t\tme._drawLabels();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_layers: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar tz = opts.ticks && opts.ticks.z || 0;\r\n\t\tvar gz = opts.gridLines && opts.gridLines.z || 0;\r\n\r\n\t\tif (!me._isVisible() || tz === gz || me.draw !== me._draw) {\r\n\t\t\t// backward compatibility: draw has been overridden by custom scale\r\n\t\t\treturn [{\r\n\t\t\t\tz: tz,\r\n\t\t\t\tdraw: function() {\r\n\t\t\t\t\tme.draw.apply(me, arguments);\r\n\t\t\t\t}\r\n\t\t\t}];\r\n\t\t}\r\n\r\n\t\treturn [{\r\n\t\t\tz: gz,\r\n\t\t\tdraw: function() {\r\n\t\t\t\tme._drawGrid.apply(me, arguments);\r\n\t\t\t\tme._drawTitle.apply(me, arguments);\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tz: tz,\r\n\t\t\tdraw: function() {\r\n\t\t\t\tme._drawLabels.apply(me, arguments);\r\n\t\t\t}\r\n\t\t}];\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getMatchingVisibleMetas: function(type) {\r\n\t\tvar me = this;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\treturn me.chart._getSortedVisibleDatasetMetas()\r\n\t\t\t.filter(function(meta) {\r\n\t\t\t\treturn (!type || meta.type === type)\r\n\t\t\t\t\t&& (isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id);\r\n\t\t\t});\r\n\t}\r\n});\r\n\r\nScale.prototype._draw = Scale.prototype.draw;\r\n\r\nvar core_scale = Scale;\n\nvar isNullOrUndef$1 = helpers$1.isNullOrUndef;\r\n\r\nvar defaultConfig = {\r\n\tposition: 'bottom'\r\n};\r\n\r\nvar scale_category = core_scale.extend({\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar labels = me._getLabels();\r\n\t\tvar ticksOpts = me.options.ticks;\r\n\t\tvar min = ticksOpts.min;\r\n\t\tvar max = ticksOpts.max;\r\n\t\tvar minIndex = 0;\r\n\t\tvar maxIndex = labels.length - 1;\r\n\t\tvar findIndex;\r\n\r\n\t\tif (min !== undefined) {\r\n\t\t\t// user specified min value\r\n\t\t\tfindIndex = labels.indexOf(min);\r\n\t\t\tif (findIndex >= 0) {\r\n\t\t\t\tminIndex = findIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (max !== undefined) {\r\n\t\t\t// user specified max value\r\n\t\t\tfindIndex = labels.indexOf(max);\r\n\t\t\tif (findIndex >= 0) {\r\n\t\t\t\tmaxIndex = findIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.minIndex = minIndex;\r\n\t\tme.maxIndex = maxIndex;\r\n\t\tme.min = labels[minIndex];\r\n\t\tme.max = labels[maxIndex];\r\n\t},\r\n\r\n\tbuildTicks: function() {\r\n\t\tvar me = this;\r\n\t\tvar labels = me._getLabels();\r\n\t\tvar minIndex = me.minIndex;\r\n\t\tvar maxIndex = me.maxIndex;\r\n\r\n\t\t// If we are viewing some subset of labels, slice the original array\r\n\t\tme.ticks = (minIndex === 0 && maxIndex === labels.length - 1) ? labels : labels.slice(minIndex, maxIndex + 1);\r\n\t},\r\n\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\r\n\t\tif (chart.getDatasetMeta(datasetIndex).controller._getValueScaleId() === me.id) {\r\n\t\t\treturn me.getRightValue(chart.data.datasets[datasetIndex].data[index]);\r\n\t\t}\r\n\r\n\t\treturn me._getLabels()[index];\r\n\t},\r\n\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tvar offset = me.options.offset;\r\n\t\tvar ticks = me.ticks;\r\n\r\n\t\tcore_scale.prototype._configure.call(me);\r\n\r\n\t\tif (!me.isHorizontal()) {\r\n\t\t\t// For backward compatibility, vertical category scale reverse is inverted.\r\n\t\t\tme._reversePixels = !me._reversePixels;\r\n\t\t}\r\n\r\n\t\tif (!ticks) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tme._startValue = me.minIndex - (offset ? 0.5 : 0);\r\n\t\tme._valueRange = Math.max(ticks.length - (offset ? 0 : 1), 1);\r\n\t},\r\n\r\n\t// Used to get data value locations.  Value can either be an index or a numerical value\r\n\tgetPixelForValue: function(value, index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar valueCategory, labels, idx;\r\n\r\n\t\tif (!isNullOrUndef$1(index) && !isNullOrUndef$1(datasetIndex)) {\r\n\t\t\tvalue = me.chart.data.datasets[datasetIndex].data[index];\r\n\t\t}\r\n\r\n\t\t// If value is a data object, then index is the index in the data array,\r\n\t\t// not the index of the scale. We need to change that.\r\n\t\tif (!isNullOrUndef$1(value)) {\r\n\t\t\tvalueCategory = me.isHorizontal() ? value.x : value.y;\r\n\t\t}\r\n\t\tif (valueCategory !== undefined || (value !== undefined && isNaN(index))) {\r\n\t\t\tlabels = me._getLabels();\r\n\t\t\tvalue = helpers$1.valueOrDefault(valueCategory, value);\r\n\t\t\tidx = labels.indexOf(value);\r\n\t\t\tindex = idx !== -1 ? idx : index;\r\n\t\t\tif (isNaN(index)) {\r\n\t\t\t\tindex = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn me.getPixelForDecimal((index - me._startValue) / me._valueRange);\r\n\t},\r\n\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar ticks = this.ticks;\r\n\t\treturn index < 0 || index > ticks.length - 1\r\n\t\t\t? null\r\n\t\t\t: this.getPixelForValue(ticks[index], index + this.minIndex);\r\n\t},\r\n\r\n\tgetValueForPixel: function(pixel) {\r\n\t\tvar me = this;\r\n\t\tvar value = Math.round(me._startValue + me.getDecimalForPixel(pixel) * me._valueRange);\r\n\t\treturn Math.min(Math.max(value, 0), me.ticks.length - 1);\r\n\t},\r\n\r\n\tgetBasePixel: function() {\r\n\t\treturn this.bottom;\r\n\t}\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults = defaultConfig;\nscale_category._defaults = _defaults;\n\nvar noop = helpers$1.noop;\r\nvar isNullOrUndef$2 = helpers$1.isNullOrUndef;\r\n\r\n/**\r\n * Generate a set of linear ticks\r\n * @param generationOptions the options used to generate the ticks\r\n * @param dataRange the range of the data\r\n * @returns {number[]} array of tick values\r\n */\r\nfunction generateTicks(generationOptions, dataRange) {\r\n\tvar ticks = [];\r\n\t// To get a \"nice\" value for the tick spacing, we will use the appropriately named\r\n\t// \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\r\n\t// for details.\r\n\r\n\tvar MIN_SPACING = 1e-14;\r\n\tvar stepSize = generationOptions.stepSize;\r\n\tvar unit = stepSize || 1;\r\n\tvar maxNumSpaces = generationOptions.maxTicks - 1;\r\n\tvar min = generationOptions.min;\r\n\tvar max = generationOptions.max;\r\n\tvar precision = generationOptions.precision;\r\n\tvar rmin = dataRange.min;\r\n\tvar rmax = dataRange.max;\r\n\tvar spacing = helpers$1.niceNum((rmax - rmin) / maxNumSpaces / unit) * unit;\r\n\tvar factor, niceMin, niceMax, numSpaces;\r\n\r\n\t// Beyond MIN_SPACING floating point numbers being to lose precision\r\n\t// such that we can't do the math necessary to generate ticks\r\n\tif (spacing < MIN_SPACING && isNullOrUndef$2(min) && isNullOrUndef$2(max)) {\r\n\t\treturn [rmin, rmax];\r\n\t}\r\n\r\n\tnumSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\r\n\tif (numSpaces > maxNumSpaces) {\r\n\t\t// If the calculated num of spaces exceeds maxNumSpaces, recalculate it\r\n\t\tspacing = helpers$1.niceNum(numSpaces * spacing / maxNumSpaces / unit) * unit;\r\n\t}\r\n\r\n\tif (stepSize || isNullOrUndef$2(precision)) {\r\n\t\t// If a precision is not specified, calculate factor based on spacing\r\n\t\tfactor = Math.pow(10, helpers$1._decimalPlaces(spacing));\r\n\t} else {\r\n\t\t// If the user specified a precision, round to that number of decimal places\r\n\t\tfactor = Math.pow(10, precision);\r\n\t\tspacing = Math.ceil(spacing * factor) / factor;\r\n\t}\r\n\r\n\tniceMin = Math.floor(rmin / spacing) * spacing;\r\n\tniceMax = Math.ceil(rmax / spacing) * spacing;\r\n\r\n\t// If min, max and stepSize is set and they make an evenly spaced scale use it.\r\n\tif (stepSize) {\r\n\t\t// If very close to our whole number, use it.\r\n\t\tif (!isNullOrUndef$2(min) && helpers$1.almostWhole(min / spacing, spacing / 1000)) {\r\n\t\t\tniceMin = min;\r\n\t\t}\r\n\t\tif (!isNullOrUndef$2(max) && helpers$1.almostWhole(max / spacing, spacing / 1000)) {\r\n\t\t\tniceMax = max;\r\n\t\t}\r\n\t}\r\n\r\n\tnumSpaces = (niceMax - niceMin) / spacing;\r\n\t// If very close to our rounded value, use it.\r\n\tif (helpers$1.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\r\n\t\tnumSpaces = Math.round(numSpaces);\r\n\t} else {\r\n\t\tnumSpaces = Math.ceil(numSpaces);\r\n\t}\r\n\r\n\tniceMin = Math.round(niceMin * factor) / factor;\r\n\tniceMax = Math.round(niceMax * factor) / factor;\r\n\tticks.push(isNullOrUndef$2(min) ? niceMin : min);\r\n\tfor (var j = 1; j < numSpaces; ++j) {\r\n\t\tticks.push(Math.round((niceMin + j * spacing) * factor) / factor);\r\n\t}\r\n\tticks.push(isNullOrUndef$2(max) ? niceMax : max);\r\n\r\n\treturn ticks;\r\n}\r\n\r\nvar scale_linearbase = core_scale.extend({\r\n\tgetRightValue: function(value) {\r\n\t\tif (typeof value === 'string') {\r\n\t\t\treturn +value;\r\n\t\t}\r\n\t\treturn core_scale.prototype.getRightValue.call(this, value);\r\n\t},\r\n\r\n\thandleTickRangeOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar tickOpts = opts.ticks;\r\n\r\n\t\t// If we are forcing it to begin at 0, but 0 will already be rendered on the chart,\r\n\t\t// do nothing since that would make the chart weird. If the user really wants a weird chart\r\n\t\t// axis, they can manually override it\r\n\t\tif (tickOpts.beginAtZero) {\r\n\t\t\tvar minSign = helpers$1.sign(me.min);\r\n\t\t\tvar maxSign = helpers$1.sign(me.max);\r\n\r\n\t\t\tif (minSign < 0 && maxSign < 0) {\r\n\t\t\t\t// move the top up to 0\r\n\t\t\t\tme.max = 0;\r\n\t\t\t} else if (minSign > 0 && maxSign > 0) {\r\n\t\t\t\t// move the bottom down to 0\r\n\t\t\t\tme.min = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar setMin = tickOpts.min !== undefined || tickOpts.suggestedMin !== undefined;\r\n\t\tvar setMax = tickOpts.max !== undefined || tickOpts.suggestedMax !== undefined;\r\n\r\n\t\tif (tickOpts.min !== undefined) {\r\n\t\t\tme.min = tickOpts.min;\r\n\t\t} else if (tickOpts.suggestedMin !== undefined) {\r\n\t\t\tif (me.min === null) {\r\n\t\t\t\tme.min = tickOpts.suggestedMin;\r\n\t\t\t} else {\r\n\t\t\t\tme.min = Math.min(me.min, tickOpts.suggestedMin);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (tickOpts.max !== undefined) {\r\n\t\t\tme.max = tickOpts.max;\r\n\t\t} else if (tickOpts.suggestedMax !== undefined) {\r\n\t\t\tif (me.max === null) {\r\n\t\t\t\tme.max = tickOpts.suggestedMax;\r\n\t\t\t} else {\r\n\t\t\t\tme.max = Math.max(me.max, tickOpts.suggestedMax);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (setMin !== setMax) {\r\n\t\t\t// We set the min or the max but not both.\r\n\t\t\t// So ensure that our range is good\r\n\t\t\t// Inverted or 0 length range can happen when\r\n\t\t\t// ticks.min is set, and no datasets are visible\r\n\t\t\tif (me.min >= me.max) {\r\n\t\t\t\tif (setMin) {\r\n\t\t\t\t\tme.max = me.min + 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tme.min = me.max - 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (me.min === me.max) {\r\n\t\t\tme.max++;\r\n\r\n\t\t\tif (!tickOpts.beginAtZero) {\r\n\t\t\t\tme.min--;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tgetTickLimit: function() {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar stepSize = tickOpts.stepSize;\r\n\t\tvar maxTicksLimit = tickOpts.maxTicksLimit;\r\n\t\tvar maxTicks;\r\n\r\n\t\tif (stepSize) {\r\n\t\t\tmaxTicks = Math.ceil(me.max / stepSize) - Math.floor(me.min / stepSize) + 1;\r\n\t\t} else {\r\n\t\t\tmaxTicks = me._computeTickLimit();\r\n\t\t\tmaxTicksLimit = maxTicksLimit || 11;\r\n\t\t}\r\n\r\n\t\tif (maxTicksLimit) {\r\n\t\t\tmaxTicks = Math.min(maxTicksLimit, maxTicks);\r\n\t\t}\r\n\r\n\t\treturn maxTicks;\r\n\t},\r\n\r\n\t_computeTickLimit: function() {\r\n\t\treturn Number.POSITIVE_INFINITY;\r\n\t},\r\n\r\n\thandleDirectionalChanges: noop,\r\n\r\n\tbuildTicks: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar tickOpts = opts.ticks;\r\n\r\n\t\t// Figure out what the max number of ticks we can support it is based on the size of\r\n\t\t// the axis area. For now, we say that the minimum tick spacing in pixels must be 40\r\n\t\t// We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\r\n\t\t// the graph. Make sure we always have at least 2 ticks\r\n\t\tvar maxTicks = me.getTickLimit();\r\n\t\tmaxTicks = Math.max(2, maxTicks);\r\n\r\n\t\tvar numericGeneratorOptions = {\r\n\t\t\tmaxTicks: maxTicks,\r\n\t\t\tmin: tickOpts.min,\r\n\t\t\tmax: tickOpts.max,\r\n\t\t\tprecision: tickOpts.precision,\r\n\t\t\tstepSize: helpers$1.valueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize)\r\n\t\t};\r\n\t\tvar ticks = me.ticks = generateTicks(numericGeneratorOptions, me);\r\n\r\n\t\tme.handleDirectionalChanges();\r\n\r\n\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\r\n\t\t// range of the scale\r\n\t\tme.max = helpers$1.max(ticks);\r\n\t\tme.min = helpers$1.min(ticks);\r\n\r\n\t\tif (tickOpts.reverse) {\r\n\t\t\tticks.reverse();\r\n\r\n\t\t\tme.start = me.max;\r\n\t\t\tme.end = me.min;\r\n\t\t} else {\r\n\t\t\tme.start = me.min;\r\n\t\t\tme.end = me.max;\r\n\t\t}\r\n\t},\r\n\r\n\tconvertTicksToLabels: function() {\r\n\t\tvar me = this;\r\n\t\tme.ticksAsNumbers = me.ticks.slice();\r\n\t\tme.zeroLineIndex = me.ticks.indexOf(0);\r\n\r\n\t\tcore_scale.prototype.convertTicksToLabels.call(me);\r\n\t},\r\n\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tvar ticks = me.getTicks();\r\n\t\tvar start = me.min;\r\n\t\tvar end = me.max;\r\n\t\tvar offset;\r\n\r\n\t\tcore_scale.prototype._configure.call(me);\r\n\r\n\t\tif (me.options.offset && ticks.length) {\r\n\t\t\toffset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\r\n\t\t\tstart -= offset;\r\n\t\t\tend += offset;\r\n\t\t}\r\n\t\tme._startValue = start;\r\n\t\tme._endValue = end;\r\n\t\tme._valueRange = end - start;\r\n\t}\r\n});\n\nvar defaultConfig$1 = {\r\n\tposition: 'left',\r\n\tticks: {\r\n\t\tcallback: core_ticks.formatters.linear\r\n\t}\r\n};\r\n\r\nvar DEFAULT_MIN = 0;\r\nvar DEFAULT_MAX = 1;\r\n\r\nfunction getOrCreateStack(stacks, stacked, meta) {\r\n\tvar key = [\r\n\t\tmeta.type,\r\n\t\t// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\r\n\t\tstacked === undefined && meta.stack === undefined ? meta.index : '',\r\n\t\tmeta.stack\r\n\t].join('.');\r\n\r\n\tif (stacks[key] === undefined) {\r\n\t\tstacks[key] = {\r\n\t\t\tpos: [],\r\n\t\t\tneg: []\r\n\t\t};\r\n\t}\r\n\r\n\treturn stacks[key];\r\n}\r\n\r\nfunction stackData(scale, stacks, meta, data) {\r\n\tvar opts = scale.options;\r\n\tvar stacked = opts.stacked;\r\n\tvar stack = getOrCreateStack(stacks, stacked, meta);\r\n\tvar pos = stack.pos;\r\n\tvar neg = stack.neg;\r\n\tvar ilen = data.length;\r\n\tvar i, value;\r\n\r\n\tfor (i = 0; i < ilen; ++i) {\r\n\t\tvalue = scale._parseValue(data[i]);\r\n\t\tif (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tpos[i] = pos[i] || 0;\r\n\t\tneg[i] = neg[i] || 0;\r\n\r\n\t\tif (opts.relativePoints) {\r\n\t\t\tpos[i] = 100;\r\n\t\t} else if (value.min < 0 || value.max < 0) {\r\n\t\t\tneg[i] += value.min;\r\n\t\t} else {\r\n\t\t\tpos[i] += value.max;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction updateMinMax(scale, meta, data) {\r\n\tvar ilen = data.length;\r\n\tvar i, value;\r\n\r\n\tfor (i = 0; i < ilen; ++i) {\r\n\t\tvalue = scale._parseValue(data[i]);\r\n\t\tif (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tscale.min = Math.min(scale.min, value.min);\r\n\t\tscale.max = Math.max(scale.max, value.max);\r\n\t}\r\n}\r\n\r\nvar scale_linear = scale_linearbase.extend({\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasets = chart.data.datasets;\r\n\t\tvar metasets = me._getMatchingVisibleMetas();\r\n\t\tvar hasStacks = opts.stacked;\r\n\t\tvar stacks = {};\r\n\t\tvar ilen = metasets.length;\r\n\t\tvar i, meta, data, values;\r\n\r\n\t\tme.min = Number.POSITIVE_INFINITY;\r\n\t\tme.max = Number.NEGATIVE_INFINITY;\r\n\r\n\t\tif (hasStacks === undefined) {\r\n\t\t\tfor (i = 0; !hasStacks && i < ilen; ++i) {\r\n\t\t\t\tmeta = metasets[i];\r\n\t\t\t\thasStacks = meta.stack !== undefined;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tmeta = metasets[i];\r\n\t\t\tdata = datasets[meta.index].data;\r\n\t\t\tif (hasStacks) {\r\n\t\t\t\tstackData(me, stacks, meta, data);\r\n\t\t\t} else {\r\n\t\t\t\tupdateMinMax(me, meta, data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\thelpers$1.each(stacks, function(stackValues) {\r\n\t\t\tvalues = stackValues.pos.concat(stackValues.neg);\r\n\t\t\tme.min = Math.min(me.min, helpers$1.min(values));\r\n\t\t\tme.max = Math.max(me.max, helpers$1.max(values));\r\n\t\t});\r\n\r\n\t\tme.min = helpers$1.isFinite(me.min) && !isNaN(me.min) ? me.min : DEFAULT_MIN;\r\n\t\tme.max = helpers$1.isFinite(me.max) && !isNaN(me.max) ? me.max : DEFAULT_MAX;\r\n\r\n\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\r\n\t\tme.handleTickRangeOptions();\r\n\t},\r\n\r\n\t// Returns the maximum number of ticks based on the scale dimension\r\n\t_computeTickLimit: function() {\r\n\t\tvar me = this;\r\n\t\tvar tickFont;\r\n\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\treturn Math.ceil(me.width / 40);\r\n\t\t}\r\n\t\ttickFont = helpers$1.options._parseFont(me.options.ticks);\r\n\t\treturn Math.ceil(me.height / tickFont.lineHeight);\r\n\t},\r\n\r\n\t// Called after the ticks are built. We need\r\n\thandleDirectionalChanges: function() {\r\n\t\tif (!this.isHorizontal()) {\r\n\t\t\t// We are in a vertical orientation. The top value is the highest. So reverse the array\r\n\t\t\tthis.ticks.reverse();\r\n\t\t}\r\n\t},\r\n\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\treturn this._getScaleLabel(this.chart.data.datasets[datasetIndex].data[index]);\r\n\t},\r\n\r\n\t// Utils\r\n\tgetPixelForValue: function(value) {\r\n\t\tvar me = this;\r\n\t\treturn me.getPixelForDecimal((+me.getRightValue(value) - me._startValue) / me._valueRange);\r\n\t},\r\n\r\n\tgetValueForPixel: function(pixel) {\r\n\t\treturn this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\r\n\t},\r\n\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar ticks = this.ticksAsNumbers;\r\n\t\tif (index < 0 || index > ticks.length - 1) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.getPixelForValue(ticks[index]);\r\n\t}\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults$1 = defaultConfig$1;\nscale_linear._defaults = _defaults$1;\n\nvar valueOrDefault$b = helpers$1.valueOrDefault;\r\nvar log10 = helpers$1.math.log10;\r\n\r\n/**\r\n * Generate a set of logarithmic ticks\r\n * @param generationOptions the options used to generate the ticks\r\n * @param dataRange the range of the data\r\n * @returns {number[]} array of tick values\r\n */\r\nfunction generateTicks$1(generationOptions, dataRange) {\r\n\tvar ticks = [];\r\n\r\n\tvar tickVal = valueOrDefault$b(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\r\n\r\n\tvar endExp = Math.floor(log10(dataRange.max));\r\n\tvar endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\r\n\tvar exp, significand;\r\n\r\n\tif (tickVal === 0) {\r\n\t\texp = Math.floor(log10(dataRange.minNotZero));\r\n\t\tsignificand = Math.floor(dataRange.minNotZero / Math.pow(10, exp));\r\n\r\n\t\tticks.push(tickVal);\r\n\t\ttickVal = significand * Math.pow(10, exp);\r\n\t} else {\r\n\t\texp = Math.floor(log10(tickVal));\r\n\t\tsignificand = Math.floor(tickVal / Math.pow(10, exp));\r\n\t}\r\n\tvar precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\r\n\r\n\tdo {\r\n\t\tticks.push(tickVal);\r\n\r\n\t\t++significand;\r\n\t\tif (significand === 10) {\r\n\t\t\tsignificand = 1;\r\n\t\t\t++exp;\r\n\t\t\tprecision = exp >= 0 ? 1 : precision;\r\n\t\t}\r\n\r\n\t\ttickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\r\n\t} while (exp < endExp || (exp === endExp && significand < endSignificand));\r\n\r\n\tvar lastTick = valueOrDefault$b(generationOptions.max, tickVal);\r\n\tticks.push(lastTick);\r\n\r\n\treturn ticks;\r\n}\r\n\r\nvar defaultConfig$2 = {\r\n\tposition: 'left',\r\n\r\n\t// label settings\r\n\tticks: {\r\n\t\tcallback: core_ticks.formatters.logarithmic\r\n\t}\r\n};\r\n\r\n// TODO(v3): change this to positiveOrDefault\r\nfunction nonNegativeOrDefault(value, defaultValue) {\r\n\treturn helpers$1.isFinite(value) && value >= 0 ? value : defaultValue;\r\n}\r\n\r\nvar scale_logarithmic = core_scale.extend({\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasets = chart.data.datasets;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tfunction IDMatches(meta) {\r\n\t\t\treturn isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\r\n\t\t}\r\n\t\tvar datasetIndex, meta, value, data, i, ilen;\r\n\r\n\t\t// Calculate Range\r\n\t\tme.min = Number.POSITIVE_INFINITY;\r\n\t\tme.max = Number.NEGATIVE_INFINITY;\r\n\t\tme.minNotZero = Number.POSITIVE_INFINITY;\r\n\r\n\t\tvar hasStacks = opts.stacked;\r\n\t\tif (hasStacks === undefined) {\r\n\t\t\tfor (datasetIndex = 0; datasetIndex < datasets.length; datasetIndex++) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(datasetIndex);\r\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) &&\r\n\t\t\t\t\tmeta.stack !== undefined) {\r\n\t\t\t\t\thasStacks = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (opts.stacked || hasStacks) {\r\n\t\t\tvar valuesPerStack = {};\r\n\r\n\t\t\tfor (datasetIndex = 0; datasetIndex < datasets.length; datasetIndex++) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(datasetIndex);\r\n\t\t\t\tvar key = [\r\n\t\t\t\t\tmeta.type,\r\n\t\t\t\t\t// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\r\n\t\t\t\t\t((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''),\r\n\t\t\t\t\tmeta.stack\r\n\t\t\t\t].join('.');\r\n\r\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\r\n\t\t\t\t\tif (valuesPerStack[key] === undefined) {\r\n\t\t\t\t\t\tvaluesPerStack[key] = [];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdata = datasets[datasetIndex].data;\r\n\t\t\t\t\tfor (i = 0, ilen = data.length; i < ilen; i++) {\r\n\t\t\t\t\t\tvar values = valuesPerStack[key];\r\n\t\t\t\t\t\tvalue = me._parseValue(data[i]);\r\n\t\t\t\t\t\t// invalid, hidden and negative values are ignored\r\n\t\t\t\t\t\tif (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden || value.min < 0 || value.max < 0) {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvalues[i] = values[i] || 0;\r\n\t\t\t\t\t\tvalues[i] += value.max;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\thelpers$1.each(valuesPerStack, function(valuesForType) {\r\n\t\t\t\tif (valuesForType.length > 0) {\r\n\t\t\t\t\tvar minVal = helpers$1.min(valuesForType);\r\n\t\t\t\t\tvar maxVal = helpers$1.max(valuesForType);\r\n\t\t\t\t\tme.min = Math.min(me.min, minVal);\r\n\t\t\t\t\tme.max = Math.max(me.max, maxVal);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t} else {\r\n\t\t\tfor (datasetIndex = 0; datasetIndex < datasets.length; datasetIndex++) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(datasetIndex);\r\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\r\n\t\t\t\t\tdata = datasets[datasetIndex].data;\r\n\t\t\t\t\tfor (i = 0, ilen = data.length; i < ilen; i++) {\r\n\t\t\t\t\t\tvalue = me._parseValue(data[i]);\r\n\t\t\t\t\t\t// invalid, hidden and negative values are ignored\r\n\t\t\t\t\t\tif (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden || value.min < 0 || value.max < 0) {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tme.min = Math.min(value.min, me.min);\r\n\t\t\t\t\t\tme.max = Math.max(value.max, me.max);\r\n\r\n\t\t\t\t\t\tif (value.min !== 0) {\r\n\t\t\t\t\t\t\tme.minNotZero = Math.min(value.min, me.minNotZero);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.min = helpers$1.isFinite(me.min) ? me.min : null;\r\n\t\tme.max = helpers$1.isFinite(me.max) ? me.max : null;\r\n\t\tme.minNotZero = helpers$1.isFinite(me.minNotZero) ? me.minNotZero : null;\r\n\r\n\t\t// Common base implementation to handle ticks.min, ticks.max\r\n\t\tthis.handleTickRangeOptions();\r\n\t},\r\n\r\n\thandleTickRangeOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar DEFAULT_MIN = 1;\r\n\t\tvar DEFAULT_MAX = 10;\r\n\r\n\t\tme.min = nonNegativeOrDefault(tickOpts.min, me.min);\r\n\t\tme.max = nonNegativeOrDefault(tickOpts.max, me.max);\r\n\r\n\t\tif (me.min === me.max) {\r\n\t\t\tif (me.min !== 0 && me.min !== null) {\r\n\t\t\t\tme.min = Math.pow(10, Math.floor(log10(me.min)) - 1);\r\n\t\t\t\tme.max = Math.pow(10, Math.floor(log10(me.max)) + 1);\r\n\t\t\t} else {\r\n\t\t\t\tme.min = DEFAULT_MIN;\r\n\t\t\t\tme.max = DEFAULT_MAX;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (me.min === null) {\r\n\t\t\tme.min = Math.pow(10, Math.floor(log10(me.max)) - 1);\r\n\t\t}\r\n\t\tif (me.max === null) {\r\n\t\t\tme.max = me.min !== 0\r\n\t\t\t\t? Math.pow(10, Math.floor(log10(me.min)) + 1)\r\n\t\t\t\t: DEFAULT_MAX;\r\n\t\t}\r\n\t\tif (me.minNotZero === null) {\r\n\t\t\tif (me.min > 0) {\r\n\t\t\t\tme.minNotZero = me.min;\r\n\t\t\t} else if (me.max < 1) {\r\n\t\t\t\tme.minNotZero = Math.pow(10, Math.floor(log10(me.max)));\r\n\t\t\t} else {\r\n\t\t\t\tme.minNotZero = DEFAULT_MIN;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tbuildTicks: function() {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar reverse = !me.isHorizontal();\r\n\r\n\t\tvar generationOptions = {\r\n\t\t\tmin: nonNegativeOrDefault(tickOpts.min),\r\n\t\t\tmax: nonNegativeOrDefault(tickOpts.max)\r\n\t\t};\r\n\t\tvar ticks = me.ticks = generateTicks$1(generationOptions, me);\r\n\r\n\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\r\n\t\t// range of the scale\r\n\t\tme.max = helpers$1.max(ticks);\r\n\t\tme.min = helpers$1.min(ticks);\r\n\r\n\t\tif (tickOpts.reverse) {\r\n\t\t\treverse = !reverse;\r\n\t\t\tme.start = me.max;\r\n\t\t\tme.end = me.min;\r\n\t\t} else {\r\n\t\t\tme.start = me.min;\r\n\t\t\tme.end = me.max;\r\n\t\t}\r\n\t\tif (reverse) {\r\n\t\t\tticks.reverse();\r\n\t\t}\r\n\t},\r\n\r\n\tconvertTicksToLabels: function() {\r\n\t\tthis.tickValues = this.ticks.slice();\r\n\r\n\t\tcore_scale.prototype.convertTicksToLabels.call(this);\r\n\t},\r\n\r\n\t// Get the correct tooltip label\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\treturn this._getScaleLabel(this.chart.data.datasets[datasetIndex].data[index]);\r\n\t},\r\n\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar ticks = this.tickValues;\r\n\t\tif (index < 0 || index > ticks.length - 1) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.getPixelForValue(ticks[index]);\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the value of the first tick.\r\n\t * @param {number} value - The minimum not zero value.\r\n\t * @return {number} The first tick value.\r\n\t * @private\r\n\t */\r\n\t_getFirstTickValue: function(value) {\r\n\t\tvar exp = Math.floor(log10(value));\r\n\t\tvar significand = Math.floor(value / Math.pow(10, exp));\r\n\r\n\t\treturn significand * Math.pow(10, exp);\r\n\t},\r\n\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tvar start = me.min;\r\n\t\tvar offset = 0;\r\n\r\n\t\tcore_scale.prototype._configure.call(me);\r\n\r\n\t\tif (start === 0) {\r\n\t\t\tstart = me._getFirstTickValue(me.minNotZero);\r\n\t\t\toffset = valueOrDefault$b(me.options.ticks.fontSize, core_defaults.global.defaultFontSize) / me._length;\r\n\t\t}\r\n\r\n\t\tme._startValue = log10(start);\r\n\t\tme._valueOffset = offset;\r\n\t\tme._valueRange = (log10(me.max) - log10(start)) / (1 - offset);\r\n\t},\r\n\r\n\tgetPixelForValue: function(value) {\r\n\t\tvar me = this;\r\n\t\tvar decimal = 0;\r\n\r\n\t\tvalue = +me.getRightValue(value);\r\n\r\n\t\tif (value > me.min && value > 0) {\r\n\t\t\tdecimal = (log10(value) - me._startValue) / me._valueRange + me._valueOffset;\r\n\t\t}\r\n\t\treturn me.getPixelForDecimal(decimal);\r\n\t},\r\n\r\n\tgetValueForPixel: function(pixel) {\r\n\t\tvar me = this;\r\n\t\tvar decimal = me.getDecimalForPixel(pixel);\r\n\t\treturn decimal === 0 && me.min === 0\r\n\t\t\t? 0\r\n\t\t\t: Math.pow(10, me._startValue + (decimal - me._valueOffset) * me._valueRange);\r\n\t}\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults$2 = defaultConfig$2;\nscale_logarithmic._defaults = _defaults$2;\n\nvar valueOrDefault$c = helpers$1.valueOrDefault;\r\nvar valueAtIndexOrDefault$1 = helpers$1.valueAtIndexOrDefault;\r\nvar resolve$4 = helpers$1.options.resolve;\r\n\r\nvar defaultConfig$3 = {\r\n\tdisplay: true,\r\n\r\n\t// Boolean - Whether to animate scaling the chart from the centre\r\n\tanimate: true,\r\n\tposition: 'chartArea',\r\n\r\n\tangleLines: {\r\n\t\tdisplay: true,\r\n\t\tcolor: 'rgba(0,0,0,0.1)',\r\n\t\tlineWidth: 1,\r\n\t\tborderDash: [],\r\n\t\tborderDashOffset: 0.0\r\n\t},\r\n\r\n\tgridLines: {\r\n\t\tcircular: false\r\n\t},\r\n\r\n\t// label settings\r\n\tticks: {\r\n\t\t// Boolean - Show a backdrop to the scale label\r\n\t\tshowLabelBackdrop: true,\r\n\r\n\t\t// String - The colour of the label backdrop\r\n\t\tbackdropColor: 'rgba(255,255,255,0.75)',\r\n\r\n\t\t// Number - The backdrop padding above & below the label in pixels\r\n\t\tbackdropPaddingY: 2,\r\n\r\n\t\t// Number - The backdrop padding to the side of the label in pixels\r\n\t\tbackdropPaddingX: 2,\r\n\r\n\t\tcallback: core_ticks.formatters.linear\r\n\t},\r\n\r\n\tpointLabels: {\r\n\t\t// Boolean - if true, show point labels\r\n\t\tdisplay: true,\r\n\r\n\t\t// Number - Point label font size in pixels\r\n\t\tfontSize: 10,\r\n\r\n\t\t// Function - Used to convert point labels\r\n\t\tcallback: function(label) {\r\n\t\t\treturn label;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nfunction getTickBackdropHeight(opts) {\r\n\tvar tickOpts = opts.ticks;\r\n\r\n\tif (tickOpts.display && opts.display) {\r\n\t\treturn valueOrDefault$c(tickOpts.fontSize, core_defaults.global.defaultFontSize) + tickOpts.backdropPaddingY * 2;\r\n\t}\r\n\treturn 0;\r\n}\r\n\r\nfunction measureLabelSize(ctx, lineHeight, label) {\r\n\tif (helpers$1.isArray(label)) {\r\n\t\treturn {\r\n\t\t\tw: helpers$1.longestText(ctx, ctx.font, label),\r\n\t\t\th: label.length * lineHeight\r\n\t\t};\r\n\t}\r\n\r\n\treturn {\r\n\t\tw: ctx.measureText(label).width,\r\n\t\th: lineHeight\r\n\t};\r\n}\r\n\r\nfunction determineLimits(angle, pos, size, min, max) {\r\n\tif (angle === min || angle === max) {\r\n\t\treturn {\r\n\t\t\tstart: pos - (size / 2),\r\n\t\t\tend: pos + (size / 2)\r\n\t\t};\r\n\t} else if (angle < min || angle > max) {\r\n\t\treturn {\r\n\t\t\tstart: pos - size,\r\n\t\t\tend: pos\r\n\t\t};\r\n\t}\r\n\r\n\treturn {\r\n\t\tstart: pos,\r\n\t\tend: pos + size\r\n\t};\r\n}\r\n\r\n/**\r\n * Helper function to fit a radial linear scale with point labels\r\n */\r\nfunction fitWithPointLabels(scale) {\r\n\r\n\t// Right, this is really confusing and there is a lot of maths going on here\r\n\t// The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\r\n\t//\r\n\t// Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\r\n\t//\r\n\t// Solution:\r\n\t//\r\n\t// We assume the radius of the polygon is half the size of the canvas at first\r\n\t// at each index we check if the text overlaps.\r\n\t//\r\n\t// Where it does, we store that angle and that index.\r\n\t//\r\n\t// After finding the largest index and angle we calculate how much we need to remove\r\n\t// from the shape radius to move the point inwards by that x.\r\n\t//\r\n\t// We average the left and right distances to get the maximum shape radius that can fit in the box\r\n\t// along with labels.\r\n\t//\r\n\t// Once we have that, we can find the centre point for the chart, by taking the x text protrusion\r\n\t// on each side, removing that from the size, halving it and adding the left x protrusion width.\r\n\t//\r\n\t// This will mean we have a shape fitted to the canvas, as large as it can be with the labels\r\n\t// and position it in the most space efficient manner\r\n\t//\r\n\t// https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\r\n\r\n\tvar plFont = helpers$1.options._parseFont(scale.options.pointLabels);\r\n\r\n\t// Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\r\n\t// Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\r\n\tvar furthestLimits = {\r\n\t\tl: 0,\r\n\t\tr: scale.width,\r\n\t\tt: 0,\r\n\t\tb: scale.height - scale.paddingTop\r\n\t};\r\n\tvar furthestAngles = {};\r\n\tvar i, textSize, pointPosition;\r\n\r\n\tscale.ctx.font = plFont.string;\r\n\tscale._pointLabelSizes = [];\r\n\r\n\tvar valueCount = scale.chart.data.labels.length;\r\n\tfor (i = 0; i < valueCount; i++) {\r\n\t\tpointPosition = scale.getPointPosition(i, scale.drawingArea + 5);\r\n\t\ttextSize = measureLabelSize(scale.ctx, plFont.lineHeight, scale.pointLabels[i]);\r\n\t\tscale._pointLabelSizes[i] = textSize;\r\n\r\n\t\t// Add quarter circle to make degree 0 mean top of circle\r\n\t\tvar angleRadians = scale.getIndexAngle(i);\r\n\t\tvar angle = helpers$1.toDegrees(angleRadians) % 360;\r\n\t\tvar hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\r\n\t\tvar vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\r\n\r\n\t\tif (hLimits.start < furthestLimits.l) {\r\n\t\t\tfurthestLimits.l = hLimits.start;\r\n\t\t\tfurthestAngles.l = angleRadians;\r\n\t\t}\r\n\r\n\t\tif (hLimits.end > furthestLimits.r) {\r\n\t\t\tfurthestLimits.r = hLimits.end;\r\n\t\t\tfurthestAngles.r = angleRadians;\r\n\t\t}\r\n\r\n\t\tif (vLimits.start < furthestLimits.t) {\r\n\t\t\tfurthestLimits.t = vLimits.start;\r\n\t\t\tfurthestAngles.t = angleRadians;\r\n\t\t}\r\n\r\n\t\tif (vLimits.end > furthestLimits.b) {\r\n\t\t\tfurthestLimits.b = vLimits.end;\r\n\t\t\tfurthestAngles.b = angleRadians;\r\n\t\t}\r\n\t}\r\n\r\n\tscale.setReductions(scale.drawingArea, furthestLimits, furthestAngles);\r\n}\r\n\r\nfunction getTextAlignForAngle(angle) {\r\n\tif (angle === 0 || angle === 180) {\r\n\t\treturn 'center';\r\n\t} else if (angle < 180) {\r\n\t\treturn 'left';\r\n\t}\r\n\r\n\treturn 'right';\r\n}\r\n\r\nfunction fillText(ctx, text, position, lineHeight) {\r\n\tvar y = position.y + lineHeight / 2;\r\n\tvar i, ilen;\r\n\r\n\tif (helpers$1.isArray(text)) {\r\n\t\tfor (i = 0, ilen = text.length; i < ilen; ++i) {\r\n\t\t\tctx.fillText(text[i], position.x, y);\r\n\t\t\ty += lineHeight;\r\n\t\t}\r\n\t} else {\r\n\t\tctx.fillText(text, position.x, y);\r\n\t}\r\n}\r\n\r\nfunction adjustPointPositionForLabelHeight(angle, textSize, position) {\r\n\tif (angle === 90 || angle === 270) {\r\n\t\tposition.y -= (textSize.h / 2);\r\n\t} else if (angle > 270 || angle < 90) {\r\n\t\tposition.y -= textSize.h;\r\n\t}\r\n}\r\n\r\nfunction drawPointLabels(scale) {\r\n\tvar ctx = scale.ctx;\r\n\tvar opts = scale.options;\r\n\tvar pointLabelOpts = opts.pointLabels;\r\n\tvar tickBackdropHeight = getTickBackdropHeight(opts);\r\n\tvar outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max);\r\n\tvar plFont = helpers$1.options._parseFont(pointLabelOpts);\r\n\r\n\tctx.save();\r\n\r\n\tctx.font = plFont.string;\r\n\tctx.textBaseline = 'middle';\r\n\r\n\tfor (var i = scale.chart.data.labels.length - 1; i >= 0; i--) {\r\n\t\t// Extra pixels out for some label spacing\r\n\t\tvar extra = (i === 0 ? tickBackdropHeight / 2 : 0);\r\n\t\tvar pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + 5);\r\n\r\n\t\t// Keep this in loop since we may support array properties here\r\n\t\tvar pointLabelFontColor = valueAtIndexOrDefault$1(pointLabelOpts.fontColor, i, core_defaults.global.defaultFontColor);\r\n\t\tctx.fillStyle = pointLabelFontColor;\r\n\r\n\t\tvar angleRadians = scale.getIndexAngle(i);\r\n\t\tvar angle = helpers$1.toDegrees(angleRadians);\r\n\t\tctx.textAlign = getTextAlignForAngle(angle);\r\n\t\tadjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition);\r\n\t\tfillText(ctx, scale.pointLabels[i], pointLabelPosition, plFont.lineHeight);\r\n\t}\r\n\tctx.restore();\r\n}\r\n\r\nfunction drawRadiusLine(scale, gridLineOpts, radius, index) {\r\n\tvar ctx = scale.ctx;\r\n\tvar circular = gridLineOpts.circular;\r\n\tvar valueCount = scale.chart.data.labels.length;\r\n\tvar lineColor = valueAtIndexOrDefault$1(gridLineOpts.color, index - 1);\r\n\tvar lineWidth = valueAtIndexOrDefault$1(gridLineOpts.lineWidth, index - 1);\r\n\tvar pointPosition;\r\n\r\n\tif ((!circular && !valueCount) || !lineColor || !lineWidth) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tctx.save();\r\n\tctx.strokeStyle = lineColor;\r\n\tctx.lineWidth = lineWidth;\r\n\tif (ctx.setLineDash) {\r\n\t\tctx.setLineDash(gridLineOpts.borderDash || []);\r\n\t\tctx.lineDashOffset = gridLineOpts.borderDashOffset || 0.0;\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tif (circular) {\r\n\t\t// Draw circular arcs between the points\r\n\t\tctx.arc(scale.xCenter, scale.yCenter, radius, 0, Math.PI * 2);\r\n\t} else {\r\n\t\t// Draw straight lines connecting each index\r\n\t\tpointPosition = scale.getPointPosition(0, radius);\r\n\t\tctx.moveTo(pointPosition.x, pointPosition.y);\r\n\r\n\t\tfor (var i = 1; i < valueCount; i++) {\r\n\t\t\tpointPosition = scale.getPointPosition(i, radius);\r\n\t\t\tctx.lineTo(pointPosition.x, pointPosition.y);\r\n\t\t}\r\n\t}\r\n\tctx.closePath();\r\n\tctx.stroke();\r\n\tctx.restore();\r\n}\r\n\r\nfunction numberOrZero(param) {\r\n\treturn helpers$1.isNumber(param) ? param : 0;\r\n}\r\n\r\nvar scale_radialLinear = scale_linearbase.extend({\r\n\tsetDimensions: function() {\r\n\t\tvar me = this;\r\n\r\n\t\t// Set the unconstrained dimension before label rotation\r\n\t\tme.width = me.maxWidth;\r\n\t\tme.height = me.maxHeight;\r\n\t\tme.paddingTop = getTickBackdropHeight(me.options) / 2;\r\n\t\tme.xCenter = Math.floor(me.width / 2);\r\n\t\tme.yCenter = Math.floor((me.height - me.paddingTop) / 2);\r\n\t\tme.drawingArea = Math.min(me.height - me.paddingTop, me.width) / 2;\r\n\t},\r\n\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar min = Number.POSITIVE_INFINITY;\r\n\t\tvar max = Number.NEGATIVE_INFINITY;\r\n\r\n\t\thelpers$1.each(chart.data.datasets, function(dataset, datasetIndex) {\r\n\t\t\tif (chart.isDatasetVisible(datasetIndex)) {\r\n\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\r\n\r\n\t\t\t\thelpers$1.each(dataset.data, function(rawValue, index) {\r\n\t\t\t\t\tvar value = +me.getRightValue(rawValue);\r\n\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tmin = Math.min(value, min);\r\n\t\t\t\t\tmax = Math.max(value, max);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tme.min = (min === Number.POSITIVE_INFINITY ? 0 : min);\r\n\t\tme.max = (max === Number.NEGATIVE_INFINITY ? 0 : max);\r\n\r\n\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\r\n\t\tme.handleTickRangeOptions();\r\n\t},\r\n\r\n\t// Returns the maximum number of ticks based on the scale dimension\r\n\t_computeTickLimit: function() {\r\n\t\treturn Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\r\n\t},\r\n\r\n\tconvertTicksToLabels: function() {\r\n\t\tvar me = this;\r\n\r\n\t\tscale_linearbase.prototype.convertTicksToLabels.call(me);\r\n\r\n\t\t// Point labels\r\n\t\tme.pointLabels = me.chart.data.labels.map(function() {\r\n\t\t\tvar label = helpers$1.callback(me.options.pointLabels.callback, arguments, me);\r\n\t\t\treturn label || label === 0 ? label : '';\r\n\t\t});\r\n\t},\r\n\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\r\n\t},\r\n\r\n\tfit: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\r\n\t\tif (opts.display && opts.pointLabels.display) {\r\n\t\t\tfitWithPointLabels(me);\r\n\t\t} else {\r\n\t\t\tme.setCenterPoint(0, 0, 0, 0);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Set radius reductions and determine new radius and center point\r\n\t * @private\r\n\t */\r\n\tsetReductions: function(largestPossibleRadius, furthestLimits, furthestAngles) {\r\n\t\tvar me = this;\r\n\t\tvar radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);\r\n\t\tvar radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);\r\n\t\tvar radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);\r\n\t\tvar radiusReductionBottom = -Math.max(furthestLimits.b - (me.height - me.paddingTop), 0) / Math.cos(furthestAngles.b);\r\n\r\n\t\tradiusReductionLeft = numberOrZero(radiusReductionLeft);\r\n\t\tradiusReductionRight = numberOrZero(radiusReductionRight);\r\n\t\tradiusReductionTop = numberOrZero(radiusReductionTop);\r\n\t\tradiusReductionBottom = numberOrZero(radiusReductionBottom);\r\n\r\n\t\tme.drawingArea = Math.min(\r\n\t\t\tMath.floor(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2),\r\n\t\t\tMath.floor(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2));\r\n\t\tme.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);\r\n\t},\r\n\r\n\tsetCenterPoint: function(leftMovement, rightMovement, topMovement, bottomMovement) {\r\n\t\tvar me = this;\r\n\t\tvar maxRight = me.width - rightMovement - me.drawingArea;\r\n\t\tvar maxLeft = leftMovement + me.drawingArea;\r\n\t\tvar maxTop = topMovement + me.drawingArea;\r\n\t\tvar maxBottom = (me.height - me.paddingTop) - bottomMovement - me.drawingArea;\r\n\r\n\t\tme.xCenter = Math.floor(((maxLeft + maxRight) / 2) + me.left);\r\n\t\tme.yCenter = Math.floor(((maxTop + maxBottom) / 2) + me.top + me.paddingTop);\r\n\t},\r\n\r\n\tgetIndexAngle: function(index) {\r\n\t\tvar chart = this.chart;\r\n\t\tvar angleMultiplier = 360 / chart.data.labels.length;\r\n\t\tvar options = chart.options || {};\r\n\t\tvar startAngle = options.startAngle || 0;\r\n\r\n\t\t// Start from the top instead of right, so remove a quarter of the circle\r\n\t\tvar angle = (index * angleMultiplier + startAngle) % 360;\r\n\r\n\t\treturn (angle < 0 ? angle + 360 : angle) * Math.PI * 2 / 360;\r\n\t},\r\n\r\n\tgetDistanceFromCenterForValue: function(value) {\r\n\t\tvar me = this;\r\n\r\n\t\tif (helpers$1.isNullOrUndef(value)) {\r\n\t\t\treturn NaN;\r\n\t\t}\r\n\r\n\t\t// Take into account half font size + the yPadding of the top value\r\n\t\tvar scalingFactor = me.drawingArea / (me.max - me.min);\r\n\t\tif (me.options.ticks.reverse) {\r\n\t\t\treturn (me.max - value) * scalingFactor;\r\n\t\t}\r\n\t\treturn (value - me.min) * scalingFactor;\r\n\t},\r\n\r\n\tgetPointPosition: function(index, distanceFromCenter) {\r\n\t\tvar me = this;\r\n\t\tvar thisAngle = me.getIndexAngle(index) - (Math.PI / 2);\r\n\t\treturn {\r\n\t\t\tx: Math.cos(thisAngle) * distanceFromCenter + me.xCenter,\r\n\t\t\ty: Math.sin(thisAngle) * distanceFromCenter + me.yCenter\r\n\t\t};\r\n\t},\r\n\r\n\tgetPointPositionForValue: function(index, value) {\r\n\t\treturn this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\r\n\t},\r\n\r\n\tgetBasePosition: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar min = me.min;\r\n\t\tvar max = me.max;\r\n\r\n\t\treturn me.getPointPositionForValue(index || 0,\r\n\t\t\tme.beginAtZero ? 0 :\r\n\t\t\tmin < 0 && max < 0 ? max :\r\n\t\t\tmin > 0 && max > 0 ? min :\r\n\t\t\t0);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawGrid: function() {\r\n\t\tvar me = this;\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar opts = me.options;\r\n\t\tvar gridLineOpts = opts.gridLines;\r\n\t\tvar angleLineOpts = opts.angleLines;\r\n\t\tvar lineWidth = valueOrDefault$c(angleLineOpts.lineWidth, gridLineOpts.lineWidth);\r\n\t\tvar lineColor = valueOrDefault$c(angleLineOpts.color, gridLineOpts.color);\r\n\t\tvar i, offset, position;\r\n\r\n\t\tif (opts.pointLabels.display) {\r\n\t\t\tdrawPointLabels(me);\r\n\t\t}\r\n\r\n\t\tif (gridLineOpts.display) {\r\n\t\t\thelpers$1.each(me.ticks, function(label, index) {\r\n\t\t\t\tif (index !== 0) {\r\n\t\t\t\t\toffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);\r\n\t\t\t\t\tdrawRadiusLine(me, gridLineOpts, offset, index);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (angleLineOpts.display && lineWidth && lineColor) {\r\n\t\t\tctx.save();\r\n\t\t\tctx.lineWidth = lineWidth;\r\n\t\t\tctx.strokeStyle = lineColor;\r\n\t\t\tif (ctx.setLineDash) {\r\n\t\t\t\tctx.setLineDash(resolve$4([angleLineOpts.borderDash, gridLineOpts.borderDash, []]));\r\n\t\t\t\tctx.lineDashOffset = resolve$4([angleLineOpts.borderDashOffset, gridLineOpts.borderDashOffset, 0.0]);\r\n\t\t\t}\r\n\r\n\t\t\tfor (i = me.chart.data.labels.length - 1; i >= 0; i--) {\r\n\t\t\t\toffset = me.getDistanceFromCenterForValue(opts.ticks.reverse ? me.min : me.max);\r\n\t\t\t\tposition = me.getPointPosition(i, offset);\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\tctx.moveTo(me.xCenter, me.yCenter);\r\n\t\t\t\tctx.lineTo(position.x, position.y);\r\n\t\t\t\tctx.stroke();\r\n\t\t\t}\r\n\r\n\t\t\tctx.restore();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawLabels: function() {\r\n\t\tvar me = this;\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar opts = me.options;\r\n\t\tvar tickOpts = opts.ticks;\r\n\r\n\t\tif (!tickOpts.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar startAngle = me.getIndexAngle(0);\r\n\t\tvar tickFont = helpers$1.options._parseFont(tickOpts);\r\n\t\tvar tickFontColor = valueOrDefault$c(tickOpts.fontColor, core_defaults.global.defaultFontColor);\r\n\t\tvar offset, width;\r\n\r\n\t\tctx.save();\r\n\t\tctx.font = tickFont.string;\r\n\t\tctx.translate(me.xCenter, me.yCenter);\r\n\t\tctx.rotate(startAngle);\r\n\t\tctx.textAlign = 'center';\r\n\t\tctx.textBaseline = 'middle';\r\n\r\n\t\thelpers$1.each(me.ticks, function(label, index) {\r\n\t\t\tif (index === 0 && !tickOpts.reverse) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\toffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);\r\n\r\n\t\t\tif (tickOpts.showLabelBackdrop) {\r\n\t\t\t\twidth = ctx.measureText(label).width;\r\n\t\t\t\tctx.fillStyle = tickOpts.backdropColor;\r\n\r\n\t\t\t\tctx.fillRect(\r\n\t\t\t\t\t-width / 2 - tickOpts.backdropPaddingX,\r\n\t\t\t\t\t-offset - tickFont.size / 2 - tickOpts.backdropPaddingY,\r\n\t\t\t\t\twidth + tickOpts.backdropPaddingX * 2,\r\n\t\t\t\t\ttickFont.size + tickOpts.backdropPaddingY * 2\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tctx.fillStyle = tickFontColor;\r\n\t\t\tctx.fillText(label, 0, -offset);\r\n\t\t});\r\n\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawTitle: helpers$1.noop\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults$3 = defaultConfig$3;\nscale_radialLinear._defaults = _defaults$3;\n\nvar deprecated$1 = helpers$1._deprecated;\r\nvar resolve$5 = helpers$1.options.resolve;\r\nvar valueOrDefault$d = helpers$1.valueOrDefault;\r\n\r\n// Integer constants are from the ES6 spec.\r\nvar MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\r\nvar MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\r\n\r\nvar INTERVALS = {\r\n\tmillisecond: {\r\n\t\tcommon: true,\r\n\t\tsize: 1,\r\n\t\tsteps: 1000\r\n\t},\r\n\tsecond: {\r\n\t\tcommon: true,\r\n\t\tsize: 1000,\r\n\t\tsteps: 60\r\n\t},\r\n\tminute: {\r\n\t\tcommon: true,\r\n\t\tsize: 60000,\r\n\t\tsteps: 60\r\n\t},\r\n\thour: {\r\n\t\tcommon: true,\r\n\t\tsize: 3600000,\r\n\t\tsteps: 24\r\n\t},\r\n\tday: {\r\n\t\tcommon: true,\r\n\t\tsize: 86400000,\r\n\t\tsteps: 30\r\n\t},\r\n\tweek: {\r\n\t\tcommon: false,\r\n\t\tsize: 604800000,\r\n\t\tsteps: 4\r\n\t},\r\n\tmonth: {\r\n\t\tcommon: true,\r\n\t\tsize: 2.628e9,\r\n\t\tsteps: 12\r\n\t},\r\n\tquarter: {\r\n\t\tcommon: false,\r\n\t\tsize: 7.884e9,\r\n\t\tsteps: 4\r\n\t},\r\n\tyear: {\r\n\t\tcommon: true,\r\n\t\tsize: 3.154e10\r\n\t}\r\n};\r\n\r\nvar UNITS = Object.keys(INTERVALS);\r\n\r\nfunction sorter(a, b) {\r\n\treturn a - b;\r\n}\r\n\r\nfunction arrayUnique(items) {\r\n\tvar hash = {};\r\n\tvar out = [];\r\n\tvar i, ilen, item;\r\n\r\n\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\r\n\t\titem = items[i];\r\n\t\tif (!hash[item]) {\r\n\t\t\thash[item] = true;\r\n\t\t\tout.push(item);\r\n\t\t}\r\n\t}\r\n\r\n\treturn out;\r\n}\r\n\r\nfunction getMin(options) {\r\n\treturn helpers$1.valueOrDefault(options.time.min, options.ticks.min);\r\n}\r\n\r\nfunction getMax(options) {\r\n\treturn helpers$1.valueOrDefault(options.time.max, options.ticks.max);\r\n}\r\n\r\n/**\r\n * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\r\n * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\r\n * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\r\n * extremity (left + width or top + height). Note that it would be more optimized to directly\r\n * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\r\n * to create the lookup table. The table ALWAYS contains at least two items: min and max.\r\n *\r\n * @param {number[]} timestamps - timestamps sorted from lowest to highest.\r\n * @param {string} distribution - If 'linear', timestamps will be spread linearly along the min\r\n * and max range, so basically, the table will contains only two items: {min, 0} and {max, 1}.\r\n * If 'series', timestamps will be positioned at the same distance from each other. In this\r\n * case, only timestamps that break the time linearity are registered, meaning that in the\r\n * best case, all timestamps are linear, the table contains only min and max.\r\n */\r\nfunction buildLookupTable(timestamps, min, max, distribution) {\r\n\tif (distribution === 'linear' || !timestamps.length) {\r\n\t\treturn [\r\n\t\t\t{time: min, pos: 0},\r\n\t\t\t{time: max, pos: 1}\r\n\t\t];\r\n\t}\r\n\r\n\tvar table = [];\r\n\tvar items = [min];\r\n\tvar i, ilen, prev, curr, next;\r\n\r\n\tfor (i = 0, ilen = timestamps.length; i < ilen; ++i) {\r\n\t\tcurr = timestamps[i];\r\n\t\tif (curr > min && curr < max) {\r\n\t\t\titems.push(curr);\r\n\t\t}\r\n\t}\r\n\r\n\titems.push(max);\r\n\r\n\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\r\n\t\tnext = items[i + 1];\r\n\t\tprev = items[i - 1];\r\n\t\tcurr = items[i];\r\n\r\n\t\t// only add points that breaks the scale linearity\r\n\t\tif (prev === undefined || next === undefined || Math.round((next + prev) / 2) !== curr) {\r\n\t\t\ttable.push({time: curr, pos: i / (ilen - 1)});\r\n\t\t}\r\n\t}\r\n\r\n\treturn table;\r\n}\r\n\r\n// @see adapted from https://www.anujgakhar.com/2014/03/01/binary-search-in-javascript/\r\nfunction lookup(table, key, value) {\r\n\tvar lo = 0;\r\n\tvar hi = table.length - 1;\r\n\tvar mid, i0, i1;\r\n\r\n\twhile (lo >= 0 && lo <= hi) {\r\n\t\tmid = (lo + hi) >> 1;\r\n\t\ti0 = table[mid - 1] || null;\r\n\t\ti1 = table[mid];\r\n\r\n\t\tif (!i0) {\r\n\t\t\t// given value is outside table (before first item)\r\n\t\t\treturn {lo: null, hi: i1};\r\n\t\t} else if (i1[key] < value) {\r\n\t\t\tlo = mid + 1;\r\n\t\t} else if (i0[key] > value) {\r\n\t\t\thi = mid - 1;\r\n\t\t} else {\r\n\t\t\treturn {lo: i0, hi: i1};\r\n\t\t}\r\n\t}\r\n\r\n\t// given value is outside table (after last item)\r\n\treturn {lo: i1, hi: null};\r\n}\r\n\r\n/**\r\n * Linearly interpolates the given source `value` using the table items `skey` values and\r\n * returns the associated `tkey` value. For example, interpolate(table, 'time', 42, 'pos')\r\n * returns the position for a timestamp equal to 42. If value is out of bounds, values at\r\n * index [0, 1] or [n - 1, n] are used for the interpolation.\r\n */\r\nfunction interpolate$1(table, skey, sval, tkey) {\r\n\tvar range = lookup(table, skey, sval);\r\n\r\n\t// Note: the lookup table ALWAYS contains at least 2 items (min and max)\r\n\tvar prev = !range.lo ? table[0] : !range.hi ? table[table.length - 2] : range.lo;\r\n\tvar next = !range.lo ? table[1] : !range.hi ? table[table.length - 1] : range.hi;\r\n\r\n\tvar span = next[skey] - prev[skey];\r\n\tvar ratio = span ? (sval - prev[skey]) / span : 0;\r\n\tvar offset = (next[tkey] - prev[tkey]) * ratio;\r\n\r\n\treturn prev[tkey] + offset;\r\n}\r\n\r\nfunction toTimestamp(scale, input) {\r\n\tvar adapter = scale._adapter;\r\n\tvar options = scale.options.time;\r\n\tvar parser = options.parser;\r\n\tvar format = parser || options.format;\r\n\tvar value = input;\r\n\r\n\tif (typeof parser === 'function') {\r\n\t\tvalue = parser(value);\r\n\t}\r\n\r\n\t// Only parse if its not a timestamp already\r\n\tif (!helpers$1.isFinite(value)) {\r\n\t\tvalue = typeof format === 'string'\r\n\t\t\t? adapter.parse(value, format)\r\n\t\t\t: adapter.parse(value);\r\n\t}\r\n\r\n\tif (value !== null) {\r\n\t\treturn +value;\r\n\t}\r\n\r\n\t// Labels are in an incompatible format and no `parser` has been provided.\r\n\t// The user might still use the deprecated `format` option for parsing.\r\n\tif (!parser && typeof format === 'function') {\r\n\t\tvalue = format(input);\r\n\r\n\t\t// `format` could return something else than a timestamp, if so, parse it\r\n\t\tif (!helpers$1.isFinite(value)) {\r\n\t\t\tvalue = adapter.parse(value);\r\n\t\t}\r\n\t}\r\n\r\n\treturn value;\r\n}\r\n\r\nfunction parse(scale, input) {\r\n\tif (helpers$1.isNullOrUndef(input)) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tvar options = scale.options.time;\r\n\tvar value = toTimestamp(scale, scale.getRightValue(input));\r\n\tif (value === null) {\r\n\t\treturn value;\r\n\t}\r\n\r\n\tif (options.round) {\r\n\t\tvalue = +scale._adapter.startOf(value, options.round);\r\n\t}\r\n\r\n\treturn value;\r\n}\r\n\r\n/**\r\n * Figures out what unit results in an appropriate number of auto-generated ticks\r\n */\r\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\r\n\tvar ilen = UNITS.length;\r\n\tvar i, interval, factor;\r\n\r\n\tfor (i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\r\n\t\tinterval = INTERVALS[UNITS[i]];\r\n\t\tfactor = interval.steps ? interval.steps : MAX_INTEGER;\r\n\r\n\t\tif (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\r\n\t\t\treturn UNITS[i];\r\n\t\t}\r\n\t}\r\n\r\n\treturn UNITS[ilen - 1];\r\n}\r\n\r\n/**\r\n * Figures out what unit to format a set of ticks with\r\n */\r\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\r\n\tvar i, unit;\r\n\r\n\tfor (i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\r\n\t\tunit = UNITS[i];\r\n\t\tif (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\r\n\t\t\treturn unit;\r\n\t\t}\r\n\t}\r\n\r\n\treturn UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\r\n}\r\n\r\nfunction determineMajorUnit(unit) {\r\n\tfor (var i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\r\n\t\tif (INTERVALS[UNITS[i]].common) {\r\n\t\t\treturn UNITS[i];\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Generates a maximum of `capacity` timestamps between min and max, rounded to the\r\n * `minor` unit using the given scale time `options`.\r\n * Important: this method can return ticks outside the min and max range, it's the\r\n * responsibility of the calling code to clamp values if needed.\r\n */\r\nfunction generate(scale, min, max, capacity) {\r\n\tvar adapter = scale._adapter;\r\n\tvar options = scale.options;\r\n\tvar timeOpts = options.time;\r\n\tvar minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, capacity);\r\n\tvar stepSize = resolve$5([timeOpts.stepSize, timeOpts.unitStepSize, 1]);\r\n\tvar weekday = minor === 'week' ? timeOpts.isoWeekday : false;\r\n\tvar first = min;\r\n\tvar ticks = [];\r\n\tvar time;\r\n\r\n\t// For 'week' unit, handle the first day of week option\r\n\tif (weekday) {\r\n\t\tfirst = +adapter.startOf(first, 'isoWeek', weekday);\r\n\t}\r\n\r\n\t// Align first ticks on unit\r\n\tfirst = +adapter.startOf(first, weekday ? 'day' : minor);\r\n\r\n\t// Prevent browser from freezing in case user options request millions of milliseconds\r\n\tif (adapter.diff(max, min, minor) > 100000 * stepSize) {\r\n\t\tthrow min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor;\r\n\t}\r\n\r\n\tfor (time = first; time < max; time = +adapter.add(time, stepSize, minor)) {\r\n\t\tticks.push(time);\r\n\t}\r\n\r\n\tif (time === max || options.bounds === 'ticks') {\r\n\t\tticks.push(time);\r\n\t}\r\n\r\n\treturn ticks;\r\n}\r\n\r\n/**\r\n * Returns the start and end offsets from edges in the form of {start, end}\r\n * where each value is a relative width to the scale and ranges between 0 and 1.\r\n * They add extra margins on the both sides by scaling down the original scale.\r\n * Offsets are added when the `offset` option is true.\r\n */\r\nfunction computeOffsets(table, ticks, min, max, options) {\r\n\tvar start = 0;\r\n\tvar end = 0;\r\n\tvar first, last;\r\n\r\n\tif (options.offset && ticks.length) {\r\n\t\tfirst = interpolate$1(table, 'time', ticks[0], 'pos');\r\n\t\tif (ticks.length === 1) {\r\n\t\t\tstart = 1 - first;\r\n\t\t} else {\r\n\t\t\tstart = (interpolate$1(table, 'time', ticks[1], 'pos') - first) / 2;\r\n\t\t}\r\n\t\tlast = interpolate$1(table, 'time', ticks[ticks.length - 1], 'pos');\r\n\t\tif (ticks.length === 1) {\r\n\t\t\tend = last;\r\n\t\t} else {\r\n\t\t\tend = (last - interpolate$1(table, 'time', ticks[ticks.length - 2], 'pos')) / 2;\r\n\t\t}\r\n\t}\r\n\r\n\treturn {start: start, end: end, factor: 1 / (start + 1 + end)};\r\n}\r\n\r\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\r\n\tvar adapter = scale._adapter;\r\n\tvar first = +adapter.startOf(ticks[0].value, majorUnit);\r\n\tvar last = ticks[ticks.length - 1].value;\r\n\tvar major, index;\r\n\r\n\tfor (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\r\n\t\tindex = map[major];\r\n\t\tif (index >= 0) {\r\n\t\t\tticks[index].major = true;\r\n\t\t}\r\n\t}\r\n\treturn ticks;\r\n}\r\n\r\nfunction ticksFromTimestamps(scale, values, majorUnit) {\r\n\tvar ticks = [];\r\n\tvar map = {};\r\n\tvar ilen = values.length;\r\n\tvar i, value;\r\n\r\n\tfor (i = 0; i < ilen; ++i) {\r\n\t\tvalue = values[i];\r\n\t\tmap[value] = i;\r\n\r\n\t\tticks.push({\r\n\t\t\tvalue: value,\r\n\t\t\tmajor: false\r\n\t\t});\r\n\t}\r\n\r\n\t// We set the major ticks separately from the above loop because calling startOf for every tick\r\n\t// is expensive when there is a large number of ticks\r\n\treturn (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\r\n}\r\n\r\nvar defaultConfig$4 = {\r\n\tposition: 'bottom',\r\n\r\n\t/**\r\n\t * Data distribution along the scale:\r\n\t * - 'linear': data are spread according to their time (distances can vary),\r\n\t * - 'series': data are spread at the same distance from each other.\r\n\t * @see https://github.com/chartjs/Chart.js/pull/4507\r\n\t * @since 2.7.0\r\n\t */\r\n\tdistribution: 'linear',\r\n\r\n\t/**\r\n\t * Scale boundary strategy (bypassed by min/max time options)\r\n\t * - `data`: make sure data are fully visible, ticks outside are removed\r\n\t * - `ticks`: make sure ticks are fully visible, data outside are truncated\r\n\t * @see https://github.com/chartjs/Chart.js/pull/4556\r\n\t * @since 2.7.0\r\n\t */\r\n\tbounds: 'data',\r\n\r\n\tadapters: {},\r\n\ttime: {\r\n\t\tparser: false, // false == a pattern string from https://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment\r\n\t\tunit: false, // false == automatic or override with week, month, year, etc.\r\n\t\tround: false, // none, or override with week, month, year, etc.\r\n\t\tdisplayFormat: false, // DEPRECATED\r\n\t\tisoWeekday: false, // override week start day - see https://momentjs.com/docs/#/get-set/iso-weekday/\r\n\t\tminUnit: 'millisecond',\r\n\t\tdisplayFormats: {}\r\n\t},\r\n\tticks: {\r\n\t\tautoSkip: false,\r\n\r\n\t\t/**\r\n\t\t * Ticks generation input values:\r\n\t\t * - 'auto': generates \"optimal\" ticks based on scale size and time options.\r\n\t\t * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\r\n\t\t * - 'labels': generates ticks from user given `data.labels` values ONLY.\r\n\t\t * @see https://github.com/chartjs/Chart.js/pull/4507\r\n\t\t * @since 2.7.0\r\n\t\t */\r\n\t\tsource: 'auto',\r\n\r\n\t\tmajor: {\r\n\t\t\tenabled: false\r\n\t\t}\r\n\t}\r\n};\r\n\r\nvar scale_time = core_scale.extend({\r\n\tinitialize: function() {\r\n\t\tthis.mergeTicksOptions();\r\n\t\tcore_scale.prototype.initialize.call(this);\r\n\t},\r\n\r\n\tupdate: function() {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar time = options.time || (options.time = {});\r\n\t\tvar adapter = me._adapter = new core_adapters._date(options.adapters.date);\r\n\r\n\t\t// DEPRECATIONS: output a message only one time per update\r\n\t\tdeprecated$1('time scale', time.format, 'time.format', 'time.parser');\r\n\t\tdeprecated$1('time scale', time.min, 'time.min', 'ticks.min');\r\n\t\tdeprecated$1('time scale', time.max, 'time.max', 'ticks.max');\r\n\r\n\t\t// Backward compatibility: before introducing adapter, `displayFormats` was\r\n\t\t// supposed to contain *all* unit/string pairs but this can't be resolved\r\n\t\t// when loading the scale (adapters are loaded afterward), so let's populate\r\n\t\t// missing formats on update\r\n\t\thelpers$1.mergeIf(time.displayFormats, adapter.formats());\r\n\r\n\t\treturn core_scale.prototype.update.apply(me, arguments);\r\n\t},\r\n\r\n\t/**\r\n\t * Allows data to be referenced via 't' attribute\r\n\t */\r\n\tgetRightValue: function(rawValue) {\r\n\t\tif (rawValue && rawValue.t !== undefined) {\r\n\t\t\trawValue = rawValue.t;\r\n\t\t}\r\n\t\treturn core_scale.prototype.getRightValue.call(this, rawValue);\r\n\t},\r\n\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar adapter = me._adapter;\r\n\t\tvar options = me.options;\r\n\t\tvar unit = options.time.unit || 'day';\r\n\t\tvar min = MAX_INTEGER;\r\n\t\tvar max = MIN_INTEGER;\r\n\t\tvar timestamps = [];\r\n\t\tvar datasets = [];\r\n\t\tvar labels = [];\r\n\t\tvar i, j, ilen, jlen, data, timestamp, labelsAdded;\r\n\t\tvar dataLabels = me._getLabels();\r\n\r\n\t\tfor (i = 0, ilen = dataLabels.length; i < ilen; ++i) {\r\n\t\t\tlabels.push(parse(me, dataLabels[i]));\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\tif (chart.isDatasetVisible(i)) {\r\n\t\t\t\tdata = chart.data.datasets[i].data;\r\n\r\n\t\t\t\t// Let's consider that all data have the same format.\r\n\t\t\t\tif (helpers$1.isObject(data[0])) {\r\n\t\t\t\t\tdatasets[i] = [];\r\n\r\n\t\t\t\t\tfor (j = 0, jlen = data.length; j < jlen; ++j) {\r\n\t\t\t\t\t\ttimestamp = parse(me, data[j]);\r\n\t\t\t\t\t\ttimestamps.push(timestamp);\r\n\t\t\t\t\t\tdatasets[i][j] = timestamp;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdatasets[i] = labels.slice(0);\r\n\t\t\t\t\tif (!labelsAdded) {\r\n\t\t\t\t\t\ttimestamps = timestamps.concat(labels);\r\n\t\t\t\t\t\tlabelsAdded = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tdatasets[i] = [];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (labels.length) {\r\n\t\t\tmin = Math.min(min, labels[0]);\r\n\t\t\tmax = Math.max(max, labels[labels.length - 1]);\r\n\t\t}\r\n\r\n\t\tif (timestamps.length) {\r\n\t\t\ttimestamps = ilen > 1 ? arrayUnique(timestamps).sort(sorter) : timestamps.sort(sorter);\r\n\t\t\tmin = Math.min(min, timestamps[0]);\r\n\t\t\tmax = Math.max(max, timestamps[timestamps.length - 1]);\r\n\t\t}\r\n\r\n\t\tmin = parse(me, getMin(options)) || min;\r\n\t\tmax = parse(me, getMax(options)) || max;\r\n\r\n\t\t// In case there is no valid min/max, set limits based on unit time option\r\n\t\tmin = min === MAX_INTEGER ? +adapter.startOf(Date.now(), unit) : min;\r\n\t\tmax = max === MIN_INTEGER ? +adapter.endOf(Date.now(), unit) + 1 : max;\r\n\r\n\t\t// Make sure that max is strictly higher than min (required by the lookup table)\r\n\t\tme.min = Math.min(min, max);\r\n\t\tme.max = Math.max(min + 1, max);\r\n\r\n\t\t// PRIVATE\r\n\t\tme._table = [];\r\n\t\tme._timestamps = {\r\n\t\t\tdata: timestamps,\r\n\t\t\tdatasets: datasets,\r\n\t\t\tlabels: labels\r\n\t\t};\r\n\t},\r\n\r\n\tbuildTicks: function() {\r\n\t\tvar me = this;\r\n\t\tvar min = me.min;\r\n\t\tvar max = me.max;\r\n\t\tvar options = me.options;\r\n\t\tvar tickOpts = options.ticks;\r\n\t\tvar timeOpts = options.time;\r\n\t\tvar timestamps = me._timestamps;\r\n\t\tvar ticks = [];\r\n\t\tvar capacity = me.getLabelCapacity(min);\r\n\t\tvar source = tickOpts.source;\r\n\t\tvar distribution = options.distribution;\r\n\t\tvar i, ilen, timestamp;\r\n\r\n\t\tif (source === 'data' || (source === 'auto' && distribution === 'series')) {\r\n\t\t\ttimestamps = timestamps.data;\r\n\t\t} else if (source === 'labels') {\r\n\t\t\ttimestamps = timestamps.labels;\r\n\t\t} else {\r\n\t\t\ttimestamps = generate(me, min, max, capacity);\r\n\t\t}\r\n\r\n\t\tif (options.bounds === 'ticks' && timestamps.length) {\r\n\t\t\tmin = timestamps[0];\r\n\t\t\tmax = timestamps[timestamps.length - 1];\r\n\t\t}\r\n\r\n\t\t// Enforce limits with user min/max options\r\n\t\tmin = parse(me, getMin(options)) || min;\r\n\t\tmax = parse(me, getMax(options)) || max;\r\n\r\n\t\t// Remove ticks outside the min/max range\r\n\t\tfor (i = 0, ilen = timestamps.length; i < ilen; ++i) {\r\n\t\t\ttimestamp = timestamps[i];\r\n\t\t\tif (timestamp >= min && timestamp <= max) {\r\n\t\t\t\tticks.push(timestamp);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.min = min;\r\n\t\tme.max = max;\r\n\r\n\t\t// PRIVATE\r\n\t\t// determineUnitForFormatting relies on the number of ticks so we don't use it when\r\n\t\t// autoSkip is enabled because we don't yet know what the final number of ticks will be\r\n\t\tme._unit = timeOpts.unit || (tickOpts.autoSkip\r\n\t\t\t? determineUnitForAutoTicks(timeOpts.minUnit, me.min, me.max, capacity)\r\n\t\t\t: determineUnitForFormatting(me, ticks.length, timeOpts.minUnit, me.min, me.max));\r\n\t\tme._majorUnit = !tickOpts.major.enabled || me._unit === 'year' ? undefined\r\n\t\t\t: determineMajorUnit(me._unit);\r\n\t\tme._table = buildLookupTable(me._timestamps.data, min, max, distribution);\r\n\t\tme._offsets = computeOffsets(me._table, ticks, min, max, options);\r\n\r\n\t\tif (tickOpts.reverse) {\r\n\t\t\tticks.reverse();\r\n\t\t}\r\n\r\n\t\treturn ticksFromTimestamps(me, ticks, me._majorUnit);\r\n\t},\r\n\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar adapter = me._adapter;\r\n\t\tvar data = me.chart.data;\r\n\t\tvar timeOpts = me.options.time;\r\n\t\tvar label = data.labels && index < data.labels.length ? data.labels[index] : '';\r\n\t\tvar value = data.datasets[datasetIndex].data[index];\r\n\r\n\t\tif (helpers$1.isObject(value)) {\r\n\t\t\tlabel = me.getRightValue(value);\r\n\t\t}\r\n\t\tif (timeOpts.tooltipFormat) {\r\n\t\t\treturn adapter.format(toTimestamp(me, label), timeOpts.tooltipFormat);\r\n\t\t}\r\n\t\tif (typeof label === 'string') {\r\n\t\t\treturn label;\r\n\t\t}\r\n\t\treturn adapter.format(toTimestamp(me, label), timeOpts.displayFormats.datetime);\r\n\t},\r\n\r\n\t/**\r\n\t * Function to format an individual tick mark\r\n\t * @private\r\n\t */\r\n\ttickFormatFunction: function(time, index, ticks, format) {\r\n\t\tvar me = this;\r\n\t\tvar adapter = me._adapter;\r\n\t\tvar options = me.options;\r\n\t\tvar formats = options.time.displayFormats;\r\n\t\tvar minorFormat = formats[me._unit];\r\n\t\tvar majorUnit = me._majorUnit;\r\n\t\tvar majorFormat = formats[majorUnit];\r\n\t\tvar tick = ticks[index];\r\n\t\tvar tickOpts = options.ticks;\r\n\t\tvar major = majorUnit && majorFormat && tick && tick.major;\r\n\t\tvar label = adapter.format(time, format ? format : major ? majorFormat : minorFormat);\r\n\t\tvar nestedTickOpts = major ? tickOpts.major : tickOpts.minor;\r\n\t\tvar formatter = resolve$5([\r\n\t\t\tnestedTickOpts.callback,\r\n\t\t\tnestedTickOpts.userCallback,\r\n\t\t\ttickOpts.callback,\r\n\t\t\ttickOpts.userCallback\r\n\t\t]);\r\n\r\n\t\treturn formatter ? formatter(label, index, ticks) : label;\r\n\t},\r\n\r\n\tconvertTicksToLabels: function(ticks) {\r\n\t\tvar labels = [];\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\r\n\t\t\tlabels.push(this.tickFormatFunction(ticks[i].value, i, ticks));\r\n\t\t}\r\n\r\n\t\treturn labels;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tgetPixelForOffset: function(time) {\r\n\t\tvar me = this;\r\n\t\tvar offsets = me._offsets;\r\n\t\tvar pos = interpolate$1(me._table, 'time', time, 'pos');\r\n\t\treturn me.getPixelForDecimal((offsets.start + pos) * offsets.factor);\r\n\t},\r\n\r\n\tgetPixelForValue: function(value, index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar time = null;\r\n\r\n\t\tif (index !== undefined && datasetIndex !== undefined) {\r\n\t\t\ttime = me._timestamps.datasets[datasetIndex][index];\r\n\t\t}\r\n\r\n\t\tif (time === null) {\r\n\t\t\ttime = parse(me, value);\r\n\t\t}\r\n\r\n\t\tif (time !== null) {\r\n\t\t\treturn me.getPixelForOffset(time);\r\n\t\t}\r\n\t},\r\n\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar ticks = this.getTicks();\r\n\t\treturn index >= 0 && index < ticks.length ?\r\n\t\t\tthis.getPixelForOffset(ticks[index].value) :\r\n\t\t\tnull;\r\n\t},\r\n\r\n\tgetValueForPixel: function(pixel) {\r\n\t\tvar me = this;\r\n\t\tvar offsets = me._offsets;\r\n\t\tvar pos = me.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\r\n\t\tvar time = interpolate$1(me._table, 'pos', pos, 'time');\r\n\r\n\t\t// DEPRECATION, we should return time directly\r\n\t\treturn me._adapter._create(time);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getLabelSize: function(label) {\r\n\t\tvar me = this;\r\n\t\tvar ticksOpts = me.options.ticks;\r\n\t\tvar tickLabelWidth = me.ctx.measureText(label).width;\r\n\t\tvar angle = helpers$1.toRadians(me.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\r\n\t\tvar cosRotation = Math.cos(angle);\r\n\t\tvar sinRotation = Math.sin(angle);\r\n\t\tvar tickFontSize = valueOrDefault$d(ticksOpts.fontSize, core_defaults.global.defaultFontSize);\r\n\r\n\t\treturn {\r\n\t\t\tw: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\r\n\t\t\th: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Crude approximation of what the label width might be\r\n\t * @private\r\n\t */\r\n\tgetLabelWidth: function(label) {\r\n\t\treturn this._getLabelSize(label).w;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tgetLabelCapacity: function(exampleTime) {\r\n\t\tvar me = this;\r\n\t\tvar timeOpts = me.options.time;\r\n\t\tvar displayFormats = timeOpts.displayFormats;\r\n\r\n\t\t// pick the longest format (milliseconds) for guestimation\r\n\t\tvar format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\r\n\t\tvar exampleLabel = me.tickFormatFunction(exampleTime, 0, ticksFromTimestamps(me, [exampleTime], me._majorUnit), format);\r\n\t\tvar size = me._getLabelSize(exampleLabel);\r\n\t\tvar capacity = Math.floor(me.isHorizontal() ? me.width / size.w : me.height / size.h);\r\n\r\n\t\tif (me.options.offset) {\r\n\t\t\tcapacity--;\r\n\t\t}\r\n\r\n\t\treturn capacity > 0 ? capacity : 1;\r\n\t}\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults$4 = defaultConfig$4;\nscale_time._defaults = _defaults$4;\n\nvar scales = {\r\n\tcategory: scale_category,\r\n\tlinear: scale_linear,\r\n\tlogarithmic: scale_logarithmic,\r\n\tradialLinear: scale_radialLinear,\r\n\ttime: scale_time\r\n};\n\nvar FORMATS = {\r\n\tdatetime: 'MMM D, YYYY, h:mm:ss a',\r\n\tmillisecond: 'h:mm:ss.SSS a',\r\n\tsecond: 'h:mm:ss a',\r\n\tminute: 'h:mm a',\r\n\thour: 'hA',\r\n\tday: 'MMM D',\r\n\tweek: 'll',\r\n\tmonth: 'MMM YYYY',\r\n\tquarter: '[Q]Q - YYYY',\r\n\tyear: 'YYYY'\r\n};\r\n\r\ncore_adapters._date.override(typeof moment === 'function' ? {\r\n\t_id: 'moment', // DEBUG ONLY\r\n\r\n\tformats: function() {\r\n\t\treturn FORMATS;\r\n\t},\r\n\r\n\tparse: function(value, format) {\r\n\t\tif (typeof value === 'string' && typeof format === 'string') {\r\n\t\t\tvalue = moment(value, format);\r\n\t\t} else if (!(value instanceof moment)) {\r\n\t\t\tvalue = moment(value);\r\n\t\t}\r\n\t\treturn value.isValid() ? value.valueOf() : null;\r\n\t},\r\n\r\n\tformat: function(time, format) {\r\n\t\treturn moment(time).format(format);\r\n\t},\r\n\r\n\tadd: function(time, amount, unit) {\r\n\t\treturn moment(time).add(amount, unit).valueOf();\r\n\t},\r\n\r\n\tdiff: function(max, min, unit) {\r\n\t\treturn moment(max).diff(moment(min), unit);\r\n\t},\r\n\r\n\tstartOf: function(time, unit, weekday) {\r\n\t\ttime = moment(time);\r\n\t\tif (unit === 'isoWeek') {\r\n\t\t\treturn time.isoWeekday(weekday).valueOf();\r\n\t\t}\r\n\t\treturn time.startOf(unit).valueOf();\r\n\t},\r\n\r\n\tendOf: function(time, unit) {\r\n\t\treturn moment(time).endOf(unit).valueOf();\r\n\t},\r\n\r\n\t// DEPRECATIONS\r\n\r\n\t/**\r\n\t * Provided for backward compatibility with scale.getValueForPixel().\r\n\t * @deprecated since version 2.8.0\r\n\t * @todo remove at version 3\r\n\t * @private\r\n\t */\r\n\t_create: function(time) {\r\n\t\treturn moment(time);\r\n\t},\r\n} : {});\n\ncore_defaults._set('global', {\r\n\tplugins: {\r\n\t\tfiller: {\r\n\t\t\tpropagate: true\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar mappers = {\r\n\tdataset: function(source) {\r\n\t\tvar index = source.fill;\r\n\t\tvar chart = source.chart;\r\n\t\tvar meta = chart.getDatasetMeta(index);\r\n\t\tvar visible = meta && chart.isDatasetVisible(index);\r\n\t\tvar points = (visible && meta.dataset._children) || [];\r\n\t\tvar length = points.length || 0;\r\n\r\n\t\treturn !length ? null : function(point, i) {\r\n\t\t\treturn (i < length && points[i]._view) || null;\r\n\t\t};\r\n\t},\r\n\r\n\tboundary: function(source) {\r\n\t\tvar boundary = source.boundary;\r\n\t\tvar x = boundary ? boundary.x : null;\r\n\t\tvar y = boundary ? boundary.y : null;\r\n\r\n\t\tif (helpers$1.isArray(boundary)) {\r\n\t\t\treturn function(point, i) {\r\n\t\t\t\treturn boundary[i];\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn function(point) {\r\n\t\t\treturn {\r\n\t\t\t\tx: x === null ? point.x : x,\r\n\t\t\t\ty: y === null ? point.y : y,\r\n\t\t\t};\r\n\t\t};\r\n\t}\r\n};\r\n\r\n// @todo if (fill[0] === '#')\r\nfunction decodeFill(el, index, count) {\r\n\tvar model = el._model || {};\r\n\tvar fill = model.fill;\r\n\tvar target;\r\n\r\n\tif (fill === undefined) {\r\n\t\tfill = !!model.backgroundColor;\r\n\t}\r\n\r\n\tif (fill === false || fill === null) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif (fill === true) {\r\n\t\treturn 'origin';\r\n\t}\r\n\r\n\ttarget = parseFloat(fill, 10);\r\n\tif (isFinite(target) && Math.floor(target) === target) {\r\n\t\tif (fill[0] === '-' || fill[0] === '+') {\r\n\t\t\ttarget = index + target;\r\n\t\t}\r\n\r\n\t\tif (target === index || target < 0 || target >= count) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn target;\r\n\t}\r\n\r\n\tswitch (fill) {\r\n\t// compatibility\r\n\tcase 'bottom':\r\n\t\treturn 'start';\r\n\tcase 'top':\r\n\t\treturn 'end';\r\n\tcase 'zero':\r\n\t\treturn 'origin';\r\n\t// supported boundaries\r\n\tcase 'origin':\r\n\tcase 'start':\r\n\tcase 'end':\r\n\t\treturn fill;\r\n\t// invalid fill values\r\n\tdefault:\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\nfunction computeLinearBoundary(source) {\r\n\tvar model = source.el._model || {};\r\n\tvar scale = source.el._scale || {};\r\n\tvar fill = source.fill;\r\n\tvar target = null;\r\n\tvar horizontal;\r\n\r\n\tif (isFinite(fill)) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\t// Backward compatibility: until v3, we still need to support boundary values set on\r\n\t// the model (scaleTop, scaleBottom and scaleZero) because some external plugins and\r\n\t// controllers might still use it (e.g. the Smith chart).\r\n\r\n\tif (fill === 'start') {\r\n\t\ttarget = model.scaleBottom === undefined ? scale.bottom : model.scaleBottom;\r\n\t} else if (fill === 'end') {\r\n\t\ttarget = model.scaleTop === undefined ? scale.top : model.scaleTop;\r\n\t} else if (model.scaleZero !== undefined) {\r\n\t\ttarget = model.scaleZero;\r\n\t} else if (scale.getBasePixel) {\r\n\t\ttarget = scale.getBasePixel();\r\n\t}\r\n\r\n\tif (target !== undefined && target !== null) {\r\n\t\tif (target.x !== undefined && target.y !== undefined) {\r\n\t\t\treturn target;\r\n\t\t}\r\n\r\n\t\tif (helpers$1.isFinite(target)) {\r\n\t\t\thorizontal = scale.isHorizontal();\r\n\t\t\treturn {\r\n\t\t\t\tx: horizontal ? target : null,\r\n\t\t\t\ty: horizontal ? null : target\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n\r\nfunction computeCircularBoundary(source) {\r\n\tvar scale = source.el._scale;\r\n\tvar options = scale.options;\r\n\tvar length = scale.chart.data.labels.length;\r\n\tvar fill = source.fill;\r\n\tvar target = [];\r\n\tvar start, end, center, i, point;\r\n\r\n\tif (!length) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tstart = options.ticks.reverse ? scale.max : scale.min;\r\n\tend = options.ticks.reverse ? scale.min : scale.max;\r\n\tcenter = scale.getPointPositionForValue(0, start);\r\n\tfor (i = 0; i < length; ++i) {\r\n\t\tpoint = fill === 'start' || fill === 'end'\r\n\t\t\t? scale.getPointPositionForValue(i, fill === 'start' ? start : end)\r\n\t\t\t: scale.getBasePosition(i);\r\n\t\tif (options.gridLines.circular) {\r\n\t\t\tpoint.cx = center.x;\r\n\t\t\tpoint.cy = center.y;\r\n\t\t\tpoint.angle = scale.getIndexAngle(i) - Math.PI / 2;\r\n\t\t}\r\n\t\ttarget.push(point);\r\n\t}\r\n\treturn target;\r\n}\r\n\r\nfunction computeBoundary(source) {\r\n\tvar scale = source.el._scale || {};\r\n\r\n\tif (scale.getPointPositionForValue) {\r\n\t\treturn computeCircularBoundary(source);\r\n\t}\r\n\treturn computeLinearBoundary(source);\r\n}\r\n\r\nfunction resolveTarget(sources, index, propagate) {\r\n\tvar source = sources[index];\r\n\tvar fill = source.fill;\r\n\tvar visited = [index];\r\n\tvar target;\r\n\r\n\tif (!propagate) {\r\n\t\treturn fill;\r\n\t}\r\n\r\n\twhile (fill !== false && visited.indexOf(fill) === -1) {\r\n\t\tif (!isFinite(fill)) {\r\n\t\t\treturn fill;\r\n\t\t}\r\n\r\n\t\ttarget = sources[fill];\r\n\t\tif (!target) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (target.visible) {\r\n\t\t\treturn fill;\r\n\t\t}\r\n\r\n\t\tvisited.push(fill);\r\n\t\tfill = target.fill;\r\n\t}\r\n\r\n\treturn false;\r\n}\r\n\r\nfunction createMapper(source) {\r\n\tvar fill = source.fill;\r\n\tvar type = 'dataset';\r\n\r\n\tif (fill === false) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif (!isFinite(fill)) {\r\n\t\ttype = 'boundary';\r\n\t}\r\n\r\n\treturn mappers[type](source);\r\n}\r\n\r\nfunction isDrawable(point) {\r\n\treturn point && !point.skip;\r\n}\r\n\r\nfunction drawArea(ctx, curve0, curve1, len0, len1) {\r\n\tvar i, cx, cy, r;\r\n\r\n\tif (!len0 || !len1) {\r\n\t\treturn;\r\n\t}\r\n\r\n\t// building first area curve (normal)\r\n\tctx.moveTo(curve0[0].x, curve0[0].y);\r\n\tfor (i = 1; i < len0; ++i) {\r\n\t\thelpers$1.canvas.lineTo(ctx, curve0[i - 1], curve0[i]);\r\n\t}\r\n\r\n\tif (curve1[0].angle !== undefined) {\r\n\t\tcx = curve1[0].cx;\r\n\t\tcy = curve1[0].cy;\r\n\t\tr = Math.sqrt(Math.pow(curve1[0].x - cx, 2) + Math.pow(curve1[0].y - cy, 2));\r\n\t\tfor (i = len1 - 1; i > 0; --i) {\r\n\t\t\tctx.arc(cx, cy, r, curve1[i].angle, curve1[i - 1].angle, true);\r\n\t\t}\r\n\t\treturn;\r\n\t}\r\n\r\n\t// joining the two area curves\r\n\tctx.lineTo(curve1[len1 - 1].x, curve1[len1 - 1].y);\r\n\r\n\t// building opposite area curve (reverse)\r\n\tfor (i = len1 - 1; i > 0; --i) {\r\n\t\thelpers$1.canvas.lineTo(ctx, curve1[i], curve1[i - 1], true);\r\n\t}\r\n}\r\n\r\nfunction doFill(ctx, points, mapper, view, color, loop) {\r\n\tvar count = points.length;\r\n\tvar span = view.spanGaps;\r\n\tvar curve0 = [];\r\n\tvar curve1 = [];\r\n\tvar len0 = 0;\r\n\tvar len1 = 0;\r\n\tvar i, ilen, index, p0, p1, d0, d1, loopOffset;\r\n\r\n\tctx.beginPath();\r\n\r\n\tfor (i = 0, ilen = count; i < ilen; ++i) {\r\n\t\tindex = i % count;\r\n\t\tp0 = points[index]._view;\r\n\t\tp1 = mapper(p0, index, view);\r\n\t\td0 = isDrawable(p0);\r\n\t\td1 = isDrawable(p1);\r\n\r\n\t\tif (loop && loopOffset === undefined && d0) {\r\n\t\t\tloopOffset = i + 1;\r\n\t\t\tilen = count + loopOffset;\r\n\t\t}\r\n\r\n\t\tif (d0 && d1) {\r\n\t\t\tlen0 = curve0.push(p0);\r\n\t\t\tlen1 = curve1.push(p1);\r\n\t\t} else if (len0 && len1) {\r\n\t\t\tif (!span) {\r\n\t\t\t\tdrawArea(ctx, curve0, curve1, len0, len1);\r\n\t\t\t\tlen0 = len1 = 0;\r\n\t\t\t\tcurve0 = [];\r\n\t\t\t\tcurve1 = [];\r\n\t\t\t} else {\r\n\t\t\t\tif (d0) {\r\n\t\t\t\t\tcurve0.push(p0);\r\n\t\t\t\t}\r\n\t\t\t\tif (d1) {\r\n\t\t\t\t\tcurve1.push(p1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tdrawArea(ctx, curve0, curve1, len0, len1);\r\n\r\n\tctx.closePath();\r\n\tctx.fillStyle = color;\r\n\tctx.fill();\r\n}\r\n\r\nvar plugin_filler = {\r\n\tid: 'filler',\r\n\r\n\tafterDatasetsUpdate: function(chart, options) {\r\n\t\tvar count = (chart.data.datasets || []).length;\r\n\t\tvar propagate = options.propagate;\r\n\t\tvar sources = [];\r\n\t\tvar meta, i, el, source;\r\n\r\n\t\tfor (i = 0; i < count; ++i) {\r\n\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\tel = meta.dataset;\r\n\t\t\tsource = null;\r\n\r\n\t\t\tif (el && el._model && el instanceof elements.Line) {\r\n\t\t\t\tsource = {\r\n\t\t\t\t\tvisible: chart.isDatasetVisible(i),\r\n\t\t\t\t\tfill: decodeFill(el, i, count),\r\n\t\t\t\t\tchart: chart,\r\n\t\t\t\t\tel: el\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tmeta.$filler = source;\r\n\t\t\tsources.push(source);\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < count; ++i) {\r\n\t\t\tsource = sources[i];\r\n\t\t\tif (!source) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tsource.fill = resolveTarget(sources, i, propagate);\r\n\t\t\tsource.boundary = computeBoundary(source);\r\n\t\t\tsource.mapper = createMapper(source);\r\n\t\t}\r\n\t},\r\n\r\n\tbeforeDatasetsDraw: function(chart) {\r\n\t\tvar metasets = chart._getSortedVisibleDatasetMetas();\r\n\t\tvar ctx = chart.ctx;\r\n\t\tvar meta, i, el, view, points, mapper, color;\r\n\r\n\t\tfor (i = metasets.length - 1; i >= 0; --i) {\r\n\t\t\tmeta = metasets[i].$filler;\r\n\r\n\t\t\tif (!meta || !meta.visible) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tel = meta.el;\r\n\t\t\tview = el._view;\r\n\t\t\tpoints = el._children || [];\r\n\t\t\tmapper = meta.mapper;\r\n\t\t\tcolor = view.backgroundColor || core_defaults.global.defaultColor;\r\n\r\n\t\t\tif (mapper && color && points.length) {\r\n\t\t\t\thelpers$1.canvas.clipArea(ctx, chart.chartArea);\r\n\t\t\t\tdoFill(ctx, points, mapper, view, color, el._loop);\r\n\t\t\t\thelpers$1.canvas.unclipArea(ctx);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\n\nvar getRtlHelper$1 = helpers$1.rtl.getRtlAdapter;\r\nvar noop$1 = helpers$1.noop;\r\nvar valueOrDefault$e = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('global', {\r\n\tlegend: {\r\n\t\tdisplay: true,\r\n\t\tposition: 'top',\r\n\t\talign: 'center',\r\n\t\tfullWidth: true,\r\n\t\treverse: false,\r\n\t\tweight: 1000,\r\n\r\n\t\t// a callback that will handle\r\n\t\tonClick: function(e, legendItem) {\r\n\t\t\tvar index = legendItem.datasetIndex;\r\n\t\t\tvar ci = this.chart;\r\n\t\t\tvar meta = ci.getDatasetMeta(index);\r\n\r\n\t\t\t// See controller.isDatasetVisible comment\r\n\t\t\tmeta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null;\r\n\r\n\t\t\t// We hid a dataset ... rerender the chart\r\n\t\t\tci.update();\r\n\t\t},\r\n\r\n\t\tonHover: null,\r\n\t\tonLeave: null,\r\n\r\n\t\tlabels: {\r\n\t\t\tboxWidth: 40,\r\n\t\t\tpadding: 10,\r\n\t\t\t// Generates labels shown in the legend\r\n\t\t\t// Valid properties to return:\r\n\t\t\t// text : text to display\r\n\t\t\t// fillStyle : fill of coloured box\r\n\t\t\t// strokeStyle: stroke of coloured box\r\n\t\t\t// hidden : if this legend item refers to a hidden item\r\n\t\t\t// lineCap : cap style for line\r\n\t\t\t// lineDash\r\n\t\t\t// lineDashOffset :\r\n\t\t\t// lineJoin :\r\n\t\t\t// lineWidth :\r\n\t\t\tgenerateLabels: function(chart) {\r\n\t\t\t\tvar datasets = chart.data.datasets;\r\n\t\t\t\tvar options = chart.options.legend || {};\r\n\t\t\t\tvar usePointStyle = options.labels && options.labels.usePointStyle;\r\n\r\n\t\t\t\treturn chart._getSortedDatasetMetas().map(function(meta) {\r\n\t\t\t\t\tvar style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\r\n\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\ttext: datasets[meta.index].label,\r\n\t\t\t\t\t\tfillStyle: style.backgroundColor,\r\n\t\t\t\t\t\thidden: !chart.isDatasetVisible(meta.index),\r\n\t\t\t\t\t\tlineCap: style.borderCapStyle,\r\n\t\t\t\t\t\tlineDash: style.borderDash,\r\n\t\t\t\t\t\tlineDashOffset: style.borderDashOffset,\r\n\t\t\t\t\t\tlineJoin: style.borderJoinStyle,\r\n\t\t\t\t\t\tlineWidth: style.borderWidth,\r\n\t\t\t\t\t\tstrokeStyle: style.borderColor,\r\n\t\t\t\t\t\tpointStyle: style.pointStyle,\r\n\t\t\t\t\t\trotation: style.rotation,\r\n\r\n\t\t\t\t\t\t// Below is extra data used for toggling the datasets\r\n\t\t\t\t\t\tdatasetIndex: meta.index\r\n\t\t\t\t\t};\r\n\t\t\t\t}, this);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tlegendCallback: function(chart) {\r\n\t\tvar list = document.createElement('ul');\r\n\t\tvar datasets = chart.data.datasets;\r\n\t\tvar i, ilen, listItem, listItemSpan;\r\n\r\n\t\tlist.setAttribute('class', chart.id + '-legend');\r\n\r\n\t\tfor (i = 0, ilen = datasets.length; i < ilen; i++) {\r\n\t\t\tlistItem = list.appendChild(document.createElement('li'));\r\n\t\t\tlistItemSpan = listItem.appendChild(document.createElement('span'));\r\n\t\t\tlistItemSpan.style.backgroundColor = datasets[i].backgroundColor;\r\n\t\t\tif (datasets[i].label) {\r\n\t\t\t\tlistItem.appendChild(document.createTextNode(datasets[i].label));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn list.outerHTML;\r\n\t}\r\n});\r\n\r\n/**\r\n * Helper function to get the box width based on the usePointStyle option\r\n * @param {object} labelopts - the label options on the legend\r\n * @param {number} fontSize - the label font size\r\n * @return {number} width of the color box area\r\n */\r\nfunction getBoxWidth(labelOpts, fontSize) {\r\n\treturn labelOpts.usePointStyle && labelOpts.boxWidth > fontSize ?\r\n\t\tfontSize :\r\n\t\tlabelOpts.boxWidth;\r\n}\r\n\r\n/**\r\n * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\r\n */\r\nvar Legend = core_element.extend({\r\n\r\n\tinitialize: function(config) {\r\n\t\tvar me = this;\r\n\t\thelpers$1.extend(me, config);\r\n\r\n\t\t// Contains hit boxes for each dataset (in dataset order)\r\n\t\tme.legendHitBoxes = [];\r\n\r\n\t\t/**\r\n \t\t * @private\r\n \t\t */\r\n\t\tme._hoveredItem = null;\r\n\r\n\t\t// Are we in doughnut mode which has a different data type\r\n\t\tme.doughnutMode = false;\r\n\t},\r\n\r\n\t// These methods are ordered by lifecycle. Utilities then follow.\r\n\t// Any function defined here is inherited by all legend types.\r\n\t// Any function can be extended by the legend type\r\n\r\n\tbeforeUpdate: noop$1,\r\n\tupdate: function(maxWidth, maxHeight, margins) {\r\n\t\tvar me = this;\r\n\r\n\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\r\n\t\tme.beforeUpdate();\r\n\r\n\t\t// Absorb the master measurements\r\n\t\tme.maxWidth = maxWidth;\r\n\t\tme.maxHeight = maxHeight;\r\n\t\tme.margins = margins;\r\n\r\n\t\t// Dimensions\r\n\t\tme.beforeSetDimensions();\r\n\t\tme.setDimensions();\r\n\t\tme.afterSetDimensions();\r\n\t\t// Labels\r\n\t\tme.beforeBuildLabels();\r\n\t\tme.buildLabels();\r\n\t\tme.afterBuildLabels();\r\n\r\n\t\t// Fit\r\n\t\tme.beforeFit();\r\n\t\tme.fit();\r\n\t\tme.afterFit();\r\n\t\t//\r\n\t\tme.afterUpdate();\r\n\r\n\t\treturn me.minSize;\r\n\t},\r\n\tafterUpdate: noop$1,\r\n\r\n\t//\r\n\r\n\tbeforeSetDimensions: noop$1,\r\n\tsetDimensions: function() {\r\n\t\tvar me = this;\r\n\t\t// Set the unconstrained dimension before label rotation\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.width = me.maxWidth;\r\n\t\t\tme.left = 0;\r\n\t\t\tme.right = me.width;\r\n\t\t} else {\r\n\t\t\tme.height = me.maxHeight;\r\n\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.top = 0;\r\n\t\t\tme.bottom = me.height;\r\n\t\t}\r\n\r\n\t\t// Reset padding\r\n\t\tme.paddingLeft = 0;\r\n\t\tme.paddingTop = 0;\r\n\t\tme.paddingRight = 0;\r\n\t\tme.paddingBottom = 0;\r\n\r\n\t\t// Reset minSize\r\n\t\tme.minSize = {\r\n\t\t\twidth: 0,\r\n\t\t\theight: 0\r\n\t\t};\r\n\t},\r\n\tafterSetDimensions: noop$1,\r\n\r\n\t//\r\n\r\n\tbeforeBuildLabels: noop$1,\r\n\tbuildLabels: function() {\r\n\t\tvar me = this;\r\n\t\tvar labelOpts = me.options.labels || {};\r\n\t\tvar legendItems = helpers$1.callback(labelOpts.generateLabels, [me.chart], me) || [];\r\n\r\n\t\tif (labelOpts.filter) {\r\n\t\t\tlegendItems = legendItems.filter(function(item) {\r\n\t\t\t\treturn labelOpts.filter(item, me.chart.data);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (me.options.reverse) {\r\n\t\t\tlegendItems.reverse();\r\n\t\t}\r\n\r\n\t\tme.legendItems = legendItems;\r\n\t},\r\n\tafterBuildLabels: noop$1,\r\n\r\n\t//\r\n\r\n\tbeforeFit: noop$1,\r\n\tfit: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar labelOpts = opts.labels;\r\n\t\tvar display = opts.display;\r\n\r\n\t\tvar ctx = me.ctx;\r\n\r\n\t\tvar labelFont = helpers$1.options._parseFont(labelOpts);\r\n\t\tvar fontSize = labelFont.size;\r\n\r\n\t\t// Reset hit boxes\r\n\t\tvar hitboxes = me.legendHitBoxes = [];\r\n\r\n\t\tvar minSize = me.minSize;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\r\n\t\tif (isHorizontal) {\r\n\t\t\tminSize.width = me.maxWidth; // fill all the width\r\n\t\t\tminSize.height = display ? 10 : 0;\r\n\t\t} else {\r\n\t\t\tminSize.width = display ? 10 : 0;\r\n\t\t\tminSize.height = me.maxHeight; // fill all the height\r\n\t\t}\r\n\r\n\t\t// Increase sizes here\r\n\t\tif (!display) {\r\n\t\t\tme.width = minSize.width = me.height = minSize.height = 0;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tctx.font = labelFont.string;\r\n\r\n\t\tif (isHorizontal) {\r\n\t\t\t// Labels\r\n\r\n\t\t\t// Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\r\n\t\t\tvar lineWidths = me.lineWidths = [0];\r\n\t\t\tvar totalHeight = 0;\r\n\r\n\t\t\tctx.textAlign = 'left';\r\n\t\t\tctx.textBaseline = 'middle';\r\n\r\n\t\t\thelpers$1.each(me.legendItems, function(legendItem, i) {\r\n\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\r\n\t\t\t\tvar width = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\r\n\r\n\t\t\t\tif (i === 0 || lineWidths[lineWidths.length - 1] + width + 2 * labelOpts.padding > minSize.width) {\r\n\t\t\t\t\ttotalHeight += fontSize + labelOpts.padding;\r\n\t\t\t\t\tlineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\r\n\t\t\t\thitboxes[i] = {\r\n\t\t\t\t\tleft: 0,\r\n\t\t\t\t\ttop: 0,\r\n\t\t\t\t\twidth: width,\r\n\t\t\t\t\theight: fontSize\r\n\t\t\t\t};\r\n\r\n\t\t\t\tlineWidths[lineWidths.length - 1] += width + labelOpts.padding;\r\n\t\t\t});\r\n\r\n\t\t\tminSize.height += totalHeight;\r\n\r\n\t\t} else {\r\n\t\t\tvar vPadding = labelOpts.padding;\r\n\t\t\tvar columnWidths = me.columnWidths = [];\r\n\t\t\tvar columnHeights = me.columnHeights = [];\r\n\t\t\tvar totalWidth = labelOpts.padding;\r\n\t\t\tvar currentColWidth = 0;\r\n\t\t\tvar currentColHeight = 0;\r\n\r\n\t\t\thelpers$1.each(me.legendItems, function(legendItem, i) {\r\n\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\r\n\t\t\t\tvar itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\r\n\r\n\t\t\t\t// If too tall, go to new column\r\n\t\t\t\tif (i > 0 && currentColHeight + fontSize + 2 * vPadding > minSize.height) {\r\n\t\t\t\t\ttotalWidth += currentColWidth + labelOpts.padding;\r\n\t\t\t\t\tcolumnWidths.push(currentColWidth); // previous column width\r\n\t\t\t\t\tcolumnHeights.push(currentColHeight);\r\n\t\t\t\t\tcurrentColWidth = 0;\r\n\t\t\t\t\tcurrentColHeight = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Get max width\r\n\t\t\t\tcurrentColWidth = Math.max(currentColWidth, itemWidth);\r\n\t\t\t\tcurrentColHeight += fontSize + vPadding;\r\n\r\n\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\r\n\t\t\t\thitboxes[i] = {\r\n\t\t\t\t\tleft: 0,\r\n\t\t\t\t\ttop: 0,\r\n\t\t\t\t\twidth: itemWidth,\r\n\t\t\t\t\theight: fontSize\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\ttotalWidth += currentColWidth;\r\n\t\t\tcolumnWidths.push(currentColWidth);\r\n\t\t\tcolumnHeights.push(currentColHeight);\r\n\t\t\tminSize.width += totalWidth;\r\n\t\t}\r\n\r\n\t\tme.width = minSize.width;\r\n\t\tme.height = minSize.height;\r\n\t},\r\n\tafterFit: noop$1,\r\n\r\n\t// Shared Methods\r\n\tisHorizontal: function() {\r\n\t\treturn this.options.position === 'top' || this.options.position === 'bottom';\r\n\t},\r\n\r\n\t// Actually draw the legend on the canvas\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar labelOpts = opts.labels;\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar defaultColor = globalDefaults.defaultColor;\r\n\t\tvar lineDefault = globalDefaults.elements.line;\r\n\t\tvar legendHeight = me.height;\r\n\t\tvar columnHeights = me.columnHeights;\r\n\t\tvar legendWidth = me.width;\r\n\t\tvar lineWidths = me.lineWidths;\r\n\r\n\t\tif (!opts.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar rtlHelper = getRtlHelper$1(opts.rtl, me.left, me.minSize.width);\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar fontColor = valueOrDefault$e(labelOpts.fontColor, globalDefaults.defaultFontColor);\r\n\t\tvar labelFont = helpers$1.options._parseFont(labelOpts);\r\n\t\tvar fontSize = labelFont.size;\r\n\t\tvar cursor;\r\n\r\n\t\t// Canvas setup\r\n\t\tctx.textAlign = rtlHelper.textAlign('left');\r\n\t\tctx.textBaseline = 'middle';\r\n\t\tctx.lineWidth = 0.5;\r\n\t\tctx.strokeStyle = fontColor; // for strikethrough effect\r\n\t\tctx.fillStyle = fontColor; // render in correct colour\r\n\t\tctx.font = labelFont.string;\r\n\r\n\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\r\n\t\tvar hitboxes = me.legendHitBoxes;\r\n\r\n\t\t// current position\r\n\t\tvar drawLegendBox = function(x, y, legendItem) {\r\n\t\t\tif (isNaN(boxWidth) || boxWidth <= 0) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Set the ctx for the box\r\n\t\t\tctx.save();\r\n\r\n\t\t\tvar lineWidth = valueOrDefault$e(legendItem.lineWidth, lineDefault.borderWidth);\r\n\t\t\tctx.fillStyle = valueOrDefault$e(legendItem.fillStyle, defaultColor);\r\n\t\t\tctx.lineCap = valueOrDefault$e(legendItem.lineCap, lineDefault.borderCapStyle);\r\n\t\t\tctx.lineDashOffset = valueOrDefault$e(legendItem.lineDashOffset, lineDefault.borderDashOffset);\r\n\t\t\tctx.lineJoin = valueOrDefault$e(legendItem.lineJoin, lineDefault.borderJoinStyle);\r\n\t\t\tctx.lineWidth = lineWidth;\r\n\t\t\tctx.strokeStyle = valueOrDefault$e(legendItem.strokeStyle, defaultColor);\r\n\r\n\t\t\tif (ctx.setLineDash) {\r\n\t\t\t\t// IE 9 and 10 do not support line dash\r\n\t\t\t\tctx.setLineDash(valueOrDefault$e(legendItem.lineDash, lineDefault.borderDash));\r\n\t\t\t}\r\n\r\n\t\t\tif (labelOpts && labelOpts.usePointStyle) {\r\n\t\t\t\t// Recalculate x and y for drawPoint() because its expecting\r\n\t\t\t\t// x and y to be center of figure (instead of top left)\r\n\t\t\t\tvar radius = boxWidth * Math.SQRT2 / 2;\r\n\t\t\t\tvar centerX = rtlHelper.xPlus(x, boxWidth / 2);\r\n\t\t\t\tvar centerY = y + fontSize / 2;\r\n\r\n\t\t\t\t// Draw pointStyle as legend symbol\r\n\t\t\t\thelpers$1.canvas.drawPoint(ctx, legendItem.pointStyle, radius, centerX, centerY, legendItem.rotation);\r\n\t\t\t} else {\r\n\t\t\t\t// Draw box as legend symbol\r\n\t\t\t\tctx.fillRect(rtlHelper.leftForLtr(x, boxWidth), y, boxWidth, fontSize);\r\n\t\t\t\tif (lineWidth !== 0) {\r\n\t\t\t\t\tctx.strokeRect(rtlHelper.leftForLtr(x, boxWidth), y, boxWidth, fontSize);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tctx.restore();\r\n\t\t};\r\n\r\n\t\tvar fillText = function(x, y, legendItem, textWidth) {\r\n\t\t\tvar halfFontSize = fontSize / 2;\r\n\t\t\tvar xLeft = rtlHelper.xPlus(x, boxWidth + halfFontSize);\r\n\t\t\tvar yMiddle = y + halfFontSize;\r\n\r\n\t\t\tctx.fillText(legendItem.text, xLeft, yMiddle);\r\n\r\n\t\t\tif (legendItem.hidden) {\r\n\t\t\t\t// Strikethrough the text if hidden\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\tctx.lineWidth = 2;\r\n\t\t\t\tctx.moveTo(xLeft, yMiddle);\r\n\t\t\t\tctx.lineTo(rtlHelper.xPlus(xLeft, textWidth), yMiddle);\r\n\t\t\t\tctx.stroke();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvar alignmentOffset = function(dimension, blockSize) {\r\n\t\t\tswitch (opts.align) {\r\n\t\t\tcase 'start':\r\n\t\t\t\treturn labelOpts.padding;\r\n\t\t\tcase 'end':\r\n\t\t\t\treturn dimension - blockSize;\r\n\t\t\tdefault: // center\r\n\t\t\t\treturn (dimension - blockSize + labelOpts.padding) / 2;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Horizontal\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tif (isHorizontal) {\r\n\t\t\tcursor = {\r\n\t\t\t\tx: me.left + alignmentOffset(legendWidth, lineWidths[0]),\r\n\t\t\t\ty: me.top + labelOpts.padding,\r\n\t\t\t\tline: 0\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tcursor = {\r\n\t\t\t\tx: me.left + labelOpts.padding,\r\n\t\t\t\ty: me.top + alignmentOffset(legendHeight, columnHeights[0]),\r\n\t\t\t\tline: 0\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\thelpers$1.rtl.overrideTextDirection(me.ctx, opts.textDirection);\r\n\r\n\t\tvar itemHeight = fontSize + labelOpts.padding;\r\n\t\thelpers$1.each(me.legendItems, function(legendItem, i) {\r\n\t\t\tvar textWidth = ctx.measureText(legendItem.text).width;\r\n\t\t\tvar width = boxWidth + (fontSize / 2) + textWidth;\r\n\t\t\tvar x = cursor.x;\r\n\t\t\tvar y = cursor.y;\r\n\r\n\t\t\trtlHelper.setWidth(me.minSize.width);\r\n\r\n\t\t\t// Use (me.left + me.minSize.width) and (me.top + me.minSize.height)\r\n\t\t\t// instead of me.right and me.bottom because me.width and me.height\r\n\t\t\t// may have been changed since me.minSize was calculated\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\tif (i > 0 && x + width + labelOpts.padding > me.left + me.minSize.width) {\r\n\t\t\t\t\ty = cursor.y += itemHeight;\r\n\t\t\t\t\tcursor.line++;\r\n\t\t\t\t\tx = cursor.x = me.left + alignmentOffset(legendWidth, lineWidths[cursor.line]);\r\n\t\t\t\t}\r\n\t\t\t} else if (i > 0 && y + itemHeight > me.top + me.minSize.height) {\r\n\t\t\t\tx = cursor.x = x + me.columnWidths[cursor.line] + labelOpts.padding;\r\n\t\t\t\tcursor.line++;\r\n\t\t\t\ty = cursor.y = me.top + alignmentOffset(legendHeight, columnHeights[cursor.line]);\r\n\t\t\t}\r\n\r\n\t\t\tvar realX = rtlHelper.x(x);\r\n\r\n\t\t\tdrawLegendBox(realX, y, legendItem);\r\n\r\n\t\t\thitboxes[i].left = rtlHelper.leftForLtr(realX, hitboxes[i].width);\r\n\t\t\thitboxes[i].top = y;\r\n\r\n\t\t\t// Fill the actual label\r\n\t\t\tfillText(realX, y, legendItem, textWidth);\r\n\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\tcursor.x += width + labelOpts.padding;\r\n\t\t\t} else {\r\n\t\t\t\tcursor.y += itemHeight;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\thelpers$1.rtl.restoreTextDirection(me.ctx, opts.textDirection);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getLegendItemAt: function(x, y) {\r\n\t\tvar me = this;\r\n\t\tvar i, hitBox, lh;\r\n\r\n\t\tif (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {\r\n\t\t\t// See if we are touching one of the dataset boxes\r\n\t\t\tlh = me.legendHitBoxes;\r\n\t\t\tfor (i = 0; i < lh.length; ++i) {\r\n\t\t\t\thitBox = lh[i];\r\n\r\n\t\t\t\tif (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {\r\n\t\t\t\t\t// Touching an element\r\n\t\t\t\t\treturn me.legendItems[i];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t},\r\n\r\n\t/**\r\n\t * Handle an event\r\n\t * @private\r\n\t * @param {IEvent} event - The event to handle\r\n\t */\r\n\thandleEvent: function(e) {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar type = e.type === 'mouseup' ? 'click' : e.type;\r\n\t\tvar hoveredItem;\r\n\r\n\t\tif (type === 'mousemove') {\r\n\t\t\tif (!opts.onHover && !opts.onLeave) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t} else if (type === 'click') {\r\n\t\t\tif (!opts.onClick) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Chart event already has relative position in it\r\n\t\thoveredItem = me._getLegendItemAt(e.x, e.y);\r\n\r\n\t\tif (type === 'click') {\r\n\t\t\tif (hoveredItem && opts.onClick) {\r\n\t\t\t\t// use e.native for backwards compatibility\r\n\t\t\t\topts.onClick.call(me, e.native, hoveredItem);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (opts.onLeave && hoveredItem !== me._hoveredItem) {\r\n\t\t\t\tif (me._hoveredItem) {\r\n\t\t\t\t\topts.onLeave.call(me, e.native, me._hoveredItem);\r\n\t\t\t\t}\r\n\t\t\t\tme._hoveredItem = hoveredItem;\r\n\t\t\t}\r\n\r\n\t\t\tif (opts.onHover && hoveredItem) {\r\n\t\t\t\t// use e.native for backwards compatibility\r\n\t\t\t\topts.onHover.call(me, e.native, hoveredItem);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction createNewLegendAndAttach(chart, legendOpts) {\r\n\tvar legend = new Legend({\r\n\t\tctx: chart.ctx,\r\n\t\toptions: legendOpts,\r\n\t\tchart: chart\r\n\t});\r\n\r\n\tcore_layouts.configure(chart, legend, legendOpts);\r\n\tcore_layouts.addBox(chart, legend);\r\n\tchart.legend = legend;\r\n}\r\n\r\nvar plugin_legend = {\r\n\tid: 'legend',\r\n\r\n\t/**\r\n\t * Backward compatibility: since 2.1.5, the legend is registered as a plugin, making\r\n\t * Chart.Legend obsolete. To avoid a breaking change, we export the Legend as part of\r\n\t * the plugin, which one will be re-exposed in the chart.js file.\r\n\t * https://github.com/chartjs/Chart.js/pull/2640\r\n\t * @private\r\n\t */\r\n\t_element: Legend,\r\n\r\n\tbeforeInit: function(chart) {\r\n\t\tvar legendOpts = chart.options.legend;\r\n\r\n\t\tif (legendOpts) {\r\n\t\t\tcreateNewLegendAndAttach(chart, legendOpts);\r\n\t\t}\r\n\t},\r\n\r\n\tbeforeUpdate: function(chart) {\r\n\t\tvar legendOpts = chart.options.legend;\r\n\t\tvar legend = chart.legend;\r\n\r\n\t\tif (legendOpts) {\r\n\t\t\thelpers$1.mergeIf(legendOpts, core_defaults.global.legend);\r\n\r\n\t\t\tif (legend) {\r\n\t\t\t\tcore_layouts.configure(chart, legend, legendOpts);\r\n\t\t\t\tlegend.options = legendOpts;\r\n\t\t\t} else {\r\n\t\t\t\tcreateNewLegendAndAttach(chart, legendOpts);\r\n\t\t\t}\r\n\t\t} else if (legend) {\r\n\t\t\tcore_layouts.removeBox(chart, legend);\r\n\t\t\tdelete chart.legend;\r\n\t\t}\r\n\t},\r\n\r\n\tafterEvent: function(chart, e) {\r\n\t\tvar legend = chart.legend;\r\n\t\tif (legend) {\r\n\t\t\tlegend.handleEvent(e);\r\n\t\t}\r\n\t}\r\n};\n\nvar noop$2 = helpers$1.noop;\r\n\r\ncore_defaults._set('global', {\r\n\ttitle: {\r\n\t\tdisplay: false,\r\n\t\tfontStyle: 'bold',\r\n\t\tfullWidth: true,\r\n\t\tpadding: 10,\r\n\t\tposition: 'top',\r\n\t\ttext: '',\r\n\t\tweight: 2000         // by default greater than legend (1000) to be above\r\n\t}\r\n});\r\n\r\n/**\r\n * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\r\n */\r\nvar Title = core_element.extend({\r\n\tinitialize: function(config) {\r\n\t\tvar me = this;\r\n\t\thelpers$1.extend(me, config);\r\n\r\n\t\t// Contains hit boxes for each dataset (in dataset order)\r\n\t\tme.legendHitBoxes = [];\r\n\t},\r\n\r\n\t// These methods are ordered by lifecycle. Utilities then follow.\r\n\r\n\tbeforeUpdate: noop$2,\r\n\tupdate: function(maxWidth, maxHeight, margins) {\r\n\t\tvar me = this;\r\n\r\n\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\r\n\t\tme.beforeUpdate();\r\n\r\n\t\t// Absorb the master measurements\r\n\t\tme.maxWidth = maxWidth;\r\n\t\tme.maxHeight = maxHeight;\r\n\t\tme.margins = margins;\r\n\r\n\t\t// Dimensions\r\n\t\tme.beforeSetDimensions();\r\n\t\tme.setDimensions();\r\n\t\tme.afterSetDimensions();\r\n\t\t// Labels\r\n\t\tme.beforeBuildLabels();\r\n\t\tme.buildLabels();\r\n\t\tme.afterBuildLabels();\r\n\r\n\t\t// Fit\r\n\t\tme.beforeFit();\r\n\t\tme.fit();\r\n\t\tme.afterFit();\r\n\t\t//\r\n\t\tme.afterUpdate();\r\n\r\n\t\treturn me.minSize;\r\n\r\n\t},\r\n\tafterUpdate: noop$2,\r\n\r\n\t//\r\n\r\n\tbeforeSetDimensions: noop$2,\r\n\tsetDimensions: function() {\r\n\t\tvar me = this;\r\n\t\t// Set the unconstrained dimension before label rotation\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.width = me.maxWidth;\r\n\t\t\tme.left = 0;\r\n\t\t\tme.right = me.width;\r\n\t\t} else {\r\n\t\t\tme.height = me.maxHeight;\r\n\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.top = 0;\r\n\t\t\tme.bottom = me.height;\r\n\t\t}\r\n\r\n\t\t// Reset padding\r\n\t\tme.paddingLeft = 0;\r\n\t\tme.paddingTop = 0;\r\n\t\tme.paddingRight = 0;\r\n\t\tme.paddingBottom = 0;\r\n\r\n\t\t// Reset minSize\r\n\t\tme.minSize = {\r\n\t\t\twidth: 0,\r\n\t\t\theight: 0\r\n\t\t};\r\n\t},\r\n\tafterSetDimensions: noop$2,\r\n\r\n\t//\r\n\r\n\tbeforeBuildLabels: noop$2,\r\n\tbuildLabels: noop$2,\r\n\tafterBuildLabels: noop$2,\r\n\r\n\t//\r\n\r\n\tbeforeFit: noop$2,\r\n\tfit: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar minSize = me.minSize = {};\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tvar lineCount, textSize;\r\n\r\n\t\tif (!opts.display) {\r\n\t\t\tme.width = minSize.width = me.height = minSize.height = 0;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlineCount = helpers$1.isArray(opts.text) ? opts.text.length : 1;\r\n\t\ttextSize = lineCount * helpers$1.options._parseFont(opts).lineHeight + opts.padding * 2;\r\n\r\n\t\tme.width = minSize.width = isHorizontal ? me.maxWidth : textSize;\r\n\t\tme.height = minSize.height = isHorizontal ? textSize : me.maxHeight;\r\n\t},\r\n\tafterFit: noop$2,\r\n\r\n\t// Shared Methods\r\n\tisHorizontal: function() {\r\n\t\tvar pos = this.options.position;\r\n\t\treturn pos === 'top' || pos === 'bottom';\r\n\t},\r\n\r\n\t// Actually draw the title block on the canvas\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar opts = me.options;\r\n\r\n\t\tif (!opts.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar fontOpts = helpers$1.options._parseFont(opts);\r\n\t\tvar lineHeight = fontOpts.lineHeight;\r\n\t\tvar offset = lineHeight / 2 + opts.padding;\r\n\t\tvar rotation = 0;\r\n\t\tvar top = me.top;\r\n\t\tvar left = me.left;\r\n\t\tvar bottom = me.bottom;\r\n\t\tvar right = me.right;\r\n\t\tvar maxWidth, titleX, titleY;\r\n\r\n\t\tctx.fillStyle = helpers$1.valueOrDefault(opts.fontColor, core_defaults.global.defaultFontColor); // render in correct colour\r\n\t\tctx.font = fontOpts.string;\r\n\r\n\t\t// Horizontal\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\ttitleX = left + ((right - left) / 2); // midpoint of the width\r\n\t\t\ttitleY = top + offset;\r\n\t\t\tmaxWidth = right - left;\r\n\t\t} else {\r\n\t\t\ttitleX = opts.position === 'left' ? left + offset : right - offset;\r\n\t\t\ttitleY = top + ((bottom - top) / 2);\r\n\t\t\tmaxWidth = bottom - top;\r\n\t\t\trotation = Math.PI * (opts.position === 'left' ? -0.5 : 0.5);\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\t\tctx.translate(titleX, titleY);\r\n\t\tctx.rotate(rotation);\r\n\t\tctx.textAlign = 'center';\r\n\t\tctx.textBaseline = 'middle';\r\n\r\n\t\tvar text = opts.text;\r\n\t\tif (helpers$1.isArray(text)) {\r\n\t\t\tvar y = 0;\r\n\t\t\tfor (var i = 0; i < text.length; ++i) {\r\n\t\t\t\tctx.fillText(text[i], 0, y, maxWidth);\r\n\t\t\t\ty += lineHeight;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tctx.fillText(text, 0, 0, maxWidth);\r\n\t\t}\r\n\r\n\t\tctx.restore();\r\n\t}\r\n});\r\n\r\nfunction createNewTitleBlockAndAttach(chart, titleOpts) {\r\n\tvar title = new Title({\r\n\t\tctx: chart.ctx,\r\n\t\toptions: titleOpts,\r\n\t\tchart: chart\r\n\t});\r\n\r\n\tcore_layouts.configure(chart, title, titleOpts);\r\n\tcore_layouts.addBox(chart, title);\r\n\tchart.titleBlock = title;\r\n}\r\n\r\nvar plugin_title = {\r\n\tid: 'title',\r\n\r\n\t/**\r\n\t * Backward compatibility: since 2.1.5, the title is registered as a plugin, making\r\n\t * Chart.Title obsolete. To avoid a breaking change, we export the Title as part of\r\n\t * the plugin, which one will be re-exposed in the chart.js file.\r\n\t * https://github.com/chartjs/Chart.js/pull/2640\r\n\t * @private\r\n\t */\r\n\t_element: Title,\r\n\r\n\tbeforeInit: function(chart) {\r\n\t\tvar titleOpts = chart.options.title;\r\n\r\n\t\tif (titleOpts) {\r\n\t\t\tcreateNewTitleBlockAndAttach(chart, titleOpts);\r\n\t\t}\r\n\t},\r\n\r\n\tbeforeUpdate: function(chart) {\r\n\t\tvar titleOpts = chart.options.title;\r\n\t\tvar titleBlock = chart.titleBlock;\r\n\r\n\t\tif (titleOpts) {\r\n\t\t\thelpers$1.mergeIf(titleOpts, core_defaults.global.title);\r\n\r\n\t\t\tif (titleBlock) {\r\n\t\t\t\tcore_layouts.configure(chart, titleBlock, titleOpts);\r\n\t\t\t\ttitleBlock.options = titleOpts;\r\n\t\t\t} else {\r\n\t\t\t\tcreateNewTitleBlockAndAttach(chart, titleOpts);\r\n\t\t\t}\r\n\t\t} else if (titleBlock) {\r\n\t\t\tcore_layouts.removeBox(chart, titleBlock);\r\n\t\t\tdelete chart.titleBlock;\r\n\t\t}\r\n\t}\r\n};\n\nvar plugins = {};\r\nvar filler = plugin_filler;\r\nvar legend = plugin_legend;\r\nvar title = plugin_title;\nplugins.filler = filler;\nplugins.legend = legend;\nplugins.title = title;\n\n/**\r\n * @namespace Chart\r\n */\r\n\r\n\r\ncore_controller.helpers = helpers$1;\r\n\r\n// @todo dispatch these helpers into appropriated helpers/helpers.* file and write unit tests!\r\ncore_helpers();\r\n\r\ncore_controller._adapters = core_adapters;\r\ncore_controller.Animation = core_animation;\r\ncore_controller.animationService = core_animations;\r\ncore_controller.controllers = controllers;\r\ncore_controller.DatasetController = core_datasetController;\r\ncore_controller.defaults = core_defaults;\r\ncore_controller.Element = core_element;\r\ncore_controller.elements = elements;\r\ncore_controller.Interaction = core_interaction;\r\ncore_controller.layouts = core_layouts;\r\ncore_controller.platform = platform;\r\ncore_controller.plugins = core_plugins;\r\ncore_controller.Scale = core_scale;\r\ncore_controller.scaleService = core_scaleService;\r\ncore_controller.Ticks = core_ticks;\r\ncore_controller.Tooltip = core_tooltip;\r\n\r\n// Register built-in scales\r\n\r\ncore_controller.helpers.each(scales, function(scale, type) {\r\n\tcore_controller.scaleService.registerScaleType(type, scale, scale._defaults);\r\n});\r\n\r\n// Load to register built-in adapters (as side effects)\r\n\r\n\r\n// Loading built-in plugins\r\n\r\nfor (var k in plugins) {\r\n\tif (plugins.hasOwnProperty(k)) {\r\n\t\tcore_controller.plugins.register(plugins[k]);\r\n\t}\r\n}\r\n\r\ncore_controller.platform.initialize();\r\n\r\nvar src = core_controller;\r\nif (typeof window !== 'undefined') {\r\n\twindow.Chart = core_controller;\r\n}\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore\r\n * @namespace Chart.Chart\r\n * @deprecated since version 2.8.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.Chart = core_controller;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore\r\n * @namespace Chart.Legend\r\n * @deprecated since version 2.1.5\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.Legend = plugins.legend._element;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore\r\n * @namespace Chart.Title\r\n * @deprecated since version 2.1.5\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.Title = plugins.title._element;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.plugins instead\r\n * @namespace Chart.pluginService\r\n * @deprecated since version 2.1.5\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.pluginService = core_controller.plugins;\r\n\r\n/**\r\n * Provided for backward compatibility, inheriting from Chart.PlugingBase has no\r\n * effect, instead simply create/register plugins via plain JavaScript objects.\r\n * @interface Chart.PluginBase\r\n * @deprecated since version 2.5.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.PluginBase = core_controller.Element.extend({});\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.canvas instead.\r\n * @namespace Chart.canvasHelpers\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.canvasHelpers = core_controller.helpers.canvas;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.layouts instead.\r\n * @namespace Chart.layoutService\r\n * @deprecated since version 2.7.3\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.layoutService = core_controller.layouts;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore.\r\n * @namespace Chart.LinearScaleBase\r\n * @deprecated since version 2.8\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.LinearScaleBase = scale_linearbase;\r\n\r\n/**\r\n * Provided for backward compatibility, instead we should create a new Chart\r\n * by setting the type in the config (`new Chart(id, {type: '{chart-type}'}`).\r\n * @deprecated since version 2.8.0\r\n * @todo remove at version 3\r\n */\r\ncore_controller.helpers.each(\r\n\t[\r\n\t\t'Bar',\r\n\t\t'Bubble',\r\n\t\t'Doughnut',\r\n\t\t'Line',\r\n\t\t'PolarArea',\r\n\t\t'Radar',\r\n\t\t'Scatter'\r\n\t],\r\n\tfunction(klass) {\r\n\t\tcore_controller[klass] = function(ctx, cfg) {\r\n\t\t\treturn new core_controller(ctx, core_controller.helpers.merge(cfg || {}, {\r\n\t\t\t\ttype: klass.charAt(0).toLowerCase() + klass.slice(1)\r\n\t\t\t}));\r\n\t\t};\r\n\t}\r\n);\n\nreturn src;\n\n})));\n",null],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","document","querySelectorAll","forEach","el","url","dataset","pbFetchFill","pbFetchKey","fetch","then","json","textContent","value","m","addEventListener","e","modalId","closest","attributes","querySelector","removeAttribute","b","setAttribute","checkLabel","checkbox","parentElement","checked","toggle","sidebar","classList","contains","remove","style","zIndex","add","menu","preventDefault","isCEPolyfill","window","customElements","undefined","polyfillWrapFlushCallback","removeNodes","container","start","end","n","nextSibling","removeChild","marker","String","Math","random","slice","nodeMarker","markerRegex","RegExp","Template","[object Object]","result","element","this","nodesToRemove","stack","walker","createTreeWalker","content","lastPartIndex","index","partIndex","strings","values","node","nextNode","nodeType","hasAttributes","count","endsWith","name","stringForPart","lastAttributeNameRegex","exec","attributeLookupName","toLowerCase","attributeValue","getAttribute","statics","split","parts","push","type","tagName","currentNode","data","indexOf","parent","parentNode","lastIndex","insert","s","createMarker","match","createTextNode","insertBefore","previousSibling","pop","str","suffix","isTemplatePartActive","part","createComment","removeNodesFromTemplate","template","nextActiveIndexInTemplateParts","nodeIndex","removeCount","nodesToRemoveInTemplate","currentRemovingNode","has","countNodes","startIndex","directives","WeakMap","isDirective","o","noChange","nothing","TemplateInstance","processor","options","__parts","setValue","commit","fragment","cloneNode","importNode","nodeName","handleTextExpression","insertAfterNode","handleAttributeExpressions","adoptNode","upgrade","policy","trustedTypes","createPolicy","createHTML","commentMarker","TemplateResult","l","html","isCommentBinding","commentOpen","lastIndexOf","attributeMatch","substr","createElement","getHTML","innerHTML","isPrimitive","isIterable","Array","isArray","Symbol","iterator","AttributeCommitter","_createPart","AttributePart","v","text","t","dirty","_getValue","committer","directive","NodePart","startNode","appendChild","endNode","ref","__insert","__pendingValue","__commitText","__commitTemplateResult","Node","__commitNode","__commitIterable","clear","valueAsString","templateFactory","update","instance","_clone","itemParts","itemPart","item","appendIntoPart","insertAfterPart","BooleanAttributePart","Error","PropertyCommitter","super","single","PropertyPart","eventOptionsSupported","capture","removeEventListener","_e","EventPart","eventName","eventContext","__boundHandleEvent","handleEvent","newListener","oldListener","shouldRemoveListener","once","passive","shouldAddListener","__options","getOptions","event","call","templateCache","templateCaches","get","stringsArray","keyString","Map","set","join","getTemplateElement","defaultTemplateProcessor","prefix","getTemplateCacheKey","scopeName","compatibleShadyCSSVersion","ShadyCSS","prepareTemplateDom","console","warn","shadyTemplateFactory","cacheKey","TEMPLATE_TYPES","shadyRenderSet","Set","prepareTemplateStyles","renderedDOM","templateElement","styles","condensedStyle","templates","from","removeStylesFromLitTemplates","refNode","insertCount","walkerIndex","insertNodeIntoTemplate","firstChild","nativeShadow","removes","JSCompiler_renameProperty","prop","_obj","defaultConverter","Boolean","JSON","stringify","Number","parse","notEqual","old","defaultPropertyDeclaration","attribute","converter","reflect","hasChanged","UpdatingElement","HTMLElement","initialize","observedAttributes","finalize","_classProperties","p","attr","_attributeNameForProperty","_attributeToPropertyMap","hasOwnProperty","superProperties","getPrototypeOf","k","_ensureClassProperties","noAccessor","prototype","descriptor","getPropertyDescriptor","oldValue","requestUpdateInternal","configurable","enumerable","superCtor","props","properties","propKeys","getOwnPropertyNames","getOwnPropertySymbols","createProperty","fromAttribute","toAttribute","_updateState","_updatePromise","Promise","res","_enableUpdatingResolver","_changedProperties","_saveInstanceProperties","constructor","_v","_instanceProperties","enableUpdating","_attributeToProperty","ctor","attrValue","_propertyValueToAttribute","propName","getPropertyOptions","_propertyValueFromAttribute","shouldRequestUpdate","_valueHasChanged","_reflectingProperties","_hasRequestedUpdate","_enqueueUpdate","updateComplete","performUpdate","hasUpdated","_applyInstanceProperties","shouldUpdate","changedProperties","_markUpdated","firstUpdated","updated","_getUpdateComplete","size","_propertyToAttribute","customElement","classOrDescriptor","clazz","define","legacyCustomElement","kind","elements","standardCustomElement","standardProperty","placement","initializer","property","protoOrDescriptor","proto","legacyProperty","supportsAdoptingStyleSheets","Document","CSSStyleSheet","constructionToken","CSSResult","cssText","safeToken","styleSheet","_styleSheet","replaceSync","css","reduce","acc","idx","textFromCSSResult","renderNotImplemented","LitElement","userStyles","getStyles","addStyles","reduceRight","unshift","_styles","map","cssRules","rule","_getUniqueStyles","renderRoot","createRenderRoot","ShadowRoot","adoptStyles","attachShadow","mode","adoptedStyleSheets","_needsShimAdoptedStyleSheets","ScopingShim","prepareAdoptedCssText","localName","connectedCallback","styleElement","templateResult","render","hasRendered","needsScoping","host","firstScopeRender","renderContainer","createDocumentFragment","appendInto","litRender","delete","LEVEL_ICON_MAP","error","warning","success","info","updateMessages","fetchMessages","Messages","messages","message","messageElement","renderMessage","id","toString","level_tag","setTimeout","ActionButton","GlobalsStyle","ButtonStyle","SpinnerStyle","isRunning","requestUpdate","statusClass","replace","setLoading","csrftoken","cookieValue","cookie","cookies","trim","substring","decodeURIComponent","getCookie","request","Request","headers","X-CSRFToken","method","setDone","catch","callAction","SIDEBAR_ITEMS","path","condition","sb","user","is_superuser","children","Sidebar","u","activePath","location","hash","Infinity","PageStyle","NavStyle","renderItem","brandLogo","brandTitle","SidebarBrand","SidebarUser","fa","AvatarStyle","avatar","username","module","userAgent","navigator","platform","gecko","test","ie_upto10","ie_11up","edge","ie","ie_version","documentMode","webkit","qtwebkit","chrome","presto","safari","vendor","mac_geMountainLion","phantom","ios","android","mobile","mac","chromeOS","windows","presto_version","flipCtrlCmd","captureRightClick","classTest","cls","range","rmClass","current","className","after","removeChildren","childNodes","removeChildrenAndAdd","elt","tag","eltP","child","activeElt","activeElement","body","shadowRoot","addClass","joinClasses","a","as","createRange","setEnd","setStart","createTextRange","moveToElementText","collapse","moveEnd","moveStart","selectInput","select","bind","f","args","apply","copyObj","obj","overwrite","countColumn","string","tabSize","startValue","search","nextTab","selectionStart","selectionEnd","Delayed","time","handler","onTimeout","array","self","Date","ms","clearTimeout","scrollerGap","Pass","sel_dontScroll","scroll","sel_mouse","origin","sel_move","findColumn","goal","pos","col","skipped","min","spaceStrs","spaceStr","lst","arr","out","insertSorted","score","priority","splice","createObj","base","inst","create","nonASCIISingleCaseWordChar","isWordCharBasic","ch","toUpperCase","isWordChar","helper","source","isEmpty","extendingChars","isExtendingChar","charCodeAt","skipExtendingChars","dir","charAt","findFirst","pred","to","midF","mid","ceil","floor","iterateBidiSections","order","found","max","level","bidiOther","getBidiPartAt","sticky","cur","bidiOrdering","lowTypes","arabicTypes","charType","code","bidiRE","isNeutral","isStrong","countsAsLeft","countsAsNum","BidiSpan","direction","outerType","len","types","i$1","prev","i$2","type$1","i$3","prev$1","type$2","i$4","type$3","j","i$5","cur$1","type$4","i$6","end$1","before","replace$1","j$1","i$7","at","isRTL","j$2","nstart","reverse","getOrder","line","noHandlers","on","emitter","attachEvent","_handlers","concat","getHandlers","off","detachEvent","signal","handlers","signalDOMEvent","cm","override","defaultPrevented","e_defaultPrevented","codemirrorIgnore","signalCursorActivity","cursorActivity","curOp","cursorActivityHandlers","hasHandler","eventMixin","e_preventDefault","returnValue","e_stopPropagation","stopPropagation","cancelBubble","e_stop","e_target","srcElement","e_button","which","button","ctrlKey","zwspSupported","badBidiRects","dragAndDrop","div","zeroWidthElement","measure","offsetHeight","offsetWidth","hasBadBidiRects","txt","r0","getBoundingClientRect","r1","left","right","splitLinesAuto","nl","rt","hasSelection","getSelection","te","ownerDocument","selection","compareEndPoints","hasCopyEvent","oncopy","badZoomedRects","hasBadZoomedRects","normal","fromRange","abs","modes","mimeModes","defineMode","dependencies","defineMIME","mime","spec","resolveMode","getMode","mfactory","modeObj","modeExtensions","exts","helperType","modeProps","prop$1","extendMode","copyState","state","nstate","val","innerMode","startState","a1","a2","StringStream","lineOracle","lastColumnPos","lastColumnValue","lineStart","getLine","doc","first","chunk","lines","sz","chunkSize","getBetween","iter","getLines","updateLineHeight","height","diff","lineNo","no","lineAtHeight","h","outer","lh","isLine","lineNumberFor","lineNumberFormatter","firstLineNumber","Pos","cmp","equalCursorPos","copyPos","x","maxPos","minPos","clipLine","clipPos","last","clipToLen","linelen","clipPosArray","eol","sol","peek","next","eat","eatWhile","eatSpace","skipToEnd","skipTo","backUp","column","indentation","pattern","consume","caseInsensitive","cased","hideFirstChars","inner","lookAhead","oracle","baseToken","SavedContext","Context","maxLookAhead","baseTokens","baseTokenPos","highlightLine","context","forceToEnd","st","modeGen","lineClasses","runMode","loop","overlay","overlays","i_end","opaque","classes","bgClass","textClass","getLineStyles","updateFrontier","getContextBefore","resetState","maxHighlightLength","stateAfter","save","styleClasses","highlightFrontier","modeFrontier","precise","display","findStartLine","saved","fromSaved","processLine","viewFrom","viewTo","nextLine","startAt","stream","callBlankLine","readToken","blankLine","token","copy","Token","takeToken","asArray","tokens","extractLineClasses","output","lineClass","flattenSpans","curStart","curStyle","addModeClass","mName","minindent","minline","lim","indented","retreatFrontier","sawReadOnlySpans","sawCollapsedSpans","seeReadOnlySpans","seeCollapsedSpans","MarkedSpan","getMarkedSpanFor","spans","span","removeMarkedSpan","addMarkedSpan","markedSpans","attachLine","markedSpansBefore","startCh","isInsert","nw","inclusiveLeft","insertLeft","endsAfter","inclusiveRight","markedSpansAfter","endCh","startsBefore","stretchSpansOverChange","change","full","oldFirst","oldLast","sameLine","offset","span$1","clearEmptySpans","newMarkers","gapMarkers","gap","clearWhenEmpty","removeReadOnlyRanges","markers","mark","readOnly","mk","find","newParts","dfrom","dto","detachMarkedSpans","detachLine","attachMarkedSpans","extraLeft","extraRight","compareCollapsedMarkers","lenDiff","aPos","bPos","fromCmp","toCmp","collapsedSpanAtSide","sps","sp","collapsed","collapsedSpanAtStart","collapsedSpanAtEnd","collapsedSpanAround","conflictingCollapsedRange","visualLine","merged","visualLineEnd","visualLineContinued","visualLineNo","lineN","vis","visualLineEndNo","lastLine","lineIsHidden","widgetNode","lineIsHiddenInner","heightAtLine","lineObj","lineLength","found$1","findMaxLine","maxLine","maxLineLength","maxLineChanged","Line","estimateHeight","updateLine","estHeight","cleanUpLine","styleToClassCache","styleToClassCacheWithMode","interpretTokenStyle","cache","buildLineContent","lineView","builder","pre","trailingSpace","splitSpaces","getOption","rest","addToken","buildToken","buildTokenBadBidi","insertLineContent","externalMeasured","maps","caches","lastChild","defaultSpecialCharPlaceholder","title","startStyle","endStyle","displayText","special","specialChars","mustWrap","txt$1","tabWidth","specialCharPlaceholder","fullStyle","trailingBefore","spaceBefore","buildCollapsedSpan","ignoreWidget","widget","input","needsContentAttribute","setUneditable","allText","spanStyle","spanEndStyle","spanStartStyle","nextChange","foundBookmarks","endStyles","upto","tokenText","LineView","hidden","buildViewArray","nextPos","view","operationGroup","pushOperation","op","ops","ownsGroup","delayedCallbacks","fireCallbacksForOps","group","callbacks","cursorActivityCalled","finishOperation","endCb","orphanDelayedCallbacks","signalLater","list","fireOrphanDelayed","delayed","updateLineForChanges","dims","changes","updateLineText","updateLineGutter","updateLineClasses","updateLineWidgets","ensureLineWrapped","replaceChild","updateLineBackground","background","wrap","getLineContent","ext","built","wrapClass","gutter","gutterBackground","gutterClass","fixedGutter","fixedPos","gutterTotalWidth","gutterMarkers","lineNumbers","wrap$1","gutterWrap","lineNumber","gutterLeft","gutterSpecs","gutterWidth","alignable","isWidget","insertLineWidgets","buildLineElement","insertLineWidgetsFor","allowAbove","widgets","ws","handleMouseEvents","positionLineWidget","above","noHScroll","width","wrapperWidth","coverGutter","paddingLeft","position","marginLeft","widgetHeight","parentStyle","gutters","wrapper","clientWidth","eventInWidget","sizer","mover","paddingTop","lineSpace","offsetTop","paddingVert","paddingH","cachedPaddingH","getComputedStyle","currentStyle","parseInt","paddingRight","isNaN","scrollGap","nativeBarWidth","displayWidth","scroller","barWidth","displayHeight","clientHeight","barHeight","ensureLineHeights","rect","wrapping","lineWrapping","curWidth","heights","rects","getClientRects","bottom","top","mapFromLineView","updateExternalMeasurement","lineMeasure","measureChar","bias","measureCharPrepared","prepareMeasureForLine","findViewForLine","findViewIndex","getDimensions","forceUpdate","hasHeights","prepared","varHeight","measureCharInner","bogus","rtop","rbottom","measureText","nullRect","nodeAndOffsetInLineMap","mStart","mEnd","coverStart","coverEnd","getUsefulRect","place","maybeUpdateRectForZooming","rSpan","charWidth","rbot","bot","singleCursorHeightPerLine","screen","logicalXDPI","deviceXDPI","scaleX","scaleY","logicalYDPI","deviceYDPI","clearLineMeasurementCacheFor","clearLineMeasurementCache","externalMeasure","clearCaches","cachedCharWidth","cachedTextHeight","lineNumChars","pageScrollX","pageXOffset","documentElement","scrollLeft","pageScrollY","marginTop","pageYOffset","scrollTop","widgetTopHeight","intoCoordSystem","includeWidgets","yOff","viewOffset","lOff","xOff","fromCoordSystem","coords","localBox","lineSpaceBox","charCoords","cursorCoords","preparedMeasure","getBidi","partPos","invert","other","estimateCoords","PosWithInfo","outside","xRel","coordsChar","y","coordsCharInner","rangeEnd","wrappedLineExtent","begin","wrappedLineExtentChar","boxIsAfter","box","ltr","coordsBidiPartWrapped","coordsBidiPart","baseX","chAround","boxAround","atLeft","atStart","_lineNo","closestDist","endX","dist","textHeight","anchor","clientLeft","offsetLeft","compensateForHScroll","th","perLine","widgetsHeight","estimateLineHeights","est","posFromMouse","liberal","forRect","space","clientX","clientY","e$1","colDiff","round","regChange","lendiff","updateLineNumbers","viewChanged","resetView","cut","viewCuttingPoint","cut$1","cutTop","cutBot","regLineChange","oldN","newN","adjustView","countDirtyView","updateSelection","showSelection","prepareSelection","primary","curFragment","cursors","selFragment","sel","ranges","primIndex","empty","showCursorWhenSelecting","drawSelectionCursor","head","drawSelectionRange","cursor","cursorHeight","otherCursor","cmpCoords","padding","leftSide","rightSide","sizerWidth","docLTR","drawForLine","fromArg","toArg","lineLen","wrapX","side","extent","fromPos","toPos","openStart","openEnd","openRight","topLeft","topRight","botLeft","botRight","sFrom","sTo","fromLine","toLine","singleVLine","leftEnd","rightStart","restartBlink","focused","clearInterval","blinker","cursorDiv","visibility","cursorBlinkRate","setInterval","hasFocus","onBlur","ensureFocus","focus","onFocus","delayBlurEvent","delayingBlurEvent","draggingText","selForContextMenu","reset","receivedFocus","shift","updateHeightsInViewport","prevBottom","lineDiv","updateWidgetHeight","chWidth","w","visibleLines","viewport","ensure","ensureFrom","ensureTo","maybeScrollWindow","doScroll","innerHeight","scrollNode","scrollIntoView","scrollPosIntoView","margin","limit","changed","endCoords","scrollPos","calculateScrollPos","startTop","startLeft","updateScrollTop","setScrollLeft","snapMargin","screentop","docBottom","atTop","atBottom","newTop","gutterSpace","screenleft","screenw","tooWide","addToScrollTop","resolveScrollToPos","ensureCursorVisible","getCursor","scrollToPos","cursorScrollMargin","scrollToCoords","scrollToRange","scrollToCoordsRange","sPos","updateDisplaySimple","setScrollTop","startWorker","forceScroll","scrollHeight","scrollbars","isScroller","scrollWidth","alignHorizontally","measureForScrollbars","gutterW","docH","viewHeight","viewWidth","barLeft","docHeight","NativeScrollbars","vert","horiz","tabIndex","checkedZeroWidth","minHeight","minWidth","needsH","needsV","sWidth","totalHeight","totalWidth","zeroWidthHack","disableHoriz","enableZeroWidthBar","disableVert","pointerEvents","bar","delay","maybeDisable","elementFromPoint","NullScrollbars","updateScrollbars","startWidth","startHeight","updateScrollbarsInner","sizes","paddingBottom","heightForcer","borderBottom","scrollbarFiller","coverGutterNextToScrollbar","gutterFiller","scrollbarModel","native","null","initScrollbars","scrollbarStyle","axis","nextOpId","startOperation","updateInput","typing","changeObjs","selectionChanged","updateMaxLine","endOperation","endOperations","endOperation_R1","endOperation_W1","endOperation_R2","endOperation_W2","endOperation_finish","maybeClipScrollbars","mustUpdate","DisplayUpdate","updatedDisplay","updateDisplayIfNeeded","barMeasure","adjustWidthTo","maxScrollLeft","preparedSelection","takeFocus","setDocumentHeight","postUpdateDisplay","wheelStartX","wheelStartY","maybeHiddenMarkers","unhidden","maybeUnhiddenMarkers","finish","runInOp","operation","methodOp","docMethodOp","highlight","highlightWorker","workTime","changedLines","oldStyles","highlighted","oldCls","newCls","ischange","workDelay","force","visible","editorIsHidden","wrapperHeight","oldDisplayWidth","events","scrollbarsClipped","marginBottom","borderRightWidth","selectionSnapshot","active","anchorNode","extend","anchorOffset","focusNode","focusOffset","restoreSelection","snapshot","removeAllRanges","addRange","renderedView","maybeUpdateLineNumberWidth","viewportMargin","different","lastWrapHeight","lastWrapWidth","toUpdate","selSnapshot","patchDisplay","selectionDiv","reportedViewFrom","reportedViewTo","updateNumbersFrom","rm","currentWheelTarget","updateNumber","updateGutterSpace","alignWidgets","comp","align","innerW","lineGutter","lineNumInnerWidth","lineNumWidth","getGutters","sawLineNumbers","renderGutters","specs","gElt","updateGutters","Display","draggable","wheelDX","wheelDY","activeTouch","init","wheelSamples","wheelPixelsPerUnit","wheelEventDelta","dx","wheelDeltaX","dy","wheelDeltaY","detail","HORIZONTAL_AXIS","VERTICAL_AXIS","wheelDelta","wheelEventPixels","delta","onScrollWheel","canScrollX","canScrollY","pixels","movedX","movedY","sample","Selection","equals","here","there","deepCopy","Range","somethingSelected","normalizeSelection","mayTouch","selectionsMayTouch","prim","sort","inv","simpleSelection","changeEnd","adjustForChange","computeSelAfterChange","offsetPos","computeReplacedSel","hint","oldPrev","newPrev","loadMode","modeOption","resetModeState","isWholeLineUpdate","wholeLineUpdateBefore","updateDoc","spansFor","linesFor","firstLine","lastText","lastSpans","nlines","added","added$1","added$2","linkedDocs","sharedHistOnly","propagate","skip","sharedHist","linked","rel","shared","attachDoc","setDirectionClass","directionChanged","History","startGen","done","undone","undoDepth","lastModTime","lastSelTime","lastOp","lastSelOp","lastOrigin","lastSelOrigin","generation","maxGeneration","historyChangeFromChange","histChange","attachLocalSpans","clearSelectionEvents","lastChangeEvent","hist","addChangeToHistory","selAfter","opId","history","historyEventDelay","pushSelectionToHistory","selectionEventCanBeMerged","addSelectionToHistory","clearRedo","dest","existing","removeClearedSpans","explicitlyCleared","getOldSpans","mergeOldSpans","stretched","oldCur","stretchCur","copyHistoryArray","newGroup","instantiateSel","newChanges","extendRange","posBefore","extendSelection","setSelection","extendSelections","heads","replaceOneSelection","setSimpleSelection","filterSelectionChange","setSelectionReplaceHistory","setSelectionNoUndo","NaN","setSelectionInner","skipAtomicInSelection","reCheckSelection","mayClear","newAnchor","skipAtomic","newHead","skipAtomicInner","oldPos","preventCursorLeft","selectLeft","preventCursorRight","selectRight","atomic","near","movePos","far","cantEdit","selectAll","filterChange","canceled","cancel","makeChange","ignoreReadOnly","suppressEdits","makeChangeInner","makeChangeSingleDoc","rebased","rebaseHist","makeChangeFromHistory","allowSelectionOnly","suppress","antiChanges","filter","returned","shiftDoc","distance","removed","makeChangeSingleDocInEditor","recomputeMaxLength","checkWidthStart","changesHandler","changeHandler","replaceRange","assign","splitLines","rebaseHistSelSingle","rebaseHistArray","sub","ok","copied","changeLine","handle","changeType","LeafChunk","BranchChunk","removeInner","insertInner","iterN","oldHeight","remaining","leaf","maybeSpill","me","sibling","myIndex","used","LineWidget","opt","adjustScrollWhenAboveVisible","addLineWidget","insertAt","aboveVisible","this$1","oldH","nextMarkerId","TextMarker","markText","markTextShared","replacedWith","addToHistory","curLine","clearOnEnter","clearHistory","withOp","visual","dHeight","SharedTextMarker","isParent","findSharedMarkers","findMarks","copySharedMarkers","mFrom","mTo","subMark","detachSharedMarkers","subMarker","nextDocId","Doc","lineSep","cleanGeneration","getValue","lineSeparator","getRange","getLineHandle","getLineNumber","getLineHandleVisualStart","lineCount","listSelections","setCursor","extendSelectionsBy","setSelections","addSelection","getSelections","replaceSelection","dup","replaceSelections","newSel","undo","redo","undoSelection","redoSelection","setExtending","getExtending","historySize","markClean","changeGeneration","forceSplit","isClean","gen","getHistory","setHistory","histData","setGutterMarker","gutterID","clearGutter","lineInfo","addLineClass","where","removeLineClass","removeLineWidget","setBookmark","realOpts","findMarksAt","getAllMarks","posFromIndex","sepSize","indexFromPos","copyHistory","linkedDoc","unlinkDoc","CodeMirror","splitIds","iterLinkedDocs","getEditor","setDirection","eachLine","lastDrop","onDrop","clearDragCursor","files","dataTransfer","isReadOnly","FileReader","File","read","markAsReadAndPasteIfAllFilesAreRead","readTextFromFile","file","allowDropFileTypes","reader","onerror","onload","readAsText","text$1","getData","selected","onDragStart","setData","effectAllowed","setDragImage","img","src","_top","onDragOver","frag","dragCursor","forEachCodeMirror","getElementsByClassName","byClass","editors","globalsRegistered","ensureGlobalHandlers","registerGlobalHandlers","resizeTimer","onResize","setSize","keyNames","3","8","9","13","16","17","18","19","20","27","32","33","34","35","36","37","38","39","40","44","45","46","59","61","91","92","93","106","107","109","110","111","145","173","186","187","188","189","190","191","192","219","220","221","222","224","63232","63233","63234","63235","63272","63273","63275","63276","63277","63302","fromCharCode","keyMap","normalizeKeyName","alt","ctrl","cmd","mod","normalizeKeyMap","keymap","keyname","keys","lookupKey","getKeyMap","fallthrough","isModifierKey","keyCode","addModifierNames","noShift","altKey","metaKey","shiftKey","keyName","altGraphKey","deleteNearSelection","compute","kill","toKill","replaced","moveCharLogically","moveLogically","endOfLine","visually","prep","targetTop","moveVisually","bidi","mv","getWrappedLineExtent","moveInStorageOrder","searchInVisualLine","getRes","nextCh","basic","Left","Right","Up","Down","End","Home","PageUp","PageDown","Delete","Backspace","Shift-Backspace","Tab","Shift-Tab","Enter","Insert","Esc","pcDefault","Ctrl-A","Ctrl-D","Ctrl-Z","Shift-Ctrl-Z","Ctrl-Y","Ctrl-Home","Ctrl-End","Ctrl-Up","Ctrl-Down","Ctrl-Left","Ctrl-Right","Alt-Left","Alt-Right","Ctrl-Backspace","Ctrl-Delete","Ctrl-S","Ctrl-F","Ctrl-G","Shift-Ctrl-G","Shift-Ctrl-F","Shift-Ctrl-R","Ctrl-[","Ctrl-]","Ctrl-U","Shift-Ctrl-U","Alt-U","emacsy","Ctrl-B","Ctrl-P","Ctrl-N","Alt-F","Alt-B","Ctrl-E","Ctrl-V","Shift-Ctrl-V","Ctrl-H","Alt-D","Alt-Backspace","Ctrl-K","Ctrl-T","Ctrl-O","macDefault","Cmd-A","Cmd-D","Cmd-Z","Shift-Cmd-Z","Cmd-Y","Cmd-Home","Cmd-Up","Cmd-End","Cmd-Down","Cmd-Left","Cmd-Right","Ctrl-Alt-Backspace","Alt-Delete","Cmd-S","Cmd-F","Cmd-G","Shift-Cmd-G","Cmd-Alt-F","Shift-Cmd-Alt-F","Cmd-[","Cmd-]","Cmd-Backspace","Cmd-Delete","Cmd-U","Shift-Cmd-U","commands","singleSelection","killLine","deleteLine","delLineLeft","delWrappedLineLeft","delWrappedLineRight","rightPos","goDocStart","goDocEnd","goLineStart","goLineStartSmart","lineStartSmart","goLineEnd","lineEnd","goLineRight","goLineLeft","goLineLeftSmart","goLineUp","moveV","goLineDown","goPageUp","goPageDown","goCharLeft","moveH","goCharRight","goColumnLeft","goColumnRight","goWordLeft","goGroupRight","goGroupLeft","goWordRight","delCharBefore","deleteH","delCharAfter","delWordBefore","delWordAfter","delGroupBefore","delGroupAfter","indentAuto","indentSelection","indentMore","indentLess","insertTab","insertSoftTab","spaces","defaultTab","execCommand","transposeChars","newlineAndIndent","sels","indentLine","openLine","toggleOverwrite","firstNonWS","inWS","doHandleBinding","bound","dropShift","ensurePolled","prevShift","lookupKeyForEditor","keyMaps","extraKeys","stopSeq","dispatchKey","seq","keySeq","dispatchKeyInner","handleKeyBinding","motion","handleCharBinding","lastStoppedKey","onKeyDown","getField","handled","showCrossHair","up","onKeyUp","onKeyPress","charCode","lastClick","lastDoubleClick","DOUBLECLICK_DELAY","PastClick","clickRepeat","now","compare","onMouseDown","supportsTouch","clickInGutter","repeat","selectingText","handleMappedButton","leftButtonDown","onContextMenu","configureMouse","option","unit","addNew","moveOnDrag","contained","behavior","dragDrop","leftButtonStartDrag","leftButtonSelect","moved","dragEnd","mouseMove","dragStart","preventScroll","e2","rangeForUnit","findWordAt","ourRange","ourIndex","startSel","lastPos","extendTo","startCol","posCol","leftPos","oldRange","ranges$1","bidiSimplify","editorSize","counter","curCount","move","buttons","anchorLine","boundary","headIndex","usePart","gutterEvent","prevent","mX","mY","touches","lineBox","g","contextMenuInGutter","themeChanged","theme","Init","defaults","optionHandlers","defineOptions","deflt","notOnInit","defineOption","newBreaks","refresh","getInputField","spellcheck","autocorrect","autocapitalize","detach","attach","wrappingChanged","integer","blur","readOnlyChanged","screenReaderLabelChanged","dragDropChanged","resetPosition","funcs","dragFunctions","enter","over","leave","drop","inputStyles","inputStyle","pasteIncoming","cutIncoming","autofocus","registerEventHandlers","finishInit","initHooks","textRendering","word","touchFinished","prevTouch","finishTouch","isMouseLikeTouchEvent","touch","radiusX","radiusY","farAway","pageX","pageY","inp","how","aggressive","indent","curSpace","curSpaceString","indentUnit","indentString","indentWithTabs","pos$1","defineInitHook","lastCopied","setLastCopied","newLastCopied","applyTextInput","inserted","deleted","recent","paste","textLines","multiPaste","pasteLinesPerSelection","lineWise","changeEvent","triggerElectric","handlePaste","pasted","clipboardData","disableInput","electricChars","smartIndent","getModeAt","electricInput","copyableRanges","lineRange","disableBrowserMagic","field","hiddenTextarea","border","addEditorMethods","helpers","setOption","getDoc","addKeyMap","removeKeyMap","addOverlay","modeSpec","removeOverlay","newRanges","getTokenAt","getLineTokens","getTokenTypeAt","getHelper","getHelpers","help","_global","getStateAfter","defaultTextHeight","defaultCharWidth","getViewport","addWidget","vspace","hspace","triggerOnKeyDown","triggerOnKeyPress","triggerOnKeyUp","triggerOnMouseDown","findPosH","amount","hitSide","rtlMoveVisually","findPosV","goalColumn","goals","headPos","startChar","check","scrollTo","getScrollInfo","interpret","swapDoc","phrase","phraseText","phrases","getWrapperElement","getScrollerElement","getGutterElement","registerHelper","registerGlobalHelper","predicate","origDir","lineDir","findNextLine","moveOnce","boundToLine","sawType","pageSize","moveAmount","ContentEditableInput","lastAnchorNode","lastAnchorOffset","lastFocusNode","lastFocusOffset","polling","composing","gracePeriod","readDOMTimeout","posToDOM","isInGutter","scan","badPos","bad","domTextBetween","closing","extraLinebreak","recognizeMarker","close","addText","walk","cmText","markerID","isBlock","nodeValue","domToPos","lineNode","locateNodeInLineView","textNode","topNode","curNode","dist$1","belongsToInput","onCopyCut","lineWiseCopyCut","clearData","kludge","hadFocus","showPrimarySelection","updateFromDOM","readFromDOMSoon","forceCompositionEnd","label","showMultipleSelections","curAnchor","curFocus","rng","rangeCount","getRangeAt","startGracePeriod","rememberSelection","selectionInEditor","commonAncestorContainer","poll","pollSelection","pollInterval","pollContent","fromIndex","fromNode","toNode","toIndex","newText","oldText","cutFront","cutEnd","oldTop","maxCutFront","newBot","oldBot","maxCutEnd","chFrom","chTo","contentEditable","TextareaInput","prevInput","pollingFast","fromTextArea","textarea","tabindex","placeholder","realSubmit","form","leaveSubmitMethodAlone","submit","wrappedSubmit","getTextArea","toTextArea","addLegacyProps","cmpPos","createField","prepareCopyCut","fastPoll","dispatchEvent","Event","_display","moveInputWithCursor","wrapOff","lineOff","teTop","teLeft","drawn","contextMenuPending","slowPoll","missed","same","resetSelectionOnContextMenu","oldScrollY","oldCSS","oldWrapperCSS","wrapperBox","offsetParent","scrollY","rehide","detectingSelectAll","prepareSelectAllHack","mouseup","extval","disabled","dontDelegate","contenteditable","defineExtension","func","defineDocExtension","version","factory","startListening","stopListening","timeout","hurry","_cm","autoRefresh","require$$0","htmlConfig","xmlConfig","autoSelfClosers","area","br","command","embed","frame","hr","keygen","link","meta","param","track","wbr","menuitem","implicitlyClosed","dd","li","optgroup","rp","tbody","td","tfoot","tr","contextGrabbers","dt","address","article","aside","blockquote","dl","fieldset","footer","h1","h2","h3","h4","h5","h6","header","hgroup","nav","ol","section","table","ul","thead","doNotIndent","allowUnquoted","allowMissing","caseFold","allowMissingTagName","editorConf","config_","setStyle","config","htmlMode","inText","chain","parser","tokenize","inBlock","doctype","inTag","baseState","tagStart","inAttribute","stringStartCol","quote","closure","isInAttribute","terminator","depth","startOfLine","noIndent","popContext","maybePopContext","nextTagName","parentTagName","tagNameState","closeTagNameState","attrState","matchClosing","closeState","closeStateErr","_stream","attrEqState","attrValueState","attrContinuedState","isInText","baseIndent","textAfter","fullLine","multilineTagIndentPastTag","multilineTagIndentFactor","alignCDATA","tagAfter","grabbers","blockCommentStart","blockCommentEnd","configuration","skipAttribute","xmlCurrentTag","xmlCurrentContext","cx","keywordRegex","esc","escaped","literal","keyCol","pair","pairStart","inlinePairs","inlineList","lineComment","fold","wordRegexp","words","wordOperators","commonKeywords","commonBuiltins","scopes","conf","parserConf","ERRORCLASS","delimiters","singleDelimiters","operators","singleOperators","doubleOperators","doubleDelimiters","tripleDelimiters","hangingIndent","myKeywords","myBuiltins","extra_keywords","extra_builtins","py3","identifiers","stringPrefixes","keywords","builtins","tokenBase","lastToken","scopeOffset","lineOffset","pushPyScope","dedent","errorToken","tokenBaseInner","inFormat","floatLiteral","intLiteral","formatStringFactory","tokenStringFactory","delimiter","tokenOuter","singleline","OUTCLASS","tokenNestedExpr","tokenString","singleLineStringErrors","isString","pushBracketScope","tokenLexer","beginningOfLine","lambda","delimiter_index","basecolumn","addErr","scope","closeBrackets","triples","CodeMirrorTextarea","editor","DropdownButton","btn","FetchFillSlot","slotName","comparisonOperatorsHash","<",">",">=","<=","==","!=","===","!==","selectedSlot","slot","comparison","dv","ModalButton","open","ModalBoxStyle","BullseyeStyle","BackdropStyle","slugField","formData","FormData","action","href","response","setContent","CustomEvent","bubbles","onClick","renderModal","Tabs","currentPage","_currentPage","_firstPage","tabPage","SiteShell","_url","loadContent","loading","URL","qs","pathname","URLSearchParams","ResponseType","FlowShellCard","flowBodyUrl","statusText","updateCard","errorMessage","redirect","flowBody","checkAutofocus","loadFormCode","setFormSubmitHandlers","log","script","newScript","autofocusElement","checkAutosubmit","updateFormAction","ROUTES","RouterOutlet","navigate","PF","PFAddons","activeUrl","defaultUrl","route","selectedRoute","activeRoute","hookCallback","some","hooks","setHookCallback","callback","isObject","hasOwnProp","isObjectEmpty","isUndefined","isNumber","isDate","fn","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","defaultParsingFlags","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","isValid","_isValid","flags","parsedParts","isNowValid","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","fun","momentProperties","updateInProgress","copyConfig","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","updateOffset","isMoment","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","arg","deprecations","deprecateSimple","isFunction","Function","_config","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","mom","_calendar","zeroFill","number","targetLength","forceSign","absNumber","zerosToFill","pow","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","ordinal","localeData","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","invalidDate","replaceLongDateFormatTokens","longDateFormat","defaultLongDateFormat","LTS","LT","L","LL","LLL","LLLL","_longDateFormat","formatUpper","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","future","past","ss","mm","hh","ww","M","MM","yy","relativeTime","withoutSuffix","isFuture","_relativeTime","pastFuture","aliases","addUnitAlias","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","getPrioritizedUnits","unitsObj","isLeapYear","year","absFloor","toInt","argumentForCoercion","coercedNumber","isFinite","makeGetSet","keepTime","set$1","month","date","daysInMonth","stringGet","stringSet","prioritized","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p1","p2","p3","p4","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","_a","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","isFormat","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","parseTwoDigitYear","getSetYear","getIsLeapYear","createDate","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","shiftWeekdays","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","day","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","hours","kFormat","lowercase","minutes","matchMeridiem","_meridiemParse","localeIsPM","seconds","kInput","_isPm","isPM","_meridiem","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","globalLocale","baseConfig","dayOfMonthOrdinalParse","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","names","loadLocale","oldLocale","exports","_abbr","require","getSetGlobalLocale","getLocale","defineLocale","abbr","parentLocale","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","setUTCMinutes","getUTCMinutes","configFromString","createFromInputFallback","currentDateArray","nowValue","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","temp","weekdayOverflow","curWeek","GG","W","E","createLocal","gg","ISO_8601","RFC_2822","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","hour","isPm","meridiemHour","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configFromObject","dayOrDate","minute","second","millisecond","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","prototypeMin","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","parseFloat","isValid$1","createInvalid$1","createDuration","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","matches","cloneWithOffset","model","clone","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","toArray","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","ret","diffRes","parseIso","momentsDifference","positiveMomentsDifference","isAfter","isBefore","createAdder","period","tmp","isAdding","invalid","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","formats","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","toISOString","keepOffset","toDate","inspect","datetime","zone","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOfDate","isoWeekday","unix","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","until","localeErasParse","eraName","narrow","localeErasConvertYear","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","isoWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","eraYearOrdinalParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","parseZone","preParsePostFormat","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","dates","isDSTShifted","proto$1","get$1","setter","listMonthsImpl","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","valueOf$1","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","argWithSuffix","argThresholds","withSuffix","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","moment","createCommonjsModule","getCjsExportFromNamespace","colorName","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","conversions","reverseKeywords","convert","rgb","channels","labels","hsl","hsv","hwb","cmyk","xyz","lab","lch","hex","keyword","ansi16","ansi256","hcg","apple","comparativeDistance","rdif","gdif","bdif","diffc","reversed","currentClosestKeyword","currentClosestDistance","z","t1","t2","t3","smin","lmin","hi","q","sl","vmin","wh","bl","ratio","y2","x2","z2","atan2","PI","sqrt","cos","sin","ansi","color","mult","rem","colorString","char","hue","chroma","pure","mg","buildGraph","graph","models","deriveBFS","fromModel","queue","adjacents","adjacent","wrapConversion","toModel","conversion","wrapRaw","wrappedFn","wrapRounded","routes","raw","colorConvert","colorName$1","getRgba","getHsla","getRgb","getHsl","getHwb","getAlpha","hexString","rgbString","rgbaString","percentString","percentaString","hslString","hslaString","hwbString","rgba","per","hexAlpha","scale","alpha","hsla","vals","hexDouble","reverseNames","num","Color","valid","setValues","lightness","whiteness","setSpace","rgbArray","hslArray","hsvArray","hwbArray","cmykArray","rgbaArray","hslaArray","setChannel","saturation","saturationv","blackness","rgbNumber","luminosity","lum","chan","contrast","color2","lum1","lum2","contrastRatio","dark","light","negate","lighten","darken","saturate","desaturate","whiten","blacken","greyscale","clearer","opaquer","rotate","degrees","mix","mixinColor","weight","color1","w1","w2","maxes","getValues","capped","chans","sname","svalues","chartjsColor","isValidKey","noop","uid","isNullOrUndef","valueOrDefault","defaultValue","valueAtIndexOrDefault","thisArg","each","loopable","arrayEquals","a0","ilen","v0","v1","klen","_merger","tval","sval","merge","_mergerIf","mergeIf","sources","merger","dst","inherits","extensions","ChartElement","Surrogate","__super__","_deprecated","previous","helpers_core","callCallback","getValueOrDefault","getValueAtIndexOrDefault","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","asin","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","helpers_easing","easingEffects","RAD_PER_DEG","DOUBLE_PI","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","exports$1","chart","ctx","clearRect","roundedRect","radius","moveTo","arc","closePath","drawPoint","rotation","xOffset","yOffset","cornerRadius","rad","translate","drawImage","restore","beginPath","lineTo","SQRT1_2","fill","stroke","_isPointInArea","point","epsilon","clipArea","clip","unclipArea","flip","stepped","steppedLine","midpoint","tension","bezierCurveTo","controlPointPreviousX","controlPointNextX","controlPointPreviousY","controlPointNextY","helpers_canvas","drawRoundedRectangle","_set","defaultColor","defaultFontColor","defaultFontFamily","defaultFontSize","defaultFontStyle","defaultLineHeight","showLines","core_defaults","toFontString","font","family","helpers_options","toLineHeight","toPadding","_parseFont","globalDefaults","global","fontSize","fontFamily","lineHeight","fontStyle","resolve","inputs","cacheable","exports$2","_factorize","log10","exponent","LOG10E","powerOf10","helpers_math","getRtlAdapter","rectX","setWidth","textAlign","xPlus","leftForLtr","itemWidth","getLtrAdapter","_itemWidth","helpers$1","easing","canvas","math","rtl","overrideTextDirection","original","getPropertyValue","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","interpolate","ease","actual","c0","c1","Element","_type","pivot","_view","_model","_start","transition","tooltipPosition","hasValue","core_element","exports$3","currentStep","numSteps","onAnimationProgress","onAnimationComplete","core_animation","animation","onProgress","onComplete","core_animations","animations","addAnimation","lazy","startTime","animating","requestAnimationFrame","cancelAnimation","findIndex","requestAnimFrame","startDigest","advance","nextStep","arrayEvents","listenArrayEvents","listener","_chartjs","listeners","object","unlistenArrayEvents","stub","DatasetController","datasetIndex","datasetElementType","dataElementType","_datasetElementOptions","_dataElementOptions","linkScales","addElements","getMeta","updateIndex","scales","getDataset","scalesOpts","xAxisID","xAxes","yAxisID","yAxes","datasets","getDatasetMeta","getScaleForId","scaleID","_getValueScaleId","_getIndexScaleId","_getValueScale","_getIndexScale","_update","destroy","createMetaDataset","_chart","_datasetIndex","createMetaData","_index","metaData","addElementAndReset","updateElement","buildOrUpdateElements","isExtensible","resyncElements","_configure","_cachedDataOpts","easingValue","draw","getStyle","_resolveDatasetElementOptions","_resolveDataElementOptions","backgroundColor","borderColor","hover","readKey","datasetOpts","custom","elementOptions","cached","dataIndex","freeze","removeHoverStyle","$previousStyle","setHoverStyle","getHoverColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","_removeDatasetHoverStyle","_setDatasetHoverStyle","hoverOptions","numMeta","numData","insertElements","onDataPush","onDataPop","onDataShift","onDataSplice","onDataUnshift","core_datasetController","TAU","clipArc","startAngle","endAngle","pixelMargin","angleMargin","outerRadius","innerRadius","drawFullCircleBorders","vm","fullCircles","drawBorder","borderAlign","lineWidth","lineJoin","element_arc","inLabelRange","mouseX","hoverRadius","inRange","chartX","chartY","pointRelativePosition","getAngleFromPoint","angle","betweenAngles","withinRadius","getCenterPoint","halfAngle","halfRadius","getArea","centreAngle","rangeFromCentre","circumference","fillStyle","strokeStyle","valueOrDefault$1","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","capBezierPoints","element_line","currentVM","spanGaps","points","_children","globalOptionLineElements","lastDrawnIndex","_loop","previousItem","lineCap","setLineDash","lineDashOffset","valueOrDefault$2","defaultColor$1","xRange","hitRadius","yRange","mouseY","pointStyle","element_point","inXRange","inYRange","chartArea","defaultColor$2","isVertical","getBarBounds","x1","y1","half","swap","orig","v2","parseBorderSkipped","borderSkipped","horizontal","parseBorderWidth","maxW","maxH","boundingRects","bounds","skipX","skipY","rectangle","element_rectangle","fillRect","Arc","Point","Rectangle","deprecated","valueOrDefault$3","computeMinSampleSize","curr","_length","getTicks","getPixelForTick","computeFitCategoryTraits","ruler","thickness","barThickness","stackCount","categoryPercentage","barPercentage","computeFlexCategoryTraits","percent","gridLines","offsetGridLines","controller_bar","scaleOpts","minBarLength","maxBarThickness","_ruler","getRuler","_xScale","_yScale","datasetLabel","_updateElementGeometry","vscale","getBasePixel","isHorizontal","vpixels","calculateBarValuePixels","ipixels","calculateBarIndexPixels","center","_getStacks","metasets","_getMatchingVisibleMetas","stacked","stacks","getStackCount","getStackIndex","getPixelForValue","_startPixel","_endPixel","imeta","ivalue","stackLength","_parseValue","stackIndex","indexOpts","valueOpts","valueOrDefault$4","resolve$1","tooltips","dataPoint","xLabel","yLabel","controller_bubble","xScale","yScale","dsIndex","getPixelForDecimal","_options","valueOrDefault$5","PI$1","DOUBLE_PI$1","HALF_PI$1","animateRotate","animateScale","legendCallback","listItem","outerHTML","legend","generateLabels","controller","legendItem","cutoutPercentage","tooltipItem","dataLabel","controller_doughnut","getRingIndex","ringIndex","isDatasetVisible","maxWidth","maxHeight","opts","ratioX","ratioY","offsetX","offsetY","arcs","cutout","chartWeight","_getRingWeight","startX","startY","endY","contains0","contains90","contains270","minX","minY","maxX","maxY","getMaxBorderWidth","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","animationOpts","centerX","centerY","calculateCircumference","hoverWidth","ringWeightOffset","dataSetIndex","horizontalBar","controller_horizontalBar","valueOrDefault$6","resolve$2","isPointInArea","scaleClip","halfBorderWidth","tickOpts","ticks","defaultClip","toClip","controller_line","showLine","_showLine","lineTension","_scale","updateBezierControlPoints","lineModel","calculatePointY","lineOptions","ds","dsMeta","stackedRightValue","rightValue","sumPos","sumNeg","getRightValue","_getSortedVisibleDatasetMetas","controlPoints","capControlPoint","pt","cubicInterpolationMode","splineCurveMonotone","splineCurve","nextItem","resolve$3","angleLines","circular","pointLabels","beginAtZero","controller_polarArea","starts","_starts","angles","_angles","_updateRadius","countVisibleElements","_computeAngle","minSize","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getDistanceFromCenterForValue","resetRadius","doughnut","controller_pie","valueOrDefault$7","controller_radar","pointPosition","getPointPositionForValue","scatter","controllers","polarArea","pie","radar","getRelativePosition","parseVisibleItems","metadata","jlen","getIntersectItems","getNearestItems","intersect","distanceMetric","minDistance","POSITIVE_INFINITY","nearestItems","getDistanceMetricForAxis","useX","useY","pt1","pt2","deltaX","deltaY","indexMode","items","core_interaction","x-axis","nearest","intersectsItem","filterByPosition","sortByWeight","wrapBoxes","boxes","layoutBoxes","setLayoutDims","layouts","params","layout","fullWidth","availableWidth","vBoxMaxWidth","hBoxMaxHeight","buildLayoutBoxes","leftAndTop","rightAndBottom","vertical","getCombinedMax","maxPadding","updateDims","newWidth","newHeight","getPadding","boxPadding","outerWidth","outerHeight","handleMaxPadding","updatePos","getMargins","marginForPositions","positions","fitBoxes","refit","refitBoxes","placeBoxes","userPadding","core_layouts","addBox","_layers","removeBox","layoutItem","configure","layoutOptions","availableHeight","verticalBoxes","horizontalBoxes","platform_basic","acquireContext","getContext","platform_dom","stylesheet","__proto__","default","EXPANDO_KEY","CSS_PREFIX","CSS_SIZE_MONITOR","CSS_RENDER_MONITOR","CSS_RENDER_ANIMATION","ANIMATION_START_EVENTS","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","readUsedSize","initCanvas","renderHeight","renderWidth","initial","aspectRatio","eventListenerOptions","supports","addListener","removeListener","createEvent","nativeEvent","fromNativeEvent","throttled","ticking","createDiv","createResizer","maxSize","resizer","expand","shrink","_reset","onScroll","watchForRender","expando","proxy","renderProxy","animationName","reflow","unwatchForRender","addResizeListener","maintainAspectRatio","removeResizeListener","injectCSS","rootNode","containsStyles","platform_dom$2","disableCSSInjection","_enabled","_ensureLoaded","root","getRootNode","getElementById","releaseContext","proxies","addEvent","removeEvent","implementation","plugins","core_plugins","_plugins","_cacheId","register","plugin","unregister","getAll","notify","hook","descriptors","$plugins","_invalidate","core_scaleService","constructors","registerScaleType","scaleConstructor","scaleDefaults","getScaleConstructor","getScaleDefaults","updateScaleDefaults","additions","addScalesToLayout","valueOrDefault$8","getRtlHelper","enabled","titleFontStyle","titleSpacing","titleMarginBottom","titleFontColor","titleAlign","bodySpacing","bodyFontColor","bodyAlign","footerFontStyle","footerSpacing","footerMarginTop","footerFontColor","footerAlign","yPadding","xPadding","caretPadding","caretSize","multiKeyBackground","displayColors","beforeTitle","tooltipItems","labelCount","afterTitle","beforeBody","beforeLabel","labelColor","labelTextColor","afterLabel","afterBody","beforeFooter","afterFooter","positioners","average","eventPosition","nearestElement","distanceBetweenPoints","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","indexScale","valueScale","getLabelForIndex","getBaseModel","tooltipOpts","xAlign","yAlign","textDirection","_bodyFontFamily","bodyFontFamily","_bodyFontStyle","bodyFontStyle","_bodyAlign","bodyFontSize","_titleFontFamily","titleFontFamily","_titleFontStyle","titleFontSize","_titleAlign","_footerFontFamily","footerFontFamily","_footerFontStyle","footerFontSize","_footerAlign","opacity","legendColorBackground","getTooltipSize","tooltip","combinedBodyLength","bodyItem","titleLineCount","footerLineCount","widthPadding","maxLineWidth","fontString","determineAlignment","lf","rf","olf","orf","yf","midX","midY","getBackgroundPoint","alignment","paddingAndSize","radiusAndPadding","getAlignedX","getBeforeAfterBodyLines","exports$4","_lastActive","getTitle","getBeforeBody","getBody","bodyItems","getAfterBody","getFooter","existingModel","_active","backgroundPoint","tooltipSize","caretX","caretY","labelColors","labelTextColors","_eventPosition","itemSort","dataPoints","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","drawTitle","rtlHelper","textBaseline","fillText","drawBody","textColor","drawColorBoxes","xLinePadding","colorX","fillLineOfText","bodyAlignForCalculation","rtlColorX","strokeRect","drawFooter","drawBackground","quadraticCurveTo","hasTooltipContent","globalAlpha","getElementsAtEventForMode","positioners_1","core_tooltip","valueOrDefault$9","mergeScaleConfig","slen","mergeConfig","initConfig","updateConfig","newOptions","ensureScalesHaveIDs","buildOrUpdateScales","nextAvailableScaleId","axesOpts","hasId","positionIsHorizontal","compare2Level","l1","l2","onHover","animationDuration","responsive","responsiveAnimationDuration","Chart","construct","_bufferedRender","instances","retinaScale","devicePixelRatio","bindEvents","resize","initToolTip","stop","silent","getMaximumWidth","getMaximumHeight","newSize","scalesOptions","scaleOptions","xAxisOptions","yAxisOptions","dtype","dposition","isDefault","scaleType","scaleClass","mergeTicksOptions","buildOrUpdateControllers","newControllers","destroyDatasetMeta","ControllerClass","resetElements","updateLayout","updateDatasets","lastActive","_bufferedRequest","_idx","updateDataset","animationOptions","animationObject","easingFunction","stepDecimal","layers","drawDatasets","_drawTooltip","_getSortedDatasetMetas","filterVisible","drawDataset","getElementAtEvent","getElementsAtEvent","getElementsAtXAxis","getDatasetAtEvent","_meta","generateLegend","unbindEvents","toBase64Image","toDataURL","_chartInstance","_listeners","eventHandler","updateHoverStyle","bufferedRequest","core_controller","Controller","configMerge","scaleMerge","core_helpers","parseMaxStyle","styleValue","parentProperty","valueInPixels","isConstrainedValue","getConstraintDimension","domNode","maxStyle","percentageProperty","defaultView","_getParentNode","constrainedNode","constrainedContainer","hasCNode","hasCContainer","infinity","collection","filterCallback","filtered","findNextWhere","arrayToSearch","currentItem","findPreviousWhere","almostEquals","almostWhole","rounded","NEGATIVE_INFINITY","toRadians","toDegrees","radians","_decimalPlaces","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","aliasPixel","pixelWidth","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fb","EPSILON","pointBefore","pointCurrent","pointAfter","alphaK","betaK","tauK","squaredMagnitude","pointsWithTangents","deltaK","mK","pointsLen","slopeDeltaX","niceNum","fraction","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","evt","originalEvent","boundingRect","getConstraintWidth","getConstraintHeight","_calculatePadding","parentDimension","cw","forceRatio","pixelRatio","pixelSize","longestText","arrayOfThings","gc","garbageCollect","thing","nestedThing","longest","gcLen","textWidth","numberOfLabelLines","numberOfLines","CanvasGradient","colorValue","CanvasPattern","abstract","DateAdapter","_create","members","core_adapters","_date","core_ticks","formatters","tickValue","logDelta","tickString","logTick","numExponential","toExponential","numDecimal","logarithmic","remain","valueOrDefault$a","numItems","increment","getPixelForGridLine","validIndex","lineValue","computeLabelSizes","tickFonts","tickFont","nestedLabel","widest","highest","widths","offsets","widestLabelSize","highestLabelSize","major","minor","valueAt","getTickMarkLength","drawTicks","tickMarkLength","getScaleLabelHeight","parseFontOptions","nestedOpts","fontColor","parseTickFontOptions","nonSkipped","ticksToFilter","getEvenSpacing","calculateSpacing","majorIndices","axisLength","ticksLimit","factors","factor","evenMajorSpacing","spacing","getMajorIndices","skipMajors","tick","majorStart","majorEnd","drawOnChartArea","zeroLineWidth","zeroLineColor","zeroLineBorderDash","zeroLineBorderDashOffset","scaleLabel","labelString","minRotation","maxRotation","mirror","autoSkip","autoSkipPadding","labelOffset","Scale","zeroLineIndex","_ticks","_getLabels","xLabels","yLabels","beforeUpdate","margins","samplingEnabled","sampleSize","_labelSizes","_maxLabelLines","longestLabelWidth","longestTextCache","_gridLineItems","_labelItems","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","_convertTicksToLabels","beforeCalculateTickRotation","calculateTickRotation","afterCalculateTickRotation","beforeFit","fit","afterFit","_ticksToDraw","_autoSkip","afterUpdate","startPixel","endPixel","reversePixels","_reversePixels","beforeTickToLabelConversion","convertTicksToLabels","userCallback","afterTickToLabelConversion","labelSizes","maxLabelWidth","maxLabelHeight","tickWidth","maxLabelDiagonal","numTicks","labelRotation","_isVisible","_getLabelSizes","scaleLabelOpts","gridLineOpts","isBottom","firstLabelSize","lastLabelSize","tickPadding","isRotated","angleRadians","cosRotation","sinRotation","labelHeight","offsetRight","labelWidth","handleMargins","isFullWidth","rawValue","_getScaleLabel","getValueForPixel","decimal","getDecimalForPixel","getBaseValue","avgMajorSpacing","maxTicksLimit","_tickSize","numMajorIndices","optionTicks","rot","_computeGridLineItems","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","lineColor","ticksLength","tl","axisWidth","axisHalfWidth","alignPixel","alignBorderValue","_computeLabelItems","textOffset","isMirrored","fonts","_drawGrid","firstLineWidth","lastLineWidth","_drawLabels","_drawTitle","scaleLabelX","scaleLabelY","scaleLabelFontColor","scaleLabelFont","scaleLabelPadding","halfLineHeight","isLeft","tz","gz","_draw","core_scale","isNullOrUndef$1","defaultConfig","scale_category","ticksOpts","minIndex","maxIndex","_startValue","_valueRange","valueCategory","_defaults","isNullOrUndef$2","generateTicks","generationOptions","dataRange","niceMin","niceMax","numSpaces","MIN_SPACING","stepSize","maxNumSpaces","maxTicks","precision","rmin","rmax","scale_linearbase","handleTickRangeOptions","minSign","maxSign","setMin","suggestedMin","setMax","suggestedMax","getTickLimit","_computeTickLimit","handleDirectionalChanges","numericGeneratorOptions","fixedStepSize","ticksAsNumbers","_endValue","defaultConfig$1","DEFAULT_MIN","DEFAULT_MAX","getOrCreateStack","neg","stackData","relativePoints","updateMinMax","scale_linear","hasStacks","stackValues","_defaults$1","valueOrDefault$b","generateTicks$1","exp","significand","tickVal","endExp","endSignificand","minNotZero","lastTick","defaultConfig$2","nonNegativeOrDefault","scale_logarithmic","IDMatches","valuesPerStack","valuesForType","minVal","maxVal","tickValues","_getFirstTickValue","_valueOffset","_defaults$2","valueOrDefault$c","valueAtIndexOrDefault$1","resolve$4","defaultConfig$3","animate","showLabelBackdrop","backdropColor","backdropPaddingY","backdropPaddingX","getTickBackdropHeight","measureLabelSize","determineLimits","fitWithPointLabels","textSize","plFont","furthestLimits","furthestAngles","_pointLabelSizes","valueCount","getPointPosition","drawingArea","getIndexAngle","hLimits","vLimits","setReductions","getTextAlignForAngle","adjustPointPositionForLabelHeight","drawPointLabels","pointLabelOpts","tickBackdropHeight","outerDistance","extra","pointLabelPosition","pointLabelFontColor","drawRadiusLine","numberOrZero","scale_radialLinear","setCenterPoint","largestPossibleRadius","radiusReductionLeft","radiusReductionRight","radiusReductionTop","radiusReductionBottom","leftMovement","rightMovement","topMovement","bottomMovement","maxRight","maxLeft","maxTop","maxBottom","scalingFactor","distanceFromCenter","thisAngle","getBasePosition","angleLineOpts","tickFontColor","_defaults$3","deprecated$1","resolve$5","valueOrDefault$d","MIN_INTEGER","MIN_SAFE_INTEGER","MAX_INTEGER","MAX_SAFE_INTEGER","INTERVALS","common","steps","UNITS","sorter","arrayUnique","getMin","getMax","buildLookupTable","timestamps","distribution","lookup","i0","i1","lo","interpolate$1","skey","tkey","toTimestamp","adapter","_adapter","determineUnitForAutoTicks","minUnit","capacity","interval","determineUnitForFormatting","determineMajorUnit","generate","timeOpts","unitStepSize","computeOffsets","setMajorTicks","majorUnit","ticksFromTimestamps","defaultConfig$4","adapters","displayFormat","displayFormats","scale_time","timestamp","labelsAdded","dataLabels","_table","_timestamps","getLabelCapacity","_unit","_majorUnit","_offsets","tooltipFormat","tickFormatFunction","minorFormat","majorFormat","nestedTickOpts","formatter","getPixelForOffset","_getLabelSize","tickLabelWidth","tickFontSize","getLabelWidth","exampleTime","exampleLabel","_defaults$4","category","radialLinear","FORMATS","_id","filler","mappers","decodeFill","computeLinearBoundary","scaleBottom","scaleTop","scaleZero","computeCircularBoundary","cy","computeBoundary","resolveTarget","visited","createMapper","isDrawable","drawArea","curve0","curve1","len0","len1","doFill","mapper","p0","d0","d1","loopOffset","plugin_filler","afterDatasetsUpdate","$filler","beforeDatasetsDraw","getRtlHelper$1","noop$1","valueOrDefault$e","getBoxWidth","labelOpts","usePointStyle","boxWidth","ci","onLeave","lineDash","Legend","legendHitBoxes","_hoveredItem","doughnutMode","beforeBuildLabels","buildLabels","afterBuildLabels","legendItems","labelFont","hitboxes","lineWidths","vPadding","columnWidths","columnHeights","currentColWidth","currentColHeight","lineDefault","legendHeight","legendWidth","drawLegendBox","SQRT2","halfFontSize","xLeft","yMiddle","alignmentOffset","dimension","blockSize","itemHeight","realX","_getLegendItemAt","hitBox","hoveredItem","createNewLegendAndAttach","legendOpts","plugin_legend","_element","beforeInit","afterEvent","noop$2","Title","titleX","titleY","fontOpts","createNewTitleBlockAndAttach","titleOpts","titleBlock","_adapters","Animation","animationService","Interaction","scaleService","Ticks","Tooltip","pluginService","PluginBase","canvasHelpers","layoutService","LinearScaleBase","klass","cfg","AdminLoginsChart","logins_failed_per_1h","logins_per_1h","valueStamp"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"main.js","sources":["../node_modules/tslib/tslib.es6.js","../src/legacy.js","../node_modules/lit-html/src/lib/dom.ts","../node_modules/lit-html/src/lib/template.ts","../node_modules/lit-html/src/lib/modify-template.ts","../node_modules/lit-html/src/lib/directive.ts","../node_modules/lit-html/src/lib/part.ts","../node_modules/lit-html/src/lib/template-instance.ts","../node_modules/lit-html/src/lib/template-result.ts","../node_modules/lit-html/src/lib/parts.ts","../node_modules/lit-html/src/lib/template-factory.ts","../node_modules/lit-html/src/lib/render.ts","../node_modules/lit-html/src/lib/default-template-processor.ts","../node_modules/lit-html/src/lit-html.ts","../node_modules/lit-html/src/lib/shady-render.ts","../node_modules/lit-element/src/lib/updating-element.ts","../node_modules/lit-element/src/lib/decorators.ts","../node_modules/lit-element/src/lib/css-tag.ts","../node_modules/lit-element/src/lit-element.ts","../src/elements/Messages.ts","../src/elements/ActionButton.ts","../src/utils.ts","../src/elements/Sidebar.ts","../src/api/user.ts","../src/elements/SidebarBrand.ts","../src/elements/SidebarUser.ts","../node_modules/codemirror/lib/codemirror.js","../node_modules/codemirror/addon/display/autorefresh.js","../node_modules/codemirror/mode/xml/xml.js","../node_modules/codemirror/mode/yaml/yaml.js","../node_modules/codemirror/mode/python/python.js","../src/elements/CodeMirror.ts","../src/elements/Dropdown.ts","../src/elements/FetchFillSlot.ts","../src/elements/ModalButton.ts","../src/elements/Tabs.ts","../src/pages/SiteShell.ts","../src/pages/FlowShellCard.ts","../src/pages/RouterOutlet.ts","../node_modules/moment/moment.js","../node_modules/chart.js/dist/Chart.js","../src/elements/AdminLoginsChart.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n};\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n    Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n    o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n    __setModuleDefault(result, mod);\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to get private field on non-instance\");\r\n    }\r\n    return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to set private field on non-instance\");\r\n    }\r\n    privateMap.set(receiver, value);\r\n    return value;\r\n}\r\n","// Fetch from data-attributes\ndocument.querySelectorAll(\"[data-pb-fetch-fill]\").forEach((el) => {\n    const url = el.dataset.pbFetchFill;\n    const key = el.dataset.pbFetchKey;\n    fetch(url)\n        .then((r) => r.json())\n        .then((r) => {\n            el.textContent = r[key];\n            el.value = r[key];\n        });\n});\n\n// Modal\ndocument.querySelectorAll(\"[data-target='modal']\").forEach((m) => {\n    m.addEventListener(\"click\", (e) => {\n        const parentContainer = e.target.closest('[data-target=\"modal\"]');\n        const modalId = parentContainer.attributes[\"data-modal\"].value;\n        document.querySelector(`#${modalId}`).removeAttribute(\"hidden\");\n    });\n});\ndocument.querySelectorAll(\".pf-c-modal-box [data-modal-close]\").forEach((b) => {\n    b.addEventListener(\"click\", (e) => {\n        const parentContainer = e.target.closest(\".pf-c-backdrop\");\n        parentContainer.setAttribute(\"hidden\", true);\n    });\n});\n\n// Make Checkbox label click trigger checkbox toggle\ndocument.querySelectorAll(\".pf-c-check__label\").forEach((checkLabel) => {\n    checkLabel.addEventListener(\"click\", (e) => {\n        const checkbox = e.target.parentElement.querySelector(\n            \"input[type=checkbox]\"\n        );\n        checkbox.checked = !checkbox.checked;\n    });\n});\n\n// Hamburger Menu\ndocument\n    .querySelectorAll(\".pf-c-page__header-brand-toggle>button\")\n    .forEach((toggle) => {\n        toggle.addEventListener(\"click\", (e) => {\n            const sidebar = document.querySelector(\".pf-c-page__sidebar\");\n            if (sidebar.classList.contains(\"pf-m-expanded\")) {\n                // Sidebar already expanded\n                sidebar.classList.remove(\"pf-m-expanded\");\n                sidebar.style.zIndex = 0;\n            } else {\n                // Sidebar not expanded yet\n                sidebar.classList.add(\"pf-m-expanded\");\n                sidebar.style.zIndex = 200;\n            }\n        });\n    });\n\n// Collapsable Menus in Sidebar\ndocument\n    .querySelectorAll(\".pf-m-expandable>.pf-c-nav__link\")\n    .forEach((menu) => {\n        menu.addEventListener(\"click\", (e) => {\n            e.preventDefault();\n            menu.parentElement.classList.toggle(\"pf-m-expanded\");\n        });\n    });\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\ninterface MaybePolyfilledCe extends CustomElementRegistry {\n  readonly polyfillWrapFlushCallback?: object;\n}\n\n/**\n * True if the custom elements polyfill is in use.\n */\nexport const isCEPolyfill = typeof window !== 'undefined' &&\n    window.customElements != null &&\n    (window.customElements as MaybePolyfilledCe).polyfillWrapFlushCallback !==\n        undefined;\n\n/**\n * Reparents nodes, starting from `start` (inclusive) to `end` (exclusive),\n * into another container (could be the same container), before `before`. If\n * `before` is null, it appends the nodes to the container.\n */\nexport const reparentNodes =\n    (container: Node,\n     start: Node|null,\n     end: Node|null = null,\n     before: Node|null = null): void => {\n      while (start !== end) {\n        const n = start!.nextSibling;\n        container.insertBefore(start!, before);\n        start = n;\n      }\n    };\n\n/**\n * Removes nodes, starting from `start` (inclusive) to `end` (exclusive), from\n * `container`.\n */\nexport const removeNodes =\n    (container: Node, start: Node|null, end: Node|null = null): void => {\n      while (start !== end) {\n        const n = start!.nextSibling;\n        container.removeChild(start!);\n        start = n;\n      }\n    };\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {TemplateResult} from './template-result.js';\n\n/**\n * An expression marker with embedded unique key to avoid collision with\n * possible text in templates.\n */\nexport const marker = `{{lit-${String(Math.random()).slice(2)}}}`;\n\n/**\n * An expression marker used text-positions, multi-binding attributes, and\n * attributes with markup-like text values.\n */\nexport const nodeMarker = `<!--${marker}-->`;\n\nexport const markerRegex = new RegExp(`${marker}|${nodeMarker}`);\n\n/**\n * Suffix appended to all bound attribute names.\n */\nexport const boundAttributeSuffix = '$lit$';\n\n/**\n * An updatable Template that tracks the location of dynamic parts.\n */\nexport class Template {\n  readonly parts: TemplatePart[] = [];\n  readonly element: HTMLTemplateElement;\n\n  constructor(result: TemplateResult, element: HTMLTemplateElement) {\n    this.element = element;\n\n    const nodesToRemove: Node[] = [];\n    const stack: Node[] = [];\n    // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n    const walker = document.createTreeWalker(\n        element.content,\n        133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */,\n        null,\n        false);\n    // Keeps track of the last index associated with a part. We try to delete\n    // unnecessary nodes, but we never want to associate two different parts\n    // to the same index. They must have a constant node between.\n    let lastPartIndex = 0;\n    let index = -1;\n    let partIndex = 0;\n    const {strings, values: {length}} = result;\n    while (partIndex < length) {\n      const node = walker.nextNode() as Element | Comment | Text | null;\n      if (node === null) {\n        // We've exhausted the content inside a nested template element.\n        // Because we still have parts (the outer for-loop), we know:\n        // - There is a template in the stack\n        // - The walker will find a nextNode outside the template\n        walker.currentNode = stack.pop()!;\n        continue;\n      }\n      index++;\n\n      if (node.nodeType === 1 /* Node.ELEMENT_NODE */) {\n        if ((node as Element).hasAttributes()) {\n          const attributes = (node as Element).attributes;\n          const {length} = attributes;\n          // Per\n          // https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap,\n          // attributes are not guaranteed to be returned in document order.\n          // In particular, Edge/IE can return them out of order, so we cannot\n          // assume a correspondence between part index and attribute index.\n          let count = 0;\n          for (let i = 0; i < length; i++) {\n            if (endsWith(attributes[i].name, boundAttributeSuffix)) {\n              count++;\n            }\n          }\n          while (count-- > 0) {\n            // Get the template literal section leading up to the first\n            // expression in this attribute\n            const stringForPart = strings[partIndex];\n            // Find the attribute name\n            const name = lastAttributeNameRegex.exec(stringForPart)![2];\n            // Find the corresponding attribute\n            // All bound attributes have had a suffix added in\n            // TemplateResult#getHTML to opt out of special attribute\n            // handling. To look up the attribute value we also need to add\n            // the suffix.\n            const attributeLookupName =\n                name.toLowerCase() + boundAttributeSuffix;\n            const attributeValue =\n                (node as Element).getAttribute(attributeLookupName)!;\n            (node as Element).removeAttribute(attributeLookupName);\n            const statics = attributeValue.split(markerRegex);\n            this.parts.push({type: 'attribute', index, name, strings: statics});\n            partIndex += statics.length - 1;\n          }\n        }\n        if ((node as Element).tagName === 'TEMPLATE') {\n          stack.push(node);\n          walker.currentNode = (node as HTMLTemplateElement).content;\n        }\n      } else if (node.nodeType === 3 /* Node.TEXT_NODE */) {\n        const data = (node as Text).data;\n        if (data.indexOf(marker) >= 0) {\n          const parent = node.parentNode!;\n          const strings = data.split(markerRegex);\n          const lastIndex = strings.length - 1;\n          // Generate a new text node for each literal section\n          // These nodes are also used as the markers for node parts\n          for (let i = 0; i < lastIndex; i++) {\n            let insert: Node;\n            let s = strings[i];\n            if (s === '') {\n              insert = createMarker();\n            } else {\n              const match = lastAttributeNameRegex.exec(s);\n              if (match !== null && endsWith(match[2], boundAttributeSuffix)) {\n                s = s.slice(0, match.index) + match[1] +\n                    match[2].slice(0, -boundAttributeSuffix.length) + match[3];\n              }\n              insert = document.createTextNode(s);\n            }\n            parent.insertBefore(insert, node);\n            this.parts.push({type: 'node', index: ++index});\n          }\n          // If there's no text, we must insert a comment to mark our place.\n          // Else, we can trust it will stick around after cloning.\n          if (strings[lastIndex] === '') {\n            parent.insertBefore(createMarker(), node);\n            nodesToRemove.push(node);\n          } else {\n            (node as Text).data = strings[lastIndex];\n          }\n          // We have a part for each match found\n          partIndex += lastIndex;\n        }\n      } else if (node.nodeType === 8 /* Node.COMMENT_NODE */) {\n        if ((node as Comment).data === marker) {\n          const parent = node.parentNode!;\n          // Add a new marker node to be the startNode of the Part if any of\n          // the following are true:\n          //  * We don't have a previousSibling\n          //  * The previousSibling is already the start of a previous part\n          if (node.previousSibling === null || index === lastPartIndex) {\n            index++;\n            parent.insertBefore(createMarker(), node);\n          }\n          lastPartIndex = index;\n          this.parts.push({type: 'node', index});\n          // If we don't have a nextSibling, keep this node so we have an end.\n          // Else, we can remove it to save future costs.\n          if (node.nextSibling === null) {\n            (node as Comment).data = '';\n          } else {\n            nodesToRemove.push(node);\n            index--;\n          }\n          partIndex++;\n        } else {\n          let i = -1;\n          while ((i = (node as Comment).data.indexOf(marker, i + 1)) !== -1) {\n            // Comment node has a binding marker inside, make an inactive part\n            // The binding won't work, but subsequent bindings will\n            // TODO (justinfagnani): consider whether it's even worth it to\n            // make bindings in comments work\n            this.parts.push({type: 'node', index: -1});\n            partIndex++;\n          }\n        }\n      }\n    }\n\n    // Remove text binding nodes after the walk to not disturb the TreeWalker\n    for (const n of nodesToRemove) {\n      n.parentNode!.removeChild(n);\n    }\n  }\n}\n\nconst endsWith = (str: string, suffix: string): boolean => {\n  const index = str.length - suffix.length;\n  return index >= 0 && str.slice(index) === suffix;\n};\n\n/**\n * A placeholder for a dynamic expression in an HTML template.\n *\n * There are two built-in part types: AttributePart and NodePart. NodeParts\n * always represent a single dynamic expression, while AttributeParts may\n * represent as many expressions are contained in the attribute.\n *\n * A Template's parts are mutable, so parts can be replaced or modified\n * (possibly to implement different template semantics). The contract is that\n * parts can only be replaced, not removed, added or reordered, and parts must\n * always consume the correct number of values in their `update()` method.\n *\n * TODO(justinfagnani): That requirement is a little fragile. A\n * TemplateInstance could instead be more careful about which values it gives\n * to Part.update().\n */\nexport type TemplatePart = {\n  readonly type: 'node'; index: number;\n}|{\n  readonly type: 'attribute';\n  index: number;\n  readonly name: string;\n  readonly strings: ReadonlyArray<string>;\n};\n\nexport const isTemplatePartActive = (part: TemplatePart) => part.index !== -1;\n\n// Allows `document.createComment('')` to be renamed for a\n// small manual size-savings.\nexport const createMarker = () => document.createComment('');\n\n/**\n * This regex extracts the attribute name preceding an attribute-position\n * expression. It does this by matching the syntax allowed for attributes\n * against the string literal directly preceding the expression, assuming that\n * the expression is in an attribute-value position.\n *\n * See attributes in the HTML spec:\n * https://www.w3.org/TR/html5/syntax.html#elements-attributes\n *\n * \" \\x09\\x0a\\x0c\\x0d\" are HTML space characters:\n * https://www.w3.org/TR/html5/infrastructure.html#space-characters\n *\n * \"\\0-\\x1F\\x7F-\\x9F\" are Unicode control characters, which includes every\n * space character except \" \".\n *\n * So an attribute is:\n *  * The name: any character except a control character, space character, ('),\n *    (\"), \">\", \"=\", or \"/\"\n *  * Followed by zero or more space characters\n *  * Followed by \"=\"\n *  * Followed by zero or more space characters\n *  * Followed by:\n *    * Any character except space, ('), (\"), \"<\", \">\", \"=\", (`), or\n *    * (\") then any non-(\"), or\n *    * (') then any non-(')\n */\nexport const lastAttributeNameRegex =\n    // eslint-disable-next-line no-control-regex\n    /([ \\x09\\x0a\\x0c\\x0d])([^\\0-\\x1F\\x7F-\\x9F \"'>=/]+)([ \\x09\\x0a\\x0c\\x0d]*=[ \\x09\\x0a\\x0c\\x0d]*(?:[^ \\x09\\x0a\\x0c\\x0d\"'`<>=]*|\"[^\"]*|'[^']*))$/;\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {isTemplatePartActive, Template, TemplatePart} from './template.js';\n\nconst walkerNodeFilter = 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */;\n\n/**\n * Removes the list of nodes from a Template safely. In addition to removing\n * nodes from the Template, the Template part indices are updated to match\n * the mutated Template DOM.\n *\n * As the template is walked the removal state is tracked and\n * part indices are adjusted as needed.\n *\n * div\n *   div#1 (remove) <-- start removing (removing node is div#1)\n *     div\n *       div#2 (remove)  <-- continue removing (removing node is still div#1)\n *         div\n * div <-- stop removing since previous sibling is the removing node (div#1,\n * removed 4 nodes)\n */\nexport function removeNodesFromTemplate(\n    template: Template, nodesToRemove: Set<Node>) {\n  const {element: {content}, parts} = template;\n  const walker =\n      document.createTreeWalker(content, walkerNodeFilter, null, false);\n  let partIndex = nextActiveIndexInTemplateParts(parts);\n  let part = parts[partIndex];\n  let nodeIndex = -1;\n  let removeCount = 0;\n  const nodesToRemoveInTemplate = [];\n  let currentRemovingNode: Node|null = null;\n  while (walker.nextNode()) {\n    nodeIndex++;\n    const node = walker.currentNode as Element;\n    // End removal if stepped past the removing node\n    if (node.previousSibling === currentRemovingNode) {\n      currentRemovingNode = null;\n    }\n    // A node to remove was found in the template\n    if (nodesToRemove.has(node)) {\n      nodesToRemoveInTemplate.push(node);\n      // Track node we're removing\n      if (currentRemovingNode === null) {\n        currentRemovingNode = node;\n      }\n    }\n    // When removing, increment count by which to adjust subsequent part indices\n    if (currentRemovingNode !== null) {\n      removeCount++;\n    }\n    while (part !== undefined && part.index === nodeIndex) {\n      // If part is in a removed node deactivate it by setting index to -1 or\n      // adjust the index as needed.\n      part.index = currentRemovingNode !== null ? -1 : part.index - removeCount;\n      // go to the next active part.\n      partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n      part = parts[partIndex];\n    }\n  }\n  nodesToRemoveInTemplate.forEach((n) => n.parentNode!.removeChild(n));\n}\n\nconst countNodes = (node: Node) => {\n  let count = (node.nodeType === 11 /* Node.DOCUMENT_FRAGMENT_NODE */) ? 0 : 1;\n  const walker = document.createTreeWalker(node, walkerNodeFilter, null, false);\n  while (walker.nextNode()) {\n    count++;\n  }\n  return count;\n};\n\nconst nextActiveIndexInTemplateParts =\n    (parts: TemplatePart[], startIndex = -1) => {\n      for (let i = startIndex + 1; i < parts.length; i++) {\n        const part = parts[i];\n        if (isTemplatePartActive(part)) {\n          return i;\n        }\n      }\n      return -1;\n    };\n\n/**\n * Inserts the given node into the Template, optionally before the given\n * refNode. In addition to inserting the node into the Template, the Template\n * part indices are updated to match the mutated Template DOM.\n */\nexport function insertNodeIntoTemplate(\n    template: Template, node: Node, refNode: Node|null = null) {\n  const {element: {content}, parts} = template;\n  // If there's no refNode, then put node at end of template.\n  // No part indices need to be shifted in this case.\n  if (refNode === null || refNode === undefined) {\n    content.appendChild(node);\n    return;\n  }\n  const walker =\n      document.createTreeWalker(content, walkerNodeFilter, null, false);\n  let partIndex = nextActiveIndexInTemplateParts(parts);\n  let insertCount = 0;\n  let walkerIndex = -1;\n  while (walker.nextNode()) {\n    walkerIndex++;\n    const walkerNode = walker.currentNode as Element;\n    if (walkerNode === refNode) {\n      insertCount = countNodes(node);\n      refNode.parentNode!.insertBefore(node, refNode);\n    }\n    while (partIndex !== -1 && parts[partIndex].index === walkerIndex) {\n      // If we've inserted the node, simply adjust all subsequent parts\n      if (insertCount > 0) {\n        while (partIndex !== -1) {\n          parts[partIndex].index += insertCount;\n          partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n        }\n        return;\n      }\n      partIndex = nextActiveIndexInTemplateParts(parts, partIndex);\n    }\n  }\n}\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {Part} from './part.js';\n\nconst directives = new WeakMap<object, true>();\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type DirectiveFactory = (...args: any[]) => object;\n\nexport type DirectiveFn = (part: Part) => void;\n\n/**\n * Brands a function as a directive factory function so that lit-html will call\n * the function during template rendering, rather than passing as a value.\n *\n * A _directive_ is a function that takes a Part as an argument. It has the\n * signature: `(part: Part) => void`.\n *\n * A directive _factory_ is a function that takes arguments for data and\n * configuration and returns a directive. Users of directive usually refer to\n * the directive factory as the directive. For example, \"The repeat directive\".\n *\n * Usually a template author will invoke a directive factory in their template\n * with relevant arguments, which will then return a directive function.\n *\n * Here's an example of using the `repeat()` directive factory that takes an\n * array and a function to render an item:\n *\n * ```js\n * html`<ul><${repeat(items, (item) => html`<li>${item}</li>`)}</ul>`\n * ```\n *\n * When `repeat` is invoked, it returns a directive function that closes over\n * `items` and the template function. When the outer template is rendered, the\n * return directive function is called with the Part for the expression.\n * `repeat` then performs it's custom logic to render multiple items.\n *\n * @param f The directive factory function. Must be a function that returns a\n * function of the signature `(part: Part) => void`. The returned function will\n * be called with the part object.\n *\n * @example\n *\n * import {directive, html} from 'lit-html';\n *\n * const immutable = directive((v) => (part) => {\n *   if (part.value !== v) {\n *     part.setValue(v)\n *   }\n * });\n */\nexport const directive = <F extends DirectiveFactory>(f: F): F =>\n    ((...args: unknown[]) => {\n      const d = f(...args);\n      directives.set(d, true);\n      return d;\n    }) as F;\n\nexport const isDirective = (o: unknown): o is DirectiveFn => {\n  return typeof o === 'function' && directives.has(o);\n};\n","/**\n * @license\n * Copyright (c) 2018 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * The Part interface represents a dynamic part of a template instance rendered\n * by lit-html.\n */\nexport interface Part {\n  readonly value: unknown;\n\n  /**\n   * Sets the current part value, but does not write it to the DOM.\n   * @param value The value that will be committed.\n   */\n  setValue(value: unknown): void;\n\n  /**\n   * Commits the current part value, causing it to actually be written to the\n   * DOM.\n   *\n   * Directives are run at the start of `commit`, so that if they call\n   * `part.setValue(...)` synchronously that value will be used in the current\n   * commit, and there's no need to call `part.commit()` within the directive.\n   * If directives set a part value asynchronously, then they must call\n   * `part.commit()` manually.\n   */\n  commit(): void;\n}\n\n/**\n * A sentinel value that signals that a value was handled by a directive and\n * should not be written to the DOM.\n */\nexport const noChange = {};\n\n/**\n * A sentinel value that signals a NodePart to fully clear its content.\n */\nexport const nothing = {};\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {isCEPolyfill} from './dom.js';\nimport {Part} from './part.js';\nimport {RenderOptions} from './render-options.js';\nimport {TemplateProcessor} from './template-processor.js';\nimport {isTemplatePartActive, Template, TemplatePart} from './template.js';\n\n/**\n * An instance of a `Template` that can be attached to the DOM and updated\n * with new values.\n */\nexport class TemplateInstance {\n  private readonly __parts: Array<Part|undefined> = [];\n  readonly processor: TemplateProcessor;\n  readonly options: RenderOptions;\n  readonly template: Template;\n\n  constructor(\n      template: Template, processor: TemplateProcessor,\n      options: RenderOptions) {\n    this.template = template;\n    this.processor = processor;\n    this.options = options;\n  }\n\n  update(values: readonly unknown[]) {\n    let i = 0;\n    for (const part of this.__parts) {\n      if (part !== undefined) {\n        part.setValue(values[i]);\n      }\n      i++;\n    }\n    for (const part of this.__parts) {\n      if (part !== undefined) {\n        part.commit();\n      }\n    }\n  }\n\n  _clone(): DocumentFragment {\n    // There are a number of steps in the lifecycle of a template instance's\n    // DOM fragment:\n    //  1. Clone - create the instance fragment\n    //  2. Adopt - adopt into the main document\n    //  3. Process - find part markers and create parts\n    //  4. Upgrade - upgrade custom elements\n    //  5. Update - set node, attribute, property, etc., values\n    //  6. Connect - connect to the document. Optional and outside of this\n    //     method.\n    //\n    // We have a few constraints on the ordering of these steps:\n    //  * We need to upgrade before updating, so that property values will pass\n    //    through any property setters.\n    //  * We would like to process before upgrading so that we're sure that the\n    //    cloned fragment is inert and not disturbed by self-modifying DOM.\n    //  * We want custom elements to upgrade even in disconnected fragments.\n    //\n    // Given these constraints, with full custom elements support we would\n    // prefer the order: Clone, Process, Adopt, Upgrade, Update, Connect\n    //\n    // But Safari does not implement CustomElementRegistry#upgrade, so we\n    // can not implement that order and still have upgrade-before-update and\n    // upgrade disconnected fragments. So we instead sacrifice the\n    // process-before-upgrade constraint, since in Custom Elements v1 elements\n    // must not modify their light DOM in the constructor. We still have issues\n    // when co-existing with CEv0 elements like Polymer 1, and with polyfills\n    // that don't strictly adhere to the no-modification rule because shadow\n    // DOM, which may be created in the constructor, is emulated by being placed\n    // in the light DOM.\n    //\n    // The resulting order is on native is: Clone, Adopt, Upgrade, Process,\n    // Update, Connect. document.importNode() performs Clone, Adopt, and Upgrade\n    // in one step.\n    //\n    // The Custom Elements v1 polyfill supports upgrade(), so the order when\n    // polyfilled is the more ideal: Clone, Process, Adopt, Upgrade, Update,\n    // Connect.\n\n    const fragment = isCEPolyfill ?\n        this.template.element.content.cloneNode(true) as DocumentFragment :\n        document.importNode(this.template.element.content, true);\n\n    const stack: Node[] = [];\n    const parts = this.template.parts;\n    // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n    const walker = document.createTreeWalker(\n        fragment,\n        133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */,\n        null,\n        false);\n    let partIndex = 0;\n    let nodeIndex = 0;\n    let part: TemplatePart;\n    let node = walker.nextNode();\n    // Loop through all the nodes and parts of a template\n    while (partIndex < parts.length) {\n      part = parts[partIndex];\n      if (!isTemplatePartActive(part)) {\n        this.__parts.push(undefined);\n        partIndex++;\n        continue;\n      }\n\n      // Progress the tree walker until we find our next part's node.\n      // Note that multiple parts may share the same node (attribute parts\n      // on a single element), so this loop may not run at all.\n      while (nodeIndex < part.index) {\n        nodeIndex++;\n        if (node!.nodeName === 'TEMPLATE') {\n          stack.push(node!);\n          walker.currentNode = (node as HTMLTemplateElement).content;\n        }\n        if ((node = walker.nextNode()) === null) {\n          // We've exhausted the content inside a nested template element.\n          // Because we still have parts (the outer for-loop), we know:\n          // - There is a template in the stack\n          // - The walker will find a nextNode outside the template\n          walker.currentNode = stack.pop()!;\n          node = walker.nextNode();\n        }\n      }\n\n      // We've arrived at our part's node.\n      if (part.type === 'node') {\n        const part = this.processor.handleTextExpression(this.options);\n        part.insertAfterNode(node!.previousSibling!);\n        this.__parts.push(part);\n      } else {\n        this.__parts.push(...this.processor.handleAttributeExpressions(\n            node as Element, part.name, part.strings, this.options));\n      }\n      partIndex++;\n    }\n\n    if (isCEPolyfill) {\n      document.adoptNode(fragment);\n      customElements.upgrade(fragment);\n    }\n    return fragment;\n  }\n}\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * @module lit-html\n */\n\nimport {reparentNodes} from './dom.js';\nimport {TemplateProcessor} from './template-processor.js';\nimport {boundAttributeSuffix, lastAttributeNameRegex, marker, nodeMarker} from './template.js';\n\ndeclare const trustedTypes: typeof window.trustedTypes;\n/**\n * Our TrustedTypePolicy for HTML which is declared using the html template\n * tag function.\n *\n * That HTML is a developer-authored constant, and is parsed with innerHTML\n * before any untrusted expressions have been mixed in. Therefor it is\n * considered safe by construction.\n */\nconst policy = window.trustedTypes &&\n    trustedTypes!.createPolicy('lit-html', {createHTML: (s) => s});\n\nconst commentMarker = ` ${marker} `;\n\n/**\n * The return type of `html`, which holds a Template and the values from\n * interpolated expressions.\n */\nexport class TemplateResult {\n  readonly strings: TemplateStringsArray;\n  readonly values: readonly unknown[];\n  readonly type: string;\n  readonly processor: TemplateProcessor;\n\n  constructor(\n      strings: TemplateStringsArray, values: readonly unknown[], type: string,\n      processor: TemplateProcessor) {\n    this.strings = strings;\n    this.values = values;\n    this.type = type;\n    this.processor = processor;\n  }\n\n  /**\n   * Returns a string of HTML used to create a `<template>` element.\n   */\n  getHTML(): string {\n    const l = this.strings.length - 1;\n    let html = '';\n    let isCommentBinding = false;\n\n    for (let i = 0; i < l; i++) {\n      const s = this.strings[i];\n      // For each binding we want to determine the kind of marker to insert\n      // into the template source before it's parsed by the browser's HTML\n      // parser. The marker type is based on whether the expression is in an\n      // attribute, text, or comment position.\n      //   * For node-position bindings we insert a comment with the marker\n      //     sentinel as its text content, like <!--{{lit-guid}}-->.\n      //   * For attribute bindings we insert just the marker sentinel for the\n      //     first binding, so that we support unquoted attribute bindings.\n      //     Subsequent bindings can use a comment marker because multi-binding\n      //     attributes must be quoted.\n      //   * For comment bindings we insert just the marker sentinel so we don't\n      //     close the comment.\n      //\n      // The following code scans the template source, but is *not* an HTML\n      // parser. We don't need to track the tree structure of the HTML, only\n      // whether a binding is inside a comment, and if not, if it appears to be\n      // the first binding in an attribute.\n      const commentOpen = s.lastIndexOf('<!--');\n      // We're in comment position if we have a comment open with no following\n      // comment close. Because <-- can appear in an attribute value there can\n      // be false positives.\n      isCommentBinding = (commentOpen > -1 || isCommentBinding) &&\n          s.indexOf('-->', commentOpen + 1) === -1;\n      // Check to see if we have an attribute-like sequence preceding the\n      // expression. This can match \"name=value\" like structures in text,\n      // comments, and attribute values, so there can be false-positives.\n      const attributeMatch = lastAttributeNameRegex.exec(s);\n      if (attributeMatch === null) {\n        // We're only in this branch if we don't have a attribute-like\n        // preceding sequence. For comments, this guards against unusual\n        // attribute values like <div foo=\"<!--${'bar'}\">. Cases like\n        // <!-- foo=${'bar'}--> are handled correctly in the attribute branch\n        // below.\n        html += s + (isCommentBinding ? commentMarker : nodeMarker);\n      } else {\n        // For attributes we use just a marker sentinel, and also append a\n        // $lit$ suffix to the name to opt-out of attribute-specific parsing\n        // that IE and Edge do for style and certain SVG attributes.\n        html += s.substr(0, attributeMatch.index) + attributeMatch[1] +\n            attributeMatch[2] + boundAttributeSuffix + attributeMatch[3] +\n            marker;\n      }\n    }\n    html += this.strings[l];\n    return html;\n  }\n\n  getTemplateElement(): HTMLTemplateElement {\n    const template = document.createElement('template');\n    let value = this.getHTML();\n    if (policy !== undefined) {\n      // this is secure because `this.strings` is a TemplateStringsArray.\n      // TODO: validate this when\n      // https://github.com/tc39/proposal-array-is-template-object is\n      // implemented.\n      value = policy.createHTML(value) as unknown as string;\n    }\n    template.innerHTML = value;\n    return template;\n  }\n}\n\n/**\n * A TemplateResult for SVG fragments.\n *\n * This class wraps HTML in an `<svg>` tag in order to parse its contents in the\n * SVG namespace, then modifies the template to remove the `<svg>` tag so that\n * clones only container the original fragment.\n */\nexport class SVGTemplateResult extends TemplateResult {\n  getHTML(): string {\n    return `<svg>${super.getHTML()}</svg>`;\n  }\n\n  getTemplateElement(): HTMLTemplateElement {\n    const template = super.getTemplateElement();\n    const content = template.content;\n    const svgElement = content.firstChild!;\n    content.removeChild(svgElement);\n    reparentNodes(content, svgElement.firstChild);\n    return template;\n  }\n}\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {isDirective} from './directive.js';\nimport {removeNodes} from './dom.js';\nimport {noChange, nothing, Part} from './part.js';\nimport {RenderOptions} from './render-options.js';\nimport {TemplateInstance} from './template-instance.js';\nimport {TemplateResult} from './template-result.js';\nimport {createMarker} from './template.js';\n\n// https://tc39.github.io/ecma262/#sec-typeof-operator\nexport type Primitive = null|undefined|boolean|number|string|symbol|bigint;\nexport const isPrimitive = (value: unknown): value is Primitive => {\n  return (\n      value === null ||\n      !(typeof value === 'object' || typeof value === 'function'));\n};\nexport const isIterable = (value: unknown): value is Iterable<unknown> => {\n  return Array.isArray(value) ||\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      !!(value && (value as any)[Symbol.iterator]);\n};\n\n/**\n * Writes attribute values to the DOM for a group of AttributeParts bound to a\n * single attribute. The value is only set once even if there are multiple parts\n * for an attribute.\n */\nexport class AttributeCommitter {\n  readonly element: Element;\n  readonly name: string;\n  readonly strings: ReadonlyArray<string>;\n  readonly parts: ReadonlyArray<AttributePart>;\n  dirty = true;\n\n  constructor(element: Element, name: string, strings: ReadonlyArray<string>) {\n    this.element = element;\n    this.name = name;\n    this.strings = strings;\n    this.parts = [];\n    for (let i = 0; i < strings.length - 1; i++) {\n      (this.parts as AttributePart[])[i] = this._createPart();\n    }\n  }\n\n  /**\n   * Creates a single part. Override this to create a differnt type of part.\n   */\n  protected _createPart(): AttributePart {\n    return new AttributePart(this);\n  }\n\n  protected _getValue(): unknown {\n    const strings = this.strings;\n    const l = strings.length - 1;\n    const parts = this.parts;\n\n    // If we're assigning an attribute via syntax like:\n    //    attr=\"${foo}\"  or  attr=${foo}\n    // but not\n    //    attr=\"${foo} ${bar}\" or attr=\"${foo} baz\"\n    // then we don't want to coerce the attribute value into one long\n    // string. Instead we want to just return the value itself directly,\n    // so that sanitizeDOMValue can get the actual value rather than\n    // String(value)\n    // The exception is if v is an array, in which case we do want to smash\n    // it together into a string without calling String() on the array.\n    //\n    // This also allows trusted values (when using TrustedTypes) being\n    // assigned to DOM sinks without being stringified in the process.\n    if (l === 1 && strings[0] === '' && strings[1] === '') {\n      const v = parts[0].value;\n      if (typeof v === 'symbol') {\n        return String(v);\n      }\n      if (typeof v === 'string' || !isIterable(v)) {\n        return v;\n      }\n    }\n    let text = '';\n\n    for (let i = 0; i < l; i++) {\n      text += strings[i];\n      const part = parts[i];\n      if (part !== undefined) {\n        const v = part.value;\n        if (isPrimitive(v) || !isIterable(v)) {\n          text += typeof v === 'string' ? v : String(v);\n        } else {\n          for (const t of v) {\n            text += typeof t === 'string' ? t : String(t);\n          }\n        }\n      }\n    }\n\n    text += strings[l];\n    return text;\n  }\n\n  commit(): void {\n    if (this.dirty) {\n      this.dirty = false;\n      this.element.setAttribute(this.name, this._getValue() as string);\n    }\n  }\n}\n\n/**\n * A Part that controls all or part of an attribute value.\n */\nexport class AttributePart implements Part {\n  readonly committer: AttributeCommitter;\n  value: unknown = undefined;\n\n  constructor(committer: AttributeCommitter) {\n    this.committer = committer;\n  }\n\n  setValue(value: unknown): void {\n    if (value !== noChange && (!isPrimitive(value) || value !== this.value)) {\n      this.value = value;\n      // If the value is a not a directive, dirty the committer so that it'll\n      // call setAttribute. If the value is a directive, it'll dirty the\n      // committer if it calls setValue().\n      if (!isDirective(value)) {\n        this.committer.dirty = true;\n      }\n    }\n  }\n\n  commit() {\n    while (isDirective(this.value)) {\n      const directive = this.value;\n      this.value = noChange;\n      directive(this);\n    }\n    if (this.value === noChange) {\n      return;\n    }\n    this.committer.commit();\n  }\n}\n\n/**\n * A Part that controls a location within a Node tree. Like a Range, NodePart\n * has start and end locations and can set and update the Nodes between those\n * locations.\n *\n * NodeParts support several value types: primitives, Nodes, TemplateResults,\n * as well as arrays and iterables of those types.\n */\nexport class NodePart implements Part {\n  readonly options: RenderOptions;\n  startNode!: Node;\n  endNode!: Node;\n  value: unknown = undefined;\n  private __pendingValue: unknown = undefined;\n\n  constructor(options: RenderOptions) {\n    this.options = options;\n  }\n\n  /**\n   * Appends this part into a container.\n   *\n   * This part must be empty, as its contents are not automatically moved.\n   */\n  appendInto(container: Node) {\n    this.startNode = container.appendChild(createMarker());\n    this.endNode = container.appendChild(createMarker());\n  }\n\n  /**\n   * Inserts this part after the `ref` node (between `ref` and `ref`'s next\n   * sibling). Both `ref` and its next sibling must be static, unchanging nodes\n   * such as those that appear in a literal section of a template.\n   *\n   * This part must be empty, as its contents are not automatically moved.\n   */\n  insertAfterNode(ref: Node) {\n    this.startNode = ref;\n    this.endNode = ref.nextSibling!;\n  }\n\n  /**\n   * Appends this part into a parent part.\n   *\n   * This part must be empty, as its contents are not automatically moved.\n   */\n  appendIntoPart(part: NodePart) {\n    part.__insert(this.startNode = createMarker());\n    part.__insert(this.endNode = createMarker());\n  }\n\n  /**\n   * Inserts this part after the `ref` part.\n   *\n   * This part must be empty, as its contents are not automatically moved.\n   */\n  insertAfterPart(ref: NodePart) {\n    ref.__insert(this.startNode = createMarker());\n    this.endNode = ref.endNode;\n    ref.endNode = this.startNode;\n  }\n\n  setValue(value: unknown): void {\n    this.__pendingValue = value;\n  }\n\n  commit() {\n    if (this.startNode.parentNode === null) {\n      return;\n    }\n    while (isDirective(this.__pendingValue)) {\n      const directive = this.__pendingValue;\n      this.__pendingValue = noChange;\n      directive(this);\n    }\n    const value = this.__pendingValue;\n    if (value === noChange) {\n      return;\n    }\n    if (isPrimitive(value)) {\n      if (value !== this.value) {\n        this.__commitText(value);\n      }\n    } else if (value instanceof TemplateResult) {\n      this.__commitTemplateResult(value);\n    } else if (value instanceof Node) {\n      this.__commitNode(value);\n    } else if (isIterable(value)) {\n      this.__commitIterable(value);\n    } else if (value === nothing) {\n      this.value = nothing;\n      this.clear();\n    } else {\n      // Fallback, will render the string representation\n      this.__commitText(value);\n    }\n  }\n\n  private __insert(node: Node) {\n    this.endNode.parentNode!.insertBefore(node, this.endNode);\n  }\n\n  private __commitNode(value: Node): void {\n    if (this.value === value) {\n      return;\n    }\n    this.clear();\n    this.__insert(value);\n    this.value = value;\n  }\n\n  private __commitText(value: unknown): void {\n    const node = this.startNode.nextSibling!;\n    value = value == null ? '' : value;\n    // If `value` isn't already a string, we explicitly convert it here in case\n    // it can't be implicitly converted - i.e. it's a symbol.\n    const valueAsString: string =\n        typeof value === 'string' ? value : String(value);\n    if (node === this.endNode.previousSibling &&\n        node.nodeType === 3 /* Node.TEXT_NODE */) {\n      // If we only have a single text node between the markers, we can just\n      // set its value, rather than replacing it.\n      // TODO(justinfagnani): Can we just check if this.value is primitive?\n      (node as Text).data = valueAsString;\n    } else {\n      this.__commitNode(document.createTextNode(valueAsString));\n    }\n    this.value = value;\n  }\n\n  private __commitTemplateResult(value: TemplateResult): void {\n    const template = this.options.templateFactory(value);\n    if (this.value instanceof TemplateInstance &&\n        this.value.template === template) {\n      this.value.update(value.values);\n    } else {\n      // Make sure we propagate the template processor from the TemplateResult\n      // so that we use its syntax extension, etc. The template factory comes\n      // from the render function options so that it can control template\n      // caching and preprocessing.\n      const instance =\n          new TemplateInstance(template, value.processor, this.options);\n      const fragment = instance._clone();\n      instance.update(value.values);\n      this.__commitNode(fragment);\n      this.value = instance;\n    }\n  }\n\n  private __commitIterable(value: Iterable<unknown>): void {\n    // For an Iterable, we create a new InstancePart per item, then set its\n    // value to the item. This is a little bit of overhead for every item in\n    // an Iterable, but it lets us recurse easily and efficiently update Arrays\n    // of TemplateResults that will be commonly returned from expressions like:\n    // array.map((i) => html`${i}`), by reusing existing TemplateInstances.\n\n    // If _value is an array, then the previous render was of an\n    // iterable and _value will contain the NodeParts from the previous\n    // render. If _value is not an array, clear this part and make a new\n    // array for NodeParts.\n    if (!Array.isArray(this.value)) {\n      this.value = [];\n      this.clear();\n    }\n\n    // Lets us keep track of how many items we stamped so we can clear leftover\n    // items from a previous render\n    const itemParts = this.value as NodePart[];\n    let partIndex = 0;\n    let itemPart: NodePart|undefined;\n\n    for (const item of value) {\n      // Try to reuse an existing part\n      itemPart = itemParts[partIndex];\n\n      // If no existing part, create a new one\n      if (itemPart === undefined) {\n        itemPart = new NodePart(this.options);\n        itemParts.push(itemPart);\n        if (partIndex === 0) {\n          itemPart.appendIntoPart(this);\n        } else {\n          itemPart.insertAfterPart(itemParts[partIndex - 1]);\n        }\n      }\n      itemPart.setValue(item);\n      itemPart.commit();\n      partIndex++;\n    }\n\n    if (partIndex < itemParts.length) {\n      // Truncate the parts array so _value reflects the current state\n      itemParts.length = partIndex;\n      this.clear(itemPart && itemPart.endNode);\n    }\n  }\n\n  clear(startNode: Node = this.startNode) {\n    removeNodes(\n        this.startNode.parentNode!, startNode.nextSibling!, this.endNode);\n  }\n}\n\n/**\n * Implements a boolean attribute, roughly as defined in the HTML\n * specification.\n *\n * If the value is truthy, then the attribute is present with a value of\n * ''. If the value is falsey, the attribute is removed.\n */\nexport class BooleanAttributePart implements Part {\n  readonly element: Element;\n  readonly name: string;\n  readonly strings: readonly string[];\n  value: unknown = undefined;\n  private __pendingValue: unknown = undefined;\n\n  constructor(element: Element, name: string, strings: readonly string[]) {\n    if (strings.length !== 2 || strings[0] !== '' || strings[1] !== '') {\n      throw new Error(\n          'Boolean attributes can only contain a single expression');\n    }\n    this.element = element;\n    this.name = name;\n    this.strings = strings;\n  }\n\n  setValue(value: unknown): void {\n    this.__pendingValue = value;\n  }\n\n  commit() {\n    while (isDirective(this.__pendingValue)) {\n      const directive = this.__pendingValue;\n      this.__pendingValue = noChange;\n      directive(this);\n    }\n    if (this.__pendingValue === noChange) {\n      return;\n    }\n    const value = !!this.__pendingValue;\n    if (this.value !== value) {\n      if (value) {\n        this.element.setAttribute(this.name, '');\n      } else {\n        this.element.removeAttribute(this.name);\n      }\n      this.value = value;\n    }\n    this.__pendingValue = noChange;\n  }\n}\n\n/**\n * Sets attribute values for PropertyParts, so that the value is only set once\n * even if there are multiple parts for a property.\n *\n * If an expression controls the whole property value, then the value is simply\n * assigned to the property under control. If there are string literals or\n * multiple expressions, then the strings are expressions are interpolated into\n * a string first.\n */\nexport class PropertyCommitter extends AttributeCommitter {\n  readonly single: boolean;\n\n  constructor(element: Element, name: string, strings: ReadonlyArray<string>) {\n    super(element, name, strings);\n    this.single =\n        (strings.length === 2 && strings[0] === '' && strings[1] === '');\n  }\n\n  protected _createPart(): PropertyPart {\n    return new PropertyPart(this);\n  }\n\n  protected _getValue() {\n    if (this.single) {\n      return this.parts[0].value;\n    }\n    return super._getValue();\n  }\n\n  commit(): void {\n    if (this.dirty) {\n      this.dirty = false;\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      (this.element as any)[this.name] = this._getValue();\n    }\n  }\n}\n\nexport class PropertyPart extends AttributePart {}\n\n// Detect event listener options support. If the `capture` property is read\n// from the options object, then options are supported. If not, then the third\n// argument to add/removeEventListener is interpreted as the boolean capture\n// value so we should only pass the `capture` property.\nlet eventOptionsSupported = false;\n\n// Wrap into an IIFE because MS Edge <= v41 does not support having try/catch\n// blocks right into the body of a module\n(() => {\n  try {\n    const options = {\n      get capture() {\n        eventOptionsSupported = true;\n        return false;\n      }\n    };\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    window.addEventListener('test', options as any, options);\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    window.removeEventListener('test', options as any, options);\n  } catch (_e) {\n    // event options not supported\n  }\n})();\n\ntype EventHandlerWithOptions =\n    EventListenerOrEventListenerObject&Partial<AddEventListenerOptions>;\nexport class EventPart implements Part {\n  readonly element: Element;\n  readonly eventName: string;\n  readonly eventContext?: EventTarget;\n  value: undefined|EventHandlerWithOptions = undefined;\n  private __options?: AddEventListenerOptions;\n  private __pendingValue: undefined|EventHandlerWithOptions = undefined;\n  private readonly __boundHandleEvent: (event: Event) => void;\n\n  constructor(element: Element, eventName: string, eventContext?: EventTarget) {\n    this.element = element;\n    this.eventName = eventName;\n    this.eventContext = eventContext;\n    this.__boundHandleEvent = (e) => this.handleEvent(e);\n  }\n\n  setValue(value: undefined|EventHandlerWithOptions): void {\n    this.__pendingValue = value;\n  }\n\n  commit() {\n    while (isDirective(this.__pendingValue)) {\n      const directive = this.__pendingValue;\n      this.__pendingValue = noChange as EventHandlerWithOptions;\n      directive(this);\n    }\n    if (this.__pendingValue === noChange) {\n      return;\n    }\n\n    const newListener = this.__pendingValue;\n    const oldListener = this.value;\n    const shouldRemoveListener = newListener == null ||\n        oldListener != null &&\n            (newListener.capture !== oldListener.capture ||\n             newListener.once !== oldListener.once ||\n             newListener.passive !== oldListener.passive);\n    const shouldAddListener =\n        newListener != null && (oldListener == null || shouldRemoveListener);\n\n    if (shouldRemoveListener) {\n      this.element.removeEventListener(\n          this.eventName, this.__boundHandleEvent, this.__options);\n    }\n    if (shouldAddListener) {\n      this.__options = getOptions(newListener);\n      this.element.addEventListener(\n          this.eventName, this.__boundHandleEvent, this.__options);\n    }\n    this.value = newListener;\n    this.__pendingValue = noChange as EventHandlerWithOptions;\n  }\n\n  handleEvent(event: Event) {\n    if (typeof this.value === 'function') {\n      this.value.call(this.eventContext || this.element, event);\n    } else {\n      (this.value as EventListenerObject).handleEvent(event);\n    }\n  }\n}\n\n// We copy options because of the inconsistent behavior of browsers when reading\n// the third argument of add/removeEventListener. IE11 doesn't support options\n// at all. Chrome 41 only reads `capture` if the argument is an object.\nconst getOptions = (o: AddEventListenerOptions|undefined) => o &&\n    (eventOptionsSupported ?\n         {capture: o.capture, passive: o.passive, once: o.once} :\n         o.capture as AddEventListenerOptions);\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {TemplateResult} from './template-result.js';\nimport {marker, Template} from './template.js';\n\n/**\n * A function type that creates a Template from a TemplateResult.\n *\n * This is a hook into the template-creation process for rendering that\n * requires some modification of templates before they're used, like ShadyCSS,\n * which must add classes to elements and remove styles.\n *\n * Templates should be cached as aggressively as possible, so that many\n * TemplateResults produced from the same expression only do the work of\n * creating the Template the first time.\n *\n * Templates are usually cached by TemplateResult.strings and\n * TemplateResult.type, but may be cached by other keys if this function\n * modifies the template.\n *\n * Note that currently TemplateFactories must not add, remove, or reorder\n * expressions, because there is no way to describe such a modification\n * to render() so that values are interpolated to the correct place in the\n * template instances.\n */\nexport type TemplateFactory = (result: TemplateResult) => Template;\n\n/**\n * The default TemplateFactory which caches Templates keyed on\n * result.type and result.strings.\n */\nexport function templateFactory(result: TemplateResult) {\n  let templateCache = templateCaches.get(result.type);\n  if (templateCache === undefined) {\n    templateCache = {\n      stringsArray: new WeakMap<TemplateStringsArray, Template>(),\n      keyString: new Map<string, Template>()\n    };\n    templateCaches.set(result.type, templateCache);\n  }\n\n  let template = templateCache.stringsArray.get(result.strings);\n  if (template !== undefined) {\n    return template;\n  }\n\n  // If the TemplateStringsArray is new, generate a key from the strings\n  // This key is shared between all templates with identical content\n  const key = result.strings.join(marker);\n\n  // Check if we already have a Template for this key\n  template = templateCache.keyString.get(key);\n  if (template === undefined) {\n    // If we have not seen this key before, create a new Template\n    template = new Template(result, result.getTemplateElement());\n    // Cache the Template for this key\n    templateCache.keyString.set(key, template);\n  }\n\n  // Cache all future queries for this TemplateStringsArray\n  templateCache.stringsArray.set(result.strings, template);\n  return template;\n}\n\n/**\n * The first argument to JS template tags retain identity across multiple\n * calls to a tag for the same literal, so we can cache work done per literal\n * in a Map.\n *\n * Safari currently has a bug which occasionally breaks this behavior, so we\n * need to cache the Template at two levels. We first cache the\n * TemplateStringsArray, and if that fails, we cache a key constructed by\n * joining the strings array.\n */\nexport interface TemplateCache {\n  readonly stringsArray: WeakMap<TemplateStringsArray, Template>;\n  readonly keyString: Map<string, Template>;\n}\n\nexport const templateCaches = new Map<string, TemplateCache>();\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {removeNodes} from './dom.js';\nimport {NodePart} from './parts.js';\nimport {RenderOptions} from './render-options.js';\nimport {templateFactory} from './template-factory.js';\n\nexport const parts = new WeakMap<Node, NodePart>();\n\n/**\n * Renders a template result or other value to a container.\n *\n * To update a container with new values, reevaluate the template literal and\n * call `render` with the new result.\n *\n * @param result Any value renderable by NodePart - typically a TemplateResult\n *     created by evaluating a template tag like `html` or `svg`.\n * @param container A DOM parent to render to. The entire contents are either\n *     replaced, or efficiently updated if the same result type was previous\n *     rendered there.\n * @param options RenderOptions for the entire render tree rendered to this\n *     container. Render options must *not* change between renders to the same\n *     container, as those changes will not effect previously rendered DOM.\n */\nexport const render =\n    (result: unknown,\n     container: Element|DocumentFragment,\n     options?: Partial<RenderOptions>) => {\n      let part = parts.get(container);\n      if (part === undefined) {\n        removeNodes(container, container.firstChild);\n        parts.set(container, part = new NodePart({\n                               templateFactory,\n                               ...options,\n                             }));\n        part.appendInto(container);\n      }\n      part.setValue(result);\n      part.commit();\n    };\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\nimport {Part} from './part.js';\nimport {AttributeCommitter, BooleanAttributePart, EventPart, NodePart, PropertyCommitter} from './parts.js';\nimport {RenderOptions} from './render-options.js';\nimport {TemplateProcessor} from './template-processor.js';\n\n/**\n * Creates Parts when a template is instantiated.\n */\nexport class DefaultTemplateProcessor implements TemplateProcessor {\n  /**\n   * Create parts for an attribute-position binding, given the event, attribute\n   * name, and string literals.\n   *\n   * @param element The element containing the binding\n   * @param name  The attribute name\n   * @param strings The string literals. There are always at least two strings,\n   *   event for fully-controlled bindings with a single expression.\n   */\n  handleAttributeExpressions(\n      element: Element, name: string, strings: string[],\n      options: RenderOptions): ReadonlyArray<Part> {\n    const prefix = name[0];\n    if (prefix === '.') {\n      const committer = new PropertyCommitter(element, name.slice(1), strings);\n      return committer.parts;\n    }\n    if (prefix === '@') {\n      return [new EventPart(element, name.slice(1), options.eventContext)];\n    }\n    if (prefix === '?') {\n      return [new BooleanAttributePart(element, name.slice(1), strings)];\n    }\n    const committer = new AttributeCommitter(element, name, strings);\n    return committer.parts;\n  }\n  /**\n   * Create parts for a text-position binding.\n   * @param templateFactory\n   */\n  handleTextExpression(options: RenderOptions) {\n    return new NodePart(options);\n  }\n}\n\nexport const defaultTemplateProcessor = new DefaultTemplateProcessor();\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n *\n * Main lit-html module.\n *\n * Main exports:\n *\n * -  [[html]]\n * -  [[svg]]\n * -  [[render]]\n *\n * @packageDocumentation\n */\n\n/**\n * Do not remove this comment; it keeps typedoc from misplacing the module\n * docs.\n */\nimport {defaultTemplateProcessor} from './lib/default-template-processor.js';\nimport {SVGTemplateResult, TemplateResult} from './lib/template-result.js';\n\nexport {DefaultTemplateProcessor, defaultTemplateProcessor} from './lib/default-template-processor.js';\nexport {directive, DirectiveFn, isDirective} from './lib/directive.js';\n// TODO(justinfagnani): remove line when we get NodePart moving methods\nexport {removeNodes, reparentNodes} from './lib/dom.js';\nexport {noChange, nothing, Part} from './lib/part.js';\nexport {AttributeCommitter, AttributePart, BooleanAttributePart, EventPart, isIterable, isPrimitive, NodePart, PropertyCommitter, PropertyPart} from './lib/parts.js';\nexport {RenderOptions} from './lib/render-options.js';\nexport {parts, render} from './lib/render.js';\nexport {templateCaches, templateFactory} from './lib/template-factory.js';\nexport {TemplateInstance} from './lib/template-instance.js';\nexport {TemplateProcessor} from './lib/template-processor.js';\nexport {SVGTemplateResult, TemplateResult} from './lib/template-result.js';\nexport {createMarker, isTemplatePartActive, Template} from './lib/template.js';\n\ndeclare global {\n  interface Window {\n    litHtmlVersions: string[];\n  }\n}\n\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for lit-html usage.\n// TODO(justinfagnani): inject version number at build time\nif (typeof window !== 'undefined') {\n  (window['litHtmlVersions'] || (window['litHtmlVersions'] = [])).push('1.3.0');\n}\n\n/**\n * Interprets a template literal as an HTML template that can efficiently\n * render to and update a container.\n */\nexport const html = (strings: TemplateStringsArray, ...values: unknown[]) =>\n    new TemplateResult(strings, values, 'html', defaultTemplateProcessor);\n\n/**\n * Interprets a template literal as an SVG template that can efficiently\n * render to and update a container.\n */\nexport const svg = (strings: TemplateStringsArray, ...values: unknown[]) =>\n    new SVGTemplateResult(strings, values, 'svg', defaultTemplateProcessor);\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * Module to add shady DOM/shady CSS polyfill support to lit-html template\n * rendering. See the [[render]] method for details.\n *\n * @packageDocumentation\n */\n\n/**\n * Do not remove this comment; it keeps typedoc from misplacing the module\n * docs.\n */\nimport {removeNodes} from './dom.js';\nimport {insertNodeIntoTemplate, removeNodesFromTemplate} from './modify-template.js';\nimport {RenderOptions} from './render-options.js';\nimport {parts, render as litRender} from './render.js';\nimport {templateCaches} from './template-factory.js';\nimport {TemplateInstance} from './template-instance.js';\nimport {TemplateResult} from './template-result.js';\nimport {marker, Template} from './template.js';\n\nexport {html, svg, TemplateResult} from '../lit-html.js';\n\n// Get a key to lookup in `templateCaches`.\nconst getTemplateCacheKey = (type: string, scopeName: string) =>\n    `${type}--${scopeName}`;\n\nlet compatibleShadyCSSVersion = true;\n\nif (typeof window.ShadyCSS === 'undefined') {\n  compatibleShadyCSSVersion = false;\n} else if (typeof window.ShadyCSS.prepareTemplateDom === 'undefined') {\n  console.warn(\n      `Incompatible ShadyCSS version detected. ` +\n      `Please update to at least @webcomponents/webcomponentsjs@2.0.2 and ` +\n      `@webcomponents/shadycss@1.3.1.`);\n  compatibleShadyCSSVersion = false;\n}\n\n/**\n * Template factory which scopes template DOM using ShadyCSS.\n * @param scopeName {string}\n */\nexport const shadyTemplateFactory = (scopeName: string) =>\n    (result: TemplateResult) => {\n      const cacheKey = getTemplateCacheKey(result.type, scopeName);\n      let templateCache = templateCaches.get(cacheKey);\n      if (templateCache === undefined) {\n        templateCache = {\n          stringsArray: new WeakMap<TemplateStringsArray, Template>(),\n          keyString: new Map<string, Template>()\n        };\n        templateCaches.set(cacheKey, templateCache);\n      }\n\n      let template = templateCache.stringsArray.get(result.strings);\n      if (template !== undefined) {\n        return template;\n      }\n\n      const key = result.strings.join(marker);\n      template = templateCache.keyString.get(key);\n      if (template === undefined) {\n        const element = result.getTemplateElement();\n        if (compatibleShadyCSSVersion) {\n          window.ShadyCSS!.prepareTemplateDom(element, scopeName);\n        }\n        template = new Template(result, element);\n        templateCache.keyString.set(key, template);\n      }\n      templateCache.stringsArray.set(result.strings, template);\n      return template;\n    };\n\nconst TEMPLATE_TYPES = ['html', 'svg'];\n\n/**\n * Removes all style elements from Templates for the given scopeName.\n */\nconst removeStylesFromLitTemplates = (scopeName: string) => {\n  TEMPLATE_TYPES.forEach((type) => {\n    const templates = templateCaches.get(getTemplateCacheKey(type, scopeName));\n    if (templates !== undefined) {\n      templates.keyString.forEach((template) => {\n        const {element: {content}} = template;\n        // IE 11 doesn't support the iterable param Set constructor\n        const styles = new Set<Element>();\n        Array.from(content.querySelectorAll('style')).forEach((s: Element) => {\n          styles.add(s);\n        });\n        removeNodesFromTemplate(template, styles);\n      });\n    }\n  });\n};\n\nconst shadyRenderSet = new Set<string>();\n\n/**\n * For the given scope name, ensures that ShadyCSS style scoping is performed.\n * This is done just once per scope name so the fragment and template cannot\n * be modified.\n * (1) extracts styles from the rendered fragment and hands them to ShadyCSS\n * to be scoped and appended to the document\n * (2) removes style elements from all lit-html Templates for this scope name.\n *\n * Note, <style> elements can only be placed into templates for the\n * initial rendering of the scope. If <style> elements are included in templates\n * dynamically rendered to the scope (after the first scope render), they will\n * not be scoped and the <style> will be left in the template and rendered\n * output.\n */\nconst prepareTemplateStyles =\n    (scopeName: string, renderedDOM: DocumentFragment, template?: Template) => {\n      shadyRenderSet.add(scopeName);\n      // If `renderedDOM` is stamped from a Template, then we need to edit that\n      // Template's underlying template element. Otherwise, we create one here\n      // to give to ShadyCSS, which still requires one while scoping.\n      const templateElement =\n          !!template ? template.element : document.createElement('template');\n      // Move styles out of rendered DOM and store.\n      const styles = renderedDOM.querySelectorAll('style');\n      const {length} = styles;\n      // If there are no styles, skip unnecessary work\n      if (length === 0) {\n        // Ensure prepareTemplateStyles is called to support adding\n        // styles via `prepareAdoptedCssText` since that requires that\n        // `prepareTemplateStyles` is called.\n        //\n        // ShadyCSS will only update styles containing @apply in the template\n        // given to `prepareTemplateStyles`. If no lit Template was given,\n        // ShadyCSS will not be able to update uses of @apply in any relevant\n        // template. However, this is not a problem because we only create the\n        // template for the purpose of supporting `prepareAdoptedCssText`,\n        // which doesn't support @apply at all.\n        window.ShadyCSS!.prepareTemplateStyles(templateElement, scopeName);\n        return;\n      }\n      const condensedStyle = document.createElement('style');\n      // Collect styles into a single style. This helps us make sure ShadyCSS\n      // manipulations will not prevent us from being able to fix up template\n      // part indices.\n      // NOTE: collecting styles is inefficient for browsers but ShadyCSS\n      // currently does this anyway. When it does not, this should be changed.\n      for (let i = 0; i < length; i++) {\n        const style = styles[i];\n        style.parentNode!.removeChild(style);\n        condensedStyle.textContent! += style.textContent;\n      }\n      // Remove styles from nested templates in this scope.\n      removeStylesFromLitTemplates(scopeName);\n      // And then put the condensed style into the \"root\" template passed in as\n      // `template`.\n      const content = templateElement.content;\n      if (!!template) {\n        insertNodeIntoTemplate(template, condensedStyle, content.firstChild);\n      } else {\n        content.insertBefore(condensedStyle, content.firstChild);\n      }\n      // Note, it's important that ShadyCSS gets the template that `lit-html`\n      // will actually render so that it can update the style inside when\n      // needed (e.g. @apply native Shadow DOM case).\n      window.ShadyCSS!.prepareTemplateStyles(templateElement, scopeName);\n      const style = content.querySelector('style');\n      if (window.ShadyCSS!.nativeShadow && style !== null) {\n        // When in native Shadow DOM, ensure the style created by ShadyCSS is\n        // included in initially rendered output (`renderedDOM`).\n        renderedDOM.insertBefore(style.cloneNode(true), renderedDOM.firstChild);\n      } else if (!!template) {\n        // When no style is left in the template, parts will be broken as a\n        // result. To fix this, we put back the style node ShadyCSS removed\n        // and then tell lit to remove that node from the template.\n        // There can be no style in the template in 2 cases (1) when Shady DOM\n        // is in use, ShadyCSS removes all styles, (2) when native Shadow DOM\n        // is in use ShadyCSS removes the style if it contains no content.\n        // NOTE, ShadyCSS creates its own style so we can safely add/remove\n        // `condensedStyle` here.\n        content.insertBefore(condensedStyle, content.firstChild);\n        const removes = new Set<Node>();\n        removes.add(condensedStyle);\n        removeNodesFromTemplate(template, removes);\n      }\n    };\n\nexport interface ShadyRenderOptions extends Partial<RenderOptions> {\n  scopeName: string;\n}\n\n/**\n * Extension to the standard `render` method which supports rendering\n * to ShadowRoots when the ShadyDOM (https://github.com/webcomponents/shadydom)\n * and ShadyCSS (https://github.com/webcomponents/shadycss) polyfills are used\n * or when the webcomponentsjs\n * (https://github.com/webcomponents/webcomponentsjs) polyfill is used.\n *\n * Adds a `scopeName` option which is used to scope element DOM and stylesheets\n * when native ShadowDOM is unavailable. The `scopeName` will be added to\n * the class attribute of all rendered DOM. In addition, any style elements will\n * be automatically re-written with this `scopeName` selector and moved out\n * of the rendered DOM and into the document `<head>`.\n *\n * It is common to use this render method in conjunction with a custom element\n * which renders a shadowRoot. When this is done, typically the element's\n * `localName` should be used as the `scopeName`.\n *\n * In addition to DOM scoping, ShadyCSS also supports a basic shim for css\n * custom properties (needed only on older browsers like IE11) and a shim for\n * a deprecated feature called `@apply` that supports applying a set of css\n * custom properties to a given location.\n *\n * Usage considerations:\n *\n * * Part values in `<style>` elements are only applied the first time a given\n * `scopeName` renders. Subsequent changes to parts in style elements will have\n * no effect. Because of this, parts in style elements should only be used for\n * values that will never change, for example parts that set scope-wide theme\n * values or parts which render shared style elements.\n *\n * * Note, due to a limitation of the ShadyDOM polyfill, rendering in a\n * custom element's `constructor` is not supported. Instead rendering should\n * either done asynchronously, for example at microtask timing (for example\n * `Promise.resolve()`), or be deferred until the first time the element's\n * `connectedCallback` runs.\n *\n * Usage considerations when using shimmed custom properties or `@apply`:\n *\n * * Whenever any dynamic changes are made which affect\n * css custom properties, `ShadyCSS.styleElement(element)` must be called\n * to update the element. There are two cases when this is needed:\n * (1) the element is connected to a new parent, (2) a class is added to the\n * element that causes it to match different custom properties.\n * To address the first case when rendering a custom element, `styleElement`\n * should be called in the element's `connectedCallback`.\n *\n * * Shimmed custom properties may only be defined either for an entire\n * shadowRoot (for example, in a `:host` rule) or via a rule that directly\n * matches an element with a shadowRoot. In other words, instead of flowing from\n * parent to child as do native css custom properties, shimmed custom properties\n * flow only from shadowRoots to nested shadowRoots.\n *\n * * When using `@apply` mixing css shorthand property names with\n * non-shorthand names (for example `border` and `border-width`) is not\n * supported.\n */\nexport const render =\n    (result: unknown,\n     container: Element|DocumentFragment|ShadowRoot,\n     options: ShadyRenderOptions) => {\n      if (!options || typeof options !== 'object' || !options.scopeName) {\n        throw new Error('The `scopeName` option is required.');\n      }\n      const scopeName = options.scopeName;\n      const hasRendered = parts.has(container);\n      const needsScoping = compatibleShadyCSSVersion &&\n          container.nodeType === 11 /* Node.DOCUMENT_FRAGMENT_NODE */ &&\n          !!(container as ShadowRoot).host;\n      // Handle first render to a scope specially...\n      const firstScopeRender = needsScoping && !shadyRenderSet.has(scopeName);\n      // On first scope render, render into a fragment; this cannot be a single\n      // fragment that is reused since nested renders can occur synchronously.\n      const renderContainer =\n          firstScopeRender ? document.createDocumentFragment() : container;\n      litRender(\n          result,\n          renderContainer,\n          {templateFactory: shadyTemplateFactory(scopeName), ...options} as\n              RenderOptions);\n      // When performing first scope render,\n      // (1) We've rendered into a fragment so that there's a chance to\n      // `prepareTemplateStyles` before sub-elements hit the DOM\n      // (which might cause them to render based on a common pattern of\n      // rendering in a custom element's `connectedCallback`);\n      // (2) Scope the template with ShadyCSS one time only for this scope.\n      // (3) Render the fragment into the container and make sure the\n      // container knows its `part` is the one we just rendered. This ensures\n      // DOM will be re-used on subsequent renders.\n      if (firstScopeRender) {\n        const part = parts.get(renderContainer)!;\n        parts.delete(renderContainer);\n        // ShadyCSS might have style sheets (e.g. from `prepareAdoptedCssText`)\n        // that should apply to `renderContainer` even if the rendered value is\n        // not a TemplateInstance. However, it will only insert scoped styles\n        // into the document if `prepareTemplateStyles` has already been called\n        // for the given scope name.\n        const template = part.value instanceof TemplateInstance ?\n            part.value.template :\n            undefined;\n        prepareTemplateStyles(\n            scopeName, renderContainer as DocumentFragment, template);\n        removeNodes(container, container.firstChild);\n        container.appendChild(renderContainer);\n        parts.set(container, part);\n      }\n      // After elements have hit the DOM, update styling if this is the\n      // initial render to this container.\n      // This is needed whenever dynamic changes are made so it would be\n      // safest to do every render; however, this would regress performance\n      // so we leave it up to the user to call `ShadyCSS.styleElement`\n      // for dynamic changes.\n      if (!hasRendered && needsScoping) {\n        window.ShadyCSS!.styleElement((container as ShadowRoot).host);\n      }\n    };\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * Use this module if you want to create your own base class extending\n * [[UpdatingElement]].\n * @packageDocumentation\n */\n\n/*\n * When using Closure Compiler, JSCompiler_renameProperty(property, object) is\n * replaced at compile time by the munged name for object[property]. We cannot\n * alias this function, so we have to use a small shim that has the same\n * behavior when not compiling.\n */\nwindow.JSCompiler_renameProperty =\n    <P extends PropertyKey>(prop: P, _obj: unknown): P => prop;\n\ndeclare global {\n  var JSCompiler_renameProperty: <P extends PropertyKey>(\n      prop: P, _obj: unknown) => P;\n\n  interface Window {\n    JSCompiler_renameProperty: typeof JSCompiler_renameProperty;\n  }\n}\n\n/**\n * Converts property values to and from attribute values.\n */\nexport interface ComplexAttributeConverter<Type = unknown, TypeHint = unknown> {\n  /**\n   * Function called to convert an attribute value to a property\n   * value.\n   */\n  fromAttribute?(value: string|null, type?: TypeHint): Type;\n\n  /**\n   * Function called to convert a property value to an attribute\n   * value.\n   *\n   * It returns unknown instead of string, to be compatible with\n   * https://github.com/WICG/trusted-types (and similar efforts).\n   */\n  toAttribute?(value: Type, type?: TypeHint): unknown;\n}\n\ntype AttributeConverter<Type = unknown, TypeHint = unknown> =\n    ComplexAttributeConverter<Type>|\n    ((value: string|null, type?: TypeHint) => Type);\n\n/**\n * Defines options for a property accessor.\n */\nexport interface PropertyDeclaration<Type = unknown, TypeHint = unknown> {\n  /**\n   * Indicates how and whether the property becomes an observed attribute.\n   * If the value is `false`, the property is not added to `observedAttributes`.\n   * If true or absent, the lowercased property name is observed (e.g. `fooBar`\n   * becomes `foobar`). If a string, the string value is observed (e.g\n   * `attribute: 'foo-bar'`).\n   */\n  readonly attribute?: boolean|string;\n\n  /**\n   * Indicates the type of the property. This is used only as a hint for the\n   * `converter` to determine how to convert the attribute\n   * to/from a property.\n   */\n  readonly type?: TypeHint;\n\n  /**\n   * Indicates how to convert the attribute to/from a property. If this value\n   * is a function, it is used to convert the attribute value a the property\n   * value. If it's an object, it can have keys for `fromAttribute` and\n   * `toAttribute`. If no `toAttribute` function is provided and\n   * `reflect` is set to `true`, the property value is set directly to the\n   * attribute. A default `converter` is used if none is provided; it supports\n   * `Boolean`, `String`, `Number`, `Object`, and `Array`. Note,\n   * when a property changes and the converter is used to update the attribute,\n   * the property is never updated again as a result of the attribute changing,\n   * and vice versa.\n   */\n  readonly converter?: AttributeConverter<Type, TypeHint>;\n\n  /**\n   * Indicates if the property should reflect to an attribute.\n   * If `true`, when the property is set, the attribute is set using the\n   * attribute name determined according to the rules for the `attribute`\n   * property option and the value of the property converted using the rules\n   * from the `converter` property option.\n   */\n  readonly reflect?: boolean;\n\n  /**\n   * A function that indicates if a property should be considered changed when\n   * it is set. The function should take the `newValue` and `oldValue` and\n   * return `true` if an update should be requested.\n   */\n  hasChanged?(value: Type, oldValue: Type): boolean;\n\n  /**\n   * Indicates whether an accessor will be created for this property. By\n   * default, an accessor will be generated for this property that requests an\n   * update when set. If this flag is `true`, no accessor will be created, and\n   * it will be the user's responsibility to call\n   * `this.requestUpdate(propertyName, oldValue)` to request an update when\n   * the property changes.\n   */\n  readonly noAccessor?: boolean;\n}\n\n/**\n * Map of properties to PropertyDeclaration options. For each property an\n * accessor is made, and the property is processed according to the\n * PropertyDeclaration options.\n */\nexport interface PropertyDeclarations {\n  readonly [key: string]: PropertyDeclaration;\n}\n\ntype PropertyDeclarationMap = Map<PropertyKey, PropertyDeclaration>;\n\ntype AttributeMap = Map<string, PropertyKey>;\n\n/**\n * Map of changed properties with old values. Takes an optional generic\n * interface corresponding to the declared element properties.\n */\n// tslint:disable-next-line:no-any\nexport type PropertyValues<T = any> =\n    keyof T extends PropertyKey ? Map<keyof T, unknown>: never;\n\nexport const defaultConverter: ComplexAttributeConverter = {\n\n  toAttribute(value: unknown, type?: unknown): unknown {\n    switch (type) {\n      case Boolean:\n        return value ? '' : null;\n      case Object:\n      case Array:\n        // if the value is `null` or `undefined` pass this through\n        // to allow removing/no change behavior.\n        return value == null ? value : JSON.stringify(value);\n    }\n    return value;\n  },\n\n  fromAttribute(value: string|null, type?: unknown) {\n    switch (type) {\n      case Boolean:\n        return value !== null;\n      case Number:\n        return value === null ? null : Number(value);\n      case Object:\n      case Array:\n        return JSON.parse(value!);\n    }\n    return value;\n  }\n\n};\n\nexport interface HasChanged {\n  (value: unknown, old: unknown): boolean;\n}\n\n/**\n * Change function that returns true if `value` is different from `oldValue`.\n * This method is used as the default for a property's `hasChanged` function.\n */\nexport const notEqual: HasChanged = (value: unknown, old: unknown): boolean => {\n  // This ensures (old==NaN, value==NaN) always returns false\n  return old !== value && (old === old || value === value);\n};\n\nconst defaultPropertyDeclaration: PropertyDeclaration = {\n  attribute: true,\n  type: String,\n  converter: defaultConverter,\n  reflect: false,\n  hasChanged: notEqual\n};\n\nconst STATE_HAS_UPDATED = 1;\nconst STATE_UPDATE_REQUESTED = 1 << 2;\nconst STATE_IS_REFLECTING_TO_ATTRIBUTE = 1 << 3;\nconst STATE_IS_REFLECTING_TO_PROPERTY = 1 << 4;\ntype UpdateState = typeof STATE_HAS_UPDATED|typeof STATE_UPDATE_REQUESTED|\n    typeof STATE_IS_REFLECTING_TO_ATTRIBUTE|\n    typeof STATE_IS_REFLECTING_TO_PROPERTY;\n\n/**\n * The Closure JS Compiler doesn't currently have good support for static\n * property semantics where \"this\" is dynamic (e.g.\n * https://github.com/google/closure-compiler/issues/3177 and others) so we use\n * this hack to bypass any rewriting by the compiler.\n */\nconst finalized = 'finalized';\n\n/**\n * Base element class which manages element properties and attributes. When\n * properties change, the `update` method is asynchronously called. This method\n * should be supplied by subclassers to render updates as desired.\n * @noInheritDoc\n */\nexport abstract class UpdatingElement extends HTMLElement {\n  /*\n   * Due to closure compiler ES6 compilation bugs, @nocollapse is required on\n   * all static methods and properties with initializers.  Reference:\n   * - https://github.com/google/closure-compiler/issues/1776\n   */\n\n  /**\n   * Maps attribute names to properties; for example `foobar` attribute to\n   * `fooBar` property. Created lazily on user subclasses when finalizing the\n   * class.\n   */\n  private static _attributeToPropertyMap: AttributeMap;\n\n  /**\n   * Marks class as having finished creating properties.\n   */\n  protected static[finalized] = true;\n\n  /**\n   * Memoized list of all class properties, including any superclass properties.\n   * Created lazily on user subclasses when finalizing the class.\n   */\n  private static _classProperties?: PropertyDeclarationMap;\n\n  /**\n   * User-supplied object that maps property names to `PropertyDeclaration`\n   * objects containing options for configuring the property.\n   */\n  static properties: PropertyDeclarations;\n\n  /**\n   * Returns a list of attributes corresponding to the registered properties.\n   * @nocollapse\n   */\n  static get observedAttributes() {\n    // note: piggy backing on this to ensure we're finalized.\n    this.finalize();\n    const attributes: string[] = [];\n    // Use forEach so this works even if for/of loops are compiled to for loops\n    // expecting arrays\n    this._classProperties!.forEach((v, p) => {\n      const attr = this._attributeNameForProperty(p, v);\n      if (attr !== undefined) {\n        this._attributeToPropertyMap.set(attr, p);\n        attributes.push(attr);\n      }\n    });\n    return attributes;\n  }\n\n  /**\n   * Ensures the private `_classProperties` property metadata is created.\n   * In addition to `finalize` this is also called in `createProperty` to\n   * ensure the `@property` decorator can add property metadata.\n   */\n  /** @nocollapse */\n  private static _ensureClassProperties() {\n    // ensure private storage for property declarations.\n    if (!this.hasOwnProperty(\n            JSCompiler_renameProperty('_classProperties', this))) {\n      this._classProperties = new Map();\n      // NOTE: Workaround IE11 not supporting Map constructor argument.\n      const superProperties: PropertyDeclarationMap =\n          Object.getPrototypeOf(this)._classProperties;\n      if (superProperties !== undefined) {\n        superProperties.forEach(\n            (v: PropertyDeclaration, k: PropertyKey) =>\n                this._classProperties!.set(k, v));\n      }\n    }\n  }\n\n  /**\n   * Creates a property accessor on the element prototype if one does not exist\n   * and stores a PropertyDeclaration for the property with the given options.\n   * The property setter calls the property's `hasChanged` property option\n   * or uses a strict identity check to determine whether or not to request\n   * an update.\n   *\n   * This method may be overridden to customize properties; however,\n   * when doing so, it's important to call `super.createProperty` to ensure\n   * the property is setup correctly. This method calls\n   * `getPropertyDescriptor` internally to get a descriptor to install.\n   * To customize what properties do when they are get or set, override\n   * `getPropertyDescriptor`. To customize the options for a property,\n   * implement `createProperty` like this:\n   *\n   * static createProperty(name, options) {\n   *   options = Object.assign(options, {myOption: true});\n   *   super.createProperty(name, options);\n   * }\n   *\n   * @nocollapse\n   */\n  static createProperty(\n      name: PropertyKey,\n      options: PropertyDeclaration = defaultPropertyDeclaration) {\n    // Note, since this can be called by the `@property` decorator which\n    // is called before `finalize`, we ensure storage exists for property\n    // metadata.\n    this._ensureClassProperties();\n    this._classProperties!.set(name, options);\n    // Do not generate an accessor if the prototype already has one, since\n    // it would be lost otherwise and that would never be the user's intention;\n    // Instead, we expect users to call `requestUpdate` themselves from\n    // user-defined accessors. Note that if the super has an accessor we will\n    // still overwrite it\n    if (options.noAccessor || this.prototype.hasOwnProperty(name)) {\n      return;\n    }\n    const key = typeof name === 'symbol' ? Symbol() : `__${name}`;\n    const descriptor = this.getPropertyDescriptor(name, key, options);\n    if (descriptor !== undefined) {\n      Object.defineProperty(this.prototype, name, descriptor);\n    }\n  }\n\n  /**\n   * Returns a property descriptor to be defined on the given named property.\n   * If no descriptor is returned, the property will not become an accessor.\n   * For example,\n   *\n   *   class MyElement extends LitElement {\n   *     static getPropertyDescriptor(name, key, options) {\n   *       const defaultDescriptor =\n   *           super.getPropertyDescriptor(name, key, options);\n   *       const setter = defaultDescriptor.set;\n   *       return {\n   *         get: defaultDescriptor.get,\n   *         set(value) {\n   *           setter.call(this, value);\n   *           // custom action.\n   *         },\n   *         configurable: true,\n   *         enumerable: true\n   *       }\n   *     }\n   *   }\n   *\n   * @nocollapse\n   */\n  protected static getPropertyDescriptor(\n      name: PropertyKey, key: string|symbol, options: PropertyDeclaration) {\n    return {\n      // tslint:disable-next-line:no-any no symbol in index\n      get(): any {\n        return (this as {[key: string]: unknown})[key as string];\n      },\n      set(this: UpdatingElement, value: unknown) {\n        const oldValue =\n            (this as {} as {[key: string]: unknown})[name as string];\n        (this as {} as {[key: string]: unknown})[key as string] = value;\n        (this as unknown as UpdatingElement)\n            .requestUpdateInternal(name, oldValue, options);\n      },\n      configurable: true,\n      enumerable: true\n    };\n  }\n\n  /**\n   * Returns the property options associated with the given property.\n   * These options are defined with a PropertyDeclaration via the `properties`\n   * object or the `@property` decorator and are registered in\n   * `createProperty(...)`.\n   *\n   * Note, this method should be considered \"final\" and not overridden. To\n   * customize the options for a given property, override `createProperty`.\n   *\n   * @nocollapse\n   * @final\n   */\n  protected static getPropertyOptions(name: PropertyKey) {\n    return this._classProperties && this._classProperties.get(name) ||\n        defaultPropertyDeclaration;\n  }\n\n  /**\n   * Creates property accessors for registered properties and ensures\n   * any superclasses are also finalized.\n   * @nocollapse\n   */\n  protected static finalize() {\n    // finalize any superclasses\n    const superCtor = Object.getPrototypeOf(this);\n    if (!superCtor.hasOwnProperty(finalized)) {\n      superCtor.finalize();\n    }\n    this[finalized] = true;\n    this._ensureClassProperties();\n    // initialize Map populated in observedAttributes\n    this._attributeToPropertyMap = new Map();\n    // make any properties\n    // Note, only process \"own\" properties since this element will inherit\n    // any properties defined on the superClass, and finalization ensures\n    // the entire prototype chain is finalized.\n    if (this.hasOwnProperty(JSCompiler_renameProperty('properties', this))) {\n      const props = this.properties;\n      // support symbols in properties (IE11 does not support this)\n      const propKeys = [\n        ...Object.getOwnPropertyNames(props),\n        ...(typeof Object.getOwnPropertySymbols === 'function') ?\n            Object.getOwnPropertySymbols(props) :\n            []\n      ];\n      // This for/of is ok because propKeys is an array\n      for (const p of propKeys) {\n        // note, use of `any` is due to TypeSript lack of support for symbol in\n        // index types\n        // tslint:disable-next-line:no-any no symbol in index\n        this.createProperty(p, (props as any)[p]);\n      }\n    }\n  }\n\n  /**\n   * Returns the property name for the given attribute `name`.\n   * @nocollapse\n   */\n  private static _attributeNameForProperty(\n      name: PropertyKey, options: PropertyDeclaration) {\n    const attribute = options.attribute;\n    return attribute === false ?\n        undefined :\n        (typeof attribute === 'string' ?\n             attribute :\n             (typeof name === 'string' ? name.toLowerCase() : undefined));\n  }\n\n  /**\n   * Returns true if a property should request an update.\n   * Called when a property value is set and uses the `hasChanged`\n   * option for the property if present or a strict identity check.\n   * @nocollapse\n   */\n  private static _valueHasChanged(\n      value: unknown, old: unknown, hasChanged: HasChanged = notEqual) {\n    return hasChanged(value, old);\n  }\n\n  /**\n   * Returns the property value for the given attribute value.\n   * Called via the `attributeChangedCallback` and uses the property's\n   * `converter` or `converter.fromAttribute` property option.\n   * @nocollapse\n   */\n  private static _propertyValueFromAttribute(\n      value: string|null, options: PropertyDeclaration) {\n    const type = options.type;\n    const converter = options.converter || defaultConverter;\n    const fromAttribute =\n        (typeof converter === 'function' ? converter : converter.fromAttribute);\n    return fromAttribute ? fromAttribute(value, type) : value;\n  }\n\n  /**\n   * Returns the attribute value for the given property value. If this\n   * returns undefined, the property will *not* be reflected to an attribute.\n   * If this returns null, the attribute will be removed, otherwise the\n   * attribute will be set to the value.\n   * This uses the property's `reflect` and `type.toAttribute` property options.\n   * @nocollapse\n   */\n  private static _propertyValueToAttribute(\n      value: unknown, options: PropertyDeclaration) {\n    if (options.reflect === undefined) {\n      return;\n    }\n    const type = options.type;\n    const converter = options.converter;\n    const toAttribute =\n        converter && (converter as ComplexAttributeConverter).toAttribute ||\n        defaultConverter.toAttribute;\n    return toAttribute!(value, type);\n  }\n\n  private _updateState!: UpdateState;\n  private _instanceProperties?: PropertyValues;\n  // Initialize to an unresolved Promise so we can make sure the element has\n  // connected before first update.\n  private _updatePromise!: Promise<unknown>;\n  private _enableUpdatingResolver: (() => void)|undefined;\n\n  /**\n   * Map with keys for any properties that have changed since the last\n   * update cycle with previous values.\n   */\n  private _changedProperties!: PropertyValues;\n\n  /**\n   * Map with keys of properties that should be reflected when updated.\n   */\n  private _reflectingProperties?: Map<PropertyKey, PropertyDeclaration>;\n\n  constructor() {\n    super();\n    this.initialize();\n  }\n\n  /**\n   * Performs element initialization. By default captures any pre-set values for\n   * registered properties.\n   */\n  protected initialize() {\n    this._updateState = 0;\n    this._updatePromise =\n        new Promise((res) => this._enableUpdatingResolver = res);\n    this._changedProperties = new Map();\n    this._saveInstanceProperties();\n    // ensures first update will be caught by an early access of\n    // `updateComplete`\n    this.requestUpdateInternal();\n  }\n\n  /**\n   * Fixes any properties set on the instance before upgrade time.\n   * Otherwise these would shadow the accessor and break these properties.\n   * The properties are stored in a Map which is played back after the\n   * constructor runs. Note, on very old versions of Safari (<=9) or Chrome\n   * (<=41), properties created for native platform properties like (`id` or\n   * `name`) may not have default values set in the element constructor. On\n   * these browsers native properties appear on instances and therefore their\n   * default value will overwrite any element default (e.g. if the element sets\n   * this.id = 'id' in the constructor, the 'id' will become '' since this is\n   * the native platform default).\n   */\n  private _saveInstanceProperties() {\n    // Use forEach so this works even if for/of loops are compiled to for loops\n    // expecting arrays\n    (this.constructor as typeof UpdatingElement)\n        ._classProperties!.forEach((_v, p) => {\n          if (this.hasOwnProperty(p)) {\n            const value = this[p as keyof this];\n            delete this[p as keyof this];\n            if (!this._instanceProperties) {\n              this._instanceProperties = new Map();\n            }\n            this._instanceProperties.set(p, value);\n          }\n        });\n  }\n\n  /**\n   * Applies previously saved instance properties.\n   */\n  private _applyInstanceProperties() {\n    // Use forEach so this works even if for/of loops are compiled to for loops\n    // expecting arrays\n    // tslint:disable-next-line:no-any\n    this._instanceProperties!.forEach((v, p) => (this as any)[p] = v);\n    this._instanceProperties = undefined;\n  }\n\n  connectedCallback() {\n    // Ensure first connection completes an update. Updates cannot complete\n    // before connection.\n    this.enableUpdating();\n  }\n\n  protected enableUpdating() {\n    if (this._enableUpdatingResolver !== undefined) {\n      this._enableUpdatingResolver();\n      this._enableUpdatingResolver = undefined;\n    }\n  }\n\n  /**\n   * Allows for `super.disconnectedCallback()` in extensions while\n   * reserving the possibility of making non-breaking feature additions\n   * when disconnecting at some point in the future.\n   */\n  disconnectedCallback() {\n  }\n\n  /**\n   * Synchronizes property values when attributes change.\n   */\n  attributeChangedCallback(name: string, old: string|null, value: string|null) {\n    if (old !== value) {\n      this._attributeToProperty(name, value);\n    }\n  }\n\n  private _propertyToAttribute(\n      name: PropertyKey, value: unknown,\n      options: PropertyDeclaration = defaultPropertyDeclaration) {\n    const ctor = (this.constructor as typeof UpdatingElement);\n    const attr = ctor._attributeNameForProperty(name, options);\n    if (attr !== undefined) {\n      const attrValue = ctor._propertyValueToAttribute(value, options);\n      // an undefined value does not change the attribute.\n      if (attrValue === undefined) {\n        return;\n      }\n      // Track if the property is being reflected to avoid\n      // setting the property again via `attributeChangedCallback`. Note:\n      // 1. this takes advantage of the fact that the callback is synchronous.\n      // 2. will behave incorrectly if multiple attributes are in the reaction\n      // stack at time of calling. However, since we process attributes\n      // in `update` this should not be possible (or an extreme corner case\n      // that we'd like to discover).\n      // mark state reflecting\n      this._updateState = this._updateState | STATE_IS_REFLECTING_TO_ATTRIBUTE;\n      if (attrValue == null) {\n        this.removeAttribute(attr);\n      } else {\n        this.setAttribute(attr, attrValue as string);\n      }\n      // mark state not reflecting\n      this._updateState = this._updateState & ~STATE_IS_REFLECTING_TO_ATTRIBUTE;\n    }\n  }\n\n  private _attributeToProperty(name: string, value: string|null) {\n    // Use tracking info to avoid deserializing attribute value if it was\n    // just set from a property setter.\n    if (this._updateState & STATE_IS_REFLECTING_TO_ATTRIBUTE) {\n      return;\n    }\n    const ctor = (this.constructor as typeof UpdatingElement);\n    // Note, hint this as an `AttributeMap` so closure clearly understands\n    // the type; it has issues with tracking types through statics\n    // tslint:disable-next-line:no-unnecessary-type-assertion\n    const propName = (ctor._attributeToPropertyMap as AttributeMap).get(name);\n    if (propName !== undefined) {\n      const options = ctor.getPropertyOptions(propName);\n      // mark state reflecting\n      this._updateState = this._updateState | STATE_IS_REFLECTING_TO_PROPERTY;\n      this[propName as keyof this] =\n          // tslint:disable-next-line:no-any\n          ctor._propertyValueFromAttribute(value, options) as any;\n      // mark state not reflecting\n      this._updateState = this._updateState & ~STATE_IS_REFLECTING_TO_PROPERTY;\n    }\n  }\n\n  /**\n   * This protected version of `requestUpdate` does not access or return the\n   * `updateComplete` promise. This promise can be overridden and is therefore\n   * not free to access.\n   */\n  protected requestUpdateInternal(\n      name?: PropertyKey, oldValue?: unknown, options?: PropertyDeclaration) {\n    let shouldRequestUpdate = true;\n    // If we have a property key, perform property update steps.\n    if (name !== undefined) {\n      const ctor = this.constructor as typeof UpdatingElement;\n      options = options || ctor.getPropertyOptions(name);\n      if (ctor._valueHasChanged(\n              this[name as keyof this], oldValue, options.hasChanged)) {\n        if (!this._changedProperties.has(name)) {\n          this._changedProperties.set(name, oldValue);\n        }\n        // Add to reflecting properties set.\n        // Note, it's important that every change has a chance to add the\n        // property to `_reflectingProperties`. This ensures setting\n        // attribute + property reflects correctly.\n        if (options.reflect === true &&\n            !(this._updateState & STATE_IS_REFLECTING_TO_PROPERTY)) {\n          if (this._reflectingProperties === undefined) {\n            this._reflectingProperties = new Map();\n          }\n          this._reflectingProperties.set(name, options);\n        }\n      } else {\n        // Abort the request if the property should not be considered changed.\n        shouldRequestUpdate = false;\n      }\n    }\n    if (!this._hasRequestedUpdate && shouldRequestUpdate) {\n      this._updatePromise = this._enqueueUpdate();\n    }\n  }\n\n  /**\n   * Requests an update which is processed asynchronously. This should\n   * be called when an element should update based on some state not triggered\n   * by setting a property. In this case, pass no arguments. It should also be\n   * called when manually implementing a property setter. In this case, pass the\n   * property `name` and `oldValue` to ensure that any configured property\n   * options are honored. Returns the `updateComplete` Promise which is resolved\n   * when the update completes.\n   *\n   * @param name {PropertyKey} (optional) name of requesting property\n   * @param oldValue {any} (optional) old value of requesting property\n   * @returns {Promise} A Promise that is resolved when the update completes.\n   */\n  requestUpdate(name?: PropertyKey, oldValue?: unknown) {\n    this.requestUpdateInternal(name, oldValue);\n    return this.updateComplete;\n  }\n\n  /**\n   * Sets up the element to asynchronously update.\n   */\n  private async _enqueueUpdate() {\n    this._updateState = this._updateState | STATE_UPDATE_REQUESTED;\n    try {\n      // Ensure any previous update has resolved before updating.\n      // This `await` also ensures that property changes are batched.\n      await this._updatePromise;\n    } catch (e) {\n      // Ignore any previous errors. We only care that the previous cycle is\n      // done. Any error should have been handled in the previous update.\n    }\n    const result = this.performUpdate();\n    // If `performUpdate` returns a Promise, we await it. This is done to\n    // enable coordinating updates with a scheduler. Note, the result is\n    // checked to avoid delaying an additional microtask unless we need to.\n    if (result != null) {\n      await result;\n    }\n    return !this._hasRequestedUpdate;\n  }\n\n  private get _hasRequestedUpdate() {\n    return (this._updateState & STATE_UPDATE_REQUESTED);\n  }\n\n  protected get hasUpdated() {\n    return (this._updateState & STATE_HAS_UPDATED);\n  }\n\n  /**\n   * Performs an element update. Note, if an exception is thrown during the\n   * update, `firstUpdated` and `updated` will not be called.\n   *\n   * You can override this method to change the timing of updates. If this\n   * method is overridden, `super.performUpdate()` must be called.\n   *\n   * For instance, to schedule updates to occur just before the next frame:\n   *\n   * ```\n   * protected async performUpdate(): Promise<unknown> {\n   *   await new Promise((resolve) => requestAnimationFrame(() => resolve()));\n   *   super.performUpdate();\n   * }\n   * ```\n   */\n  protected performUpdate(): void|Promise<unknown> {\n    // Abort any update if one is not pending when this is called.\n    // This can happen if `performUpdate` is called early to \"flush\"\n    // the update.\n    if (!this._hasRequestedUpdate) {\n      return;\n    }\n    // Mixin instance properties once, if they exist.\n    if (this._instanceProperties) {\n      this._applyInstanceProperties();\n    }\n    let shouldUpdate = false;\n    const changedProperties = this._changedProperties;\n    try {\n      shouldUpdate = this.shouldUpdate(changedProperties);\n      if (shouldUpdate) {\n        this.update(changedProperties);\n      } else {\n        this._markUpdated();\n      }\n    } catch (e) {\n      // Prevent `firstUpdated` and `updated` from running when there's an\n      // update exception.\n      shouldUpdate = false;\n      // Ensure element can accept additional updates after an exception.\n      this._markUpdated();\n      throw e;\n    }\n    if (shouldUpdate) {\n      if (!(this._updateState & STATE_HAS_UPDATED)) {\n        this._updateState = this._updateState | STATE_HAS_UPDATED;\n        this.firstUpdated(changedProperties);\n      }\n      this.updated(changedProperties);\n    }\n  }\n\n  private _markUpdated() {\n    this._changedProperties = new Map();\n    this._updateState = this._updateState & ~STATE_UPDATE_REQUESTED;\n  }\n\n  /**\n   * Returns a Promise that resolves when the element has completed updating.\n   * The Promise value is a boolean that is `true` if the element completed the\n   * update without triggering another update. The Promise result is `false` if\n   * a property was set inside `updated()`. If the Promise is rejected, an\n   * exception was thrown during the update.\n   *\n   * To await additional asynchronous work, override the `_getUpdateComplete`\n   * method. For example, it is sometimes useful to await a rendered element\n   * before fulfilling this Promise. To do this, first await\n   * `super._getUpdateComplete()`, then any subsequent state.\n   *\n   * @returns {Promise} The Promise returns a boolean that indicates if the\n   * update resolved without triggering another update.\n   */\n  get updateComplete() {\n    return this._getUpdateComplete();\n  }\n\n  /**\n   * Override point for the `updateComplete` promise.\n   *\n   * It is not safe to override the `updateComplete` getter directly due to a\n   * limitation in TypeScript which means it is not possible to call a\n   * superclass getter (e.g. `super.updateComplete.then(...)`) when the target\n   * language is ES5 (https://github.com/microsoft/TypeScript/issues/338).\n   * This method should be overridden instead. For example:\n   *\n   *   class MyElement extends LitElement {\n   *     async _getUpdateComplete() {\n   *       await super._getUpdateComplete();\n   *       await this._myChild.updateComplete;\n   *     }\n   *   }\n   */\n  protected _getUpdateComplete() {\n    return this._updatePromise;\n  }\n\n  /**\n   * Controls whether or not `update` should be called when the element requests\n   * an update. By default, this method always returns `true`, but this can be\n   * customized to control when to update.\n   *\n   * @param _changedProperties Map of changed properties with old values\n   */\n  protected shouldUpdate(_changedProperties: PropertyValues): boolean {\n    return true;\n  }\n\n  /**\n   * Updates the element. This method reflects property values to attributes.\n   * It can be overridden to render and keep updated element DOM.\n   * Setting properties inside this method will *not* trigger\n   * another update.\n   *\n   * @param _changedProperties Map of changed properties with old values\n   */\n  protected update(_changedProperties: PropertyValues) {\n    if (this._reflectingProperties !== undefined &&\n        this._reflectingProperties.size > 0) {\n      // Use forEach so this works even if for/of loops are compiled to for\n      // loops expecting arrays\n      this._reflectingProperties.forEach(\n          (v, k) => this._propertyToAttribute(k, this[k as keyof this], v));\n      this._reflectingProperties = undefined;\n    }\n    this._markUpdated();\n  }\n\n  /**\n   * Invoked whenever the element is updated. Implement to perform\n   * post-updating tasks via DOM APIs, for example, focusing an element.\n   *\n   * Setting properties inside this method will trigger the element to update\n   * again after this update cycle completes.\n   *\n   * @param _changedProperties Map of changed properties with old values\n   */\n  protected updated(_changedProperties: PropertyValues) {\n  }\n\n  /**\n   * Invoked when the element is first updated. Implement to perform one time\n   * work on the element after update.\n   *\n   * Setting properties inside this method will trigger the element to update\n   * again after this update cycle completes.\n   *\n   * @param _changedProperties Map of changed properties with old values\n   */\n  protected firstUpdated(_changedProperties: PropertyValues) {\n  }\n}\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/*\n * IMPORTANT: For compatibility with tsickle and the Closure JS compiler, all\n * property decorators (but not class decorators) in this file that have\n * an @ExportDecoratedItems annotation must be defined as a regular function,\n * not an arrow function.\n */\n\nimport {LitElement} from '../lit-element.js';\n\nimport {PropertyDeclaration, UpdatingElement} from './updating-element.js';\n\nexport type Constructor<T> = {\n  // tslint:disable-next-line:no-any\n  new (...args: any[]): T\n};\n\n// From the TC39 Decorators proposal\ninterface ClassDescriptor {\n  kind: 'class';\n  elements: ClassElement[];\n  finisher?: <T>(clazz: Constructor<T>) => undefined | Constructor<T>;\n}\n\n// From the TC39 Decorators proposal\ninterface ClassElement {\n  kind: 'field'|'method';\n  key: PropertyKey;\n  placement: 'static'|'prototype'|'own';\n  initializer?: Function;\n  extras?: ClassElement[];\n  finisher?: <T>(clazz: Constructor<T>) => undefined | Constructor<T>;\n  descriptor?: PropertyDescriptor;\n}\n\nconst legacyCustomElement =\n    (tagName: string, clazz: Constructor<HTMLElement>) => {\n      window.customElements.define(tagName, clazz);\n      // Cast as any because TS doesn't recognize the return type as being a\n      // subtype of the decorated class when clazz is typed as\n      // `Constructor<HTMLElement>` for some reason.\n      // `Constructor<HTMLElement>` is helpful to make sure the decorator is\n      // applied to elements however.\n      // tslint:disable-next-line:no-any\n      return clazz as any;\n    };\n\nconst standardCustomElement =\n    (tagName: string, descriptor: ClassDescriptor) => {\n      const {kind, elements} = descriptor;\n      return {\n        kind,\n        elements,\n        // This callback is called once the class is otherwise fully defined\n        finisher(clazz: Constructor<HTMLElement>) {\n          window.customElements.define(tagName, clazz);\n        }\n      };\n    };\n\n/**\n * Class decorator factory that defines the decorated class as a custom element.\n *\n * ```\n * @customElement('my-element')\n * class MyElement {\n *   render() {\n *     return html``;\n *   }\n * }\n * ```\n * @category Decorator\n * @param tagName The name of the custom element to define.\n */\nexport const customElement = (tagName: string) =>\n    (classOrDescriptor: Constructor<HTMLElement>|ClassDescriptor) =>\n        (typeof classOrDescriptor === 'function') ?\n    legacyCustomElement(tagName, classOrDescriptor) :\n    standardCustomElement(tagName, classOrDescriptor);\n\nconst standardProperty =\n    (options: PropertyDeclaration, element: ClassElement) => {\n      // When decorating an accessor, pass it through and add property metadata.\n      // Note, the `hasOwnProperty` check in `createProperty` ensures we don't\n      // stomp over the user's accessor.\n      if (element.kind === 'method' && element.descriptor &&\n          !('value' in element.descriptor)) {\n        return {\n          ...element,\n          finisher(clazz: typeof UpdatingElement) {\n            clazz.createProperty(element.key, options);\n          }\n        };\n      } else {\n        // createProperty() takes care of defining the property, but we still\n        // must return some kind of descriptor, so return a descriptor for an\n        // unused prototype field. The finisher calls createProperty().\n        return {\n          kind: 'field',\n          key: Symbol(),\n          placement: 'own',\n          descriptor: {},\n          // When @babel/plugin-proposal-decorators implements initializers,\n          // do this instead of the initializer below. See:\n          // https://github.com/babel/babel/issues/9260 extras: [\n          //   {\n          //     kind: 'initializer',\n          //     placement: 'own',\n          //     initializer: descriptor.initializer,\n          //   }\n          // ],\n          initializer(this: {[key: string]: unknown}) {\n            if (typeof element.initializer === 'function') {\n              this[element.key as string] = element.initializer.call(this);\n            }\n          },\n          finisher(clazz: typeof UpdatingElement) {\n            clazz.createProperty(element.key, options);\n          }\n        };\n      }\n    };\n\nconst legacyProperty =\n    (options: PropertyDeclaration, proto: Object, name: PropertyKey) => {\n      (proto.constructor as typeof UpdatingElement)\n          .createProperty(name, options);\n    };\n\n/**\n * A property decorator which creates a LitElement property which reflects a\n * corresponding attribute value. A [[`PropertyDeclaration`]] may optionally be\n * supplied to configure property features.\n *\n * This decorator should only be used for public fields. Private or protected\n * fields should use the [[`internalProperty`]] decorator.\n *\n * @example\n * ```ts\n * class MyElement {\n *   @property({ type: Boolean })\n *   clicked = false;\n * }\n * ```\n * @category Decorator\n * @ExportDecoratedItems\n */\nexport function property(options?: PropertyDeclaration) {\n  // tslint:disable-next-line:no-any decorator\n  return (protoOrDescriptor: Object|ClassElement, name?: PropertyKey): any =>\n             (name !== undefined) ?\n      legacyProperty(options!, protoOrDescriptor as Object, name) :\n      standardProperty(options!, protoOrDescriptor as ClassElement);\n}\n\nexport interface InternalPropertyDeclaration<Type = unknown> {\n  /**\n   * A function that indicates if a property should be considered changed when\n   * it is set. The function should take the `newValue` and `oldValue` and\n   * return `true` if an update should be requested.\n   */\n  hasChanged?(value: Type, oldValue: Type): boolean;\n}\n\n/**\n * Declares a private or protected property that still triggers updates to the\n * element when it changes.\n *\n * Properties declared this way must not be used from HTML or HTML templating\n * systems, they're solely for properties internal to the element. These\n * properties may be renamed by optimization tools like closure compiler.\n * @category Decorator\n */\nexport function internalProperty(options?: InternalPropertyDeclaration) {\n  return property({attribute: false, hasChanged: options?.hasChanged});\n}\n\n/**\n * A property decorator that converts a class property into a getter that\n * executes a querySelector on the element's renderRoot.\n *\n * @param selector A DOMString containing one or more selectors to match.\n * @param cache An optional boolean which when true performs the DOM query only\n * once and caches the result.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector\n *\n * @example\n *\n * ```ts\n * class MyElement {\n *   @query('#first')\n *   first;\n *\n *   render() {\n *     return html`\n *       <div id=\"first\"></div>\n *       <div id=\"second\"></div>\n *     `;\n *   }\n * }\n * ```\n * @category Decorator\n */\nexport function query(selector: string, cache?: boolean) {\n  return (protoOrDescriptor: Object|ClassElement,\n          // tslint:disable-next-line:no-any decorator\n          name?: PropertyKey): any => {\n    const descriptor = {\n      get(this: LitElement) {\n        return this.renderRoot.querySelector(selector);\n      },\n      enumerable: true,\n      configurable: true,\n    };\n    if (cache) {\n      const key = typeof name === 'symbol' ? Symbol() : `__${name}`;\n      descriptor.get = function(this: LitElement) {\n        if ((this as unknown as\n             {[key: string]: Element | null})[key as string] === undefined) {\n          ((this as unknown as {[key: string]: Element | null})[key as string] =\n               this.renderRoot.querySelector(selector));\n        }\n        return (\n            this as unknown as {[key: string]: Element | null})[key as string];\n      };\n    }\n    return (name !== undefined) ?\n        legacyQuery(descriptor, protoOrDescriptor as Object, name) :\n        standardQuery(descriptor, protoOrDescriptor as ClassElement);\n  };\n}\n\n// Note, in the future, we may extend this decorator to support the use case\n// where the queried element may need to do work to become ready to interact\n// with (e.g. load some implementation code). If so, we might elect to\n// add a second argument defining a function that can be run to make the\n// queried element loaded/updated/ready.\n/**\n * A property decorator that converts a class property into a getter that\n * returns a promise that resolves to the result of a querySelector on the\n * element's renderRoot done after the element's `updateComplete` promise\n * resolves. When the queried property may change with element state, this\n * decorator can be used instead of requiring users to await the\n * `updateComplete` before accessing the property.\n *\n * @param selector A DOMString containing one or more selectors to match.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector\n *\n * @example\n * ```ts\n * class MyElement {\n *   @queryAsync('#first')\n *   first;\n *\n *   render() {\n *     return html`\n *       <div id=\"first\"></div>\n *       <div id=\"second\"></div>\n *     `;\n *   }\n * }\n *\n * // external usage\n * async doSomethingWithFirst() {\n *  (await aMyElement.first).doSomething();\n * }\n * ```\n * @category Decorator\n */\nexport function queryAsync(selector: string) {\n  return (protoOrDescriptor: Object|ClassElement,\n          // tslint:disable-next-line:no-any decorator\n          name?: PropertyKey): any => {\n    const descriptor = {\n      async get(this: LitElement) {\n        await this.updateComplete;\n        return this.renderRoot.querySelector(selector);\n      },\n      enumerable: true,\n      configurable: true,\n    };\n    return (name !== undefined) ?\n        legacyQuery(descriptor, protoOrDescriptor as Object, name) :\n        standardQuery(descriptor, protoOrDescriptor as ClassElement);\n  };\n}\n\n/**\n * A property decorator that converts a class property into a getter\n * that executes a querySelectorAll on the element's renderRoot.\n *\n * @param selector A DOMString containing one or more selectors to match.\n *\n * See:\n * https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll\n *\n * @example\n * ```ts\n * class MyElement {\n *   @queryAll('div')\n *   divs;\n *\n *   render() {\n *     return html`\n *       <div id=\"first\"></div>\n *       <div id=\"second\"></div>\n *     `;\n *   }\n * }\n * ```\n * @category Decorator\n */\nexport function queryAll(selector: string) {\n  return (protoOrDescriptor: Object|ClassElement,\n          // tslint:disable-next-line:no-any decorator\n          name?: PropertyKey): any => {\n    const descriptor = {\n      get(this: LitElement) {\n        return this.renderRoot.querySelectorAll(selector);\n      },\n      enumerable: true,\n      configurable: true,\n    };\n    return (name !== undefined) ?\n        legacyQuery(descriptor, protoOrDescriptor as Object, name) :\n        standardQuery(descriptor, protoOrDescriptor as ClassElement);\n  };\n}\n\nconst legacyQuery =\n    (descriptor: PropertyDescriptor, proto: Object, name: PropertyKey) => {\n      Object.defineProperty(proto, name, descriptor);\n    };\n\nconst standardQuery = (descriptor: PropertyDescriptor, element: ClassElement) =>\n    ({\n      kind: 'method',\n      placement: 'prototype',\n      key: element.key,\n      descriptor,\n    });\n\nconst standardEventOptions =\n    (options: AddEventListenerOptions, element: ClassElement) => {\n      return {\n        ...element,\n        finisher(clazz: typeof UpdatingElement) {\n          Object.assign(\n              clazz.prototype[element.key as keyof UpdatingElement], options);\n        }\n      };\n    };\n\nconst legacyEventOptions =\n    // tslint:disable-next-line:no-any legacy decorator\n    (options: AddEventListenerOptions, proto: any, name: PropertyKey) => {\n      Object.assign(proto[name], options);\n    };\n\n/**\n * Adds event listener options to a method used as an event listener in a\n * lit-html template.\n *\n * @param options An object that specifies event listener options as accepted by\n * `EventTarget#addEventListener` and `EventTarget#removeEventListener`.\n *\n * Current browsers support the `capture`, `passive`, and `once` options. See:\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Parameters\n *\n * @example\n * ```ts\n * class MyElement {\n *   clicked = false;\n *\n *   render() {\n *     return html`\n *       <div @click=${this._onClick}`>\n *         <button></button>\n *       </div>\n *     `;\n *   }\n *\n *   @eventOptions({capture: true})\n *   _onClick(e) {\n *     this.clicked = true;\n *   }\n * }\n * ```\n * @category Decorator\n */\nexport function eventOptions(options: AddEventListenerOptions) {\n  // Return value typed as any to prevent TypeScript from complaining that\n  // standard decorator function signature does not match TypeScript decorator\n  // signature\n  // TODO(kschaaf): unclear why it was only failing on this decorator and not\n  // the others\n  return ((protoOrDescriptor: Object|ClassElement, name?: string) =>\n              (name !== undefined) ?\n              legacyEventOptions(options, protoOrDescriptor as Object, name) :\n              standardEventOptions(\n                  options, protoOrDescriptor as ClassElement)) as\n             // tslint:disable-next-line:no-any decorator\n             any;\n}\n\n// x-browser support for matches\n// tslint:disable-next-line:no-any\nconst ElementProto = Element.prototype as any;\nconst legacyMatches =\n    ElementProto.msMatchesSelector || ElementProto.webkitMatchesSelector;\n\n/**\n * A property decorator that converts a class property into a getter that\n * returns the `assignedNodes` of the given named `slot`. Note, the type of\n * this property should be annotated as `NodeListOf<HTMLElement>`.\n *\n * @param slotName A string name of the slot.\n * @param flatten A boolean which when true flattens the assigned nodes,\n * meaning any assigned nodes that are slot elements are replaced with their\n * assigned nodes.\n * @param selector A string which filters the results to elements that match\n * the given css selector.\n *\n * * @example\n * ```ts\n * class MyElement {\n *   @queryAssignedNodes('list', true, '.item')\n *   listItems;\n *\n *   render() {\n *     return html`\n *       <slot name=\"list\"></slot>\n *     `;\n *   }\n * }\n * ```\n * @category Decorator\n */\nexport function queryAssignedNodes(\n    slotName = '', flatten = false, selector = '') {\n  return (protoOrDescriptor: Object|ClassElement,\n          // tslint:disable-next-line:no-any decorator\n          name?: PropertyKey): any => {\n    const descriptor = {\n      get(this: LitElement) {\n        const slotSelector =\n            `slot${slotName ? `[name=${slotName}]` : ':not([name])'}`;\n        const slot = this.renderRoot.querySelector(slotSelector);\n        let nodes = slot && (slot as HTMLSlotElement).assignedNodes({flatten});\n        if (nodes && selector) {\n          nodes = nodes.filter(\n              (node) => node.nodeType === Node.ELEMENT_NODE &&\n                      (node as Element).matches ?\n                  (node as Element).matches(selector) :\n                  legacyMatches.call(node as Element, selector));\n        }\n        return nodes;\n      },\n      enumerable: true,\n      configurable: true,\n    };\n    return (name !== undefined) ?\n        legacyQuery(descriptor, protoOrDescriptor as Object, name) :\n        standardQuery(descriptor, protoOrDescriptor as ClassElement);\n  };\n}\n","/**\n@license\nCopyright (c) 2019 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/\n\n/**\n * Whether the current browser supports `adoptedStyleSheets`.\n */\nexport const supportsAdoptingStyleSheets = (window.ShadowRoot) &&\n    (window.ShadyCSS === undefined || window.ShadyCSS.nativeShadow) &&\n    ('adoptedStyleSheets' in Document.prototype) &&\n    ('replace' in CSSStyleSheet.prototype);\n\nconst constructionToken = Symbol();\n\nexport class CSSResult {\n  _styleSheet?: CSSStyleSheet|null;\n\n  readonly cssText: string;\n\n  constructor(cssText: string, safeToken: symbol) {\n    if (safeToken !== constructionToken) {\n      throw new Error(\n          'CSSResult is not constructable. Use `unsafeCSS` or `css` instead.');\n    }\n\n    this.cssText = cssText;\n  }\n\n  // Note, this is a getter so that it's lazy. In practice, this means\n  // stylesheets are not created until the first element instance is made.\n  get styleSheet(): CSSStyleSheet|null {\n    if (this._styleSheet === undefined) {\n      // Note, if `supportsAdoptingStyleSheets` is true then we assume\n      // CSSStyleSheet is constructable.\n      if (supportsAdoptingStyleSheets) {\n        this._styleSheet = new CSSStyleSheet();\n        this._styleSheet.replaceSync(this.cssText);\n      } else {\n        this._styleSheet = null;\n      }\n    }\n    return this._styleSheet;\n  }\n\n  toString(): string {\n    return this.cssText;\n  }\n}\n\n/**\n * Wrap a value for interpolation in a [[`css`]] tagged template literal.\n *\n * This is unsafe because untrusted CSS text can be used to phone home\n * or exfiltrate data to an attacker controlled site. Take care to only use\n * this with trusted input.\n */\nexport const unsafeCSS = (value: unknown) => {\n  return new CSSResult(String(value), constructionToken);\n};\n\nconst textFromCSSResult = (value: CSSResult|number) => {\n  if (value instanceof CSSResult) {\n    return value.cssText;\n  } else if (typeof value === 'number') {\n    return value;\n  } else {\n    throw new Error(\n        `Value passed to 'css' function must be a 'css' function result: ${\n            value}. Use 'unsafeCSS' to pass non-literal values, but\n            take care to ensure page security.`);\n  }\n};\n\n/**\n * Template tag which which can be used with LitElement's [[LitElement.styles |\n * `styles`]] property to set element styles. For security reasons, only literal\n * string values may be used. To incorporate non-literal values [[`unsafeCSS`]]\n * may be used inside a template string part.\n */\nexport const css =\n    (strings: TemplateStringsArray, ...values: (CSSResult|number)[]) => {\n      const cssText = values.reduce(\n          (acc, v, idx) => acc + textFromCSSResult(v) + strings[idx + 1],\n          strings[0]);\n      return new CSSResult(cssText, constructionToken);\n    };\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * The main LitElement module, which defines the [[`LitElement`]] base class and\n * related APIs.\n *\n *  LitElement components can define a template and a set of observed\n * properties. Changing an observed property triggers a re-render of the\n * element.\n *\n *  Import [[`LitElement`]] and [[`html`]] from this module to create a\n * component:\n *\n *  ```js\n * import {LitElement, html} from 'lit-element';\n *\n * class MyElement extends LitElement {\n *\n *   // Declare observed properties\n *   static get properties() {\n *     return {\n *       adjective: {}\n *     }\n *   }\n *\n *   constructor() {\n *     this.adjective = 'awesome';\n *   }\n *\n *   // Define the element's template\n *   render() {\n *     return html`<p>your ${adjective} template here</p>`;\n *   }\n * }\n *\n * customElements.define('my-element', MyElement);\n * ```\n *\n * `LitElement` extends [[`UpdatingElement`]] and adds lit-html templating.\n * The `UpdatingElement` class is provided for users that want to build\n * their own custom element base classes that don't use lit-html.\n *\n * @packageDocumentation\n */\nimport {render, ShadyRenderOptions} from 'lit-html/lib/shady-render.js';\n\nimport {PropertyValues, UpdatingElement} from './lib/updating-element.js';\n\nexport * from './lib/updating-element.js';\nexport * from './lib/decorators.js';\nexport {html, svg, TemplateResult, SVGTemplateResult} from 'lit-html/lit-html.js';\nimport {supportsAdoptingStyleSheets, CSSResult, unsafeCSS} from './lib/css-tag.js';\nexport * from './lib/css-tag.js';\n\ndeclare global {\n  interface Window {\n    litElementVersions: string[];\n  }\n}\n\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for LitElement usage.\n// TODO(justinfagnani): inject version number at build time\n(window['litElementVersions'] || (window['litElementVersions'] = []))\n    .push('2.4.0');\n\nexport type CSSResultOrNative = CSSResult|CSSStyleSheet;\n\nexport interface CSSResultArray extends\n    Array<CSSResultOrNative|CSSResultArray> {}\n\n/**\n * Sentinal value used to avoid calling lit-html's render function when\n * subclasses do not implement `render`\n */\nconst renderNotImplemented = {};\n\n/**\n * Base element class that manages element properties and attributes, and\n * renders a lit-html template.\n *\n * To define a component, subclass `LitElement` and implement a\n * `render` method to provide the component's template. Define properties\n * using the [[`properties`]] property or the [[`property`]] decorator.\n */\nexport class LitElement extends UpdatingElement {\n  /**\n   * Ensure this class is marked as `finalized` as an optimization ensuring\n   * it will not needlessly try to `finalize`.\n   *\n   * Note this property name is a string to prevent breaking Closure JS Compiler\n   * optimizations. See updating-element.ts for more information.\n   */\n  protected static['finalized'] = true;\n\n  /**\n   * Reference to the underlying library method used to render the element's\n   * DOM. By default, points to the `render` method from lit-html's shady-render\n   * module.\n   *\n   * **Most users will never need to touch this property.**\n   *\n   * This  property should not be confused with the `render` instance method,\n   * which should be overridden to define a template for the element.\n   *\n   * Advanced users creating a new base class based on LitElement can override\n   * this property to point to a custom render method with a signature that\n   * matches [shady-render's `render`\n   * method](https://lit-html.polymer-project.org/api/modules/shady_render.html#render).\n   *\n   * @nocollapse\n   */\n  static render:\n      (result: unknown, container: Element|DocumentFragment,\n       options: ShadyRenderOptions) => void = render;\n\n  /**\n   * Array of styles to apply to the element. The styles should be defined\n   * using the [[`css`]] tag function or via constructible stylesheets.\n   */\n  static styles?: CSSResultOrNative|CSSResultArray;\n\n  private static _styles: Array<CSSResultOrNative|CSSResult>|undefined;\n\n  /**\n   * Return the array of styles to apply to the element.\n   * Override this method to integrate into a style management system.\n   *\n   * @nocollapse\n   */\n  static getStyles(): CSSResultOrNative|CSSResultArray|undefined {\n    return this.styles;\n  }\n\n  /** @nocollapse */\n  private static _getUniqueStyles() {\n    // Only gather styles once per class\n    if (this.hasOwnProperty(JSCompiler_renameProperty('_styles', this))) {\n      return;\n    }\n    // Take care not to call `this.getStyles()` multiple times since this\n    // generates new CSSResults each time.\n    // TODO(sorvell): Since we do not cache CSSResults by input, any\n    // shared styles will generate new stylesheet objects, which is wasteful.\n    // This should be addressed when a browser ships constructable\n    // stylesheets.\n    const userStyles = this.getStyles();\n\n    if (Array.isArray(userStyles)) {\n      // De-duplicate styles preserving the _last_ instance in the set.\n      // This is a performance optimization to avoid duplicated styles that can\n      // occur especially when composing via subclassing.\n      // The last item is kept to try to preserve the cascade order with the\n      // assumption that it's most important that last added styles override\n      // previous styles.\n      const addStyles = (styles: CSSResultArray, set: Set<CSSResultOrNative>):\n          Set<CSSResultOrNative> => styles.reduceRight(\n              (set: Set<CSSResultOrNative>, s) =>\n                  // Note: On IE set.add() does not return the set\n              Array.isArray(s) ? addStyles(s, set) : (set.add(s), set),\n              set);\n      // Array.from does not work on Set in IE, otherwise return\n      // Array.from(addStyles(userStyles, new Set<CSSResult>())).reverse()\n      const set = addStyles(userStyles, new Set<CSSResultOrNative>());\n      const styles: CSSResultOrNative[] = [];\n      set.forEach((v) => styles.unshift(v));\n      this._styles = styles;\n    } else {\n      this._styles = userStyles === undefined ? [] : [userStyles];\n    }\n\n    // Ensure that there are no invalid CSSStyleSheet instances here. They are\n    // invalid in two conditions.\n    // (1) the sheet is non-constructible (`sheet` of a HTMLStyleElement), but\n    //     this is impossible to check except via .replaceSync or use\n    // (2) the ShadyCSS polyfill is enabled (:. supportsAdoptingStyleSheets is\n    //     false)\n    this._styles = this._styles.map((s) => {\n      if (s instanceof CSSStyleSheet && !supportsAdoptingStyleSheets) {\n        // Flatten the cssText from the passed constructible stylesheet (or\n        // undetectable non-constructible stylesheet). The user might have\n        // expected to update their stylesheets over time, but the alternative\n        // is a crash.\n        const cssText = Array.prototype.slice.call(s.cssRules)\n                            .reduce((css, rule) => css + rule.cssText, '');\n        return unsafeCSS(cssText);\n      }\n      return s;\n    });\n  }\n\n  private _needsShimAdoptedStyleSheets?: boolean;\n\n  /**\n   * Node or ShadowRoot into which element DOM should be rendered. Defaults\n   * to an open shadowRoot.\n   */\n  readonly renderRoot!: Element|DocumentFragment;\n\n  /**\n   * Performs element initialization. By default this calls\n   * [[`createRenderRoot`]] to create the element [[`renderRoot`]] node and\n   * captures any pre-set values for registered properties.\n   */\n  protected initialize() {\n    super.initialize();\n    (this.constructor as typeof LitElement)._getUniqueStyles();\n    (this as {\n      renderRoot: Element|DocumentFragment;\n    }).renderRoot = this.createRenderRoot();\n    // Note, if renderRoot is not a shadowRoot, styles would/could apply to the\n    // element's getRootNode(). While this could be done, we're choosing not to\n    // support this now since it would require different logic around de-duping.\n    if (window.ShadowRoot && this.renderRoot instanceof window.ShadowRoot) {\n      this.adoptStyles();\n    }\n  }\n\n  /**\n   * Returns the node into which the element should render and by default\n   * creates and returns an open shadowRoot. Implement to customize where the\n   * element's DOM is rendered. For example, to render into the element's\n   * childNodes, return `this`.\n   * @returns {Element|DocumentFragment} Returns a node into which to render.\n   */\n  protected createRenderRoot(): Element|ShadowRoot {\n    return this.attachShadow({mode: 'open'});\n  }\n\n  /**\n   * Applies styling to the element shadowRoot using the [[`styles`]]\n   * property. Styling will apply using `shadowRoot.adoptedStyleSheets` where\n   * available and will fallback otherwise. When Shadow DOM is polyfilled,\n   * ShadyCSS scopes styles and adds them to the document. When Shadow DOM\n   * is available but `adoptedStyleSheets` is not, styles are appended to the\n   * end of the `shadowRoot` to [mimic spec\n   * behavior](https://wicg.github.io/construct-stylesheets/#using-constructed-stylesheets).\n   */\n  protected adoptStyles() {\n    const styles = (this.constructor as typeof LitElement)._styles!;\n    if (styles.length === 0) {\n      return;\n    }\n    // There are three separate cases here based on Shadow DOM support.\n    // (1) shadowRoot polyfilled: use ShadyCSS\n    // (2) shadowRoot.adoptedStyleSheets available: use it\n    // (3) shadowRoot.adoptedStyleSheets polyfilled: append styles after\n    // rendering\n    if (window.ShadyCSS !== undefined && !window.ShadyCSS.nativeShadow) {\n      window.ShadyCSS.ScopingShim!.prepareAdoptedCssText(\n          styles.map((s) => s.cssText), this.localName);\n    } else if (supportsAdoptingStyleSheets) {\n      (this.renderRoot as ShadowRoot).adoptedStyleSheets =\n          styles.map((s) => s instanceof CSSStyleSheet ? s : s.styleSheet!);\n    } else {\n      // This must be done after rendering so the actual style insertion is done\n      // in `update`.\n      this._needsShimAdoptedStyleSheets = true;\n    }\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n    // Note, first update/render handles styleElement so we only call this if\n    // connected after first update.\n    if (this.hasUpdated && window.ShadyCSS !== undefined) {\n      window.ShadyCSS.styleElement(this);\n    }\n  }\n\n  /**\n   * Updates the element. This method reflects property values to attributes\n   * and calls `render` to render DOM via lit-html. Setting properties inside\n   * this method will *not* trigger another update.\n   * @param _changedProperties Map of changed properties with old values\n   */\n  protected update(changedProperties: PropertyValues) {\n    // Setting properties in `render` should not trigger an update. Since\n    // updates are allowed after super.update, it's important to call `render`\n    // before that.\n    const templateResult = this.render();\n    super.update(changedProperties);\n    // If render is not implemented by the component, don't call lit-html render\n    if (templateResult !== renderNotImplemented) {\n      (this.constructor as typeof LitElement)\n          .render(\n              templateResult,\n              this.renderRoot,\n              {scopeName: this.localName, eventContext: this});\n    }\n    // When native Shadow DOM is used but adoptedStyles are not supported,\n    // insert styling after rendering to ensure adoptedStyles have highest\n    // priority.\n    if (this._needsShimAdoptedStyleSheets) {\n      this._needsShimAdoptedStyleSheets = false;\n      (this.constructor as typeof LitElement)._styles!.forEach((s) => {\n        const style = document.createElement('style');\n        style.textContent = s.cssText;\n        this.renderRoot.appendChild(style);\n      });\n    }\n  }\n\n  /**\n   * Invoked on each update to perform rendering tasks. This method may return\n   * any value renderable by lit-html's `NodePart` - typically a\n   * `TemplateResult`. Setting properties inside this method will *not* trigger\n   * the element to update.\n   */\n  protected render(): unknown {\n    return renderNotImplemented;\n  }\n}\n",null,null,null,null,null,null,null,"// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// This is CodeMirror (https://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = global || self, global.CodeMirror = factory());\n}(this, (function () { 'use strict';\n\n  // Kludges for bugs and behavior differences that can't be feature\n  // detected are enabled based on userAgent etc sniffing.\n  var userAgent = navigator.userAgent;\n  var platform = navigator.platform;\n\n  var gecko = /gecko\\/\\d/i.test(userAgent);\n  var ie_upto10 = /MSIE \\d/.test(userAgent);\n  var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n  var edge = /Edge\\/(\\d+)/.exec(userAgent);\n  var ie = ie_upto10 || ie_11up || edge;\n  var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\n  var webkit = !edge && /WebKit\\//.test(userAgent);\n  var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n  var chrome = !edge && /Chrome\\//.test(userAgent);\n  var presto = /Opera\\//.test(userAgent);\n  var safari = /Apple Computer/.test(navigator.vendor);\n  var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n  var phantom = /PhantomJS/.test(userAgent);\n\n  var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\\/\\w+/.test(userAgent);\n  var android = /Android/.test(userAgent);\n  // This is woefully incomplete. Suggestions for alternative methods welcome.\n  var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n  var mac = ios || /Mac/.test(platform);\n  var chromeOS = /\\bCrOS\\b/.test(userAgent);\n  var windows = /win/i.test(platform);\n\n  var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n  if (presto_version) { presto_version = Number(presto_version[1]); }\n  if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n  // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n  var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n  var captureRightClick = gecko || (ie && ie_version >= 9);\n\n  function classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\n  var rmClass = function(node, cls) {\n    var current = node.className;\n    var match = classTest(cls).exec(current);\n    if (match) {\n      var after = current.slice(match.index + match[0].length);\n      node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n    }\n  };\n\n  function removeChildren(e) {\n    for (var count = e.childNodes.length; count > 0; --count)\n      { e.removeChild(e.firstChild); }\n    return e\n  }\n\n  function removeChildrenAndAdd(parent, e) {\n    return removeChildren(parent).appendChild(e)\n  }\n\n  function elt(tag, content, className, style) {\n    var e = document.createElement(tag);\n    if (className) { e.className = className; }\n    if (style) { e.style.cssText = style; }\n    if (typeof content == \"string\") { e.appendChild(document.createTextNode(content)); }\n    else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }\n    return e\n  }\n  // wrapper for elt, which removes the elt from the accessibility tree\n  function eltP(tag, content, className, style) {\n    var e = elt(tag, content, className, style);\n    e.setAttribute(\"role\", \"presentation\");\n    return e\n  }\n\n  var range;\n  if (document.createRange) { range = function(node, start, end, endNode) {\n    var r = document.createRange();\n    r.setEnd(endNode || node, end);\n    r.setStart(node, start);\n    return r\n  }; }\n  else { range = function(node, start, end) {\n    var r = document.body.createTextRange();\n    try { r.moveToElementText(node.parentNode); }\n    catch(e) { return r }\n    r.collapse(true);\n    r.moveEnd(\"character\", end);\n    r.moveStart(\"character\", start);\n    return r\n  }; }\n\n  function contains(parent, child) {\n    if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n      { child = child.parentNode; }\n    if (parent.contains)\n      { return parent.contains(child) }\n    do {\n      if (child.nodeType == 11) { child = child.host; }\n      if (child == parent) { return true }\n    } while (child = child.parentNode)\n  }\n\n  function activeElt() {\n    // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n    // IE < 10 will throw when accessed while the page is loading or in an iframe.\n    // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n    var activeElement;\n    try {\n      activeElement = document.activeElement;\n    } catch(e) {\n      activeElement = document.body || null;\n    }\n    while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n      { activeElement = activeElement.shadowRoot.activeElement; }\n    return activeElement\n  }\n\n  function addClass(node, cls) {\n    var current = node.className;\n    if (!classTest(cls).test(current)) { node.className += (current ? \" \" : \"\") + cls; }\n  }\n  function joinClasses(a, b) {\n    var as = a.split(\" \");\n    for (var i = 0; i < as.length; i++)\n      { if (as[i] && !classTest(as[i]).test(b)) { b += \" \" + as[i]; } }\n    return b\n  }\n\n  var selectInput = function(node) { node.select(); };\n  if (ios) // Mobile Safari apparently has a bug where select() is broken.\n    { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }\n  else if (ie) // Suppress mysterious IE10 errors\n    { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }\n\n  function bind(f) {\n    var args = Array.prototype.slice.call(arguments, 1);\n    return function(){return f.apply(null, args)}\n  }\n\n  function copyObj(obj, target, overwrite) {\n    if (!target) { target = {}; }\n    for (var prop in obj)\n      { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n        { target[prop] = obj[prop]; } }\n    return target\n  }\n\n  // Counts the column offset in a string, taking tabs into account.\n  // Used mostly to find indentation.\n  function countColumn(string, end, tabSize, startIndex, startValue) {\n    if (end == null) {\n      end = string.search(/[^\\s\\u00a0]/);\n      if (end == -1) { end = string.length; }\n    }\n    for (var i = startIndex || 0, n = startValue || 0;;) {\n      var nextTab = string.indexOf(\"\\t\", i);\n      if (nextTab < 0 || nextTab >= end)\n        { return n + (end - i) }\n      n += nextTab - i;\n      n += tabSize - (n % tabSize);\n      i = nextTab + 1;\n    }\n  }\n\n  var Delayed = function() {\n    this.id = null;\n    this.f = null;\n    this.time = 0;\n    this.handler = bind(this.onTimeout, this);\n  };\n  Delayed.prototype.onTimeout = function (self) {\n    self.id = 0;\n    if (self.time <= +new Date) {\n      self.f();\n    } else {\n      setTimeout(self.handler, self.time - +new Date);\n    }\n  };\n  Delayed.prototype.set = function (ms, f) {\n    this.f = f;\n    var time = +new Date + ms;\n    if (!this.id || time < this.time) {\n      clearTimeout(this.id);\n      this.id = setTimeout(this.handler, ms);\n      this.time = time;\n    }\n  };\n\n  function indexOf(array, elt) {\n    for (var i = 0; i < array.length; ++i)\n      { if (array[i] == elt) { return i } }\n    return -1\n  }\n\n  // Number of pixels added to scroller and sizer to hide scrollbar\n  var scrollerGap = 50;\n\n  // Returned or thrown by various protocols to signal 'I'm not\n  // handling this'.\n  var Pass = {toString: function(){return \"CodeMirror.Pass\"}};\n\n  // Reused option objects for setSelection & friends\n  var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n  // The inverse of countColumn -- find the offset that corresponds to\n  // a particular column.\n  function findColumn(string, goal, tabSize) {\n    for (var pos = 0, col = 0;;) {\n      var nextTab = string.indexOf(\"\\t\", pos);\n      if (nextTab == -1) { nextTab = string.length; }\n      var skipped = nextTab - pos;\n      if (nextTab == string.length || col + skipped >= goal)\n        { return pos + Math.min(skipped, goal - col) }\n      col += nextTab - pos;\n      col += tabSize - (col % tabSize);\n      pos = nextTab + 1;\n      if (col >= goal) { return pos }\n    }\n  }\n\n  var spaceStrs = [\"\"];\n  function spaceStr(n) {\n    while (spaceStrs.length <= n)\n      { spaceStrs.push(lst(spaceStrs) + \" \"); }\n    return spaceStrs[n]\n  }\n\n  function lst(arr) { return arr[arr.length-1] }\n\n  function map(array, f) {\n    var out = [];\n    for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }\n    return out\n  }\n\n  function insertSorted(array, value, score) {\n    var pos = 0, priority = score(value);\n    while (pos < array.length && score(array[pos]) <= priority) { pos++; }\n    array.splice(pos, 0, value);\n  }\n\n  function nothing() {}\n\n  function createObj(base, props) {\n    var inst;\n    if (Object.create) {\n      inst = Object.create(base);\n    } else {\n      nothing.prototype = base;\n      inst = new nothing();\n    }\n    if (props) { copyObj(props, inst); }\n    return inst\n  }\n\n  var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n  function isWordCharBasic(ch) {\n    return /\\w/.test(ch) || ch > \"\\x80\" &&\n      (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n  }\n  function isWordChar(ch, helper) {\n    if (!helper) { return isWordCharBasic(ch) }\n    if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) { return true }\n    return helper.test(ch)\n  }\n\n  function isEmpty(obj) {\n    for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }\n    return true\n  }\n\n  // Extending unicode characters. A series of a non-extending char +\n  // any number of extending chars is treated as a single unit as far\n  // as editing and measuring is concerned. This is not fully correct,\n  // since some scripts/fonts/browsers also treat other configurations\n  // of code points as a group.\n  var extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\n  function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n  // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n  function skipExtendingChars(str, pos, dir) {\n    while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }\n    return pos\n  }\n\n  // Returns the value from the range [`from`; `to`] that satisfies\n  // `pred` and is closest to `from`. Assumes that at least `to`\n  // satisfies `pred`. Supports `from` being greater than `to`.\n  function findFirst(pred, from, to) {\n    // At any point we are certain `to` satisfies `pred`, don't know\n    // whether `from` does.\n    var dir = from > to ? -1 : 1;\n    for (;;) {\n      if (from == to) { return from }\n      var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n      if (mid == from) { return pred(mid) ? from : to }\n      if (pred(mid)) { to = mid; }\n      else { from = mid + dir; }\n    }\n  }\n\n  // BIDI HELPERS\n\n  function iterateBidiSections(order, from, to, f) {\n    if (!order) { return f(from, to, \"ltr\", 0) }\n    var found = false;\n    for (var i = 0; i < order.length; ++i) {\n      var part = order[i];\n      if (part.from < to && part.to > from || from == to && part.to == from) {\n        f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n        found = true;\n      }\n    }\n    if (!found) { f(from, to, \"ltr\"); }\n  }\n\n  var bidiOther = null;\n  function getBidiPartAt(order, ch, sticky) {\n    var found;\n    bidiOther = null;\n    for (var i = 0; i < order.length; ++i) {\n      var cur = order[i];\n      if (cur.from < ch && cur.to > ch) { return i }\n      if (cur.to == ch) {\n        if (cur.from != cur.to && sticky == \"before\") { found = i; }\n        else { bidiOther = i; }\n      }\n      if (cur.from == ch) {\n        if (cur.from != cur.to && sticky != \"before\") { found = i; }\n        else { bidiOther = i; }\n      }\n    }\n    return found != null ? found : bidiOther\n  }\n\n  // Bidirectional ordering algorithm\n  // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n  // that this (partially) implements.\n\n  // One-char codes used for character types:\n  // L (L):   Left-to-Right\n  // R (R):   Right-to-Left\n  // r (AL):  Right-to-Left Arabic\n  // 1 (EN):  European Number\n  // + (ES):  European Number Separator\n  // % (ET):  European Number Terminator\n  // n (AN):  Arabic Number\n  // , (CS):  Common Number Separator\n  // m (NSM): Non-Spacing Mark\n  // b (BN):  Boundary Neutral\n  // s (B):   Paragraph Separator\n  // t (S):   Segment Separator\n  // w (WS):  Whitespace\n  // N (ON):  Other Neutrals\n\n  // Returns null if characters are ordered as they appear\n  // (left-to-right), or an array of sections ({from, to, level}\n  // objects) in the order in which they occur visually.\n  var bidiOrdering = (function() {\n    // Character types for codepoints 0 to 0xff\n    var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n    // Character types for codepoints 0x600 to 0x6f9\n    var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n    function charType(code) {\n      if (code <= 0xf7) { return lowTypes.charAt(code) }\n      else if (0x590 <= code && code <= 0x5f4) { return \"R\" }\n      else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }\n      else if (0x6ee <= code && code <= 0x8ac) { return \"r\" }\n      else if (0x2000 <= code && code <= 0x200b) { return \"w\" }\n      else if (code == 0x200c) { return \"b\" }\n      else { return \"L\" }\n    }\n\n    var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n    var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n\n    function BidiSpan(level, from, to) {\n      this.level = level;\n      this.from = from; this.to = to;\n    }\n\n    return function(str, direction) {\n      var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n      if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) { return false }\n      var len = str.length, types = [];\n      for (var i = 0; i < len; ++i)\n        { types.push(charType(str.charCodeAt(i))); }\n\n      // W1. Examine each non-spacing mark (NSM) in the level run, and\n      // change the type of the NSM to the type of the previous\n      // character. If the NSM is at the start of the level run, it will\n      // get the type of sor.\n      for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n        var type = types[i$1];\n        if (type == \"m\") { types[i$1] = prev; }\n        else { prev = type; }\n      }\n\n      // W2. Search backwards from each instance of a European number\n      // until the first strong type (R, L, AL, or sor) is found. If an\n      // AL is found, change the type of the European number to Arabic\n      // number.\n      // W3. Change all ALs to R.\n      for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n        var type$1 = types[i$2];\n        if (type$1 == \"1\" && cur == \"r\") { types[i$2] = \"n\"; }\n        else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == \"r\") { types[i$2] = \"R\"; } }\n      }\n\n      // W4. A single European separator between two European numbers\n      // changes to a European number. A single common separator between\n      // two numbers of the same type changes to that type.\n      for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n        var type$2 = types[i$3];\n        if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3+1] == \"1\") { types[i$3] = \"1\"; }\n        else if (type$2 == \",\" && prev$1 == types[i$3+1] &&\n                 (prev$1 == \"1\" || prev$1 == \"n\")) { types[i$3] = prev$1; }\n        prev$1 = type$2;\n      }\n\n      // W5. A sequence of European terminators adjacent to European\n      // numbers changes to all European numbers.\n      // W6. Otherwise, separators and terminators change to Other\n      // Neutral.\n      for (var i$4 = 0; i$4 < len; ++i$4) {\n        var type$3 = types[i$4];\n        if (type$3 == \",\") { types[i$4] = \"N\"; }\n        else if (type$3 == \"%\") {\n          var end = (void 0);\n          for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n          var replace = (i$4 && types[i$4-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n          for (var j = i$4; j < end; ++j) { types[j] = replace; }\n          i$4 = end - 1;\n        }\n      }\n\n      // W7. Search backwards from each instance of a European number\n      // until the first strong type (R, L, or sor) is found. If an L is\n      // found, then change the type of the European number to L.\n      for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n        var type$4 = types[i$5];\n        if (cur$1 == \"L\" && type$4 == \"1\") { types[i$5] = \"L\"; }\n        else if (isStrong.test(type$4)) { cur$1 = type$4; }\n      }\n\n      // N1. A sequence of neutrals takes the direction of the\n      // surrounding strong text if the text on both sides has the same\n      // direction. European and Arabic numbers act as if they were R in\n      // terms of their influence on neutrals. Start-of-level-run (sor)\n      // and end-of-level-run (eor) are used at level run boundaries.\n      // N2. Any remaining neutrals take the embedding direction.\n      for (var i$6 = 0; i$6 < len; ++i$6) {\n        if (isNeutral.test(types[i$6])) {\n          var end$1 = (void 0);\n          for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n          var before = (i$6 ? types[i$6-1] : outerType) == \"L\";\n          var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n          var replace$1 = before == after ? (before ? \"L\" : \"R\") : outerType;\n          for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }\n          i$6 = end$1 - 1;\n        }\n      }\n\n      // Here we depart from the documented algorithm, in order to avoid\n      // building up an actual levels array. Since there are only three\n      // levels (0, 1, 2) in an implementation that doesn't take\n      // explicit embedding into account, we can build up the order on\n      // the fly, without following the level-based algorithm.\n      var order = [], m;\n      for (var i$7 = 0; i$7 < len;) {\n        if (countsAsLeft.test(types[i$7])) {\n          var start = i$7;\n          for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n          order.push(new BidiSpan(0, start, i$7));\n        } else {\n          var pos = i$7, at = order.length, isRTL = direction == \"rtl\" ? 1 : 0;\n          for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n          for (var j$2 = pos; j$2 < i$7;) {\n            if (countsAsNum.test(types[j$2])) {\n              if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; }\n              var nstart = j$2;\n              for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n              order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n              at += isRTL;\n              pos = j$2;\n            } else { ++j$2; }\n          }\n          if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }\n        }\n      }\n      if (direction == \"ltr\") {\n        if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n          order[0].from = m[0].length;\n          order.unshift(new BidiSpan(0, 0, m[0].length));\n        }\n        if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n          lst(order).to -= m[0].length;\n          order.push(new BidiSpan(0, len - m[0].length, len));\n        }\n      }\n\n      return direction == \"rtl\" ? order.reverse() : order\n    }\n  })();\n\n  // Get the bidi ordering for the given line (and cache it). Returns\n  // false for lines that are fully left-to-right, and an array of\n  // BidiSpan objects otherwise.\n  function getOrder(line, direction) {\n    var order = line.order;\n    if (order == null) { order = line.order = bidiOrdering(line.text, direction); }\n    return order\n  }\n\n  // EVENT HANDLING\n\n  // Lightweight event framework. on/off also work on DOM nodes,\n  // registering native DOM handlers.\n\n  var noHandlers = [];\n\n  var on = function(emitter, type, f) {\n    if (emitter.addEventListener) {\n      emitter.addEventListener(type, f, false);\n    } else if (emitter.attachEvent) {\n      emitter.attachEvent(\"on\" + type, f);\n    } else {\n      var map = emitter._handlers || (emitter._handlers = {});\n      map[type] = (map[type] || noHandlers).concat(f);\n    }\n  };\n\n  function getHandlers(emitter, type) {\n    return emitter._handlers && emitter._handlers[type] || noHandlers\n  }\n\n  function off(emitter, type, f) {\n    if (emitter.removeEventListener) {\n      emitter.removeEventListener(type, f, false);\n    } else if (emitter.detachEvent) {\n      emitter.detachEvent(\"on\" + type, f);\n    } else {\n      var map = emitter._handlers, arr = map && map[type];\n      if (arr) {\n        var index = indexOf(arr, f);\n        if (index > -1)\n          { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }\n      }\n    }\n  }\n\n  function signal(emitter, type /*, values...*/) {\n    var handlers = getHandlers(emitter, type);\n    if (!handlers.length) { return }\n    var args = Array.prototype.slice.call(arguments, 2);\n    for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }\n  }\n\n  // The DOM events that CodeMirror handles can be overridden by\n  // registering a (non-DOM) handler on the editor for the event name,\n  // and preventDefault-ing the event in that handler.\n  function signalDOMEvent(cm, e, override) {\n    if (typeof e == \"string\")\n      { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }\n    signal(cm, override || e.type, cm, e);\n    return e_defaultPrevented(e) || e.codemirrorIgnore\n  }\n\n  function signalCursorActivity(cm) {\n    var arr = cm._handlers && cm._handlers.cursorActivity;\n    if (!arr) { return }\n    var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n    for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)\n      { set.push(arr[i]); } }\n  }\n\n  function hasHandler(emitter, type) {\n    return getHandlers(emitter, type).length > 0\n  }\n\n  // Add on and off methods to a constructor's prototype, to make\n  // registering events on such objects more convenient.\n  function eventMixin(ctor) {\n    ctor.prototype.on = function(type, f) {on(this, type, f);};\n    ctor.prototype.off = function(type, f) {off(this, type, f);};\n  }\n\n  // Due to the fact that we still support jurassic IE versions, some\n  // compatibility wrappers are needed.\n\n  function e_preventDefault(e) {\n    if (e.preventDefault) { e.preventDefault(); }\n    else { e.returnValue = false; }\n  }\n  function e_stopPropagation(e) {\n    if (e.stopPropagation) { e.stopPropagation(); }\n    else { e.cancelBubble = true; }\n  }\n  function e_defaultPrevented(e) {\n    return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n  }\n  function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n\n  function e_target(e) {return e.target || e.srcElement}\n  function e_button(e) {\n    var b = e.which;\n    if (b == null) {\n      if (e.button & 1) { b = 1; }\n      else if (e.button & 2) { b = 3; }\n      else if (e.button & 4) { b = 2; }\n    }\n    if (mac && e.ctrlKey && b == 1) { b = 3; }\n    return b\n  }\n\n  // Detect drag-and-drop\n  var dragAndDrop = function() {\n    // There is *some* kind of drag-and-drop support in IE6-8, but I\n    // couldn't get it to work yet.\n    if (ie && ie_version < 9) { return false }\n    var div = elt('div');\n    return \"draggable\" in div || \"dragDrop\" in div\n  }();\n\n  var zwspSupported;\n  function zeroWidthElement(measure) {\n    if (zwspSupported == null) {\n      var test = elt(\"span\", \"\\u200b\");\n      removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n      if (measure.firstChild.offsetHeight != 0)\n        { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }\n    }\n    var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n      elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n    node.setAttribute(\"cm-text\", \"\");\n    return node\n  }\n\n  // Feature-detect IE's crummy client rect reporting for bidi text\n  var badBidiRects;\n  function hasBadBidiRects(measure) {\n    if (badBidiRects != null) { return badBidiRects }\n    var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n    var r0 = range(txt, 0, 1).getBoundingClientRect();\n    var r1 = range(txt, 1, 2).getBoundingClientRect();\n    removeChildren(measure);\n    if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)\n    return badBidiRects = (r1.right - r0.right < 3)\n  }\n\n  // See if \"\".split is the broken IE version, if so, provide an\n  // alternative way to split lines.\n  var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n    var pos = 0, result = [], l = string.length;\n    while (pos <= l) {\n      var nl = string.indexOf(\"\\n\", pos);\n      if (nl == -1) { nl = string.length; }\n      var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n      var rt = line.indexOf(\"\\r\");\n      if (rt != -1) {\n        result.push(line.slice(0, rt));\n        pos += rt + 1;\n      } else {\n        result.push(line);\n        pos = nl + 1;\n      }\n    }\n    return result\n  } : function (string) { return string.split(/\\r\\n?|\\n/); };\n\n  var hasSelection = window.getSelection ? function (te) {\n    try { return te.selectionStart != te.selectionEnd }\n    catch(e) { return false }\n  } : function (te) {\n    var range;\n    try {range = te.ownerDocument.selection.createRange();}\n    catch(e) {}\n    if (!range || range.parentElement() != te) { return false }\n    return range.compareEndPoints(\"StartToEnd\", range) != 0\n  };\n\n  var hasCopyEvent = (function () {\n    var e = elt(\"div\");\n    if (\"oncopy\" in e) { return true }\n    e.setAttribute(\"oncopy\", \"return;\");\n    return typeof e.oncopy == \"function\"\n  })();\n\n  var badZoomedRects = null;\n  function hasBadZoomedRects(measure) {\n    if (badZoomedRects != null) { return badZoomedRects }\n    var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n    var normal = node.getBoundingClientRect();\n    var fromRange = range(node, 0, 1).getBoundingClientRect();\n    return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1\n  }\n\n  // Known modes, by name and by MIME\n  var modes = {}, mimeModes = {};\n\n  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\n  function defineMode(name, mode) {\n    if (arguments.length > 2)\n      { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n    modes[name] = mode;\n  }\n\n  function defineMIME(mime, spec) {\n    mimeModes[mime] = spec;\n  }\n\n  // Given a MIME type, a {name, ...options} config object, or a name\n  // string, return a mode config object.\n  function resolveMode(spec) {\n    if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n      spec = mimeModes[spec];\n    } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n      var found = mimeModes[spec.name];\n      if (typeof found == \"string\") { found = {name: found}; }\n      spec = createObj(found, spec);\n      spec.name = found.name;\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n      return resolveMode(\"application/xml\")\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n      return resolveMode(\"application/json\")\n    }\n    if (typeof spec == \"string\") { return {name: spec} }\n    else { return spec || {name: \"null\"} }\n  }\n\n  // Given a mode spec (anything that resolveMode accepts), find and\n  // initialize an actual mode object.\n  function getMode(options, spec) {\n    spec = resolveMode(spec);\n    var mfactory = modes[spec.name];\n    if (!mfactory) { return getMode(options, \"text/plain\") }\n    var modeObj = mfactory(options, spec);\n    if (modeExtensions.hasOwnProperty(spec.name)) {\n      var exts = modeExtensions[spec.name];\n      for (var prop in exts) {\n        if (!exts.hasOwnProperty(prop)) { continue }\n        if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n        modeObj[prop] = exts[prop];\n      }\n    }\n    modeObj.name = spec.name;\n    if (spec.helperType) { modeObj.helperType = spec.helperType; }\n    if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n      { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n    return modeObj\n  }\n\n  // This can be used to attach properties to mode objects from\n  // outside the actual mode definition.\n  var modeExtensions = {};\n  function extendMode(mode, properties) {\n    var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n    copyObj(properties, exts);\n  }\n\n  function copyState(mode, state) {\n    if (state === true) { return state }\n    if (mode.copyState) { return mode.copyState(state) }\n    var nstate = {};\n    for (var n in state) {\n      var val = state[n];\n      if (val instanceof Array) { val = val.concat([]); }\n      nstate[n] = val;\n    }\n    return nstate\n  }\n\n  // Given a mode and a state (for that mode), find the inner mode and\n  // state at the position that the state refers to.\n  function innerMode(mode, state) {\n    var info;\n    while (mode.innerMode) {\n      info = mode.innerMode(state);\n      if (!info || info.mode == mode) { break }\n      state = info.state;\n      mode = info.mode;\n    }\n    return info || {mode: mode, state: state}\n  }\n\n  function startState(mode, a1, a2) {\n    return mode.startState ? mode.startState(a1, a2) : true\n  }\n\n  // STRING STREAM\n\n  // Fed to the mode parsers, provides helper functions to make\n  // parsers more succinct.\n\n  var StringStream = function(string, tabSize, lineOracle) {\n    this.pos = this.start = 0;\n    this.string = string;\n    this.tabSize = tabSize || 8;\n    this.lastColumnPos = this.lastColumnValue = 0;\n    this.lineStart = 0;\n    this.lineOracle = lineOracle;\n  };\n\n  StringStream.prototype.eol = function () {return this.pos >= this.string.length};\n  StringStream.prototype.sol = function () {return this.pos == this.lineStart};\n  StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\n  StringStream.prototype.next = function () {\n    if (this.pos < this.string.length)\n      { return this.string.charAt(this.pos++) }\n  };\n  StringStream.prototype.eat = function (match) {\n    var ch = this.string.charAt(this.pos);\n    var ok;\n    if (typeof match == \"string\") { ok = ch == match; }\n    else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n    if (ok) {++this.pos; return ch}\n  };\n  StringStream.prototype.eatWhile = function (match) {\n    var start = this.pos;\n    while (this.eat(match)){}\n    return this.pos > start\n  };\n  StringStream.prototype.eatSpace = function () {\n    var start = this.pos;\n    while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; }\n    return this.pos > start\n  };\n  StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\n  StringStream.prototype.skipTo = function (ch) {\n    var found = this.string.indexOf(ch, this.pos);\n    if (found > -1) {this.pos = found; return true}\n  };\n  StringStream.prototype.backUp = function (n) {this.pos -= n;};\n  StringStream.prototype.column = function () {\n    if (this.lastColumnPos < this.start) {\n      this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n      this.lastColumnPos = this.start;\n    }\n    return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  };\n  StringStream.prototype.indentation = function () {\n    return countColumn(this.string, null, this.tabSize) -\n      (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  };\n  StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n    if (typeof pattern == \"string\") {\n      var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n      var substr = this.string.substr(this.pos, pattern.length);\n      if (cased(substr) == cased(pattern)) {\n        if (consume !== false) { this.pos += pattern.length; }\n        return true\n      }\n    } else {\n      var match = this.string.slice(this.pos).match(pattern);\n      if (match && match.index > 0) { return null }\n      if (match && consume !== false) { this.pos += match[0].length; }\n      return match\n    }\n  };\n  StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\n  StringStream.prototype.hideFirstChars = function (n, inner) {\n    this.lineStart += n;\n    try { return inner() }\n    finally { this.lineStart -= n; }\n  };\n  StringStream.prototype.lookAhead = function (n) {\n    var oracle = this.lineOracle;\n    return oracle && oracle.lookAhead(n)\n  };\n  StringStream.prototype.baseToken = function () {\n    var oracle = this.lineOracle;\n    return oracle && oracle.baseToken(this.pos)\n  };\n\n  // Find the line object corresponding to the given line number.\n  function getLine(doc, n) {\n    n -= doc.first;\n    if (n < 0 || n >= doc.size) { throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\") }\n    var chunk = doc;\n    while (!chunk.lines) {\n      for (var i = 0;; ++i) {\n        var child = chunk.children[i], sz = child.chunkSize();\n        if (n < sz) { chunk = child; break }\n        n -= sz;\n      }\n    }\n    return chunk.lines[n]\n  }\n\n  // Get the part of a document between two positions, as an array of\n  // strings.\n  function getBetween(doc, start, end) {\n    var out = [], n = start.line;\n    doc.iter(start.line, end.line + 1, function (line) {\n      var text = line.text;\n      if (n == end.line) { text = text.slice(0, end.ch); }\n      if (n == start.line) { text = text.slice(start.ch); }\n      out.push(text);\n      ++n;\n    });\n    return out\n  }\n  // Get the lines between from and to, as array of strings.\n  function getLines(doc, from, to) {\n    var out = [];\n    doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value\n    return out\n  }\n\n  // Update the height of a line, propagating the height change\n  // upwards to parent nodes.\n  function updateLineHeight(line, height) {\n    var diff = height - line.height;\n    if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }\n  }\n\n  // Given a line object, find its line number by walking up through\n  // its parent links.\n  function lineNo(line) {\n    if (line.parent == null) { return null }\n    var cur = line.parent, no = indexOf(cur.lines, line);\n    for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n      for (var i = 0;; ++i) {\n        if (chunk.children[i] == cur) { break }\n        no += chunk.children[i].chunkSize();\n      }\n    }\n    return no + cur.first\n  }\n\n  // Find the line at the given vertical position, using the height\n  // information in the document tree.\n  function lineAtHeight(chunk, h) {\n    var n = chunk.first;\n    outer: do {\n      for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n        var child = chunk.children[i$1], ch = child.height;\n        if (h < ch) { chunk = child; continue outer }\n        h -= ch;\n        n += child.chunkSize();\n      }\n      return n\n    } while (!chunk.lines)\n    var i = 0;\n    for (; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i], lh = line.height;\n      if (h < lh) { break }\n      h -= lh;\n    }\n    return n + i\n  }\n\n  function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\n  function lineNumberFor(options, i) {\n    return String(options.lineNumberFormatter(i + options.firstLineNumber))\n  }\n\n  // A Pos instance represents a position within the text.\n  function Pos(line, ch, sticky) {\n    if ( sticky === void 0 ) sticky = null;\n\n    if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }\n    this.line = line;\n    this.ch = ch;\n    this.sticky = sticky;\n  }\n\n  // Compare two positions, return 0 if they are the same, a negative\n  // number when a is less, and a positive number otherwise.\n  function cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\n  function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\n  function copyPos(x) {return Pos(x.line, x.ch)}\n  function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\n  function minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n  // Most of the external API clips given positions to make sure they\n  // actually exist within the document.\n  function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\n  function clipPos(doc, pos) {\n    if (pos.line < doc.first) { return Pos(doc.first, 0) }\n    var last = doc.first + doc.size - 1;\n    if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }\n    return clipToLen(pos, getLine(doc, pos.line).text.length)\n  }\n  function clipToLen(pos, linelen) {\n    var ch = pos.ch;\n    if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }\n    else if (ch < 0) { return Pos(pos.line, 0) }\n    else { return pos }\n  }\n  function clipPosArray(doc, array) {\n    var out = [];\n    for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }\n    return out\n  }\n\n  var SavedContext = function(state, lookAhead) {\n    this.state = state;\n    this.lookAhead = lookAhead;\n  };\n\n  var Context = function(doc, state, line, lookAhead) {\n    this.state = state;\n    this.doc = doc;\n    this.line = line;\n    this.maxLookAhead = lookAhead || 0;\n    this.baseTokens = null;\n    this.baseTokenPos = 1;\n  };\n\n  Context.prototype.lookAhead = function (n) {\n    var line = this.doc.getLine(this.line + n);\n    if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }\n    return line\n  };\n\n  Context.prototype.baseToken = function (n) {\n    if (!this.baseTokens) { return null }\n    while (this.baseTokens[this.baseTokenPos] <= n)\n      { this.baseTokenPos += 2; }\n    var type = this.baseTokens[this.baseTokenPos + 1];\n    return {type: type && type.replace(/( |^)overlay .*/, \"\"),\n            size: this.baseTokens[this.baseTokenPos] - n}\n  };\n\n  Context.prototype.nextLine = function () {\n    this.line++;\n    if (this.maxLookAhead > 0) { this.maxLookAhead--; }\n  };\n\n  Context.fromSaved = function (doc, saved, line) {\n    if (saved instanceof SavedContext)\n      { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }\n    else\n      { return new Context(doc, copyState(doc.mode, saved), line) }\n  };\n\n  Context.prototype.save = function (copy) {\n    var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n    return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state\n  };\n\n\n  // Compute a style array (an array starting with a mode generation\n  // -- for invalidation -- followed by pairs of end positions and\n  // style strings), which is used to highlight the tokens on the\n  // line.\n  function highlightLine(cm, line, context, forceToEnd) {\n    // A styles array always starts with a number identifying the\n    // mode/overlays that it is based on (for easy invalidation).\n    var st = [cm.state.modeGen], lineClasses = {};\n    // Compute the base array of styles\n    runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },\n            lineClasses, forceToEnd);\n    var state = context.state;\n\n    // Run overlays, adjust style array.\n    var loop = function ( o ) {\n      context.baseTokens = st;\n      var overlay = cm.state.overlays[o], i = 1, at = 0;\n      context.state = true;\n      runMode(cm, line.text, overlay.mode, context, function (end, style) {\n        var start = i;\n        // Ensure there's a token end at the current position, and that i points at it\n        while (at < end) {\n          var i_end = st[i];\n          if (i_end > end)\n            { st.splice(i, 1, end, st[i+1], i_end); }\n          i += 2;\n          at = Math.min(end, i_end);\n        }\n        if (!style) { return }\n        if (overlay.opaque) {\n          st.splice(start, i - start, end, \"overlay \" + style);\n          i = start + 2;\n        } else {\n          for (; start < i; start += 2) {\n            var cur = st[start+1];\n            st[start+1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n          }\n        }\n      }, lineClasses);\n      context.state = state;\n      context.baseTokens = null;\n      context.baseTokenPos = 1;\n    };\n\n    for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );\n\n    return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\n  }\n\n  function getLineStyles(cm, line, updateFrontier) {\n    if (!line.styles || line.styles[0] != cm.state.modeGen) {\n      var context = getContextBefore(cm, lineNo(line));\n      var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n      var result = highlightLine(cm, line, context);\n      if (resetState) { context.state = resetState; }\n      line.stateAfter = context.save(!resetState);\n      line.styles = result.styles;\n      if (result.classes) { line.styleClasses = result.classes; }\n      else if (line.styleClasses) { line.styleClasses = null; }\n      if (updateFrontier === cm.doc.highlightFrontier)\n        { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }\n    }\n    return line.styles\n  }\n\n  function getContextBefore(cm, n, precise) {\n    var doc = cm.doc, display = cm.display;\n    if (!doc.mode.startState) { return new Context(doc, true, n) }\n    var start = findStartLine(cm, n, precise);\n    var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n    var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n\n    doc.iter(start, n, function (line) {\n      processLine(cm, line.text, context);\n      var pos = context.line;\n      line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n      context.nextLine();\n    });\n    if (precise) { doc.modeFrontier = context.line; }\n    return context\n  }\n\n  // Lightweight form of highlight -- proceed over this line and\n  // update state, but don't save a style array. Used for lines that\n  // aren't currently visible.\n  function processLine(cm, text, context, startAt) {\n    var mode = cm.doc.mode;\n    var stream = new StringStream(text, cm.options.tabSize, context);\n    stream.start = stream.pos = startAt || 0;\n    if (text == \"\") { callBlankLine(mode, context.state); }\n    while (!stream.eol()) {\n      readToken(mode, stream, context.state);\n      stream.start = stream.pos;\n    }\n  }\n\n  function callBlankLine(mode, state) {\n    if (mode.blankLine) { return mode.blankLine(state) }\n    if (!mode.innerMode) { return }\n    var inner = innerMode(mode, state);\n    if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }\n  }\n\n  function readToken(mode, stream, state, inner) {\n    for (var i = 0; i < 10; i++) {\n      if (inner) { inner[0] = innerMode(mode, state).mode; }\n      var style = mode.token(stream, state);\n      if (stream.pos > stream.start) { return style }\n    }\n    throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n  }\n\n  var Token = function(stream, type, state) {\n    this.start = stream.start; this.end = stream.pos;\n    this.string = stream.current();\n    this.type = type || null;\n    this.state = state;\n  };\n\n  // Utility for getTokenAt and getLineTokens\n  function takeToken(cm, pos, precise, asArray) {\n    var doc = cm.doc, mode = doc.mode, style;\n    pos = clipPos(doc, pos);\n    var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);\n    var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;\n    if (asArray) { tokens = []; }\n    while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n      stream.start = stream.pos;\n      style = readToken(mode, stream, context.state);\n      if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }\n    }\n    return asArray ? tokens : new Token(stream, style, context.state)\n  }\n\n  function extractLineClasses(type, output) {\n    if (type) { for (;;) {\n      var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n      if (!lineClass) { break }\n      type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n      var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n      if (output[prop] == null)\n        { output[prop] = lineClass[2]; }\n      else if (!(new RegExp(\"(?:^|\\\\s)\" + lineClass[2] + \"(?:$|\\\\s)\")).test(output[prop]))\n        { output[prop] += \" \" + lineClass[2]; }\n    } }\n    return type\n  }\n\n  // Run the given mode's parser over a line, calling f for each token.\n  function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n    var flattenSpans = mode.flattenSpans;\n    if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }\n    var curStart = 0, curStyle = null;\n    var stream = new StringStream(text, cm.options.tabSize, context), style;\n    var inner = cm.options.addModeClass && [null];\n    if (text == \"\") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }\n    while (!stream.eol()) {\n      if (stream.pos > cm.options.maxHighlightLength) {\n        flattenSpans = false;\n        if (forceToEnd) { processLine(cm, text, context, stream.pos); }\n        stream.pos = text.length;\n        style = null;\n      } else {\n        style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n      }\n      if (inner) {\n        var mName = inner[0].name;\n        if (mName) { style = \"m-\" + (style ? mName + \" \" + style : mName); }\n      }\n      if (!flattenSpans || curStyle != style) {\n        while (curStart < stream.start) {\n          curStart = Math.min(stream.start, curStart + 5000);\n          f(curStart, curStyle);\n        }\n        curStyle = style;\n      }\n      stream.start = stream.pos;\n    }\n    while (curStart < stream.pos) {\n      // Webkit seems to refuse to render text nodes longer than 57444\n      // characters, and returns inaccurate measurements in nodes\n      // starting around 5000 chars.\n      var pos = Math.min(stream.pos, curStart + 5000);\n      f(pos, curStyle);\n      curStart = pos;\n    }\n  }\n\n  // Finds the line to start with when starting a parse. Tries to\n  // find a line with a stateAfter, so that it can start with a\n  // valid state. If that fails, it returns the line with the\n  // smallest indentation, which tends to need the least context to\n  // parse correctly.\n  function findStartLine(cm, n, precise) {\n    var minindent, minline, doc = cm.doc;\n    var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n    for (var search = n; search > lim; --search) {\n      if (search <= doc.first) { return doc.first }\n      var line = getLine(doc, search - 1), after = line.stateAfter;\n      if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))\n        { return search }\n      var indented = countColumn(line.text, null, cm.options.tabSize);\n      if (minline == null || minindent > indented) {\n        minline = search - 1;\n        minindent = indented;\n      }\n    }\n    return minline\n  }\n\n  function retreatFrontier(doc, n) {\n    doc.modeFrontier = Math.min(doc.modeFrontier, n);\n    if (doc.highlightFrontier < n - 10) { return }\n    var start = doc.first;\n    for (var line = n - 1; line > start; line--) {\n      var saved = getLine(doc, line).stateAfter;\n      // change is on 3\n      // state on line 1 looked ahead 2 -- so saw 3\n      // test 1 + 2 < 3 should cover this\n      if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n        start = line + 1;\n        break\n      }\n    }\n    doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n  }\n\n  // Optimize some code when these features are not used.\n  var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n  function seeReadOnlySpans() {\n    sawReadOnlySpans = true;\n  }\n\n  function seeCollapsedSpans() {\n    sawCollapsedSpans = true;\n  }\n\n  // TEXTMARKER SPANS\n\n  function MarkedSpan(marker, from, to) {\n    this.marker = marker;\n    this.from = from; this.to = to;\n  }\n\n  // Search an array of spans for a span matching the given marker.\n  function getMarkedSpanFor(spans, marker) {\n    if (spans) { for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.marker == marker) { return span }\n    } }\n  }\n  // Remove a span from an array, returning undefined if no spans are\n  // left (we don't store arrays for lines without spans).\n  function removeMarkedSpan(spans, span) {\n    var r;\n    for (var i = 0; i < spans.length; ++i)\n      { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }\n    return r\n  }\n  // Add a span to a line.\n  function addMarkedSpan(line, span) {\n    line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n    span.marker.attachLine(line);\n  }\n\n  // Used for the algorithm that adjusts markers for a change in the\n  // document. These functions cut an array of spans at a given\n  // character position, returning an array of remaining chunks (or\n  // undefined if nothing remains).\n  function markedSpansBefore(old, startCh, isInsert) {\n    var nw;\n    if (old) { for (var i = 0; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n      if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n        var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)\n        ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n      }\n    } }\n    return nw\n  }\n  function markedSpansAfter(old, endCh, isInsert) {\n    var nw;\n    if (old) { for (var i = 0; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n      if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n        var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)\n        ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n                                              span.to == null ? null : span.to - endCh));\n      }\n    } }\n    return nw\n  }\n\n  // Given a change object, compute the new set of marker spans that\n  // cover the line in which the change took place. Removes spans\n  // entirely within the change, reconnects spans belonging to the\n  // same marker that appear on both sides of the change, and cuts off\n  // spans partially within the change. Returns an array of span\n  // arrays with one element for each line in (after) the change.\n  function stretchSpansOverChange(doc, change) {\n    if (change.full) { return null }\n    var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n    var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n    if (!oldFirst && !oldLast) { return null }\n\n    var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n    // Get the spans that 'stick out' on both sides\n    var first = markedSpansBefore(oldFirst, startCh, isInsert);\n    var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n    // Next, merge those two ends\n    var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n    if (first) {\n      // Fix up .to properties of first\n      for (var i = 0; i < first.length; ++i) {\n        var span = first[i];\n        if (span.to == null) {\n          var found = getMarkedSpanFor(last, span.marker);\n          if (!found) { span.to = startCh; }\n          else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }\n        }\n      }\n    }\n    if (last) {\n      // Fix up .from in last (or move them into first in case of sameLine)\n      for (var i$1 = 0; i$1 < last.length; ++i$1) {\n        var span$1 = last[i$1];\n        if (span$1.to != null) { span$1.to += offset; }\n        if (span$1.from == null) {\n          var found$1 = getMarkedSpanFor(first, span$1.marker);\n          if (!found$1) {\n            span$1.from = offset;\n            if (sameLine) { (first || (first = [])).push(span$1); }\n          }\n        } else {\n          span$1.from += offset;\n          if (sameLine) { (first || (first = [])).push(span$1); }\n        }\n      }\n    }\n    // Make sure we didn't create any zero-length spans\n    if (first) { first = clearEmptySpans(first); }\n    if (last && last != first) { last = clearEmptySpans(last); }\n\n    var newMarkers = [first];\n    if (!sameLine) {\n      // Fill gap with whole-line-spans\n      var gap = change.text.length - 2, gapMarkers;\n      if (gap > 0 && first)\n        { for (var i$2 = 0; i$2 < first.length; ++i$2)\n          { if (first[i$2].to == null)\n            { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }\n      for (var i$3 = 0; i$3 < gap; ++i$3)\n        { newMarkers.push(gapMarkers); }\n      newMarkers.push(last);\n    }\n    return newMarkers\n  }\n\n  // Remove spans that are empty and don't have a clearWhenEmpty\n  // option of false.\n  function clearEmptySpans(spans) {\n    for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n        { spans.splice(i--, 1); }\n    }\n    if (!spans.length) { return null }\n    return spans\n  }\n\n  // Used to 'clip' out readOnly ranges when making a change.\n  function removeReadOnlyRanges(doc, from, to) {\n    var markers = null;\n    doc.iter(from.line, to.line + 1, function (line) {\n      if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n        var mark = line.markedSpans[i].marker;\n        if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n          { (markers || (markers = [])).push(mark); }\n      } }\n    });\n    if (!markers) { return null }\n    var parts = [{from: from, to: to}];\n    for (var i = 0; i < markers.length; ++i) {\n      var mk = markers[i], m = mk.find(0);\n      for (var j = 0; j < parts.length; ++j) {\n        var p = parts[j];\n        if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }\n        var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n        if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n          { newParts.push({from: p.from, to: m.from}); }\n        if (dto > 0 || !mk.inclusiveRight && !dto)\n          { newParts.push({from: m.to, to: p.to}); }\n        parts.splice.apply(parts, newParts);\n        j += newParts.length - 3;\n      }\n    }\n    return parts\n  }\n\n  // Connect or disconnect spans from a line.\n  function detachMarkedSpans(line) {\n    var spans = line.markedSpans;\n    if (!spans) { return }\n    for (var i = 0; i < spans.length; ++i)\n      { spans[i].marker.detachLine(line); }\n    line.markedSpans = null;\n  }\n  function attachMarkedSpans(line, spans) {\n    if (!spans) { return }\n    for (var i = 0; i < spans.length; ++i)\n      { spans[i].marker.attachLine(line); }\n    line.markedSpans = spans;\n  }\n\n  // Helpers used when computing which overlapping collapsed span\n  // counts as the larger one.\n  function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\n  function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\n  // Returns a number indicating which of two overlapping collapsed\n  // spans is larger (and thus includes the other). Falls back to\n  // comparing ids when the spans cover exactly the same range.\n  function compareCollapsedMarkers(a, b) {\n    var lenDiff = a.lines.length - b.lines.length;\n    if (lenDiff != 0) { return lenDiff }\n    var aPos = a.find(), bPos = b.find();\n    var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n    if (fromCmp) { return -fromCmp }\n    var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n    if (toCmp) { return toCmp }\n    return b.id - a.id\n  }\n\n  // Find out whether a line ends or starts in a collapsed span. If\n  // so, return the marker for that span.\n  function collapsedSpanAtSide(line, start) {\n    var sps = sawCollapsedSpans && line.markedSpans, found;\n    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n          (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n        { found = sp.marker; }\n    } }\n    return found\n  }\n  function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\n  function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\n  function collapsedSpanAround(line, ch) {\n    var sps = sawCollapsedSpans && line.markedSpans, found;\n    if (sps) { for (var i = 0; i < sps.length; ++i) {\n      var sp = sps[i];\n      if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&\n          (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }\n    } }\n    return found\n  }\n\n  // Test whether there exists a collapsed span that partially\n  // overlaps (covers the start or end, but not both) of a new span.\n  // Such overlap is not allowed.\n  function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n    var line = getLine(doc, lineNo);\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) { for (var i = 0; i < sps.length; ++i) {\n      var sp = sps[i];\n      if (!sp.marker.collapsed) { continue }\n      var found = sp.marker.find(0);\n      var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n      var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n      if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }\n      if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n          fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n        { return true }\n    } }\n  }\n\n  // A visual line is a line as drawn on the screen. Folding, for\n  // example, can cause multiple logical lines to appear on the same\n  // visual line. This finds the start of the visual line that the\n  // given line is part of (usually that is the line itself).\n  function visualLine(line) {\n    var merged;\n    while (merged = collapsedSpanAtStart(line))\n      { line = merged.find(-1, true).line; }\n    return line\n  }\n\n  function visualLineEnd(line) {\n    var merged;\n    while (merged = collapsedSpanAtEnd(line))\n      { line = merged.find(1, true).line; }\n    return line\n  }\n\n  // Returns an array of logical lines that continue the visual line\n  // started by the argument, or undefined if there are no such lines.\n  function visualLineContinued(line) {\n    var merged, lines;\n    while (merged = collapsedSpanAtEnd(line)) {\n      line = merged.find(1, true).line\n      ;(lines || (lines = [])).push(line);\n    }\n    return lines\n  }\n\n  // Get the line number of the start of the visual line that the\n  // given line number is part of.\n  function visualLineNo(doc, lineN) {\n    var line = getLine(doc, lineN), vis = visualLine(line);\n    if (line == vis) { return lineN }\n    return lineNo(vis)\n  }\n\n  // Get the line number of the start of the next visual line after\n  // the given line.\n  function visualLineEndNo(doc, lineN) {\n    if (lineN > doc.lastLine()) { return lineN }\n    var line = getLine(doc, lineN), merged;\n    if (!lineIsHidden(doc, line)) { return lineN }\n    while (merged = collapsedSpanAtEnd(line))\n      { line = merged.find(1, true).line; }\n    return lineNo(line) + 1\n  }\n\n  // Compute whether a line is hidden. Lines count as hidden when they\n  // are part of a visual line that starts with another line, or when\n  // they are entirely covered by collapsed, non-widget span.\n  function lineIsHidden(doc, line) {\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (!sp.marker.collapsed) { continue }\n      if (sp.from == null) { return true }\n      if (sp.marker.widgetNode) { continue }\n      if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n        { return true }\n    } }\n  }\n  function lineIsHiddenInner(doc, line, span) {\n    if (span.to == null) {\n      var end = span.marker.find(1, true);\n      return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))\n    }\n    if (span.marker.inclusiveRight && span.to == line.text.length)\n      { return true }\n    for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {\n      sp = line.markedSpans[i];\n      if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n          (sp.to == null || sp.to != span.from) &&\n          (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n          lineIsHiddenInner(doc, line, sp)) { return true }\n    }\n  }\n\n  // Find the height above the given line.\n  function heightAtLine(lineObj) {\n    lineObj = visualLine(lineObj);\n\n    var h = 0, chunk = lineObj.parent;\n    for (var i = 0; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i];\n      if (line == lineObj) { break }\n      else { h += line.height; }\n    }\n    for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n      for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n        var cur = p.children[i$1];\n        if (cur == chunk) { break }\n        else { h += cur.height; }\n      }\n    }\n    return h\n  }\n\n  // Compute the character length of a line, taking into account\n  // collapsed ranges (see markText) that might hide parts, and join\n  // other lines onto it.\n  function lineLength(line) {\n    if (line.height == 0) { return 0 }\n    var len = line.text.length, merged, cur = line;\n    while (merged = collapsedSpanAtStart(cur)) {\n      var found = merged.find(0, true);\n      cur = found.from.line;\n      len += found.from.ch - found.to.ch;\n    }\n    cur = line;\n    while (merged = collapsedSpanAtEnd(cur)) {\n      var found$1 = merged.find(0, true);\n      len -= cur.text.length - found$1.from.ch;\n      cur = found$1.to.line;\n      len += cur.text.length - found$1.to.ch;\n    }\n    return len\n  }\n\n  // Find the longest line in the document.\n  function findMaxLine(cm) {\n    var d = cm.display, doc = cm.doc;\n    d.maxLine = getLine(doc, doc.first);\n    d.maxLineLength = lineLength(d.maxLine);\n    d.maxLineChanged = true;\n    doc.iter(function (line) {\n      var len = lineLength(line);\n      if (len > d.maxLineLength) {\n        d.maxLineLength = len;\n        d.maxLine = line;\n      }\n    });\n  }\n\n  // LINE DATA STRUCTURE\n\n  // Line objects. These hold state related to a line, including\n  // highlighting info (the styles array).\n  var Line = function(text, markedSpans, estimateHeight) {\n    this.text = text;\n    attachMarkedSpans(this, markedSpans);\n    this.height = estimateHeight ? estimateHeight(this) : 1;\n  };\n\n  Line.prototype.lineNo = function () { return lineNo(this) };\n  eventMixin(Line);\n\n  // Change the content (text, markers) of a line. Automatically\n  // invalidates cached information and tries to re-estimate the\n  // line's height.\n  function updateLine(line, text, markedSpans, estimateHeight) {\n    line.text = text;\n    if (line.stateAfter) { line.stateAfter = null; }\n    if (line.styles) { line.styles = null; }\n    if (line.order != null) { line.order = null; }\n    detachMarkedSpans(line);\n    attachMarkedSpans(line, markedSpans);\n    var estHeight = estimateHeight ? estimateHeight(line) : 1;\n    if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n  }\n\n  // Detach a line from the document tree and its markers.\n  function cleanUpLine(line) {\n    line.parent = null;\n    detachMarkedSpans(line);\n  }\n\n  // Convert a style as returned by a mode (either null, or a string\n  // containing one or more styles) to a CSS style. This is cached,\n  // and also looks for line-wide styles.\n  var styleToClassCache = {}, styleToClassCacheWithMode = {};\n  function interpretTokenStyle(style, options) {\n    if (!style || /^\\s*$/.test(style)) { return null }\n    var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n    return cache[style] ||\n      (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n  }\n\n  // Render the DOM representation of the text of a line. Also builds\n  // up a 'line map', which points at the DOM nodes that represent\n  // specific stretches of text, and is used by the measuring code.\n  // The returned object contains the DOM node, this map, and\n  // information about line-wide styles that were set by the mode.\n  function buildLineContent(cm, lineView) {\n    // The padding-right forces the element to have a 'border', which\n    // is needed on Webkit to be able to get line-level bounding\n    // rectangles for it (in measureChar).\n    var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n    var builder = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n                   col: 0, pos: 0, cm: cm,\n                   trailingSpace: false,\n                   splitSpaces: cm.getOption(\"lineWrapping\")};\n    lineView.measure = {};\n\n    // Iterate over the logical lines that make up this visual line.\n    for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n      var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);\n      builder.pos = 0;\n      builder.addToken = buildToken;\n      // Optionally wire in some hacks into the token-rendering\n      // algorithm, to deal with browser quirks.\n      if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n        { builder.addToken = buildTokenBadBidi(builder.addToken, order); }\n      builder.map = [];\n      var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n      insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n      if (line.styleClasses) {\n        if (line.styleClasses.bgClass)\n          { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\"); }\n        if (line.styleClasses.textClass)\n          { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\"); }\n      }\n\n      // Ensure at least a single node is present, for measuring.\n      if (builder.map.length == 0)\n        { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }\n\n      // Store the map and a cache object for the current logical line\n      if (i == 0) {\n        lineView.measure.map = builder.map;\n        lineView.measure.cache = {};\n      } else {\n  (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)\n        ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});\n      }\n    }\n\n    // See issue #2901\n    if (webkit) {\n      var last = builder.content.lastChild;\n      if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n        { builder.content.className = \"cm-tab-wrap-hack\"; }\n    }\n\n    signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n    if (builder.pre.className)\n      { builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\"); }\n\n    return builder\n  }\n\n  function defaultSpecialCharPlaceholder(ch) {\n    var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n    token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n    token.setAttribute(\"aria-label\", token.title);\n    return token\n  }\n\n  // Build up the DOM representation for a single token, and add it to\n  // the line map. Takes care to render special characters separately.\n  function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n    if (!text) { return }\n    var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n    var special = builder.cm.state.specialChars, mustWrap = false;\n    var content;\n    if (!special.test(text)) {\n      builder.col += text.length;\n      content = document.createTextNode(displayText);\n      builder.map.push(builder.pos, builder.pos + text.length, content);\n      if (ie && ie_version < 9) { mustWrap = true; }\n      builder.pos += text.length;\n    } else {\n      content = document.createDocumentFragment();\n      var pos = 0;\n      while (true) {\n        special.lastIndex = pos;\n        var m = special.exec(text);\n        var skipped = m ? m.index - pos : text.length - pos;\n        if (skipped) {\n          var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n          if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt])); }\n          else { content.appendChild(txt); }\n          builder.map.push(builder.pos, builder.pos + skipped, txt);\n          builder.col += skipped;\n          builder.pos += skipped;\n        }\n        if (!m) { break }\n        pos += skipped + 1;\n        var txt$1 = (void 0);\n        if (m[0] == \"\\t\") {\n          var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n          txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n          txt$1.setAttribute(\"role\", \"presentation\");\n          txt$1.setAttribute(\"cm-text\", \"\\t\");\n          builder.col += tabWidth;\n        } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n          txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n          txt$1.setAttribute(\"cm-text\", m[0]);\n          builder.col += 1;\n        } else {\n          txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n          txt$1.setAttribute(\"cm-text\", m[0]);\n          if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt$1])); }\n          else { content.appendChild(txt$1); }\n          builder.col += 1;\n        }\n        builder.map.push(builder.pos, builder.pos + 1, txt$1);\n        builder.pos++;\n      }\n    }\n    builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n    if (style || startStyle || endStyle || mustWrap || css || attributes) {\n      var fullStyle = style || \"\";\n      if (startStyle) { fullStyle += startStyle; }\n      if (endStyle) { fullStyle += endStyle; }\n      var token = elt(\"span\", [content], fullStyle, css);\n      if (attributes) {\n        for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\")\n          { token.setAttribute(attr, attributes[attr]); } }\n      }\n      return builder.content.appendChild(token)\n    }\n    builder.content.appendChild(content);\n  }\n\n  // Change some spaces to NBSP to prevent the browser from collapsing\n  // trailing spaces at the end of a line when rendering text (issue #1362).\n  function splitSpaces(text, trailingBefore) {\n    if (text.length > 1 && !/  /.test(text)) { return text }\n    var spaceBefore = trailingBefore, result = \"\";\n    for (var i = 0; i < text.length; i++) {\n      var ch = text.charAt(i);\n      if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n        { ch = \"\\u00a0\"; }\n      result += ch;\n      spaceBefore = ch == \" \";\n    }\n    return result\n  }\n\n  // Work around nonsense dimensions being reported for stretches of\n  // right-to-left text.\n  function buildTokenBadBidi(inner, order) {\n    return function (builder, text, style, startStyle, endStyle, css, attributes) {\n      style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n      var start = builder.pos, end = start + text.length;\n      for (;;) {\n        // Find the part that overlaps with the start of this text\n        var part = (void 0);\n        for (var i = 0; i < order.length; i++) {\n          part = order[i];\n          if (part.to > start && part.from <= start) { break }\n        }\n        if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }\n        inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n        startStyle = null;\n        text = text.slice(part.to - start);\n        start = part.to;\n      }\n    }\n  }\n\n  function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n    var widget = !ignoreWidget && marker.widgetNode;\n    if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }\n    if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n      if (!widget)\n        { widget = builder.content.appendChild(document.createElement(\"span\")); }\n      widget.setAttribute(\"cm-marker\", marker.id);\n    }\n    if (widget) {\n      builder.cm.display.input.setUneditable(widget);\n      builder.content.appendChild(widget);\n    }\n    builder.pos += size;\n    builder.trailingSpace = false;\n  }\n\n  // Outputs a number of spans to make up a line, taking highlighting\n  // and marked text into account.\n  function insertLineContent(line, builder, styles) {\n    var spans = line.markedSpans, allText = line.text, at = 0;\n    if (!spans) {\n      for (var i$1 = 1; i$1 < styles.length; i$1+=2)\n        { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }\n      return\n    }\n\n    var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n    var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;\n    for (;;) {\n      if (nextChange == pos) { // Update current marker set\n        spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n        attributes = null;\n        collapsed = null; nextChange = Infinity;\n        var foundBookmarks = [], endStyles = (void 0);\n        for (var j = 0; j < spans.length; ++j) {\n          var sp = spans[j], m = sp.marker;\n          if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n            foundBookmarks.push(m);\n          } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n            if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n              nextChange = sp.to;\n              spanEndStyle = \"\";\n            }\n            if (m.className) { spanStyle += \" \" + m.className; }\n            if (m.css) { css = (css ? css + \";\" : \"\") + m.css; }\n            if (m.startStyle && sp.from == pos) { spanStartStyle += \" \" + m.startStyle; }\n            if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }\n            // support for the old title property\n            // https://github.com/codemirror/CodeMirror/pull/5673\n            if (m.title) { (attributes || (attributes = {})).title = m.title; }\n            if (m.attributes) {\n              for (var attr in m.attributes)\n                { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }\n            }\n            if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n              { collapsed = sp; }\n          } else if (sp.from > pos && nextChange > sp.from) {\n            nextChange = sp.from;\n          }\n        }\n        if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)\n          { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += \" \" + endStyles[j$1]; } } }\n\n        if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)\n          { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }\n        if (collapsed && (collapsed.from || 0) == pos) {\n          buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n                             collapsed.marker, collapsed.from == null);\n          if (collapsed.to == null) { return }\n          if (collapsed.to == pos) { collapsed = false; }\n        }\n      }\n      if (pos >= len) { break }\n\n      var upto = Math.min(len, nextChange);\n      while (true) {\n        if (text) {\n          var end = pos + text.length;\n          if (!collapsed) {\n            var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n            builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n                             spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n          }\n          if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n          pos = end;\n          spanStartStyle = \"\";\n        }\n        text = allText.slice(at, at = styles[i++]);\n        style = interpretTokenStyle(styles[i++], builder.cm.options);\n      }\n    }\n  }\n\n\n  // These objects are used to represent the visible (currently drawn)\n  // part of the document. A LineView may correspond to multiple\n  // logical lines, if those are connected by collapsed ranges.\n  function LineView(doc, line, lineN) {\n    // The starting line\n    this.line = line;\n    // Continuing lines, if any\n    this.rest = visualLineContinued(line);\n    // Number of logical lines in this visual line\n    this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n    this.node = this.text = null;\n    this.hidden = lineIsHidden(doc, line);\n  }\n\n  // Create a range of LineView objects for the given lines.\n  function buildViewArray(cm, from, to) {\n    var array = [], nextPos;\n    for (var pos = from; pos < to; pos = nextPos) {\n      var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n      nextPos = pos + view.size;\n      array.push(view);\n    }\n    return array\n  }\n\n  var operationGroup = null;\n\n  function pushOperation(op) {\n    if (operationGroup) {\n      operationGroup.ops.push(op);\n    } else {\n      op.ownsGroup = operationGroup = {\n        ops: [op],\n        delayedCallbacks: []\n      };\n    }\n  }\n\n  function fireCallbacksForOps(group) {\n    // Calls delayed callbacks and cursorActivity handlers until no\n    // new ones appear\n    var callbacks = group.delayedCallbacks, i = 0;\n    do {\n      for (; i < callbacks.length; i++)\n        { callbacks[i].call(null); }\n      for (var j = 0; j < group.ops.length; j++) {\n        var op = group.ops[j];\n        if (op.cursorActivityHandlers)\n          { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n            { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }\n      }\n    } while (i < callbacks.length)\n  }\n\n  function finishOperation(op, endCb) {\n    var group = op.ownsGroup;\n    if (!group) { return }\n\n    try { fireCallbacksForOps(group); }\n    finally {\n      operationGroup = null;\n      endCb(group);\n    }\n  }\n\n  var orphanDelayedCallbacks = null;\n\n  // Often, we want to signal events at a point where we are in the\n  // middle of some work, but don't want the handler to start calling\n  // other methods on the editor, which might be in an inconsistent\n  // state or simply not expect any other events to happen.\n  // signalLater looks whether there are any handlers, and schedules\n  // them to be executed when the last operation ends, or, if no\n  // operation is active, when a timeout fires.\n  function signalLater(emitter, type /*, values...*/) {\n    var arr = getHandlers(emitter, type);\n    if (!arr.length) { return }\n    var args = Array.prototype.slice.call(arguments, 2), list;\n    if (operationGroup) {\n      list = operationGroup.delayedCallbacks;\n    } else if (orphanDelayedCallbacks) {\n      list = orphanDelayedCallbacks;\n    } else {\n      list = orphanDelayedCallbacks = [];\n      setTimeout(fireOrphanDelayed, 0);\n    }\n    var loop = function ( i ) {\n      list.push(function () { return arr[i].apply(null, args); });\n    };\n\n    for (var i = 0; i < arr.length; ++i)\n      loop( i );\n  }\n\n  function fireOrphanDelayed() {\n    var delayed = orphanDelayedCallbacks;\n    orphanDelayedCallbacks = null;\n    for (var i = 0; i < delayed.length; ++i) { delayed[i](); }\n  }\n\n  // When an aspect of a line changes, a string is added to\n  // lineView.changes. This updates the relevant part of the line's\n  // DOM structure.\n  function updateLineForChanges(cm, lineView, lineN, dims) {\n    for (var j = 0; j < lineView.changes.length; j++) {\n      var type = lineView.changes[j];\n      if (type == \"text\") { updateLineText(cm, lineView); }\n      else if (type == \"gutter\") { updateLineGutter(cm, lineView, lineN, dims); }\n      else if (type == \"class\") { updateLineClasses(cm, lineView); }\n      else if (type == \"widget\") { updateLineWidgets(cm, lineView, dims); }\n    }\n    lineView.changes = null;\n  }\n\n  // Lines with gutter elements, widgets or a background class need to\n  // be wrapped, and have the extra elements added to the wrapper div\n  function ensureLineWrapped(lineView) {\n    if (lineView.node == lineView.text) {\n      lineView.node = elt(\"div\", null, null, \"position: relative\");\n      if (lineView.text.parentNode)\n        { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }\n      lineView.node.appendChild(lineView.text);\n      if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }\n    }\n    return lineView.node\n  }\n\n  function updateLineBackground(cm, lineView) {\n    var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n    if (cls) { cls += \" CodeMirror-linebackground\"; }\n    if (lineView.background) {\n      if (cls) { lineView.background.className = cls; }\n      else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n    } else if (cls) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n      cm.display.input.setUneditable(lineView.background);\n    }\n  }\n\n  // Wrapper around buildLineContent which will reuse the structure\n  // in display.externalMeasured when possible.\n  function getLineContent(cm, lineView) {\n    var ext = cm.display.externalMeasured;\n    if (ext && ext.line == lineView.line) {\n      cm.display.externalMeasured = null;\n      lineView.measure = ext.measure;\n      return ext.built\n    }\n    return buildLineContent(cm, lineView)\n  }\n\n  // Redraw the line's text. Interacts with the background and text\n  // classes because the mode may output tokens that influence these\n  // classes.\n  function updateLineText(cm, lineView) {\n    var cls = lineView.text.className;\n    var built = getLineContent(cm, lineView);\n    if (lineView.text == lineView.node) { lineView.node = built.pre; }\n    lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n    lineView.text = built.pre;\n    if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n      lineView.bgClass = built.bgClass;\n      lineView.textClass = built.textClass;\n      updateLineClasses(cm, lineView);\n    } else if (cls) {\n      lineView.text.className = cls;\n    }\n  }\n\n  function updateLineClasses(cm, lineView) {\n    updateLineBackground(cm, lineView);\n    if (lineView.line.wrapClass)\n      { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }\n    else if (lineView.node != lineView.text)\n      { lineView.node.className = \"\"; }\n    var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n    lineView.text.className = textClass || \"\";\n  }\n\n  function updateLineGutter(cm, lineView, lineN, dims) {\n    if (lineView.gutter) {\n      lineView.node.removeChild(lineView.gutter);\n      lineView.gutter = null;\n    }\n    if (lineView.gutterBackground) {\n      lineView.node.removeChild(lineView.gutterBackground);\n      lineView.gutterBackground = null;\n    }\n    if (lineView.line.gutterClass) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n                                      (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + (dims.gutterTotalWidth) + \"px\"));\n      cm.display.input.setUneditable(lineView.gutterBackground);\n      wrap.insertBefore(lineView.gutterBackground, lineView.text);\n    }\n    var markers = lineView.line.gutterMarkers;\n    if (cm.options.lineNumbers || markers) {\n      var wrap$1 = ensureLineWrapped(lineView);\n      var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"));\n      cm.display.input.setUneditable(gutterWrap);\n      wrap$1.insertBefore(gutterWrap, lineView.text);\n      if (lineView.line.gutterClass)\n        { gutterWrap.className += \" \" + lineView.line.gutterClass; }\n      if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n        { lineView.lineNumber = gutterWrap.appendChild(\n          elt(\"div\", lineNumberFor(cm.options, lineN),\n              \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n              (\"left: \" + (dims.gutterLeft[\"CodeMirror-linenumbers\"]) + \"px; width: \" + (cm.display.lineNumInnerWidth) + \"px\"))); }\n      if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {\n        var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id];\n        if (found)\n          { gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n                                     (\"left: \" + (dims.gutterLeft[id]) + \"px; width: \" + (dims.gutterWidth[id]) + \"px\"))); }\n      } }\n    }\n  }\n\n  function updateLineWidgets(cm, lineView, dims) {\n    if (lineView.alignable) { lineView.alignable = null; }\n    var isWidget = classTest(\"CodeMirror-linewidget\");\n    for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {\n      next = node.nextSibling;\n      if (isWidget.test(node.className)) { lineView.node.removeChild(node); }\n    }\n    insertLineWidgets(cm, lineView, dims);\n  }\n\n  // Build a line's DOM representation from scratch\n  function buildLineElement(cm, lineView, lineN, dims) {\n    var built = getLineContent(cm, lineView);\n    lineView.text = lineView.node = built.pre;\n    if (built.bgClass) { lineView.bgClass = built.bgClass; }\n    if (built.textClass) { lineView.textClass = built.textClass; }\n\n    updateLineClasses(cm, lineView);\n    updateLineGutter(cm, lineView, lineN, dims);\n    insertLineWidgets(cm, lineView, dims);\n    return lineView.node\n  }\n\n  // A lineView may contain multiple logical lines (when merged by\n  // collapsed spans). The widgets for all of them need to be drawn.\n  function insertLineWidgets(cm, lineView, dims) {\n    insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n    if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n      { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }\n  }\n\n  function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n    if (!line.widgets) { return }\n    var wrap = ensureLineWrapped(lineView);\n    for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n      var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\" + (widget.className ? \" \" + widget.className : \"\"));\n      if (!widget.handleMouseEvents) { node.setAttribute(\"cm-ignore-events\", \"true\"); }\n      positionLineWidget(widget, node, lineView, dims);\n      cm.display.input.setUneditable(node);\n      if (allowAbove && widget.above)\n        { wrap.insertBefore(node, lineView.gutter || lineView.text); }\n      else\n        { wrap.appendChild(node); }\n      signalLater(widget, \"redraw\");\n    }\n  }\n\n  function positionLineWidget(widget, node, lineView, dims) {\n    if (widget.noHScroll) {\n  (lineView.alignable || (lineView.alignable = [])).push(node);\n      var width = dims.wrapperWidth;\n      node.style.left = dims.fixedPos + \"px\";\n      if (!widget.coverGutter) {\n        width -= dims.gutterTotalWidth;\n        node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n      }\n      node.style.width = width + \"px\";\n    }\n    if (widget.coverGutter) {\n      node.style.zIndex = 5;\n      node.style.position = \"relative\";\n      if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + \"px\"; }\n    }\n  }\n\n  function widgetHeight(widget) {\n    if (widget.height != null) { return widget.height }\n    var cm = widget.doc.cm;\n    if (!cm) { return 0 }\n    if (!contains(document.body, widget.node)) {\n      var parentStyle = \"position: relative;\";\n      if (widget.coverGutter)\n        { parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"; }\n      if (widget.noHScroll)\n        { parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"; }\n      removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n    }\n    return widget.height = widget.node.parentNode.offsetHeight\n  }\n\n  // Return true when the given mouse event happened in a widget\n  function eventInWidget(display, e) {\n    for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n      if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n          (n.parentNode == display.sizer && n != display.mover))\n        { return true }\n    }\n  }\n\n  // POSITION MEASUREMENT\n\n  function paddingTop(display) {return display.lineSpace.offsetTop}\n  function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\n  function paddingH(display) {\n    if (display.cachedPaddingH) { return display.cachedPaddingH }\n    var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\", \"CodeMirror-line-like\"));\n    var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n    var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n    if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }\n    return data\n  }\n\n  function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\n  function displayWidth(cm) {\n    return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n  }\n  function displayHeight(cm) {\n    return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n  }\n\n  // Ensure the lineView.wrapping.heights array is populated. This is\n  // an array of bottom offsets for the lines that make up a drawn\n  // line. When lineWrapping is on, there might be more than one\n  // height.\n  function ensureLineHeights(cm, lineView, rect) {\n    var wrapping = cm.options.lineWrapping;\n    var curWidth = wrapping && displayWidth(cm);\n    if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n      var heights = lineView.measure.heights = [];\n      if (wrapping) {\n        lineView.measure.width = curWidth;\n        var rects = lineView.text.firstChild.getClientRects();\n        for (var i = 0; i < rects.length - 1; i++) {\n          var cur = rects[i], next = rects[i + 1];\n          if (Math.abs(cur.bottom - next.bottom) > 2)\n            { heights.push((cur.bottom + next.top) / 2 - rect.top); }\n        }\n      }\n      heights.push(rect.bottom - rect.top);\n    }\n  }\n\n  // Find a line map (mapping character offsets to text nodes) and a\n  // measurement cache for the given line number. (A line view might\n  // contain multiple lines when collapsed ranges are present.)\n  function mapFromLineView(lineView, line, lineN) {\n    if (lineView.line == line)\n      { return {map: lineView.measure.map, cache: lineView.measure.cache} }\n    for (var i = 0; i < lineView.rest.length; i++)\n      { if (lineView.rest[i] == line)\n        { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }\n    for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)\n      { if (lineNo(lineView.rest[i$1]) > lineN)\n        { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }\n  }\n\n  // Render a line into the hidden node display.externalMeasured. Used\n  // when measurement is needed for a line that's not in the viewport.\n  function updateExternalMeasurement(cm, line) {\n    line = visualLine(line);\n    var lineN = lineNo(line);\n    var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n    view.lineN = lineN;\n    var built = view.built = buildLineContent(cm, view);\n    view.text = built.pre;\n    removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n    return view\n  }\n\n  // Get a {top, bottom, left, right} box (in line-local coordinates)\n  // for a given character.\n  function measureChar(cm, line, ch, bias) {\n    return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n  }\n\n  // Find a line view that corresponds to the given line number.\n  function findViewForLine(cm, lineN) {\n    if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n      { return cm.display.view[findViewIndex(cm, lineN)] }\n    var ext = cm.display.externalMeasured;\n    if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n      { return ext }\n  }\n\n  // Measurement can be split in two steps, the set-up work that\n  // applies to the whole line, and the measurement of the actual\n  // character. Functions like coordsChar, that need to do a lot of\n  // measurements in a row, can thus ensure that the set-up work is\n  // only done once.\n  function prepareMeasureForLine(cm, line) {\n    var lineN = lineNo(line);\n    var view = findViewForLine(cm, lineN);\n    if (view && !view.text) {\n      view = null;\n    } else if (view && view.changes) {\n      updateLineForChanges(cm, view, lineN, getDimensions(cm));\n      cm.curOp.forceUpdate = true;\n    }\n    if (!view)\n      { view = updateExternalMeasurement(cm, line); }\n\n    var info = mapFromLineView(view, line, lineN);\n    return {\n      line: line, view: view, rect: null,\n      map: info.map, cache: info.cache, before: info.before,\n      hasHeights: false\n    }\n  }\n\n  // Given a prepared measurement object, measures the position of an\n  // actual character (or fetches it from the cache).\n  function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n    if (prepared.before) { ch = -1; }\n    var key = ch + (bias || \"\"), found;\n    if (prepared.cache.hasOwnProperty(key)) {\n      found = prepared.cache[key];\n    } else {\n      if (!prepared.rect)\n        { prepared.rect = prepared.view.text.getBoundingClientRect(); }\n      if (!prepared.hasHeights) {\n        ensureLineHeights(cm, prepared.view, prepared.rect);\n        prepared.hasHeights = true;\n      }\n      found = measureCharInner(cm, prepared, ch, bias);\n      if (!found.bogus) { prepared.cache[key] = found; }\n    }\n    return {left: found.left, right: found.right,\n            top: varHeight ? found.rtop : found.top,\n            bottom: varHeight ? found.rbottom : found.bottom}\n  }\n\n  var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n  function nodeAndOffsetInLineMap(map, ch, bias) {\n    var node, start, end, collapse, mStart, mEnd;\n    // First, search the line map for the text node corresponding to,\n    // or closest to, the target character.\n    for (var i = 0; i < map.length; i += 3) {\n      mStart = map[i];\n      mEnd = map[i + 1];\n      if (ch < mStart) {\n        start = 0; end = 1;\n        collapse = \"left\";\n      } else if (ch < mEnd) {\n        start = ch - mStart;\n        end = start + 1;\n      } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n        end = mEnd - mStart;\n        start = end - 1;\n        if (ch >= mEnd) { collapse = \"right\"; }\n      }\n      if (start != null) {\n        node = map[i + 2];\n        if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n          { collapse = bias; }\n        if (bias == \"left\" && start == 0)\n          { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n            node = map[(i -= 3) + 2];\n            collapse = \"left\";\n          } }\n        if (bias == \"right\" && start == mEnd - mStart)\n          { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n            node = map[(i += 3) + 2];\n            collapse = \"right\";\n          } }\n        break\n      }\n    }\n    return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n  }\n\n  function getUsefulRect(rects, bias) {\n    var rect = nullRect;\n    if (bias == \"left\") { for (var i = 0; i < rects.length; i++) {\n      if ((rect = rects[i]).left != rect.right) { break }\n    } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n      if ((rect = rects[i$1]).left != rect.right) { break }\n    } }\n    return rect\n  }\n\n  function measureCharInner(cm, prepared, ch, bias) {\n    var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n    var node = place.node, start = place.start, end = place.end, collapse = place.collapse;\n\n    var rect;\n    if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n      for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n        while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }\n        while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }\n        if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n          { rect = node.parentNode.getBoundingClientRect(); }\n        else\n          { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }\n        if (rect.left || rect.right || start == 0) { break }\n        end = start;\n        start = start - 1;\n        collapse = \"right\";\n      }\n      if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }\n    } else { // If it is a widget, simply get the box for the whole widget.\n      if (start > 0) { collapse = bias = \"right\"; }\n      var rects;\n      if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n        { rect = rects[bias == \"right\" ? rects.length - 1 : 0]; }\n      else\n        { rect = node.getBoundingClientRect(); }\n    }\n    if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n      var rSpan = node.parentNode.getClientRects()[0];\n      if (rSpan)\n        { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }\n      else\n        { rect = nullRect; }\n    }\n\n    var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n    var mid = (rtop + rbot) / 2;\n    var heights = prepared.view.measure.heights;\n    var i = 0;\n    for (; i < heights.length - 1; i++)\n      { if (mid < heights[i]) { break } }\n    var top = i ? heights[i - 1] : 0, bot = heights[i];\n    var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n                  right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n                  top: top, bottom: bot};\n    if (!rect.left && !rect.right) { result.bogus = true; }\n    if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n    return result\n  }\n\n  // Work around problem with bounding client rects on ranges being\n  // returned incorrectly when zoomed on IE10 and below.\n  function maybeUpdateRectForZooming(measure, rect) {\n    if (!window.screen || screen.logicalXDPI == null ||\n        screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n      { return rect }\n    var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n    var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n    return {left: rect.left * scaleX, right: rect.right * scaleX,\n            top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n  }\n\n  function clearLineMeasurementCacheFor(lineView) {\n    if (lineView.measure) {\n      lineView.measure.cache = {};\n      lineView.measure.heights = null;\n      if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n        { lineView.measure.caches[i] = {}; } }\n    }\n  }\n\n  function clearLineMeasurementCache(cm) {\n    cm.display.externalMeasure = null;\n    removeChildren(cm.display.lineMeasure);\n    for (var i = 0; i < cm.display.view.length; i++)\n      { clearLineMeasurementCacheFor(cm.display.view[i]); }\n  }\n\n  function clearCaches(cm) {\n    clearLineMeasurementCache(cm);\n    cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n    if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }\n    cm.display.lineNumChars = null;\n  }\n\n  function pageScrollX() {\n    // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n    // which causes page_Offset and bounding client rects to use\n    // different reference viewports and invalidate our calculations.\n    if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }\n    return window.pageXOffset || (document.documentElement || document.body).scrollLeft\n  }\n  function pageScrollY() {\n    if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }\n    return window.pageYOffset || (document.documentElement || document.body).scrollTop\n  }\n\n  function widgetTopHeight(lineObj) {\n    var height = 0;\n    if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)\n      { height += widgetHeight(lineObj.widgets[i]); } } }\n    return height\n  }\n\n  // Converts a {top, bottom, left, right} box from line-local\n  // coordinates into another coordinate system. Context may be one of\n  // \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n  // or \"page\".\n  function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n    if (!includeWidgets) {\n      var height = widgetTopHeight(lineObj);\n      rect.top += height; rect.bottom += height;\n    }\n    if (context == \"line\") { return rect }\n    if (!context) { context = \"local\"; }\n    var yOff = heightAtLine(lineObj);\n    if (context == \"local\") { yOff += paddingTop(cm.display); }\n    else { yOff -= cm.display.viewOffset; }\n    if (context == \"page\" || context == \"window\") {\n      var lOff = cm.display.lineSpace.getBoundingClientRect();\n      yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n      var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n      rect.left += xOff; rect.right += xOff;\n    }\n    rect.top += yOff; rect.bottom += yOff;\n    return rect\n  }\n\n  // Coverts a box from \"div\" coords to another coordinate system.\n  // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n  function fromCoordSystem(cm, coords, context) {\n    if (context == \"div\") { return coords }\n    var left = coords.left, top = coords.top;\n    // First move into \"page\" coordinate system\n    if (context == \"page\") {\n      left -= pageScrollX();\n      top -= pageScrollY();\n    } else if (context == \"local\" || !context) {\n      var localBox = cm.display.sizer.getBoundingClientRect();\n      left += localBox.left;\n      top += localBox.top;\n    }\n\n    var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n    return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n  }\n\n  function charCoords(cm, pos, context, lineObj, bias) {\n    if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }\n    return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n  }\n\n  // Returns a box for a given cursor position, which may have an\n  // 'other' property containing the position of the secondary cursor\n  // on a bidi boundary.\n  // A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n  // and after `char - 1` in writing order of `char - 1`\n  // A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n  // and before `char` in writing order of `char`\n  // Examples (upper-case letters are RTL, lower-case are LTR):\n  //     Pos(0, 1, ...)\n  //     before   after\n  // ab     a|b     a|b\n  // aB     a|B     aB|\n  // Ab     |Ab     A|b\n  // AB     B|A     B|A\n  // Every position after the last character on a line is considered to stick\n  // to the last character on the line.\n  function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n    lineObj = lineObj || getLine(cm.doc, pos.line);\n    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n    function get(ch, right) {\n      var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n      if (right) { m.left = m.right; } else { m.right = m.left; }\n      return intoCoordSystem(cm, lineObj, m, context)\n    }\n    var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;\n    if (ch >= lineObj.text.length) {\n      ch = lineObj.text.length;\n      sticky = \"before\";\n    } else if (ch <= 0) {\n      ch = 0;\n      sticky = \"after\";\n    }\n    if (!order) { return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\") }\n\n    function getBidi(ch, partPos, invert) {\n      var part = order[partPos], right = part.level == 1;\n      return get(invert ? ch - 1 : ch, right != invert)\n    }\n    var partPos = getBidiPartAt(order, ch, sticky);\n    var other = bidiOther;\n    var val = getBidi(ch, partPos, sticky == \"before\");\n    if (other != null) { val.other = getBidi(ch, other, sticky != \"before\"); }\n    return val\n  }\n\n  // Used to cheaply estimate the coordinates for a position. Used for\n  // intermediate scroll updates.\n  function estimateCoords(cm, pos) {\n    var left = 0;\n    pos = clipPos(cm.doc, pos);\n    if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }\n    var lineObj = getLine(cm.doc, pos.line);\n    var top = heightAtLine(lineObj) + paddingTop(cm.display);\n    return {left: left, right: left, top: top, bottom: top + lineObj.height}\n  }\n\n  // Positions returned by coordsChar contain some extra information.\n  // xRel is the relative x position of the input coordinates compared\n  // to the found position (so xRel > 0 means the coordinates are to\n  // the right of the character position, for example). When outside\n  // is true, that means the coordinates lie outside the line's\n  // vertical range.\n  function PosWithInfo(line, ch, sticky, outside, xRel) {\n    var pos = Pos(line, ch, sticky);\n    pos.xRel = xRel;\n    if (outside) { pos.outside = outside; }\n    return pos\n  }\n\n  // Compute the character position closest to the given coordinates.\n  // Input must be lineSpace-local (\"div\" coordinate system).\n  function coordsChar(cm, x, y) {\n    var doc = cm.doc;\n    y += cm.display.viewOffset;\n    if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) }\n    var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n    if (lineN > last)\n      { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) }\n    if (x < 0) { x = 0; }\n\n    var lineObj = getLine(doc, lineN);\n    for (;;) {\n      var found = coordsCharInner(cm, lineObj, lineN, x, y);\n      var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));\n      if (!collapsed) { return found }\n      var rangeEnd = collapsed.find(1);\n      if (rangeEnd.line == lineN) { return rangeEnd }\n      lineObj = getLine(doc, lineN = rangeEnd.line);\n    }\n  }\n\n  function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n    y -= widgetTopHeight(lineObj);\n    var end = lineObj.text.length;\n    var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);\n    end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);\n    return {begin: begin, end: end}\n  }\n\n  function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n    var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n    return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n  }\n\n  // Returns true if the given side of a box is after the given\n  // coordinates, in top-to-bottom, left-to-right order.\n  function boxIsAfter(box, x, y, left) {\n    return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x\n  }\n\n  function coordsCharInner(cm, lineObj, lineNo, x, y) {\n    // Move y into line-local coordinate space\n    y -= heightAtLine(lineObj);\n    var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n    // When directly calling `measureCharPrepared`, we have to adjust\n    // for the widgets at this line.\n    var widgetHeight = widgetTopHeight(lineObj);\n    var begin = 0, end = lineObj.text.length, ltr = true;\n\n    var order = getOrder(lineObj, cm.doc.direction);\n    // If the line isn't plain left-to-right text, first figure out\n    // which bidi section the coordinates fall into.\n    if (order) {\n      var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)\n                   (cm, lineObj, lineNo, preparedMeasure, order, x, y);\n      ltr = part.level != 1;\n      // The awkward -1 offsets are needed because findFirst (called\n      // on these below) will treat its first bound as inclusive,\n      // second as exclusive, but we want to actually address the\n      // characters in the part's range\n      begin = ltr ? part.from : part.to - 1;\n      end = ltr ? part.to : part.from - 1;\n    }\n\n    // A binary search to find the first character whose bounding box\n    // starts after the coordinates. If we run across any whose box wrap\n    // the coordinates, store that.\n    var chAround = null, boxAround = null;\n    var ch = findFirst(function (ch) {\n      var box = measureCharPrepared(cm, preparedMeasure, ch);\n      box.top += widgetHeight; box.bottom += widgetHeight;\n      if (!boxIsAfter(box, x, y, false)) { return false }\n      if (box.top <= y && box.left <= x) {\n        chAround = ch;\n        boxAround = box;\n      }\n      return true\n    }, begin, end);\n\n    var baseX, sticky, outside = false;\n    // If a box around the coordinates was found, use that\n    if (boxAround) {\n      // Distinguish coordinates nearer to the left or right side of the box\n      var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;\n      ch = chAround + (atStart ? 0 : 1);\n      sticky = atStart ? \"after\" : \"before\";\n      baseX = atLeft ? boxAround.left : boxAround.right;\n    } else {\n      // (Adjust for extended bound, if necessary.)\n      if (!ltr && (ch == end || ch == begin)) { ch++; }\n      // To determine which side to associate with, get the box to the\n      // left of the character and compare it's vertical position to the\n      // coordinates\n      sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" :\n        (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ?\n        \"after\" : \"before\";\n      // Now get accurate coordinates for this place, in order to get a\n      // base X position\n      var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), \"line\", lineObj, preparedMeasure);\n      baseX = coords.left;\n      outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;\n    }\n\n    ch = skipExtendingChars(lineObj.text, ch, 1);\n    return PosWithInfo(lineNo, ch, sticky, outside, x - baseX)\n  }\n\n  function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {\n    // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n    // situation, we can take this ordering to correspond to the visual\n    // ordering. This finds the first part whose end is after the given\n    // coordinates.\n    var index = findFirst(function (i) {\n      var part = order[i], ltr = part.level != 1;\n      return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"),\n                                     \"line\", lineObj, preparedMeasure), x, y, true)\n    }, 0, order.length - 1);\n    var part = order[index];\n    // If this isn't the first part, the part's start is also after\n    // the coordinates, and the coordinates aren't on the same line as\n    // that start, move one part back.\n    if (index > 0) {\n      var ltr = part.level != 1;\n      var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"),\n                               \"line\", lineObj, preparedMeasure);\n      if (boxIsAfter(start, x, y, true) && start.top > y)\n        { part = order[index - 1]; }\n    }\n    return part\n  }\n\n  function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n    // In a wrapped line, rtl text on wrapping boundaries can do things\n    // that don't correspond to the ordering in our `order` array at\n    // all, so a binary search doesn't work, and we want to return a\n    // part that only spans one line so that the binary search in\n    // coordsCharInner is safe. As such, we first find the extent of the\n    // wrapped line, and then do a flat search in which we discard any\n    // spans that aren't on the line.\n    var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n    var begin = ref.begin;\n    var end = ref.end;\n    if (/\\s/.test(lineObj.text.charAt(end - 1))) { end--; }\n    var part = null, closestDist = null;\n    for (var i = 0; i < order.length; i++) {\n      var p = order[i];\n      if (p.from >= end || p.to <= begin) { continue }\n      var ltr = p.level != 1;\n      var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\n      // Weigh against spans ending before this, so that they are only\n      // picked if nothing ends after\n      var dist = endX < x ? x - endX + 1e9 : endX - x;\n      if (!part || closestDist > dist) {\n        part = p;\n        closestDist = dist;\n      }\n    }\n    if (!part) { part = order[order.length - 1]; }\n    // Clip the part to the wrapped line.\n    if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }\n    if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }\n    return part\n  }\n\n  var measureText;\n  // Compute the default text height.\n  function textHeight(display) {\n    if (display.cachedTextHeight != null) { return display.cachedTextHeight }\n    if (measureText == null) {\n      measureText = elt(\"pre\", null, \"CodeMirror-line-like\");\n      // Measure a bunch of lines, for browsers that compute\n      // fractional heights.\n      for (var i = 0; i < 49; ++i) {\n        measureText.appendChild(document.createTextNode(\"x\"));\n        measureText.appendChild(elt(\"br\"));\n      }\n      measureText.appendChild(document.createTextNode(\"x\"));\n    }\n    removeChildrenAndAdd(display.measure, measureText);\n    var height = measureText.offsetHeight / 50;\n    if (height > 3) { display.cachedTextHeight = height; }\n    removeChildren(display.measure);\n    return height || 1\n  }\n\n  // Compute the default character width.\n  function charWidth(display) {\n    if (display.cachedCharWidth != null) { return display.cachedCharWidth }\n    var anchor = elt(\"span\", \"xxxxxxxxxx\");\n    var pre = elt(\"pre\", [anchor], \"CodeMirror-line-like\");\n    removeChildrenAndAdd(display.measure, pre);\n    var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n    if (width > 2) { display.cachedCharWidth = width; }\n    return width || 10\n  }\n\n  // Do a bulk-read of the DOM positions and sizes needed to draw the\n  // view, so that we don't interleave reading and writing to the DOM.\n  function getDimensions(cm) {\n    var d = cm.display, left = {}, width = {};\n    var gutterLeft = d.gutters.clientLeft;\n    for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n      var id = cm.display.gutterSpecs[i].className;\n      left[id] = n.offsetLeft + n.clientLeft + gutterLeft;\n      width[id] = n.clientWidth;\n    }\n    return {fixedPos: compensateForHScroll(d),\n            gutterTotalWidth: d.gutters.offsetWidth,\n            gutterLeft: left,\n            gutterWidth: width,\n            wrapperWidth: d.wrapper.clientWidth}\n  }\n\n  // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n  // but using getBoundingClientRect to get a sub-pixel-accurate\n  // result.\n  function compensateForHScroll(display) {\n    return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n  }\n\n  // Returns a function that estimates the height of a line, to use as\n  // first approximation until the line becomes visible (and is thus\n  // properly measurable).\n  function estimateHeight(cm) {\n    var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n    var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n    return function (line) {\n      if (lineIsHidden(cm.doc, line)) { return 0 }\n\n      var widgetsHeight = 0;\n      if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {\n        if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }\n      } }\n\n      if (wrapping)\n        { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }\n      else\n        { return widgetsHeight + th }\n    }\n  }\n\n  function estimateLineHeights(cm) {\n    var doc = cm.doc, est = estimateHeight(cm);\n    doc.iter(function (line) {\n      var estHeight = est(line);\n      if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n    });\n  }\n\n  // Given a mouse event, find the corresponding position. If liberal\n  // is false, it checks whether a gutter or scrollbar was clicked,\n  // and returns null if it was. forRect is used by rectangular\n  // selections, and tries to estimate a character position even for\n  // coordinates beyond the right of the text.\n  function posFromMouse(cm, e, liberal, forRect) {\n    var display = cm.display;\n    if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") { return null }\n\n    var x, y, space = display.lineSpace.getBoundingClientRect();\n    // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n    try { x = e.clientX - space.left; y = e.clientY - space.top; }\n    catch (e$1) { return null }\n    var coords = coordsChar(cm, x, y), line;\n    if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n      var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n      coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n    }\n    return coords\n  }\n\n  // Find the view element corresponding to a given line. Return null\n  // when the line isn't visible.\n  function findViewIndex(cm, n) {\n    if (n >= cm.display.viewTo) { return null }\n    n -= cm.display.viewFrom;\n    if (n < 0) { return null }\n    var view = cm.display.view;\n    for (var i = 0; i < view.length; i++) {\n      n -= view[i].size;\n      if (n < 0) { return i }\n    }\n  }\n\n  // Updates the display.view data structure for a given change to the\n  // document. From and to are in pre-change coordinates. Lendiff is\n  // the amount of lines added or subtracted by the change. This is\n  // used for changes that span multiple lines, or change the way\n  // lines are divided into visual lines. regLineChange (below)\n  // registers single-line changes.\n  function regChange(cm, from, to, lendiff) {\n    if (from == null) { from = cm.doc.first; }\n    if (to == null) { to = cm.doc.first + cm.doc.size; }\n    if (!lendiff) { lendiff = 0; }\n\n    var display = cm.display;\n    if (lendiff && to < display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers > from))\n      { display.updateLineNumbers = from; }\n\n    cm.curOp.viewChanged = true;\n\n    if (from >= display.viewTo) { // Change after\n      if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n        { resetView(cm); }\n    } else if (to <= display.viewFrom) { // Change before\n      if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n        resetView(cm);\n      } else {\n        display.viewFrom += lendiff;\n        display.viewTo += lendiff;\n      }\n    } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n      resetView(cm);\n    } else if (from <= display.viewFrom) { // Top overlap\n      var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cut) {\n        display.view = display.view.slice(cut.index);\n        display.viewFrom = cut.lineN;\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    } else if (to >= display.viewTo) { // Bottom overlap\n      var cut$1 = viewCuttingPoint(cm, from, from, -1);\n      if (cut$1) {\n        display.view = display.view.slice(0, cut$1.index);\n        display.viewTo = cut$1.lineN;\n      } else {\n        resetView(cm);\n      }\n    } else { // Gap in the middle\n      var cutTop = viewCuttingPoint(cm, from, from, -1);\n      var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cutTop && cutBot) {\n        display.view = display.view.slice(0, cutTop.index)\n          .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n          .concat(display.view.slice(cutBot.index));\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    }\n\n    var ext = display.externalMeasured;\n    if (ext) {\n      if (to < ext.lineN)\n        { ext.lineN += lendiff; }\n      else if (from < ext.lineN + ext.size)\n        { display.externalMeasured = null; }\n    }\n  }\n\n  // Register a change to a single line. Type must be one of \"text\",\n  // \"gutter\", \"class\", \"widget\"\n  function regLineChange(cm, line, type) {\n    cm.curOp.viewChanged = true;\n    var display = cm.display, ext = cm.display.externalMeasured;\n    if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n      { display.externalMeasured = null; }\n\n    if (line < display.viewFrom || line >= display.viewTo) { return }\n    var lineView = display.view[findViewIndex(cm, line)];\n    if (lineView.node == null) { return }\n    var arr = lineView.changes || (lineView.changes = []);\n    if (indexOf(arr, type) == -1) { arr.push(type); }\n  }\n\n  // Clear the view.\n  function resetView(cm) {\n    cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n    cm.display.view = [];\n    cm.display.viewOffset = 0;\n  }\n\n  function viewCuttingPoint(cm, oldN, newN, dir) {\n    var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n    if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n      { return {index: index, lineN: newN} }\n    var n = cm.display.viewFrom;\n    for (var i = 0; i < index; i++)\n      { n += view[i].size; }\n    if (n != oldN) {\n      if (dir > 0) {\n        if (index == view.length - 1) { return null }\n        diff = (n + view[index].size) - oldN;\n        index++;\n      } else {\n        diff = n - oldN;\n      }\n      oldN += diff; newN += diff;\n    }\n    while (visualLineNo(cm.doc, newN) != newN) {\n      if (index == (dir < 0 ? 0 : view.length - 1)) { return null }\n      newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n      index += dir;\n    }\n    return {index: index, lineN: newN}\n  }\n\n  // Force the view to cover a given range, adding empty view element\n  // or clipping off existing ones as needed.\n  function adjustView(cm, from, to) {\n    var display = cm.display, view = display.view;\n    if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n      display.view = buildViewArray(cm, from, to);\n      display.viewFrom = from;\n    } else {\n      if (display.viewFrom > from)\n        { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }\n      else if (display.viewFrom < from)\n        { display.view = display.view.slice(findViewIndex(cm, from)); }\n      display.viewFrom = from;\n      if (display.viewTo < to)\n        { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }\n      else if (display.viewTo > to)\n        { display.view = display.view.slice(0, findViewIndex(cm, to)); }\n    }\n    display.viewTo = to;\n  }\n\n  // Count the number of lines in the view whose DOM representation is\n  // out of date (or nonexistent).\n  function countDirtyView(cm) {\n    var view = cm.display.view, dirty = 0;\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }\n    }\n    return dirty\n  }\n\n  function updateSelection(cm) {\n    cm.display.input.showSelection(cm.display.input.prepareSelection());\n  }\n\n  function prepareSelection(cm, primary) {\n    if ( primary === void 0 ) primary = true;\n\n    var doc = cm.doc, result = {};\n    var curFragment = result.cursors = document.createDocumentFragment();\n    var selFragment = result.selection = document.createDocumentFragment();\n\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      if (!primary && i == doc.sel.primIndex) { continue }\n      var range = doc.sel.ranges[i];\n      if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue }\n      var collapsed = range.empty();\n      if (collapsed || cm.options.showCursorWhenSelecting)\n        { drawSelectionCursor(cm, range.head, curFragment); }\n      if (!collapsed)\n        { drawSelectionRange(cm, range, selFragment); }\n    }\n    return result\n  }\n\n  // Draws a cursor for the given range\n  function drawSelectionCursor(cm, head, output) {\n    var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n    var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n    cursor.style.left = pos.left + \"px\";\n    cursor.style.top = pos.top + \"px\";\n    cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n    if (pos.other) {\n      // Secondary cursor, shown when on a 'jump' in bi-directional text\n      var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n      otherCursor.style.display = \"\";\n      otherCursor.style.left = pos.other.left + \"px\";\n      otherCursor.style.top = pos.other.top + \"px\";\n      otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n    }\n  }\n\n  function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }\n\n  // Draws the given range as a highlighted selection\n  function drawSelectionRange(cm, range, output) {\n    var display = cm.display, doc = cm.doc;\n    var fragment = document.createDocumentFragment();\n    var padding = paddingH(cm.display), leftSide = padding.left;\n    var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n    var docLTR = doc.direction == \"ltr\";\n\n    function add(left, top, width, bottom) {\n      if (top < 0) { top = 0; }\n      top = Math.round(top);\n      bottom = Math.round(bottom);\n      fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", (\"position: absolute; left: \" + left + \"px;\\n                             top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n                             height: \" + (bottom - top) + \"px\")));\n    }\n\n    function drawForLine(line, fromArg, toArg) {\n      var lineObj = getLine(doc, line);\n      var lineLen = lineObj.text.length;\n      var start, end;\n      function coords(ch, bias) {\n        return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias)\n      }\n\n      function wrapX(pos, dir, side) {\n        var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n        var prop = (dir == \"ltr\") == (side == \"after\") ? \"left\" : \"right\";\n        var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n        return coords(ch, prop)[prop]\n      }\n\n      var order = getOrder(lineObj, doc.direction);\n      iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n        var ltr = dir == \"ltr\";\n        var fromPos = coords(from, ltr ? \"left\" : \"right\");\n        var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n\n        var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;\n        var first = i == 0, last = !order || i == order.length - 1;\n        if (toPos.top - fromPos.top <= 3) { // Single line\n          var openLeft = (docLTR ? openStart : openEnd) && first;\n          var openRight = (docLTR ? openEnd : openStart) && last;\n          var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n          var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n          add(left, fromPos.top, right - left, fromPos.bottom);\n        } else { // Multiple lines\n          var topLeft, topRight, botLeft, botRight;\n          if (ltr) {\n            topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n            topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n            botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n            botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n          } else {\n            topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n            topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n            botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n            botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n          }\n          add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n          if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }\n          add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n        }\n\n        if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }\n        if (cmpCoords(toPos, start) < 0) { start = toPos; }\n        if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }\n        if (cmpCoords(toPos, end) < 0) { end = toPos; }\n      });\n      return {start: start, end: end}\n    }\n\n    var sFrom = range.from(), sTo = range.to();\n    if (sFrom.line == sTo.line) {\n      drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n    } else {\n      var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n      var singleVLine = visualLine(fromLine) == visualLine(toLine);\n      var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n      var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n      if (singleVLine) {\n        if (leftEnd.top < rightStart.top - 2) {\n          add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n          add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n        } else {\n          add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n        }\n      }\n      if (leftEnd.bottom < rightStart.top)\n        { add(leftSide, leftEnd.bottom, null, rightStart.top); }\n    }\n\n    output.appendChild(fragment);\n  }\n\n  // Cursor-blinking\n  function restartBlink(cm) {\n    if (!cm.state.focused) { return }\n    var display = cm.display;\n    clearInterval(display.blinker);\n    var on = true;\n    display.cursorDiv.style.visibility = \"\";\n    if (cm.options.cursorBlinkRate > 0)\n      { display.blinker = setInterval(function () {\n        if (!cm.hasFocus()) { onBlur(cm); }\n        display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\";\n      }, cm.options.cursorBlinkRate); }\n    else if (cm.options.cursorBlinkRate < 0)\n      { display.cursorDiv.style.visibility = \"hidden\"; }\n  }\n\n  function ensureFocus(cm) {\n    if (!cm.hasFocus()) {\n      cm.display.input.focus();\n      if (!cm.state.focused) { onFocus(cm); }\n    }\n  }\n\n  function delayBlurEvent(cm) {\n    cm.state.delayingBlurEvent = true;\n    setTimeout(function () { if (cm.state.delayingBlurEvent) {\n      cm.state.delayingBlurEvent = false;\n      if (cm.state.focused) { onBlur(cm); }\n    } }, 100);\n  }\n\n  function onFocus(cm, e) {\n    if (cm.state.delayingBlurEvent && !cm.state.draggingText) { cm.state.delayingBlurEvent = false; }\n\n    if (cm.options.readOnly == \"nocursor\") { return }\n    if (!cm.state.focused) {\n      signal(cm, \"focus\", cm, e);\n      cm.state.focused = true;\n      addClass(cm.display.wrapper, \"CodeMirror-focused\");\n      // This test prevents this from firing when a context\n      // menu is closed (since the input reset would kill the\n      // select-all detection hack)\n      if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n        cm.display.input.reset();\n        if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730\n      }\n      cm.display.input.receivedFocus();\n    }\n    restartBlink(cm);\n  }\n  function onBlur(cm, e) {\n    if (cm.state.delayingBlurEvent) { return }\n\n    if (cm.state.focused) {\n      signal(cm, \"blur\", cm, e);\n      cm.state.focused = false;\n      rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n    }\n    clearInterval(cm.display.blinker);\n    setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);\n  }\n\n  // Read the actual heights of the rendered lines, and update their\n  // stored heights to match.\n  function updateHeightsInViewport(cm) {\n    var display = cm.display;\n    var prevBottom = display.lineDiv.offsetTop;\n    for (var i = 0; i < display.view.length; i++) {\n      var cur = display.view[i], wrapping = cm.options.lineWrapping;\n      var height = (void 0), width = 0;\n      if (cur.hidden) { continue }\n      if (ie && ie_version < 8) {\n        var bot = cur.node.offsetTop + cur.node.offsetHeight;\n        height = bot - prevBottom;\n        prevBottom = bot;\n      } else {\n        var box = cur.node.getBoundingClientRect();\n        height = box.bottom - box.top;\n        // Check that lines don't extend past the right of the current\n        // editor width\n        if (!wrapping && cur.text.firstChild)\n          { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }\n      }\n      var diff = cur.line.height - height;\n      if (diff > .005 || diff < -.005) {\n        updateLineHeight(cur.line, height);\n        updateWidgetHeight(cur.line);\n        if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)\n          { updateWidgetHeight(cur.rest[j]); } }\n      }\n      if (width > cm.display.sizerWidth) {\n        var chWidth = Math.ceil(width / charWidth(cm.display));\n        if (chWidth > cm.display.maxLineLength) {\n          cm.display.maxLineLength = chWidth;\n          cm.display.maxLine = cur.line;\n          cm.display.maxLineChanged = true;\n        }\n      }\n    }\n  }\n\n  // Read and store the height of line widgets associated with the\n  // given line.\n  function updateWidgetHeight(line) {\n    if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {\n      var w = line.widgets[i], parent = w.node.parentNode;\n      if (parent) { w.height = parent.offsetHeight; }\n    } }\n  }\n\n  // Compute the lines that are visible in a given viewport (defaults\n  // the the current scroll position). viewport may contain top,\n  // height, and ensure (see op.scrollToPos) properties.\n  function visibleLines(display, doc, viewport) {\n    var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n    top = Math.floor(top - paddingTop(display));\n    var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n    var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n    // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n    // forces those lines into the viewport (if possible).\n    if (viewport && viewport.ensure) {\n      var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n      if (ensureFrom < from) {\n        from = ensureFrom;\n        to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n      } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n        from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n        to = ensureTo;\n      }\n    }\n    return {from: from, to: Math.max(to, from + 1)}\n  }\n\n  // SCROLLING THINGS INTO VIEW\n\n  // If an editor sits on the top or bottom of the window, partially\n  // scrolled out of view, this ensures that the cursor is visible.\n  function maybeScrollWindow(cm, rect) {\n    if (signalDOMEvent(cm, \"scrollCursorIntoView\")) { return }\n\n    var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n    if (rect.top + box.top < 0) { doScroll = true; }\n    else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }\n    if (doScroll != null && !phantom) {\n      var scrollNode = elt(\"div\", \"\\u200b\", null, (\"position: absolute;\\n                         top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n                         height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n                         left: \" + (rect.left) + \"px; width: \" + (Math.max(2, rect.right - rect.left)) + \"px;\"));\n      cm.display.lineSpace.appendChild(scrollNode);\n      scrollNode.scrollIntoView(doScroll);\n      cm.display.lineSpace.removeChild(scrollNode);\n    }\n  }\n\n  // Scroll a given position into view (immediately), verifying that\n  // it actually became visible (as line heights are accurately\n  // measured, the position of something may 'drift' during drawing).\n  function scrollPosIntoView(cm, pos, end, margin) {\n    if (margin == null) { margin = 0; }\n    var rect;\n    if (!cm.options.lineWrapping && pos == end) {\n      // Set pos and end to the cursor positions around the character pos sticks to\n      // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n      // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n      pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n      end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n    }\n    for (var limit = 0; limit < 5; limit++) {\n      var changed = false;\n      var coords = cursorCoords(cm, pos);\n      var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n      rect = {left: Math.min(coords.left, endCoords.left),\n              top: Math.min(coords.top, endCoords.top) - margin,\n              right: Math.max(coords.left, endCoords.left),\n              bottom: Math.max(coords.bottom, endCoords.bottom) + margin};\n      var scrollPos = calculateScrollPos(cm, rect);\n      var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n      if (scrollPos.scrollTop != null) {\n        updateScrollTop(cm, scrollPos.scrollTop);\n        if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }\n      }\n      if (scrollPos.scrollLeft != null) {\n        setScrollLeft(cm, scrollPos.scrollLeft);\n        if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }\n      }\n      if (!changed) { break }\n    }\n    return rect\n  }\n\n  // Scroll a given set of coordinates into view (immediately).\n  function scrollIntoView(cm, rect) {\n    var scrollPos = calculateScrollPos(cm, rect);\n    if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }\n    if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }\n  }\n\n  // Calculate a new scroll position needed to scroll the given\n  // rectangle into view. Returns an object with scrollTop and\n  // scrollLeft properties. When these are undefined, the\n  // vertical/horizontal position does not need to be adjusted.\n  function calculateScrollPos(cm, rect) {\n    var display = cm.display, snapMargin = textHeight(cm.display);\n    if (rect.top < 0) { rect.top = 0; }\n    var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n    var screen = displayHeight(cm), result = {};\n    if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }\n    var docBottom = cm.doc.height + paddingVert(display);\n    var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;\n    if (rect.top < screentop) {\n      result.scrollTop = atTop ? 0 : rect.top;\n    } else if (rect.bottom > screentop + screen) {\n      var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n      if (newTop != screentop) { result.scrollTop = newTop; }\n    }\n\n    var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth;\n    var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace;\n    var screenw = displayWidth(cm) - display.gutters.offsetWidth;\n    var tooWide = rect.right - rect.left > screenw;\n    if (tooWide) { rect.right = rect.left + screenw; }\n    if (rect.left < 10)\n      { result.scrollLeft = 0; }\n    else if (rect.left < screenleft)\n      { result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); }\n    else if (rect.right > screenw + screenleft - 3)\n      { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }\n    return result\n  }\n\n  // Store a relative adjustment to the scroll position in the current\n  // operation (to be applied when the operation finishes).\n  function addToScrollTop(cm, top) {\n    if (top == null) { return }\n    resolveScrollToPos(cm);\n    cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n  }\n\n  // Make sure that at the end of the operation the current cursor is\n  // shown.\n  function ensureCursorVisible(cm) {\n    resolveScrollToPos(cm);\n    var cur = cm.getCursor();\n    cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};\n  }\n\n  function scrollToCoords(cm, x, y) {\n    if (x != null || y != null) { resolveScrollToPos(cm); }\n    if (x != null) { cm.curOp.scrollLeft = x; }\n    if (y != null) { cm.curOp.scrollTop = y; }\n  }\n\n  function scrollToRange(cm, range) {\n    resolveScrollToPos(cm);\n    cm.curOp.scrollToPos = range;\n  }\n\n  // When an operation has its scrollToPos property set, and another\n  // scroll action is applied before the end of the operation, this\n  // 'simulates' scrolling that position into view in a cheap way, so\n  // that the effect of intermediate scroll commands is not ignored.\n  function resolveScrollToPos(cm) {\n    var range = cm.curOp.scrollToPos;\n    if (range) {\n      cm.curOp.scrollToPos = null;\n      var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);\n      scrollToCoordsRange(cm, from, to, range.margin);\n    }\n  }\n\n  function scrollToCoordsRange(cm, from, to, margin) {\n    var sPos = calculateScrollPos(cm, {\n      left: Math.min(from.left, to.left),\n      top: Math.min(from.top, to.top) - margin,\n      right: Math.max(from.right, to.right),\n      bottom: Math.max(from.bottom, to.bottom) + margin\n    });\n    scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n  }\n\n  // Sync the scrollable area and scrollbars, ensure the viewport\n  // covers the visible area.\n  function updateScrollTop(cm, val) {\n    if (Math.abs(cm.doc.scrollTop - val) < 2) { return }\n    if (!gecko) { updateDisplaySimple(cm, {top: val}); }\n    setScrollTop(cm, val, true);\n    if (gecko) { updateDisplaySimple(cm); }\n    startWorker(cm, 100);\n  }\n\n  function setScrollTop(cm, val, forceScroll) {\n    val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val));\n    if (cm.display.scroller.scrollTop == val && !forceScroll) { return }\n    cm.doc.scrollTop = val;\n    cm.display.scrollbars.setScrollTop(val);\n    if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }\n  }\n\n  // Sync scroller and scrollbar, ensure the gutter elements are\n  // aligned.\n  function setScrollLeft(cm, val, isScroller, forceScroll) {\n    val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));\n    if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }\n    cm.doc.scrollLeft = val;\n    alignHorizontally(cm);\n    if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }\n    cm.display.scrollbars.setScrollLeft(val);\n  }\n\n  // SCROLLBARS\n\n  // Prepare DOM reads needed to update the scrollbars. Done in one\n  // shot to minimize update/measure roundtrips.\n  function measureForScrollbars(cm) {\n    var d = cm.display, gutterW = d.gutters.offsetWidth;\n    var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n    return {\n      clientHeight: d.scroller.clientHeight,\n      viewHeight: d.wrapper.clientHeight,\n      scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n      viewWidth: d.wrapper.clientWidth,\n      barLeft: cm.options.fixedGutter ? gutterW : 0,\n      docHeight: docH,\n      scrollHeight: docH + scrollGap(cm) + d.barHeight,\n      nativeBarWidth: d.nativeBarWidth,\n      gutterWidth: gutterW\n    }\n  }\n\n  var NativeScrollbars = function(place, scroll, cm) {\n    this.cm = cm;\n    var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n    var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n    vert.tabIndex = horiz.tabIndex = -1;\n    place(vert); place(horiz);\n\n    on(vert, \"scroll\", function () {\n      if (vert.clientHeight) { scroll(vert.scrollTop, \"vertical\"); }\n    });\n    on(horiz, \"scroll\", function () {\n      if (horiz.clientWidth) { scroll(horiz.scrollLeft, \"horizontal\"); }\n    });\n\n    this.checkedZeroWidth = false;\n    // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n    if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"; }\n  };\n\n  NativeScrollbars.prototype.update = function (measure) {\n    var needsH = measure.scrollWidth > measure.clientWidth + 1;\n    var needsV = measure.scrollHeight > measure.clientHeight + 1;\n    var sWidth = measure.nativeBarWidth;\n\n    if (needsV) {\n      this.vert.style.display = \"block\";\n      this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n      var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n      // A bug in IE8 can cause this value to be negative, so guard it.\n      this.vert.firstChild.style.height =\n        Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n    } else {\n      this.vert.style.display = \"\";\n      this.vert.firstChild.style.height = \"0\";\n    }\n\n    if (needsH) {\n      this.horiz.style.display = \"block\";\n      this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n      this.horiz.style.left = measure.barLeft + \"px\";\n      var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n      this.horiz.firstChild.style.width =\n        Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n    } else {\n      this.horiz.style.display = \"\";\n      this.horiz.firstChild.style.width = \"0\";\n    }\n\n    if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n      if (sWidth == 0) { this.zeroWidthHack(); }\n      this.checkedZeroWidth = true;\n    }\n\n    return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n  };\n\n  NativeScrollbars.prototype.setScrollLeft = function (pos) {\n    if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }\n    if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\"); }\n  };\n\n  NativeScrollbars.prototype.setScrollTop = function (pos) {\n    if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }\n    if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\"); }\n  };\n\n  NativeScrollbars.prototype.zeroWidthHack = function () {\n    var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n    this.horiz.style.height = this.vert.style.width = w;\n    this.horiz.style.pointerEvents = this.vert.style.pointerEvents = \"none\";\n    this.disableHoriz = new Delayed;\n    this.disableVert = new Delayed;\n  };\n\n  NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n    bar.style.pointerEvents = \"auto\";\n    function maybeDisable() {\n      // To find out whether the scrollbar is still visible, we\n      // check whether the element under the pixel in the bottom\n      // right corner of the scrollbar box is the scrollbar box\n      // itself (when the bar is still visible) or its filler child\n      // (when the bar is hidden). If it is still visible, we keep\n      // it enabled, if it's hidden, we disable pointer events.\n      var box = bar.getBoundingClientRect();\n      var elt = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)\n          : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n      if (elt != bar) { bar.style.pointerEvents = \"none\"; }\n      else { delay.set(1000, maybeDisable); }\n    }\n    delay.set(1000, maybeDisable);\n  };\n\n  NativeScrollbars.prototype.clear = function () {\n    var parent = this.horiz.parentNode;\n    parent.removeChild(this.horiz);\n    parent.removeChild(this.vert);\n  };\n\n  var NullScrollbars = function () {};\n\n  NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };\n  NullScrollbars.prototype.setScrollLeft = function () {};\n  NullScrollbars.prototype.setScrollTop = function () {};\n  NullScrollbars.prototype.clear = function () {};\n\n  function updateScrollbars(cm, measure) {\n    if (!measure) { measure = measureForScrollbars(cm); }\n    var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n    updateScrollbarsInner(cm, measure);\n    for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n      if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n        { updateHeightsInViewport(cm); }\n      updateScrollbarsInner(cm, measureForScrollbars(cm));\n      startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n    }\n  }\n\n  // Re-synchronize the fake scrollbars with the actual size of the\n  // content.\n  function updateScrollbarsInner(cm, measure) {\n    var d = cm.display;\n    var sizes = d.scrollbars.update(measure);\n\n    d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n    d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n    d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n    if (sizes.right && sizes.bottom) {\n      d.scrollbarFiller.style.display = \"block\";\n      d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n      d.scrollbarFiller.style.width = sizes.right + \"px\";\n    } else { d.scrollbarFiller.style.display = \"\"; }\n    if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n      d.gutterFiller.style.display = \"block\";\n      d.gutterFiller.style.height = sizes.bottom + \"px\";\n      d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n    } else { d.gutterFiller.style.display = \"\"; }\n  }\n\n  var scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\n  function initScrollbars(cm) {\n    if (cm.display.scrollbars) {\n      cm.display.scrollbars.clear();\n      if (cm.display.scrollbars.addClass)\n        { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n    }\n\n    cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n      cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n      // Prevent clicks in the scrollbars from killing focus\n      on(node, \"mousedown\", function () {\n        if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }\n      });\n      node.setAttribute(\"cm-not-content\", \"true\");\n    }, function (pos, axis) {\n      if (axis == \"horizontal\") { setScrollLeft(cm, pos); }\n      else { updateScrollTop(cm, pos); }\n    }, cm);\n    if (cm.display.scrollbars.addClass)\n      { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n  }\n\n  // Operations are used to wrap a series of changes to the editor\n  // state in such a way that each change won't have to update the\n  // cursor and display (which would be awkward, slow, and\n  // error-prone). Instead, display updates are batched and then all\n  // combined and executed at once.\n\n  var nextOpId = 0;\n  // Start a new operation.\n  function startOperation(cm) {\n    cm.curOp = {\n      cm: cm,\n      viewChanged: false,      // Flag that indicates that lines might need to be redrawn\n      startHeight: cm.doc.height, // Used to detect need to update scrollbar\n      forceUpdate: false,      // Used to force a redraw\n      updateInput: 0,       // Whether to reset the input textarea\n      typing: false,           // Whether this reset should be careful to leave existing text (for compositing)\n      changeObjs: null,        // Accumulated changes, for firing change events\n      cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n      cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n      selectionChanged: false, // Whether the selection needs to be redrawn\n      updateMaxLine: false,    // Set when the widest line needs to be determined anew\n      scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n      scrollToPos: null,       // Used to scroll to a specific position\n      focus: false,\n      id: ++nextOpId           // Unique ID\n    };\n    pushOperation(cm.curOp);\n  }\n\n  // Finish an operation, updating the display and signalling delayed events\n  function endOperation(cm) {\n    var op = cm.curOp;\n    if (op) { finishOperation(op, function (group) {\n      for (var i = 0; i < group.ops.length; i++)\n        { group.ops[i].cm.curOp = null; }\n      endOperations(group);\n    }); }\n  }\n\n  // The DOM updates done when an operation finishes are batched so\n  // that the minimum number of relayouts are required.\n  function endOperations(group) {\n    var ops = group.ops;\n    for (var i = 0; i < ops.length; i++) // Read DOM\n      { endOperation_R1(ops[i]); }\n    for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n      { endOperation_W1(ops[i$1]); }\n    for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n      { endOperation_R2(ops[i$2]); }\n    for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n      { endOperation_W2(ops[i$3]); }\n    for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n      { endOperation_finish(ops[i$4]); }\n  }\n\n  function endOperation_R1(op) {\n    var cm = op.cm, display = cm.display;\n    maybeClipScrollbars(cm);\n    if (op.updateMaxLine) { findMaxLine(cm); }\n\n    op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n      op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n                         op.scrollToPos.to.line >= display.viewTo) ||\n      display.maxLineChanged && cm.options.lineWrapping;\n    op.update = op.mustUpdate &&\n      new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n  }\n\n  function endOperation_W1(op) {\n    op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n  }\n\n  function endOperation_R2(op) {\n    var cm = op.cm, display = cm.display;\n    if (op.updatedDisplay) { updateHeightsInViewport(cm); }\n\n    op.barMeasure = measureForScrollbars(cm);\n\n    // If the max line changed since it was last measured, measure it,\n    // and ensure the document's width matches it.\n    // updateDisplay_W2 will use these properties to do the actual resizing\n    if (display.maxLineChanged && !cm.options.lineWrapping) {\n      op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n      cm.display.sizerWidth = op.adjustWidthTo;\n      op.barMeasure.scrollWidth =\n        Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n      op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n    }\n\n    if (op.updatedDisplay || op.selectionChanged)\n      { op.preparedSelection = display.input.prepareSelection(); }\n  }\n\n  function endOperation_W2(op) {\n    var cm = op.cm;\n\n    if (op.adjustWidthTo != null) {\n      cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n      if (op.maxScrollLeft < cm.doc.scrollLeft)\n        { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }\n      cm.display.maxLineChanged = false;\n    }\n\n    var takeFocus = op.focus && op.focus == activeElt();\n    if (op.preparedSelection)\n      { cm.display.input.showSelection(op.preparedSelection, takeFocus); }\n    if (op.updatedDisplay || op.startHeight != cm.doc.height)\n      { updateScrollbars(cm, op.barMeasure); }\n    if (op.updatedDisplay)\n      { setDocumentHeight(cm, op.barMeasure); }\n\n    if (op.selectionChanged) { restartBlink(cm); }\n\n    if (cm.state.focused && op.updateInput)\n      { cm.display.input.reset(op.typing); }\n    if (takeFocus) { ensureFocus(op.cm); }\n  }\n\n  function endOperation_finish(op) {\n    var cm = op.cm, display = cm.display, doc = cm.doc;\n\n    if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }\n\n    // Abort mouse wheel delta measurement, when scrolling explicitly\n    if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n      { display.wheelStartX = display.wheelStartY = null; }\n\n    // Propagate the scroll position to the actual DOM scroller\n    if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }\n\n    if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }\n    // If we need to scroll a specific position into view, do so.\n    if (op.scrollToPos) {\n      var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n                                   clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n      maybeScrollWindow(cm, rect);\n    }\n\n    // Fire events for markers that are hidden/unidden by editing or\n    // undoing\n    var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n    if (hidden) { for (var i = 0; i < hidden.length; ++i)\n      { if (!hidden[i].lines.length) { signal(hidden[i], \"hide\"); } } }\n    if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)\n      { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], \"unhide\"); } } }\n\n    if (display.wrapper.offsetHeight)\n      { doc.scrollTop = cm.display.scroller.scrollTop; }\n\n    // Fire change events, and delayed event handlers\n    if (op.changeObjs)\n      { signal(cm, \"changes\", cm, op.changeObjs); }\n    if (op.update)\n      { op.update.finish(); }\n  }\n\n  // Run the given function in an operation\n  function runInOp(cm, f) {\n    if (cm.curOp) { return f() }\n    startOperation(cm);\n    try { return f() }\n    finally { endOperation(cm); }\n  }\n  // Wraps a function in an operation. Returns the wrapped function.\n  function operation(cm, f) {\n    return function() {\n      if (cm.curOp) { return f.apply(cm, arguments) }\n      startOperation(cm);\n      try { return f.apply(cm, arguments) }\n      finally { endOperation(cm); }\n    }\n  }\n  // Used to add methods to editor and doc instances, wrapping them in\n  // operations.\n  function methodOp(f) {\n    return function() {\n      if (this.curOp) { return f.apply(this, arguments) }\n      startOperation(this);\n      try { return f.apply(this, arguments) }\n      finally { endOperation(this); }\n    }\n  }\n  function docMethodOp(f) {\n    return function() {\n      var cm = this.cm;\n      if (!cm || cm.curOp) { return f.apply(this, arguments) }\n      startOperation(cm);\n      try { return f.apply(this, arguments) }\n      finally { endOperation(cm); }\n    }\n  }\n\n  // HIGHLIGHT WORKER\n\n  function startWorker(cm, time) {\n    if (cm.doc.highlightFrontier < cm.display.viewTo)\n      { cm.state.highlight.set(time, bind(highlightWorker, cm)); }\n  }\n\n  function highlightWorker(cm) {\n    var doc = cm.doc;\n    if (doc.highlightFrontier >= cm.display.viewTo) { return }\n    var end = +new Date + cm.options.workTime;\n    var context = getContextBefore(cm, doc.highlightFrontier);\n    var changedLines = [];\n\n    doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n      if (context.line >= cm.display.viewFrom) { // Visible\n        var oldStyles = line.styles;\n        var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n        var highlighted = highlightLine(cm, line, context, true);\n        if (resetState) { context.state = resetState; }\n        line.styles = highlighted.styles;\n        var oldCls = line.styleClasses, newCls = highlighted.classes;\n        if (newCls) { line.styleClasses = newCls; }\n        else if (oldCls) { line.styleClasses = null; }\n        var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n          oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n        for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }\n        if (ischange) { changedLines.push(context.line); }\n        line.stateAfter = context.save();\n        context.nextLine();\n      } else {\n        if (line.text.length <= cm.options.maxHighlightLength)\n          { processLine(cm, line.text, context); }\n        line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n        context.nextLine();\n      }\n      if (+new Date > end) {\n        startWorker(cm, cm.options.workDelay);\n        return true\n      }\n    });\n    doc.highlightFrontier = context.line;\n    doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n    if (changedLines.length) { runInOp(cm, function () {\n      for (var i = 0; i < changedLines.length; i++)\n        { regLineChange(cm, changedLines[i], \"text\"); }\n    }); }\n  }\n\n  // DISPLAY DRAWING\n\n  var DisplayUpdate = function(cm, viewport, force) {\n    var display = cm.display;\n\n    this.viewport = viewport;\n    // Store some values that we'll need later (but don't want to force a relayout for)\n    this.visible = visibleLines(display, cm.doc, viewport);\n    this.editorIsHidden = !display.wrapper.offsetWidth;\n    this.wrapperHeight = display.wrapper.clientHeight;\n    this.wrapperWidth = display.wrapper.clientWidth;\n    this.oldDisplayWidth = displayWidth(cm);\n    this.force = force;\n    this.dims = getDimensions(cm);\n    this.events = [];\n  };\n\n  DisplayUpdate.prototype.signal = function (emitter, type) {\n    if (hasHandler(emitter, type))\n      { this.events.push(arguments); }\n  };\n  DisplayUpdate.prototype.finish = function () {\n    for (var i = 0; i < this.events.length; i++)\n      { signal.apply(null, this.events[i]); }\n  };\n\n  function maybeClipScrollbars(cm) {\n    var display = cm.display;\n    if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n      display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n      display.heightForcer.style.height = scrollGap(cm) + \"px\";\n      display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n      display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n      display.scrollbarsClipped = true;\n    }\n  }\n\n  function selectionSnapshot(cm) {\n    if (cm.hasFocus()) { return null }\n    var active = activeElt();\n    if (!active || !contains(cm.display.lineDiv, active)) { return null }\n    var result = {activeElt: active};\n    if (window.getSelection) {\n      var sel = window.getSelection();\n      if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n        result.anchorNode = sel.anchorNode;\n        result.anchorOffset = sel.anchorOffset;\n        result.focusNode = sel.focusNode;\n        result.focusOffset = sel.focusOffset;\n      }\n    }\n    return result\n  }\n\n  function restoreSelection(snapshot) {\n    if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }\n    snapshot.activeElt.focus();\n    if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) &&\n        snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n      var sel = window.getSelection(), range = document.createRange();\n      range.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n      range.collapse(false);\n      sel.removeAllRanges();\n      sel.addRange(range);\n      sel.extend(snapshot.focusNode, snapshot.focusOffset);\n    }\n  }\n\n  // Does the actual updating of the line display. Bails out\n  // (returning false) when there is nothing to be done and forced is\n  // false.\n  function updateDisplayIfNeeded(cm, update) {\n    var display = cm.display, doc = cm.doc;\n\n    if (update.editorIsHidden) {\n      resetView(cm);\n      return false\n    }\n\n    // Bail out if the visible area is already rendered and nothing changed.\n    if (!update.force &&\n        update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n        display.renderedView == display.view && countDirtyView(cm) == 0)\n      { return false }\n\n    if (maybeUpdateLineNumberWidth(cm)) {\n      resetView(cm);\n      update.dims = getDimensions(cm);\n    }\n\n    // Compute a suitable new viewport (from & to)\n    var end = doc.first + doc.size;\n    var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n    var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n    if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }\n    if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }\n    if (sawCollapsedSpans) {\n      from = visualLineNo(cm.doc, from);\n      to = visualLineEndNo(cm.doc, to);\n    }\n\n    var different = from != display.viewFrom || to != display.viewTo ||\n      display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n    adjustView(cm, from, to);\n\n    display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n    // Position the mover div to align with the current scroll position\n    cm.display.mover.style.top = display.viewOffset + \"px\";\n\n    var toUpdate = countDirtyView(cm);\n    if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n      { return false }\n\n    // For big changes, we hide the enclosing element during the\n    // update, since that speeds up the operations on most browsers.\n    var selSnapshot = selectionSnapshot(cm);\n    if (toUpdate > 4) { display.lineDiv.style.display = \"none\"; }\n    patchDisplay(cm, display.updateLineNumbers, update.dims);\n    if (toUpdate > 4) { display.lineDiv.style.display = \"\"; }\n    display.renderedView = display.view;\n    // There might have been a widget with a focused element that got\n    // hidden or updated, if so re-focus it.\n    restoreSelection(selSnapshot);\n\n    // Prevent selection and cursors from interfering with the scroll\n    // width and height.\n    removeChildren(display.cursorDiv);\n    removeChildren(display.selectionDiv);\n    display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n    if (different) {\n      display.lastWrapHeight = update.wrapperHeight;\n      display.lastWrapWidth = update.wrapperWidth;\n      startWorker(cm, 400);\n    }\n\n    display.updateLineNumbers = null;\n\n    return true\n  }\n\n  function postUpdateDisplay(cm, update) {\n    var viewport = update.viewport;\n\n    for (var first = true;; first = false) {\n      if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n        // Clip forced viewport to actual scrollable area.\n        if (viewport && viewport.top != null)\n          { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }\n        // Updated line heights might result in the drawn area not\n        // actually covering the viewport. Keep looping until it does.\n        update.visible = visibleLines(cm.display, cm.doc, viewport);\n        if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n          { break }\n      } else if (first) {\n        update.visible = visibleLines(cm.display, cm.doc, viewport);\n      }\n      if (!updateDisplayIfNeeded(cm, update)) { break }\n      updateHeightsInViewport(cm);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      updateScrollbars(cm, barMeasure);\n      setDocumentHeight(cm, barMeasure);\n      update.force = false;\n    }\n\n    update.signal(cm, \"update\", cm);\n    if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n      update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n      cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n    }\n  }\n\n  function updateDisplaySimple(cm, viewport) {\n    var update = new DisplayUpdate(cm, viewport);\n    if (updateDisplayIfNeeded(cm, update)) {\n      updateHeightsInViewport(cm);\n      postUpdateDisplay(cm, update);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      updateScrollbars(cm, barMeasure);\n      setDocumentHeight(cm, barMeasure);\n      update.finish();\n    }\n  }\n\n  // Sync the actual display DOM structure with display.view, removing\n  // nodes for lines that are no longer in view, and creating the ones\n  // that are not there yet, and updating the ones that are out of\n  // date.\n  function patchDisplay(cm, updateNumbersFrom, dims) {\n    var display = cm.display, lineNumbers = cm.options.lineNumbers;\n    var container = display.lineDiv, cur = container.firstChild;\n\n    function rm(node) {\n      var next = node.nextSibling;\n      // Works around a throw-scroll bug in OS X Webkit\n      if (webkit && mac && cm.display.currentWheelTarget == node)\n        { node.style.display = \"none\"; }\n      else\n        { node.parentNode.removeChild(node); }\n      return next\n    }\n\n    var view = display.view, lineN = display.viewFrom;\n    // Loop over the elements in the view, syncing cur (the DOM nodes\n    // in display.lineDiv) with the view as we go.\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n        var node = buildLineElement(cm, lineView, lineN, dims);\n        container.insertBefore(node, cur);\n      } else { // Already drawn\n        while (cur != lineView.node) { cur = rm(cur); }\n        var updateNumber = lineNumbers && updateNumbersFrom != null &&\n          updateNumbersFrom <= lineN && lineView.lineNumber;\n        if (lineView.changes) {\n          if (indexOf(lineView.changes, \"gutter\") > -1) { updateNumber = false; }\n          updateLineForChanges(cm, lineView, lineN, dims);\n        }\n        if (updateNumber) {\n          removeChildren(lineView.lineNumber);\n          lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n        }\n        cur = lineView.node.nextSibling;\n      }\n      lineN += lineView.size;\n    }\n    while (cur) { cur = rm(cur); }\n  }\n\n  function updateGutterSpace(display) {\n    var width = display.gutters.offsetWidth;\n    display.sizer.style.marginLeft = width + \"px\";\n  }\n\n  function setDocumentHeight(cm, measure) {\n    cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n    cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n    cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\";\n  }\n\n  // Re-align line numbers and gutter marks to compensate for\n  // horizontal scrolling.\n  function alignHorizontally(cm) {\n    var display = cm.display, view = display.view;\n    if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }\n    var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n    var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n    for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {\n      if (cm.options.fixedGutter) {\n        if (view[i].gutter)\n          { view[i].gutter.style.left = left; }\n        if (view[i].gutterBackground)\n          { view[i].gutterBackground.style.left = left; }\n      }\n      var align = view[i].alignable;\n      if (align) { for (var j = 0; j < align.length; j++)\n        { align[j].style.left = left; } }\n    } }\n    if (cm.options.fixedGutter)\n      { display.gutters.style.left = (comp + gutterW) + \"px\"; }\n  }\n\n  // Used to ensure that the line number gutter is still the right\n  // size for the current document size. Returns true when an update\n  // is needed.\n  function maybeUpdateLineNumberWidth(cm) {\n    if (!cm.options.lineNumbers) { return false }\n    var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n    if (last.length != display.lineNumChars) {\n      var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n                                                 \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n      var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n      display.lineGutter.style.width = \"\";\n      display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n      display.lineNumWidth = display.lineNumInnerWidth + padding;\n      display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n      display.lineGutter.style.width = display.lineNumWidth + \"px\";\n      updateGutterSpace(cm.display);\n      return true\n    }\n    return false\n  }\n\n  function getGutters(gutters, lineNumbers) {\n    var result = [], sawLineNumbers = false;\n    for (var i = 0; i < gutters.length; i++) {\n      var name = gutters[i], style = null;\n      if (typeof name != \"string\") { style = name.style; name = name.className; }\n      if (name == \"CodeMirror-linenumbers\") {\n        if (!lineNumbers) { continue }\n        else { sawLineNumbers = true; }\n      }\n      result.push({className: name, style: style});\n    }\n    if (lineNumbers && !sawLineNumbers) { result.push({className: \"CodeMirror-linenumbers\", style: null}); }\n    return result\n  }\n\n  // Rebuild the gutter elements, ensure the margin to the left of the\n  // code matches their width.\n  function renderGutters(display) {\n    var gutters = display.gutters, specs = display.gutterSpecs;\n    removeChildren(gutters);\n    display.lineGutter = null;\n    for (var i = 0; i < specs.length; ++i) {\n      var ref = specs[i];\n      var className = ref.className;\n      var style = ref.style;\n      var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + className));\n      if (style) { gElt.style.cssText = style; }\n      if (className == \"CodeMirror-linenumbers\") {\n        display.lineGutter = gElt;\n        gElt.style.width = (display.lineNumWidth || 1) + \"px\";\n      }\n    }\n    gutters.style.display = specs.length ? \"\" : \"none\";\n    updateGutterSpace(display);\n  }\n\n  function updateGutters(cm) {\n    renderGutters(cm.display);\n    regChange(cm);\n    alignHorizontally(cm);\n  }\n\n  // The display handles the DOM integration, both for input reading\n  // and content drawing. It holds references to DOM nodes and\n  // display-related state.\n\n  function Display(place, doc, input, options) {\n    var d = this;\n    this.input = input;\n\n    // Covers bottom-right square when both scrollbars are present.\n    d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n    d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n    // Covers bottom of gutter when coverGutterNextToScrollbar is on\n    // and h scrollbar is present.\n    d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n    d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n    // Will contain the actual code, positioned to cover the viewport.\n    d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n    // Elements are added to these to represent selection and cursors.\n    d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n    d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n    // A visibility: hidden element used to find the size of things.\n    d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n    // When lines outside of the viewport are measured, they are drawn in this.\n    d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n    // Wraps everything that needs to exist inside the vertically-padded coordinate system\n    d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n                      null, \"position: relative; outline: none\");\n    var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n    // Moved around its parent to cover visible view.\n    d.mover = elt(\"div\", [lines], null, \"position: relative\");\n    // Set to the height of the document, allowing scrolling.\n    d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n    d.sizerWidth = null;\n    // Behavior of elts with overflow: auto and padding is\n    // inconsistent across browsers. This is used to ensure the\n    // scrollable area is big enough.\n    d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n    // Will contain the gutters, if any.\n    d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n    d.lineGutter = null;\n    // Actual scrollable element.\n    d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n    d.scroller.setAttribute(\"tabIndex\", \"-1\");\n    // The element in which the editor lives.\n    d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n\n    // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n    if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n    if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }\n\n    if (place) {\n      if (place.appendChild) { place.appendChild(d.wrapper); }\n      else { place(d.wrapper); }\n    }\n\n    // Current rendered range (may be bigger than the view window).\n    d.viewFrom = d.viewTo = doc.first;\n    d.reportedViewFrom = d.reportedViewTo = doc.first;\n    // Information about the rendered lines.\n    d.view = [];\n    d.renderedView = null;\n    // Holds info about a single rendered line when it was rendered\n    // for measurement, while not in view.\n    d.externalMeasured = null;\n    // Empty space (in pixels) above the view\n    d.viewOffset = 0;\n    d.lastWrapHeight = d.lastWrapWidth = 0;\n    d.updateLineNumbers = null;\n\n    d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n    d.scrollbarsClipped = false;\n\n    // Used to only resize the line number gutter when necessary (when\n    // the amount of lines crosses a boundary that makes its width change)\n    d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n    // Set to true when a non-horizontal-scrolling line widget is\n    // added. As an optimization, line widget aligning is skipped when\n    // this is false.\n    d.alignWidgets = false;\n\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n    // Tracks the maximum line length so that the horizontal scrollbar\n    // can be kept static when scrolling.\n    d.maxLine = null;\n    d.maxLineLength = 0;\n    d.maxLineChanged = false;\n\n    // Used for measuring wheel scrolling granularity\n    d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n    // True when shift is held down.\n    d.shift = false;\n\n    // Used to track whether anything happened since the context menu\n    // was opened.\n    d.selForContextMenu = null;\n\n    d.activeTouch = null;\n\n    d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);\n    renderGutters(d);\n\n    input.init(d);\n  }\n\n  // Since the delta values reported on mouse wheel events are\n  // unstandardized between browsers and even browser versions, and\n  // generally horribly unpredictable, this code starts by measuring\n  // the scroll effect that the first few mouse wheel events have,\n  // and, from that, detects the way it can convert deltas to pixel\n  // offsets afterwards.\n  //\n  // The reason we want to know the amount a wheel event will scroll\n  // is that it gives us a chance to update the display before the\n  // actual scrolling happens, reducing flickering.\n\n  var wheelSamples = 0, wheelPixelsPerUnit = null;\n  // Fill in a browser-detected starting value on browsers where we\n  // know one. These don't have to be accurate -- the result of them\n  // being wrong would just be a slight flicker on the first wheel\n  // scroll (if it is large enough).\n  if (ie) { wheelPixelsPerUnit = -.53; }\n  else if (gecko) { wheelPixelsPerUnit = 15; }\n  else if (chrome) { wheelPixelsPerUnit = -.7; }\n  else if (safari) { wheelPixelsPerUnit = -1/3; }\n\n  function wheelEventDelta(e) {\n    var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n    if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }\n    if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }\n    else if (dy == null) { dy = e.wheelDelta; }\n    return {x: dx, y: dy}\n  }\n  function wheelEventPixels(e) {\n    var delta = wheelEventDelta(e);\n    delta.x *= wheelPixelsPerUnit;\n    delta.y *= wheelPixelsPerUnit;\n    return delta\n  }\n\n  function onScrollWheel(cm, e) {\n    var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n\n    var display = cm.display, scroll = display.scroller;\n    // Quit if there's nothing to scroll here\n    var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n    var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n    if (!(dx && canScrollX || dy && canScrollY)) { return }\n\n    // Webkit browsers on OS X abort momentum scrolls when the target\n    // of the scroll event is removed from the scrollable element.\n    // This hack (see related code in patchDisplay) makes sure the\n    // element is kept around.\n    if (dy && mac && webkit) {\n      outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n        for (var i = 0; i < view.length; i++) {\n          if (view[i].node == cur) {\n            cm.display.currentWheelTarget = cur;\n            break outer\n          }\n        }\n      }\n    }\n\n    // On some browsers, horizontal scrolling will cause redraws to\n    // happen before the gutter has been realigned, causing it to\n    // wriggle around in a most unseemly way. When we have an\n    // estimated pixels/delta value, we just handle horizontal\n    // scrolling entirely here. It'll be slightly off from native, but\n    // better than glitching out.\n    if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {\n      if (dy && canScrollY)\n        { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); }\n      setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit));\n      // Only prevent default scrolling if vertical scrolling is\n      // actually possible. Otherwise, it causes vertical scroll\n      // jitter on OSX trackpads when deltaX is small and deltaY\n      // is large (issue #3579)\n      if (!dy || (dy && canScrollY))\n        { e_preventDefault(e); }\n      display.wheelStartX = null; // Abort measurement, if in progress\n      return\n    }\n\n    // 'Project' the visible viewport to cover the area that is being\n    // scrolled into view (if we know enough to estimate it).\n    if (dy && wheelPixelsPerUnit != null) {\n      var pixels = dy * wheelPixelsPerUnit;\n      var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n      if (pixels < 0) { top = Math.max(0, top + pixels - 50); }\n      else { bot = Math.min(cm.doc.height, bot + pixels + 50); }\n      updateDisplaySimple(cm, {top: top, bottom: bot});\n    }\n\n    if (wheelSamples < 20) {\n      if (display.wheelStartX == null) {\n        display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n        display.wheelDX = dx; display.wheelDY = dy;\n        setTimeout(function () {\n          if (display.wheelStartX == null) { return }\n          var movedX = scroll.scrollLeft - display.wheelStartX;\n          var movedY = scroll.scrollTop - display.wheelStartY;\n          var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n            (movedX && display.wheelDX && movedX / display.wheelDX);\n          display.wheelStartX = display.wheelStartY = null;\n          if (!sample) { return }\n          wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n          ++wheelSamples;\n        }, 200);\n      } else {\n        display.wheelDX += dx; display.wheelDY += dy;\n      }\n    }\n  }\n\n  // Selection objects are immutable. A new one is created every time\n  // the selection changes. A selection is one or more non-overlapping\n  // (and non-touching) ranges, sorted, and an integer that indicates\n  // which one is the primary selection (the one that's scrolled into\n  // view, that getCursor returns, etc).\n  var Selection = function(ranges, primIndex) {\n    this.ranges = ranges;\n    this.primIndex = primIndex;\n  };\n\n  Selection.prototype.primary = function () { return this.ranges[this.primIndex] };\n\n  Selection.prototype.equals = function (other) {\n    if (other == this) { return true }\n    if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }\n    for (var i = 0; i < this.ranges.length; i++) {\n      var here = this.ranges[i], there = other.ranges[i];\n      if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }\n    }\n    return true\n  };\n\n  Selection.prototype.deepCopy = function () {\n    var out = [];\n    for (var i = 0; i < this.ranges.length; i++)\n      { out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); }\n    return new Selection(out, this.primIndex)\n  };\n\n  Selection.prototype.somethingSelected = function () {\n    for (var i = 0; i < this.ranges.length; i++)\n      { if (!this.ranges[i].empty()) { return true } }\n    return false\n  };\n\n  Selection.prototype.contains = function (pos, end) {\n    if (!end) { end = pos; }\n    for (var i = 0; i < this.ranges.length; i++) {\n      var range = this.ranges[i];\n      if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n        { return i }\n    }\n    return -1\n  };\n\n  var Range = function(anchor, head) {\n    this.anchor = anchor; this.head = head;\n  };\n\n  Range.prototype.from = function () { return minPos(this.anchor, this.head) };\n  Range.prototype.to = function () { return maxPos(this.anchor, this.head) };\n  Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };\n\n  // Take an unsorted, potentially overlapping set of ranges, and\n  // build a selection out of it. 'Consumes' ranges array (modifying\n  // it).\n  function normalizeSelection(cm, ranges, primIndex) {\n    var mayTouch = cm && cm.options.selectionsMayTouch;\n    var prim = ranges[primIndex];\n    ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });\n    primIndex = indexOf(ranges, prim);\n    for (var i = 1; i < ranges.length; i++) {\n      var cur = ranges[i], prev = ranges[i - 1];\n      var diff = cmp(prev.to(), cur.from());\n      if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n        var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n        var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n        if (i <= primIndex) { --primIndex; }\n        ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n      }\n    }\n    return new Selection(ranges, primIndex)\n  }\n\n  function simpleSelection(anchor, head) {\n    return new Selection([new Range(anchor, head || anchor)], 0)\n  }\n\n  // Compute the position of the end of a change (its 'to' property\n  // refers to the pre-change end).\n  function changeEnd(change) {\n    if (!change.text) { return change.to }\n    return Pos(change.from.line + change.text.length - 1,\n               lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n  }\n\n  // Adjust a position to refer to the post-change position of the\n  // same text, or the end of the change if the change covers it.\n  function adjustForChange(pos, change) {\n    if (cmp(pos, change.from) < 0) { return pos }\n    if (cmp(pos, change.to) <= 0) { return changeEnd(change) }\n\n    var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n    if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }\n    return Pos(line, ch)\n  }\n\n  function computeSelAfterChange(doc, change) {\n    var out = [];\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      var range = doc.sel.ranges[i];\n      out.push(new Range(adjustForChange(range.anchor, change),\n                         adjustForChange(range.head, change)));\n    }\n    return normalizeSelection(doc.cm, out, doc.sel.primIndex)\n  }\n\n  function offsetPos(pos, old, nw) {\n    if (pos.line == old.line)\n      { return Pos(nw.line, pos.ch - old.ch + nw.ch) }\n    else\n      { return Pos(nw.line + (pos.line - old.line), pos.ch) }\n  }\n\n  // Used by replaceSelections to allow moving the selection to the\n  // start or around the replaced test. Hint may be \"start\" or \"around\".\n  function computeReplacedSel(doc, changes, hint) {\n    var out = [];\n    var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n    for (var i = 0; i < changes.length; i++) {\n      var change = changes[i];\n      var from = offsetPos(change.from, oldPrev, newPrev);\n      var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n      oldPrev = change.to;\n      newPrev = to;\n      if (hint == \"around\") {\n        var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n        out[i] = new Range(inv ? to : from, inv ? from : to);\n      } else {\n        out[i] = new Range(from, from);\n      }\n    }\n    return new Selection(out, doc.sel.primIndex)\n  }\n\n  // Used to get the editor into a consistent state again when options change.\n\n  function loadMode(cm) {\n    cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n    resetModeState(cm);\n  }\n\n  function resetModeState(cm) {\n    cm.doc.iter(function (line) {\n      if (line.stateAfter) { line.stateAfter = null; }\n      if (line.styles) { line.styles = null; }\n    });\n    cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n    startWorker(cm, 100);\n    cm.state.modeGen++;\n    if (cm.curOp) { regChange(cm); }\n  }\n\n  // DOCUMENT DATA STRUCTURE\n\n  // By default, updates that start and end at the beginning of a line\n  // are treated specially, in order to make the association of line\n  // widgets and marker elements with the text behave more intuitive.\n  function isWholeLineUpdate(doc, change) {\n    return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n      (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n  }\n\n  // Perform a change on the document data structure.\n  function updateDoc(doc, change, markedSpans, estimateHeight) {\n    function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n    function update(line, text, spans) {\n      updateLine(line, text, spans, estimateHeight);\n      signalLater(line, \"change\", line, change);\n    }\n    function linesFor(start, end) {\n      var result = [];\n      for (var i = start; i < end; ++i)\n        { result.push(new Line(text[i], spansFor(i), estimateHeight)); }\n      return result\n    }\n\n    var from = change.from, to = change.to, text = change.text;\n    var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n    var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n    // Adjust the line structure\n    if (change.full) {\n      doc.insert(0, linesFor(0, text.length));\n      doc.remove(text.length, doc.size - text.length);\n    } else if (isWholeLineUpdate(doc, change)) {\n      // This is a whole-line replace. Treated specially to make\n      // sure line objects move the way they are supposed to.\n      var added = linesFor(0, text.length - 1);\n      update(lastLine, lastLine.text, lastSpans);\n      if (nlines) { doc.remove(from.line, nlines); }\n      if (added.length) { doc.insert(from.line, added); }\n    } else if (firstLine == lastLine) {\n      if (text.length == 1) {\n        update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n      } else {\n        var added$1 = linesFor(1, text.length - 1);\n        added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n        update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n        doc.insert(from.line + 1, added$1);\n      }\n    } else if (text.length == 1) {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n      doc.remove(from.line + 1, nlines);\n    } else {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n      update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n      var added$2 = linesFor(1, text.length - 1);\n      if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }\n      doc.insert(from.line + 1, added$2);\n    }\n\n    signalLater(doc, \"change\", doc, change);\n  }\n\n  // Call f for all linked documents.\n  function linkedDocs(doc, f, sharedHistOnly) {\n    function propagate(doc, skip, sharedHist) {\n      if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {\n        var rel = doc.linked[i];\n        if (rel.doc == skip) { continue }\n        var shared = sharedHist && rel.sharedHist;\n        if (sharedHistOnly && !shared) { continue }\n        f(rel.doc, shared);\n        propagate(rel.doc, doc, shared);\n      } }\n    }\n    propagate(doc, null, true);\n  }\n\n  // Attach a document to an editor.\n  function attachDoc(cm, doc) {\n    if (doc.cm) { throw new Error(\"This document is already in use.\") }\n    cm.doc = doc;\n    doc.cm = cm;\n    estimateLineHeights(cm);\n    loadMode(cm);\n    setDirectionClass(cm);\n    if (!cm.options.lineWrapping) { findMaxLine(cm); }\n    cm.options.mode = doc.modeOption;\n    regChange(cm);\n  }\n\n  function setDirectionClass(cm) {\n  (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n  }\n\n  function directionChanged(cm) {\n    runInOp(cm, function () {\n      setDirectionClass(cm);\n      regChange(cm);\n    });\n  }\n\n  function History(startGen) {\n    // Arrays of change events and selections. Doing something adds an\n    // event to done and clears undo. Undoing moves events from done\n    // to undone, redoing moves them in the other direction.\n    this.done = []; this.undone = [];\n    this.undoDepth = Infinity;\n    // Used to track when changes can be merged into a single undo\n    // event\n    this.lastModTime = this.lastSelTime = 0;\n    this.lastOp = this.lastSelOp = null;\n    this.lastOrigin = this.lastSelOrigin = null;\n    // Used by the isClean() method\n    this.generation = this.maxGeneration = startGen || 1;\n  }\n\n  // Create a history change event from an updateDoc-style change\n  // object.\n  function historyChangeFromChange(doc, change) {\n    var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n    attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n    linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);\n    return histChange\n  }\n\n  // Pop all selection events off the end of a history array. Stop at\n  // a change event.\n  function clearSelectionEvents(array) {\n    while (array.length) {\n      var last = lst(array);\n      if (last.ranges) { array.pop(); }\n      else { break }\n    }\n  }\n\n  // Find the top change event in the history. Pop off selection\n  // events that are in the way.\n  function lastChangeEvent(hist, force) {\n    if (force) {\n      clearSelectionEvents(hist.done);\n      return lst(hist.done)\n    } else if (hist.done.length && !lst(hist.done).ranges) {\n      return lst(hist.done)\n    } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n      hist.done.pop();\n      return lst(hist.done)\n    }\n  }\n\n  // Register a change in the history. Merges changes that are within\n  // a single operation, or are close together with an origin that\n  // allows merging (starting with \"+\") into a single event.\n  function addChangeToHistory(doc, change, selAfter, opId) {\n    var hist = doc.history;\n    hist.undone.length = 0;\n    var time = +new Date, cur;\n    var last;\n\n    if ((hist.lastOp == opId ||\n         hist.lastOrigin == change.origin && change.origin &&\n         ((change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||\n          change.origin.charAt(0) == \"*\")) &&\n        (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n      // Merge this change into the last event\n      last = lst(cur.changes);\n      if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n        // Optimized case for simple insertion -- don't want to add\n        // new changesets for every character typed\n        last.to = changeEnd(change);\n      } else {\n        // Add new sub-event\n        cur.changes.push(historyChangeFromChange(doc, change));\n      }\n    } else {\n      // Can not be merged, start a new event.\n      var before = lst(hist.done);\n      if (!before || !before.ranges)\n        { pushSelectionToHistory(doc.sel, hist.done); }\n      cur = {changes: [historyChangeFromChange(doc, change)],\n             generation: hist.generation};\n      hist.done.push(cur);\n      while (hist.done.length > hist.undoDepth) {\n        hist.done.shift();\n        if (!hist.done[0].ranges) { hist.done.shift(); }\n      }\n    }\n    hist.done.push(selAfter);\n    hist.generation = ++hist.maxGeneration;\n    hist.lastModTime = hist.lastSelTime = time;\n    hist.lastOp = hist.lastSelOp = opId;\n    hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n    if (!last) { signal(doc, \"historyAdded\"); }\n  }\n\n  function selectionEventCanBeMerged(doc, origin, prev, sel) {\n    var ch = origin.charAt(0);\n    return ch == \"*\" ||\n      ch == \"+\" &&\n      prev.ranges.length == sel.ranges.length &&\n      prev.somethingSelected() == sel.somethingSelected() &&\n      new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n  }\n\n  // Called whenever the selection changes, sets the new selection as\n  // the pending selection in the history, and pushes the old pending\n  // selection into the 'done' array when it was significantly\n  // different (in number of selected ranges, emptiness, or time).\n  function addSelectionToHistory(doc, sel, opId, options) {\n    var hist = doc.history, origin = options && options.origin;\n\n    // A new event is started when the previous origin does not match\n    // the current, or the origins don't allow matching. Origins\n    // starting with * are always merged, those starting with + are\n    // merged when similar and close together in time.\n    if (opId == hist.lastSelOp ||\n        (origin && hist.lastSelOrigin == origin &&\n         (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n          selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n      { hist.done[hist.done.length - 1] = sel; }\n    else\n      { pushSelectionToHistory(sel, hist.done); }\n\n    hist.lastSelTime = +new Date;\n    hist.lastSelOrigin = origin;\n    hist.lastSelOp = opId;\n    if (options && options.clearRedo !== false)\n      { clearSelectionEvents(hist.undone); }\n  }\n\n  function pushSelectionToHistory(sel, dest) {\n    var top = lst(dest);\n    if (!(top && top.ranges && top.equals(sel)))\n      { dest.push(sel); }\n  }\n\n  // Used to store marked span information in the history.\n  function attachLocalSpans(doc, change, from, to) {\n    var existing = change[\"spans_\" + doc.id], n = 0;\n    doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n      if (line.markedSpans)\n        { (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans; }\n      ++n;\n    });\n  }\n\n  // When un/re-doing restores text containing marked spans, those\n  // that have been explicitly cleared should not be restored.\n  function removeClearedSpans(spans) {\n    if (!spans) { return null }\n    var out;\n    for (var i = 0; i < spans.length; ++i) {\n      if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }\n      else if (out) { out.push(spans[i]); }\n    }\n    return !out ? spans : out.length ? out : null\n  }\n\n  // Retrieve and filter the old marked spans stored in a change event.\n  function getOldSpans(doc, change) {\n    var found = change[\"spans_\" + doc.id];\n    if (!found) { return null }\n    var nw = [];\n    for (var i = 0; i < change.text.length; ++i)\n      { nw.push(removeClearedSpans(found[i])); }\n    return nw\n  }\n\n  // Used for un/re-doing changes from the history. Combines the\n  // result of computing the existing spans with the set of spans that\n  // existed in the history (so that deleting around a span and then\n  // undoing brings back the span).\n  function mergeOldSpans(doc, change) {\n    var old = getOldSpans(doc, change);\n    var stretched = stretchSpansOverChange(doc, change);\n    if (!old) { return stretched }\n    if (!stretched) { return old }\n\n    for (var i = 0; i < old.length; ++i) {\n      var oldCur = old[i], stretchCur = stretched[i];\n      if (oldCur && stretchCur) {\n        spans: for (var j = 0; j < stretchCur.length; ++j) {\n          var span = stretchCur[j];\n          for (var k = 0; k < oldCur.length; ++k)\n            { if (oldCur[k].marker == span.marker) { continue spans } }\n          oldCur.push(span);\n        }\n      } else if (stretchCur) {\n        old[i] = stretchCur;\n      }\n    }\n    return old\n  }\n\n  // Used both to provide a JSON-safe object in .getHistory, and, when\n  // detaching a document, to split the history in two\n  function copyHistoryArray(events, newGroup, instantiateSel) {\n    var copy = [];\n    for (var i = 0; i < events.length; ++i) {\n      var event = events[i];\n      if (event.ranges) {\n        copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n        continue\n      }\n      var changes = event.changes, newChanges = [];\n      copy.push({changes: newChanges});\n      for (var j = 0; j < changes.length; ++j) {\n        var change = changes[j], m = (void 0);\n        newChanges.push({from: change.from, to: change.to, text: change.text});\n        if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\\d+)$/)) {\n          if (indexOf(newGroup, Number(m[1])) > -1) {\n            lst(newChanges)[prop] = change[prop];\n            delete change[prop];\n          }\n        } } }\n      }\n    }\n    return copy\n  }\n\n  // The 'scroll' parameter given to many of these indicated whether\n  // the new cursor position should be scrolled into view after\n  // modifying the selection.\n\n  // If shift is held or the extend flag is set, extends a range to\n  // include a given position (and optionally a second position).\n  // Otherwise, simply returns the range between the given positions.\n  // Used for cursor motion and such.\n  function extendRange(range, head, other, extend) {\n    if (extend) {\n      var anchor = range.anchor;\n      if (other) {\n        var posBefore = cmp(head, anchor) < 0;\n        if (posBefore != (cmp(other, anchor) < 0)) {\n          anchor = head;\n          head = other;\n        } else if (posBefore != (cmp(head, other) < 0)) {\n          head = other;\n        }\n      }\n      return new Range(anchor, head)\n    } else {\n      return new Range(other || head, head)\n    }\n  }\n\n  // Extend the primary selection range, discard the rest.\n  function extendSelection(doc, head, other, options, extend) {\n    if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }\n    setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n  }\n\n  // Extend all selections (pos is an array of selections with length\n  // equal the number of selections)\n  function extendSelections(doc, heads, options) {\n    var out = [];\n    var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n    for (var i = 0; i < doc.sel.ranges.length; i++)\n      { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }\n    var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n    setSelection(doc, newSel, options);\n  }\n\n  // Updates a single range in the selection.\n  function replaceOneSelection(doc, i, range, options) {\n    var ranges = doc.sel.ranges.slice(0);\n    ranges[i] = range;\n    setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);\n  }\n\n  // Reset the selection to a single range.\n  function setSimpleSelection(doc, anchor, head, options) {\n    setSelection(doc, simpleSelection(anchor, head), options);\n  }\n\n  // Give beforeSelectionChange handlers a change to influence a\n  // selection update.\n  function filterSelectionChange(doc, sel, options) {\n    var obj = {\n      ranges: sel.ranges,\n      update: function(ranges) {\n        this.ranges = [];\n        for (var i = 0; i < ranges.length; i++)\n          { this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n                                     clipPos(doc, ranges[i].head)); }\n      },\n      origin: options && options.origin\n    };\n    signal(doc, \"beforeSelectionChange\", doc, obj);\n    if (doc.cm) { signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj); }\n    if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }\n    else { return sel }\n  }\n\n  function setSelectionReplaceHistory(doc, sel, options) {\n    var done = doc.history.done, last = lst(done);\n    if (last && last.ranges) {\n      done[done.length - 1] = sel;\n      setSelectionNoUndo(doc, sel, options);\n    } else {\n      setSelection(doc, sel, options);\n    }\n  }\n\n  // Set a new selection.\n  function setSelection(doc, sel, options) {\n    setSelectionNoUndo(doc, sel, options);\n    addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n  }\n\n  function setSelectionNoUndo(doc, sel, options) {\n    if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n      { sel = filterSelectionChange(doc, sel, options); }\n\n    var bias = options && options.bias ||\n      (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n    setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n    if (!(options && options.scroll === false) && doc.cm)\n      { ensureCursorVisible(doc.cm); }\n  }\n\n  function setSelectionInner(doc, sel) {\n    if (sel.equals(doc.sel)) { return }\n\n    doc.sel = sel;\n\n    if (doc.cm) {\n      doc.cm.curOp.updateInput = 1;\n      doc.cm.curOp.selectionChanged = true;\n      signalCursorActivity(doc.cm);\n    }\n    signalLater(doc, \"cursorActivity\", doc);\n  }\n\n  // Verify that the selection does not partially select any atomic\n  // marked ranges.\n  function reCheckSelection(doc) {\n    setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n  }\n\n  // Return a selection that does not partially select any atomic\n  // ranges.\n  function skipAtomicInSelection(doc, sel, bias, mayClear) {\n    var out;\n    for (var i = 0; i < sel.ranges.length; i++) {\n      var range = sel.ranges[i];\n      var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n      var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n      var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n      if (out || newAnchor != range.anchor || newHead != range.head) {\n        if (!out) { out = sel.ranges.slice(0, i); }\n        out[i] = new Range(newAnchor, newHead);\n      }\n    }\n    return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel\n  }\n\n  function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n    var line = getLine(doc, pos.line);\n    if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n      var sp = line.markedSpans[i], m = sp.marker;\n\n      // Determine if we should prevent the cursor being placed to the left/right of an atomic marker\n      // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it\n      // is with selectLeft/Right\n      var preventCursorLeft = (\"selectLeft\" in m) ? !m.selectLeft : m.inclusiveLeft;\n      var preventCursorRight = (\"selectRight\" in m) ? !m.selectRight : m.inclusiveRight;\n\n      if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n          (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n        if (mayClear) {\n          signal(m, \"beforeCursorEnter\");\n          if (m.explicitlyCleared) {\n            if (!line.markedSpans) { break }\n            else {--i; continue}\n          }\n        }\n        if (!m.atomic) { continue }\n\n        if (oldPos) {\n          var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);\n          if (dir < 0 ? preventCursorRight : preventCursorLeft)\n            { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }\n          if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n            { return skipAtomicInner(doc, near, pos, dir, mayClear) }\n        }\n\n        var far = m.find(dir < 0 ? -1 : 1);\n        if (dir < 0 ? preventCursorLeft : preventCursorRight)\n          { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }\n        return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n      }\n    } }\n    return pos\n  }\n\n  // Ensure a given position is not inside an atomic range.\n  function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n    var dir = bias || 1;\n    var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n        (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n        skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n        (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n    if (!found) {\n      doc.cantEdit = true;\n      return Pos(doc.first, 0)\n    }\n    return found\n  }\n\n  function movePos(doc, pos, dir, line) {\n    if (dir < 0 && pos.ch == 0) {\n      if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }\n      else { return null }\n    } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n      if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }\n      else { return null }\n    } else {\n      return new Pos(pos.line, pos.ch + dir)\n    }\n  }\n\n  function selectAll(cm) {\n    cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n  }\n\n  // UPDATING\n\n  // Allow \"beforeChange\" event handlers to influence a change\n  function filterChange(doc, change, update) {\n    var obj = {\n      canceled: false,\n      from: change.from,\n      to: change.to,\n      text: change.text,\n      origin: change.origin,\n      cancel: function () { return obj.canceled = true; }\n    };\n    if (update) { obj.update = function (from, to, text, origin) {\n      if (from) { obj.from = clipPos(doc, from); }\n      if (to) { obj.to = clipPos(doc, to); }\n      if (text) { obj.text = text; }\n      if (origin !== undefined) { obj.origin = origin; }\n    }; }\n    signal(doc, \"beforeChange\", doc, obj);\n    if (doc.cm) { signal(doc.cm, \"beforeChange\", doc.cm, obj); }\n\n    if (obj.canceled) {\n      if (doc.cm) { doc.cm.curOp.updateInput = 2; }\n      return null\n    }\n    return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n  }\n\n  // Apply a change to a document, and add it to the document's\n  // history, and propagating it to all linked documents.\n  function makeChange(doc, change, ignoreReadOnly) {\n    if (doc.cm) {\n      if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }\n      if (doc.cm.state.suppressEdits) { return }\n    }\n\n    if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n      change = filterChange(doc, change, true);\n      if (!change) { return }\n    }\n\n    // Possibly split or suppress the update based on the presence\n    // of read-only spans in its range.\n    var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n    if (split) {\n      for (var i = split.length - 1; i >= 0; --i)\n        { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text, origin: change.origin}); }\n    } else {\n      makeChangeInner(doc, change);\n    }\n  }\n\n  function makeChangeInner(doc, change) {\n    if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) { return }\n    var selAfter = computeSelAfterChange(doc, change);\n    addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n    makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n    var rebased = [];\n\n    linkedDocs(doc, function (doc, sharedHist) {\n      if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n        rebaseHist(doc.history, change);\n        rebased.push(doc.history);\n      }\n      makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n    });\n  }\n\n  // Revert a change stored in a document's history.\n  function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n    var suppress = doc.cm && doc.cm.state.suppressEdits;\n    if (suppress && !allowSelectionOnly) { return }\n\n    var hist = doc.history, event, selAfter = doc.sel;\n    var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n    // Verify that there is a useable event (so that ctrl-z won't\n    // needlessly clear selection events)\n    var i = 0;\n    for (; i < source.length; i++) {\n      event = source[i];\n      if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n        { break }\n    }\n    if (i == source.length) { return }\n    hist.lastOrigin = hist.lastSelOrigin = null;\n\n    for (;;) {\n      event = source.pop();\n      if (event.ranges) {\n        pushSelectionToHistory(event, dest);\n        if (allowSelectionOnly && !event.equals(doc.sel)) {\n          setSelection(doc, event, {clearRedo: false});\n          return\n        }\n        selAfter = event;\n      } else if (suppress) {\n        source.push(event);\n        return\n      } else { break }\n    }\n\n    // Build up a reverse change object to add to the opposite history\n    // stack (redo when undoing, and vice versa).\n    var antiChanges = [];\n    pushSelectionToHistory(selAfter, dest);\n    dest.push({changes: antiChanges, generation: hist.generation});\n    hist.generation = event.generation || ++hist.maxGeneration;\n\n    var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n    var loop = function ( i ) {\n      var change = event.changes[i];\n      change.origin = type;\n      if (filter && !filterChange(doc, change, false)) {\n        source.length = 0;\n        return {}\n      }\n\n      antiChanges.push(historyChangeFromChange(doc, change));\n\n      var after = i ? computeSelAfterChange(doc, change) : lst(source);\n      makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n      if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }\n      var rebased = [];\n\n      // Propagate to the linked documents\n      linkedDocs(doc, function (doc, sharedHist) {\n        if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n          rebaseHist(doc.history, change);\n          rebased.push(doc.history);\n        }\n        makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n      });\n    };\n\n    for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n      var returned = loop( i$1 );\n\n      if ( returned ) return returned.v;\n    }\n  }\n\n  // Sub-views need their line numbers shifted when text is added\n  // above or below them in the parent document.\n  function shiftDoc(doc, distance) {\n    if (distance == 0) { return }\n    doc.first += distance;\n    doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(\n      Pos(range.anchor.line + distance, range.anchor.ch),\n      Pos(range.head.line + distance, range.head.ch)\n    ); }), doc.sel.primIndex);\n    if (doc.cm) {\n      regChange(doc.cm, doc.first, doc.first - distance, distance);\n      for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n        { regLineChange(doc.cm, l, \"gutter\"); }\n    }\n  }\n\n  // More lower-level change function, handling only a single document\n  // (not linked ones).\n  function makeChangeSingleDoc(doc, change, selAfter, spans) {\n    if (doc.cm && !doc.cm.curOp)\n      { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }\n\n    if (change.to.line < doc.first) {\n      shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n      return\n    }\n    if (change.from.line > doc.lastLine()) { return }\n\n    // Clip the change to the size of this doc\n    if (change.from.line < doc.first) {\n      var shift = change.text.length - 1 - (doc.first - change.from.line);\n      shiftDoc(doc, shift);\n      change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n                text: [lst(change.text)], origin: change.origin};\n    }\n    var last = doc.lastLine();\n    if (change.to.line > last) {\n      change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n                text: [change.text[0]], origin: change.origin};\n    }\n\n    change.removed = getBetween(doc, change.from, change.to);\n\n    if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }\n    if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }\n    else { updateDoc(doc, change, spans); }\n    setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n\n    if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0)))\n      { doc.cantEdit = false; }\n  }\n\n  // Handle the interaction of a change to a document with the editor\n  // that this document is part of.\n  function makeChangeSingleDocInEditor(cm, change, spans) {\n    var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n    var recomputeMaxLength = false, checkWidthStart = from.line;\n    if (!cm.options.lineWrapping) {\n      checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n      doc.iter(checkWidthStart, to.line + 1, function (line) {\n        if (line == display.maxLine) {\n          recomputeMaxLength = true;\n          return true\n        }\n      });\n    }\n\n    if (doc.sel.contains(change.from, change.to) > -1)\n      { signalCursorActivity(cm); }\n\n    updateDoc(doc, change, spans, estimateHeight(cm));\n\n    if (!cm.options.lineWrapping) {\n      doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n        var len = lineLength(line);\n        if (len > display.maxLineLength) {\n          display.maxLine = line;\n          display.maxLineLength = len;\n          display.maxLineChanged = true;\n          recomputeMaxLength = false;\n        }\n      });\n      if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }\n    }\n\n    retreatFrontier(doc, from.line);\n    startWorker(cm, 400);\n\n    var lendiff = change.text.length - (to.line - from.line) - 1;\n    // Remember that these lines changed, for updating the display\n    if (change.full)\n      { regChange(cm); }\n    else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n      { regLineChange(cm, from.line, \"text\"); }\n    else\n      { regChange(cm, from.line, to.line + 1, lendiff); }\n\n    var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n    if (changeHandler || changesHandler) {\n      var obj = {\n        from: from, to: to,\n        text: change.text,\n        removed: change.removed,\n        origin: change.origin\n      };\n      if (changeHandler) { signalLater(cm, \"change\", cm, obj); }\n      if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }\n    }\n    cm.display.selForContextMenu = null;\n  }\n\n  function replaceRange(doc, code, from, to, origin) {\n    var assign;\n\n    if (!to) { to = from; }\n    if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }\n    if (typeof code == \"string\") { code = doc.splitLines(code); }\n    makeChange(doc, {from: from, to: to, text: code, origin: origin});\n  }\n\n  // Rebasing/resetting history to deal with externally-sourced changes\n\n  function rebaseHistSelSingle(pos, from, to, diff) {\n    if (to < pos.line) {\n      pos.line += diff;\n    } else if (from < pos.line) {\n      pos.line = from;\n      pos.ch = 0;\n    }\n  }\n\n  // Tries to rebase an array of history events given a change in the\n  // document. If the change touches the same lines as the event, the\n  // event, and everything 'behind' it, is discarded. If the change is\n  // before the event, the event's positions are updated. Uses a\n  // copy-on-write scheme for the positions, to avoid having to\n  // reallocate them all on every rebase, but also avoid problems with\n  // shared position objects being unsafely updated.\n  function rebaseHistArray(array, from, to, diff) {\n    for (var i = 0; i < array.length; ++i) {\n      var sub = array[i], ok = true;\n      if (sub.ranges) {\n        if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n        for (var j = 0; j < sub.ranges.length; j++) {\n          rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n          rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n        }\n        continue\n      }\n      for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n        var cur = sub.changes[j$1];\n        if (to < cur.from.line) {\n          cur.from = Pos(cur.from.line + diff, cur.from.ch);\n          cur.to = Pos(cur.to.line + diff, cur.to.ch);\n        } else if (from <= cur.to.line) {\n          ok = false;\n          break\n        }\n      }\n      if (!ok) {\n        array.splice(0, i + 1);\n        i = 0;\n      }\n    }\n  }\n\n  function rebaseHist(hist, change) {\n    var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n    rebaseHistArray(hist.done, from, to, diff);\n    rebaseHistArray(hist.undone, from, to, diff);\n  }\n\n  // Utility for applying a change to a line by handle or number,\n  // returning the number and optionally registering the line as\n  // changed.\n  function changeLine(doc, handle, changeType, op) {\n    var no = handle, line = handle;\n    if (typeof handle == \"number\") { line = getLine(doc, clipLine(doc, handle)); }\n    else { no = lineNo(handle); }\n    if (no == null) { return null }\n    if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }\n    return line\n  }\n\n  // The document is represented as a BTree consisting of leaves, with\n  // chunk of lines in them, and branches, with up to ten leaves or\n  // other branch nodes below them. The top node is always a branch\n  // node, and is the document object itself (meaning it has\n  // additional methods and properties).\n  //\n  // All nodes have parent links. The tree is used both to go from\n  // line numbers to line objects, and to go from objects to numbers.\n  // It also indexes by height, and is used to convert between height\n  // and line object, and to find the total height of the document.\n  //\n  // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n  function LeafChunk(lines) {\n    this.lines = lines;\n    this.parent = null;\n    var height = 0;\n    for (var i = 0; i < lines.length; ++i) {\n      lines[i].parent = this;\n      height += lines[i].height;\n    }\n    this.height = height;\n  }\n\n  LeafChunk.prototype = {\n    chunkSize: function() { return this.lines.length },\n\n    // Remove the n lines at offset 'at'.\n    removeInner: function(at, n) {\n      for (var i = at, e = at + n; i < e; ++i) {\n        var line = this.lines[i];\n        this.height -= line.height;\n        cleanUpLine(line);\n        signalLater(line, \"delete\");\n      }\n      this.lines.splice(at, n);\n    },\n\n    // Helper used to collapse a small branch into a single leaf.\n    collapse: function(lines) {\n      lines.push.apply(lines, this.lines);\n    },\n\n    // Insert the given array of lines at offset 'at', count them as\n    // having the given height.\n    insertInner: function(at, lines, height) {\n      this.height += height;\n      this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n      for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; }\n    },\n\n    // Used to iterate over a part of the tree.\n    iterN: function(at, n, op) {\n      for (var e = at + n; at < e; ++at)\n        { if (op(this.lines[at])) { return true } }\n    }\n  };\n\n  function BranchChunk(children) {\n    this.children = children;\n    var size = 0, height = 0;\n    for (var i = 0; i < children.length; ++i) {\n      var ch = children[i];\n      size += ch.chunkSize(); height += ch.height;\n      ch.parent = this;\n    }\n    this.size = size;\n    this.height = height;\n    this.parent = null;\n  }\n\n  BranchChunk.prototype = {\n    chunkSize: function() { return this.size },\n\n    removeInner: function(at, n) {\n      this.size -= n;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var rm = Math.min(n, sz - at), oldHeight = child.height;\n          child.removeInner(at, rm);\n          this.height -= oldHeight - child.height;\n          if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\n          if ((n -= rm) == 0) { break }\n          at = 0;\n        } else { at -= sz; }\n      }\n      // If the result is smaller than 25 lines, ensure that it is a\n      // single leaf node.\n      if (this.size - n < 25 &&\n          (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n        var lines = [];\n        this.collapse(lines);\n        this.children = [new LeafChunk(lines)];\n        this.children[0].parent = this;\n      }\n    },\n\n    collapse: function(lines) {\n      for (var i = 0; i < this.children.length; ++i) { this.children[i].collapse(lines); }\n    },\n\n    insertInner: function(at, lines, height) {\n      this.size += lines.length;\n      this.height += height;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at <= sz) {\n          child.insertInner(at, lines, height);\n          if (child.lines && child.lines.length > 50) {\n            // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n            // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n            var remaining = child.lines.length % 25 + 25;\n            for (var pos = remaining; pos < child.lines.length;) {\n              var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n              child.height -= leaf.height;\n              this.children.splice(++i, 0, leaf);\n              leaf.parent = this;\n            }\n            child.lines = child.lines.slice(0, remaining);\n            this.maybeSpill();\n          }\n          break\n        }\n        at -= sz;\n      }\n    },\n\n    // When a node has grown, check whether it should be split.\n    maybeSpill: function() {\n      if (this.children.length <= 10) { return }\n      var me = this;\n      do {\n        var spilled = me.children.splice(me.children.length - 5, 5);\n        var sibling = new BranchChunk(spilled);\n        if (!me.parent) { // Become the parent node\n          var copy = new BranchChunk(me.children);\n          copy.parent = me;\n          me.children = [copy, sibling];\n          me = copy;\n       } else {\n          me.size -= sibling.size;\n          me.height -= sibling.height;\n          var myIndex = indexOf(me.parent.children, me);\n          me.parent.children.splice(myIndex + 1, 0, sibling);\n        }\n        sibling.parent = me.parent;\n      } while (me.children.length > 10)\n      me.parent.maybeSpill();\n    },\n\n    iterN: function(at, n, op) {\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var used = Math.min(n, sz - at);\n          if (child.iterN(at, used, op)) { return true }\n          if ((n -= used) == 0) { break }\n          at = 0;\n        } else { at -= sz; }\n      }\n    }\n  };\n\n  // Line widgets are block elements displayed above or below a line.\n\n  var LineWidget = function(doc, node, options) {\n    if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))\n      { this[opt] = options[opt]; } } }\n    this.doc = doc;\n    this.node = node;\n  };\n\n  LineWidget.prototype.clear = function () {\n    var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n    if (no == null || !ws) { return }\n    for (var i = 0; i < ws.length; ++i) { if (ws[i] == this) { ws.splice(i--, 1); } }\n    if (!ws.length) { line.widgets = null; }\n    var height = widgetHeight(this);\n    updateLineHeight(line, Math.max(0, line.height - height));\n    if (cm) {\n      runInOp(cm, function () {\n        adjustScrollWhenAboveVisible(cm, line, -height);\n        regLineChange(cm, no, \"widget\");\n      });\n      signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n    }\n  };\n\n  LineWidget.prototype.changed = function () {\n      var this$1 = this;\n\n    var oldH = this.height, cm = this.doc.cm, line = this.line;\n    this.height = null;\n    var diff = widgetHeight(this) - oldH;\n    if (!diff) { return }\n    if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }\n    if (cm) {\n      runInOp(cm, function () {\n        cm.curOp.forceUpdate = true;\n        adjustScrollWhenAboveVisible(cm, line, diff);\n        signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n      });\n    }\n  };\n  eventMixin(LineWidget);\n\n  function adjustScrollWhenAboveVisible(cm, line, diff) {\n    if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n      { addToScrollTop(cm, diff); }\n  }\n\n  function addLineWidget(doc, handle, node, options) {\n    var widget = new LineWidget(doc, node, options);\n    var cm = doc.cm;\n    if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }\n    changeLine(doc, handle, \"widget\", function (line) {\n      var widgets = line.widgets || (line.widgets = []);\n      if (widget.insertAt == null) { widgets.push(widget); }\n      else { widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); }\n      widget.line = line;\n      if (cm && !lineIsHidden(doc, line)) {\n        var aboveVisible = heightAtLine(line) < doc.scrollTop;\n        updateLineHeight(line, line.height + widgetHeight(widget));\n        if (aboveVisible) { addToScrollTop(cm, widget.height); }\n        cm.curOp.forceUpdate = true;\n      }\n      return true\n    });\n    if (cm) { signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle)); }\n    return widget\n  }\n\n  // TEXTMARKERS\n\n  // Created with markText and setBookmark methods. A TextMarker is a\n  // handle that can be used to clear or find a marked position in the\n  // document. Line objects hold arrays (markedSpans) containing\n  // {from, to, marker} object pointing to such marker objects, and\n  // indicating that such a marker is present on that line. Multiple\n  // lines may point to the same marker when it spans across lines.\n  // The spans will have null for their from/to properties when the\n  // marker continues beyond the start/end of the line. Markers have\n  // links back to the lines they currently touch.\n\n  // Collapsed markers have unique ids, in order to be able to order\n  // them, which is needed for uniquely determining an outer marker\n  // when they overlap (they may nest, but not partially overlap).\n  var nextMarkerId = 0;\n\n  var TextMarker = function(doc, type) {\n    this.lines = [];\n    this.type = type;\n    this.doc = doc;\n    this.id = ++nextMarkerId;\n  };\n\n  // Clear the marker.\n  TextMarker.prototype.clear = function () {\n    if (this.explicitlyCleared) { return }\n    var cm = this.doc.cm, withOp = cm && !cm.curOp;\n    if (withOp) { startOperation(cm); }\n    if (hasHandler(this, \"clear\")) {\n      var found = this.find();\n      if (found) { signalLater(this, \"clear\", found.from, found.to); }\n    }\n    var min = null, max = null;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this);\n      if (cm && !this.collapsed) { regLineChange(cm, lineNo(line), \"text\"); }\n      else if (cm) {\n        if (span.to != null) { max = lineNo(line); }\n        if (span.from != null) { min = lineNo(line); }\n      }\n      line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n      if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)\n        { updateLineHeight(line, textHeight(cm.display)); }\n    }\n    if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n      var visual = visualLine(this.lines[i$1]), len = lineLength(visual);\n      if (len > cm.display.maxLineLength) {\n        cm.display.maxLine = visual;\n        cm.display.maxLineLength = len;\n        cm.display.maxLineChanged = true;\n      }\n    } }\n\n    if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }\n    this.lines.length = 0;\n    this.explicitlyCleared = true;\n    if (this.atomic && this.doc.cantEdit) {\n      this.doc.cantEdit = false;\n      if (cm) { reCheckSelection(cm.doc); }\n    }\n    if (cm) { signalLater(cm, \"markerCleared\", cm, this, min, max); }\n    if (withOp) { endOperation(cm); }\n    if (this.parent) { this.parent.clear(); }\n  };\n\n  // Find the position of the marker in the document. Returns a {from,\n  // to} object by default. Side can be passed to get a specific side\n  // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n  // Pos objects returned contain a line object, rather than a line\n  // number (used to prevent looking up the same line twice).\n  TextMarker.prototype.find = function (side, lineObj) {\n    if (side == null && this.type == \"bookmark\") { side = 1; }\n    var from, to;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this);\n      if (span.from != null) {\n        from = Pos(lineObj ? line : lineNo(line), span.from);\n        if (side == -1) { return from }\n      }\n      if (span.to != null) {\n        to = Pos(lineObj ? line : lineNo(line), span.to);\n        if (side == 1) { return to }\n      }\n    }\n    return from && {from: from, to: to}\n  };\n\n  // Signals that the marker's widget changed, and surrounding layout\n  // should be recomputed.\n  TextMarker.prototype.changed = function () {\n      var this$1 = this;\n\n    var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n    if (!pos || !cm) { return }\n    runInOp(cm, function () {\n      var line = pos.line, lineN = lineNo(pos.line);\n      var view = findViewForLine(cm, lineN);\n      if (view) {\n        clearLineMeasurementCacheFor(view);\n        cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n      }\n      cm.curOp.updateMaxLine = true;\n      if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n        var oldHeight = widget.height;\n        widget.height = null;\n        var dHeight = widgetHeight(widget) - oldHeight;\n        if (dHeight)\n          { updateLineHeight(line, line.height + dHeight); }\n      }\n      signalLater(cm, \"markerChanged\", cm, this$1);\n    });\n  };\n\n  TextMarker.prototype.attachLine = function (line) {\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp;\n      if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n        { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }\n    }\n    this.lines.push(line);\n  };\n\n  TextMarker.prototype.detachLine = function (line) {\n    this.lines.splice(indexOf(this.lines, line), 1);\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp\n      ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n    }\n  };\n  eventMixin(TextMarker);\n\n  // Create a marker, wire it up to the right lines, and\n  function markText(doc, from, to, options, type) {\n    // Shared markers (across linked documents) are handled separately\n    // (markTextShared will call out to this again, once per\n    // document).\n    if (options && options.shared) { return markTextShared(doc, from, to, options, type) }\n    // Ensure we are in an operation.\n    if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }\n\n    var marker = new TextMarker(doc, type), diff = cmp(from, to);\n    if (options) { copyObj(options, marker, false); }\n    // Don't connect empty markers unless clearWhenEmpty is false\n    if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n      { return marker }\n    if (marker.replacedWith) {\n      // Showing up as a widget implies collapsed (widget replaces text)\n      marker.collapsed = true;\n      marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n      if (!options.handleMouseEvents) { marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\"); }\n      if (options.insertLeft) { marker.widgetNode.insertLeft = true; }\n    }\n    if (marker.collapsed) {\n      if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n          from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n        { throw new Error(\"Inserting collapsed marker partially overlapping an existing one\") }\n      seeCollapsedSpans();\n    }\n\n    if (marker.addToHistory)\n      { addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN); }\n\n    var curLine = from.line, cm = doc.cm, updateMaxLine;\n    doc.iter(curLine, to.line + 1, function (line) {\n      if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n        { updateMaxLine = true; }\n      if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }\n      addMarkedSpan(line, new MarkedSpan(marker,\n                                         curLine == from.line ? from.ch : null,\n                                         curLine == to.line ? to.ch : null));\n      ++curLine;\n    });\n    // lineIsHidden depends on the presence of the spans, so needs a second pass\n    if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {\n      if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }\n    }); }\n\n    if (marker.clearOnEnter) { on(marker, \"beforeCursorEnter\", function () { return marker.clear(); }); }\n\n    if (marker.readOnly) {\n      seeReadOnlySpans();\n      if (doc.history.done.length || doc.history.undone.length)\n        { doc.clearHistory(); }\n    }\n    if (marker.collapsed) {\n      marker.id = ++nextMarkerId;\n      marker.atomic = true;\n    }\n    if (cm) {\n      // Sync editor state\n      if (updateMaxLine) { cm.curOp.updateMaxLine = true; }\n      if (marker.collapsed)\n        { regChange(cm, from.line, to.line + 1); }\n      else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||\n               marker.attributes || marker.title)\n        { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, \"text\"); } }\n      if (marker.atomic) { reCheckSelection(cm.doc); }\n      signalLater(cm, \"markerAdded\", cm, marker);\n    }\n    return marker\n  }\n\n  // SHARED TEXTMARKERS\n\n  // A shared marker spans multiple linked documents. It is\n  // implemented as a meta-marker-object controlling multiple normal\n  // markers.\n  var SharedTextMarker = function(markers, primary) {\n    this.markers = markers;\n    this.primary = primary;\n    for (var i = 0; i < markers.length; ++i)\n      { markers[i].parent = this; }\n  };\n\n  SharedTextMarker.prototype.clear = function () {\n    if (this.explicitlyCleared) { return }\n    this.explicitlyCleared = true;\n    for (var i = 0; i < this.markers.length; ++i)\n      { this.markers[i].clear(); }\n    signalLater(this, \"clear\");\n  };\n\n  SharedTextMarker.prototype.find = function (side, lineObj) {\n    return this.primary.find(side, lineObj)\n  };\n  eventMixin(SharedTextMarker);\n\n  function markTextShared(doc, from, to, options, type) {\n    options = copyObj(options);\n    options.shared = false;\n    var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n    var widget = options.widgetNode;\n    linkedDocs(doc, function (doc) {\n      if (widget) { options.widgetNode = widget.cloneNode(true); }\n      markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n      for (var i = 0; i < doc.linked.length; ++i)\n        { if (doc.linked[i].isParent) { return } }\n      primary = lst(markers);\n    });\n    return new SharedTextMarker(markers, primary)\n  }\n\n  function findSharedMarkers(doc) {\n    return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })\n  }\n\n  function copySharedMarkers(doc, markers) {\n    for (var i = 0; i < markers.length; i++) {\n      var marker = markers[i], pos = marker.find();\n      var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n      if (cmp(mFrom, mTo)) {\n        var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n        marker.markers.push(subMark);\n        subMark.parent = marker;\n      }\n    }\n  }\n\n  function detachSharedMarkers(markers) {\n    var loop = function ( i ) {\n      var marker = markers[i], linked = [marker.primary.doc];\n      linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });\n      for (var j = 0; j < marker.markers.length; j++) {\n        var subMarker = marker.markers[j];\n        if (indexOf(linked, subMarker.doc) == -1) {\n          subMarker.parent = null;\n          marker.markers.splice(j--, 1);\n        }\n      }\n    };\n\n    for (var i = 0; i < markers.length; i++) loop( i );\n  }\n\n  var nextDocId = 0;\n  var Doc = function(text, mode, firstLine, lineSep, direction) {\n    if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }\n    if (firstLine == null) { firstLine = 0; }\n\n    BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n    this.first = firstLine;\n    this.scrollTop = this.scrollLeft = 0;\n    this.cantEdit = false;\n    this.cleanGeneration = 1;\n    this.modeFrontier = this.highlightFrontier = firstLine;\n    var start = Pos(firstLine, 0);\n    this.sel = simpleSelection(start);\n    this.history = new History(null);\n    this.id = ++nextDocId;\n    this.modeOption = mode;\n    this.lineSep = lineSep;\n    this.direction = (direction == \"rtl\") ? \"rtl\" : \"ltr\";\n    this.extend = false;\n\n    if (typeof text == \"string\") { text = this.splitLines(text); }\n    updateDoc(this, {from: start, to: start, text: text});\n    setSelection(this, simpleSelection(start), sel_dontScroll);\n  };\n\n  Doc.prototype = createObj(BranchChunk.prototype, {\n    constructor: Doc,\n    // Iterate over the document. Supports two forms -- with only one\n    // argument, it calls that for each line in the document. With\n    // three, it iterates over the range given by the first two (with\n    // the second being non-inclusive).\n    iter: function(from, to, op) {\n      if (op) { this.iterN(from - this.first, to - from, op); }\n      else { this.iterN(this.first, this.first + this.size, from); }\n    },\n\n    // Non-public interface for adding and removing lines.\n    insert: function(at, lines) {\n      var height = 0;\n      for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }\n      this.insertInner(at - this.first, lines, height);\n    },\n    remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n    // From here, the methods are part of the public interface. Most\n    // are also available from CodeMirror (editor) instances.\n\n    getValue: function(lineSep) {\n      var lines = getLines(this, this.first, this.first + this.size);\n      if (lineSep === false) { return lines }\n      return lines.join(lineSep || this.lineSeparator())\n    },\n    setValue: docMethodOp(function(code) {\n      var top = Pos(this.first, 0), last = this.first + this.size - 1;\n      makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n                        text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n      if (this.cm) { scrollToCoords(this.cm, 0, 0); }\n      setSelection(this, simpleSelection(top), sel_dontScroll);\n    }),\n    replaceRange: function(code, from, to, origin) {\n      from = clipPos(this, from);\n      to = to ? clipPos(this, to) : from;\n      replaceRange(this, code, from, to, origin);\n    },\n    getRange: function(from, to, lineSep) {\n      var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n      if (lineSep === false) { return lines }\n      return lines.join(lineSep || this.lineSeparator())\n    },\n\n    getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},\n\n    getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},\n    getLineNumber: function(line) {return lineNo(line)},\n\n    getLineHandleVisualStart: function(line) {\n      if (typeof line == \"number\") { line = getLine(this, line); }\n      return visualLine(line)\n    },\n\n    lineCount: function() {return this.size},\n    firstLine: function() {return this.first},\n    lastLine: function() {return this.first + this.size - 1},\n\n    clipPos: function(pos) {return clipPos(this, pos)},\n\n    getCursor: function(start) {\n      var range = this.sel.primary(), pos;\n      if (start == null || start == \"head\") { pos = range.head; }\n      else if (start == \"anchor\") { pos = range.anchor; }\n      else if (start == \"end\" || start == \"to\" || start === false) { pos = range.to(); }\n      else { pos = range.from(); }\n      return pos\n    },\n    listSelections: function() { return this.sel.ranges },\n    somethingSelected: function() {return this.sel.somethingSelected()},\n\n    setCursor: docMethodOp(function(line, ch, options) {\n      setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n    }),\n    setSelection: docMethodOp(function(anchor, head, options) {\n      setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n    }),\n    extendSelection: docMethodOp(function(head, other, options) {\n      extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n    }),\n    extendSelections: docMethodOp(function(heads, options) {\n      extendSelections(this, clipPosArray(this, heads), options);\n    }),\n    extendSelectionsBy: docMethodOp(function(f, options) {\n      var heads = map(this.sel.ranges, f);\n      extendSelections(this, clipPosArray(this, heads), options);\n    }),\n    setSelections: docMethodOp(function(ranges, primary, options) {\n      if (!ranges.length) { return }\n      var out = [];\n      for (var i = 0; i < ranges.length; i++)\n        { out[i] = new Range(clipPos(this, ranges[i].anchor),\n                           clipPos(this, ranges[i].head)); }\n      if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }\n      setSelection(this, normalizeSelection(this.cm, out, primary), options);\n    }),\n    addSelection: docMethodOp(function(anchor, head, options) {\n      var ranges = this.sel.ranges.slice(0);\n      ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n      setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n    }),\n\n    getSelection: function(lineSep) {\n      var ranges = this.sel.ranges, lines;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n        lines = lines ? lines.concat(sel) : sel;\n      }\n      if (lineSep === false) { return lines }\n      else { return lines.join(lineSep || this.lineSeparator()) }\n    },\n    getSelections: function(lineSep) {\n      var parts = [], ranges = this.sel.ranges;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n        if (lineSep !== false) { sel = sel.join(lineSep || this.lineSeparator()); }\n        parts[i] = sel;\n      }\n      return parts\n    },\n    replaceSelection: function(code, collapse, origin) {\n      var dup = [];\n      for (var i = 0; i < this.sel.ranges.length; i++)\n        { dup[i] = code; }\n      this.replaceSelections(dup, collapse, origin || \"+input\");\n    },\n    replaceSelections: docMethodOp(function(code, collapse, origin) {\n      var changes = [], sel = this.sel;\n      for (var i = 0; i < sel.ranges.length; i++) {\n        var range = sel.ranges[i];\n        changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin};\n      }\n      var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n      for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)\n        { makeChange(this, changes[i$1]); }\n      if (newSel) { setSelectionReplaceHistory(this, newSel); }\n      else if (this.cm) { ensureCursorVisible(this.cm); }\n    }),\n    undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n    redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n    undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n    redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n    setExtending: function(val) {this.extend = val;},\n    getExtending: function() {return this.extend},\n\n    historySize: function() {\n      var hist = this.history, done = 0, undone = 0;\n      for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }\n      for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }\n      return {undo: done, redo: undone}\n    },\n    clearHistory: function() {\n      var this$1 = this;\n\n      this.history = new History(this.history.maxGeneration);\n      linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true);\n    },\n\n    markClean: function() {\n      this.cleanGeneration = this.changeGeneration(true);\n    },\n    changeGeneration: function(forceSplit) {\n      if (forceSplit)\n        { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }\n      return this.history.generation\n    },\n    isClean: function (gen) {\n      return this.history.generation == (gen || this.cleanGeneration)\n    },\n\n    getHistory: function() {\n      return {done: copyHistoryArray(this.history.done),\n              undone: copyHistoryArray(this.history.undone)}\n    },\n    setHistory: function(histData) {\n      var hist = this.history = new History(this.history.maxGeneration);\n      hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n      hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n    },\n\n    setGutterMarker: docMethodOp(function(line, gutterID, value) {\n      return changeLine(this, line, \"gutter\", function (line) {\n        var markers = line.gutterMarkers || (line.gutterMarkers = {});\n        markers[gutterID] = value;\n        if (!value && isEmpty(markers)) { line.gutterMarkers = null; }\n        return true\n      })\n    }),\n\n    clearGutter: docMethodOp(function(gutterID) {\n      var this$1 = this;\n\n      this.iter(function (line) {\n        if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n          changeLine(this$1, line, \"gutter\", function () {\n            line.gutterMarkers[gutterID] = null;\n            if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }\n            return true\n          });\n        }\n      });\n    }),\n\n    lineInfo: function(line) {\n      var n;\n      if (typeof line == \"number\") {\n        if (!isLine(this, line)) { return null }\n        n = line;\n        line = getLine(this, line);\n        if (!line) { return null }\n      } else {\n        n = lineNo(line);\n        if (n == null) { return null }\n      }\n      return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n              textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n              widgets: line.widgets}\n    },\n\n    addLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n        var prop = where == \"text\" ? \"textClass\"\n                 : where == \"background\" ? \"bgClass\"\n                 : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n        if (!line[prop]) { line[prop] = cls; }\n        else if (classTest(cls).test(line[prop])) { return false }\n        else { line[prop] += \" \" + cls; }\n        return true\n      })\n    }),\n    removeLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n        var prop = where == \"text\" ? \"textClass\"\n                 : where == \"background\" ? \"bgClass\"\n                 : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n        var cur = line[prop];\n        if (!cur) { return false }\n        else if (cls == null) { line[prop] = null; }\n        else {\n          var found = cur.match(classTest(cls));\n          if (!found) { return false }\n          var end = found.index + found[0].length;\n          line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n        }\n        return true\n      })\n    }),\n\n    addLineWidget: docMethodOp(function(handle, node, options) {\n      return addLineWidget(this, handle, node, options)\n    }),\n    removeLineWidget: function(widget) { widget.clear(); },\n\n    markText: function(from, to, options) {\n      return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n    },\n    setBookmark: function(pos, options) {\n      var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n                      insertLeft: options && options.insertLeft,\n                      clearWhenEmpty: false, shared: options && options.shared,\n                      handleMouseEvents: options && options.handleMouseEvents};\n      pos = clipPos(this, pos);\n      return markText(this, pos, pos, realOpts, \"bookmark\")\n    },\n    findMarksAt: function(pos) {\n      pos = clipPos(this, pos);\n      var markers = [], spans = getLine(this, pos.line).markedSpans;\n      if (spans) { for (var i = 0; i < spans.length; ++i) {\n        var span = spans[i];\n        if ((span.from == null || span.from <= pos.ch) &&\n            (span.to == null || span.to >= pos.ch))\n          { markers.push(span.marker.parent || span.marker); }\n      } }\n      return markers\n    },\n    findMarks: function(from, to, filter) {\n      from = clipPos(this, from); to = clipPos(this, to);\n      var found = [], lineNo = from.line;\n      this.iter(from.line, to.line + 1, function (line) {\n        var spans = line.markedSpans;\n        if (spans) { for (var i = 0; i < spans.length; i++) {\n          var span = spans[i];\n          if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||\n                span.from == null && lineNo != from.line ||\n                span.from != null && lineNo == to.line && span.from >= to.ch) &&\n              (!filter || filter(span.marker)))\n            { found.push(span.marker.parent || span.marker); }\n        } }\n        ++lineNo;\n      });\n      return found\n    },\n    getAllMarks: function() {\n      var markers = [];\n      this.iter(function (line) {\n        var sps = line.markedSpans;\n        if (sps) { for (var i = 0; i < sps.length; ++i)\n          { if (sps[i].from != null) { markers.push(sps[i].marker); } } }\n      });\n      return markers\n    },\n\n    posFromIndex: function(off) {\n      var ch, lineNo = this.first, sepSize = this.lineSeparator().length;\n      this.iter(function (line) {\n        var sz = line.text.length + sepSize;\n        if (sz > off) { ch = off; return true }\n        off -= sz;\n        ++lineNo;\n      });\n      return clipPos(this, Pos(lineNo, ch))\n    },\n    indexFromPos: function (coords) {\n      coords = clipPos(this, coords);\n      var index = coords.ch;\n      if (coords.line < this.first || coords.ch < 0) { return 0 }\n      var sepSize = this.lineSeparator().length;\n      this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value\n        index += line.text.length + sepSize;\n      });\n      return index\n    },\n\n    copy: function(copyHistory) {\n      var doc = new Doc(getLines(this, this.first, this.first + this.size),\n                        this.modeOption, this.first, this.lineSep, this.direction);\n      doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n      doc.sel = this.sel;\n      doc.extend = false;\n      if (copyHistory) {\n        doc.history.undoDepth = this.history.undoDepth;\n        doc.setHistory(this.getHistory());\n      }\n      return doc\n    },\n\n    linkedDoc: function(options) {\n      if (!options) { options = {}; }\n      var from = this.first, to = this.first + this.size;\n      if (options.from != null && options.from > from) { from = options.from; }\n      if (options.to != null && options.to < to) { to = options.to; }\n      var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n      if (options.sharedHist) { copy.history = this.history\n      ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n      copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n      copySharedMarkers(copy, findSharedMarkers(this));\n      return copy\n    },\n    unlinkDoc: function(other) {\n      if (other instanceof CodeMirror) { other = other.doc; }\n      if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {\n        var link = this.linked[i];\n        if (link.doc != other) { continue }\n        this.linked.splice(i, 1);\n        other.unlinkDoc(this);\n        detachSharedMarkers(findSharedMarkers(this));\n        break\n      } }\n      // If the histories were shared, split them again\n      if (other.history == this.history) {\n        var splitIds = [other.id];\n        linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);\n        other.history = new History(null);\n        other.history.done = copyHistoryArray(this.history.done, splitIds);\n        other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n      }\n    },\n    iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n    getMode: function() {return this.mode},\n    getEditor: function() {return this.cm},\n\n    splitLines: function(str) {\n      if (this.lineSep) { return str.split(this.lineSep) }\n      return splitLinesAuto(str)\n    },\n    lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n    setDirection: docMethodOp(function (dir) {\n      if (dir != \"rtl\") { dir = \"ltr\"; }\n      if (dir == this.direction) { return }\n      this.direction = dir;\n      this.iter(function (line) { return line.order = null; });\n      if (this.cm) { directionChanged(this.cm); }\n    })\n  });\n\n  // Public alias.\n  Doc.prototype.eachLine = Doc.prototype.iter;\n\n  // Kludge to work around strange IE behavior where it'll sometimes\n  // re-fire a series of drag-related events right after the drop (#1551)\n  var lastDrop = 0;\n\n  function onDrop(e) {\n    var cm = this;\n    clearDragCursor(cm);\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n      { return }\n    e_preventDefault(e);\n    if (ie) { lastDrop = +new Date; }\n    var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n    if (!pos || cm.isReadOnly()) { return }\n    // Might be a file drop, in which case we simply extract the text\n    // and insert it.\n    if (files && files.length && window.FileReader && window.File) {\n      var n = files.length, text = Array(n), read = 0;\n      var markAsReadAndPasteIfAllFilesAreRead = function () {\n        if (++read == n) {\n          operation(cm, function () {\n            pos = clipPos(cm.doc, pos);\n            var change = {from: pos, to: pos,\n                          text: cm.doc.splitLines(\n                              text.filter(function (t) { return t != null; }).join(cm.doc.lineSeparator())),\n                          origin: \"paste\"};\n            makeChange(cm.doc, change);\n            setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change))));\n          })();\n        }\n      };\n      var readTextFromFile = function (file, i) {\n        if (cm.options.allowDropFileTypes &&\n            indexOf(cm.options.allowDropFileTypes, file.type) == -1) {\n          markAsReadAndPasteIfAllFilesAreRead();\n          return\n        }\n        var reader = new FileReader;\n        reader.onerror = function () { return markAsReadAndPasteIfAllFilesAreRead(); };\n        reader.onload = function () {\n          var content = reader.result;\n          if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) {\n            markAsReadAndPasteIfAllFilesAreRead();\n            return\n          }\n          text[i] = content;\n          markAsReadAndPasteIfAllFilesAreRead();\n        };\n        reader.readAsText(file);\n      };\n      for (var i = 0; i < files.length; i++) { readTextFromFile(files[i], i); }\n    } else { // Normal drop\n      // Don't do a replace if the drop happened inside of the selected text.\n      if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n        cm.state.draggingText(e);\n        // Ensure the editor is re-focused\n        setTimeout(function () { return cm.display.input.focus(); }, 20);\n        return\n      }\n      try {\n        var text$1 = e.dataTransfer.getData(\"Text\");\n        if (text$1) {\n          var selected;\n          if (cm.state.draggingText && !cm.state.draggingText.copy)\n            { selected = cm.listSelections(); }\n          setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n          if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)\n            { replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\"); } }\n          cm.replaceSelection(text$1, \"around\", \"paste\");\n          cm.display.input.focus();\n        }\n      }\n      catch(e$1){}\n    }\n  }\n\n  function onDragStart(cm, e) {\n    if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }\n\n    e.dataTransfer.setData(\"Text\", cm.getSelection());\n    e.dataTransfer.effectAllowed = \"copyMove\";\n\n    // Use dummy image instead of default browsers image.\n    // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n    if (e.dataTransfer.setDragImage && !safari) {\n      var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n      img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n      if (presto) {\n        img.width = img.height = 1;\n        cm.display.wrapper.appendChild(img);\n        // Force a relayout, or Opera won't use our image for some obscure reason\n        img._top = img.offsetTop;\n      }\n      e.dataTransfer.setDragImage(img, 0, 0);\n      if (presto) { img.parentNode.removeChild(img); }\n    }\n  }\n\n  function onDragOver(cm, e) {\n    var pos = posFromMouse(cm, e);\n    if (!pos) { return }\n    var frag = document.createDocumentFragment();\n    drawSelectionCursor(cm, pos, frag);\n    if (!cm.display.dragCursor) {\n      cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n      cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n    }\n    removeChildrenAndAdd(cm.display.dragCursor, frag);\n  }\n\n  function clearDragCursor(cm) {\n    if (cm.display.dragCursor) {\n      cm.display.lineSpace.removeChild(cm.display.dragCursor);\n      cm.display.dragCursor = null;\n    }\n  }\n\n  // These must be handled carefully, because naively registering a\n  // handler for each editor will cause the editors to never be\n  // garbage collected.\n\n  function forEachCodeMirror(f) {\n    if (!document.getElementsByClassName) { return }\n    var byClass = document.getElementsByClassName(\"CodeMirror\"), editors = [];\n    for (var i = 0; i < byClass.length; i++) {\n      var cm = byClass[i].CodeMirror;\n      if (cm) { editors.push(cm); }\n    }\n    if (editors.length) { editors[0].operation(function () {\n      for (var i = 0; i < editors.length; i++) { f(editors[i]); }\n    }); }\n  }\n\n  var globalsRegistered = false;\n  function ensureGlobalHandlers() {\n    if (globalsRegistered) { return }\n    registerGlobalHandlers();\n    globalsRegistered = true;\n  }\n  function registerGlobalHandlers() {\n    // When the window resizes, we need to refresh active editors.\n    var resizeTimer;\n    on(window, \"resize\", function () {\n      if (resizeTimer == null) { resizeTimer = setTimeout(function () {\n        resizeTimer = null;\n        forEachCodeMirror(onResize);\n      }, 100); }\n    });\n    // When the window loses focus, we want to show the editor as blurred\n    on(window, \"blur\", function () { return forEachCodeMirror(onBlur); });\n  }\n  // Called when the window resizes\n  function onResize(cm) {\n    var d = cm.display;\n    // Might be a text scaling operation, clear size caches.\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n    d.scrollbarsClipped = false;\n    cm.setSize();\n  }\n\n  var keyNames = {\n    3: \"Pause\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n    19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n    36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n    46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n    106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 145: \"ScrollLock\",\n    173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n    221: \"]\", 222: \"'\", 224: \"Mod\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n    63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n  };\n\n  // Number keys\n  for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }\n  // Alphabetic keys\n  for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }\n  // Function keys\n  for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2; }\n\n  var keyMap = {};\n\n  keyMap.basic = {\n    \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n    \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n    \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n    \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n    \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n    \"Esc\": \"singleSelection\"\n  };\n  // Note that the save and find-related commands aren't defined by\n  // default. User code or addons can define them. Unknown commands\n  // are simply ignored.\n  keyMap.pcDefault = {\n    \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n    \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n    \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n    \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n    \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n    \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n    \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n    \"fallthrough\": \"basic\"\n  };\n  // Very basic readline/emacs-style bindings, which are standard on Mac.\n  keyMap.emacsy = {\n    \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n    \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n    \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\", \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\",\n    \"Alt-D\": \"delWordAfter\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\",\n    \"Ctrl-O\": \"openLine\"\n  };\n  keyMap.macDefault = {\n    \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n    \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n    \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n    \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n    \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n    \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n    \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n    \"fallthrough\": [\"basic\", \"emacsy\"]\n  };\n  keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n  // KEYMAP DISPATCH\n\n  function normalizeKeyName(name) {\n    var parts = name.split(/-(?!$)/);\n    name = parts[parts.length - 1];\n    var alt, ctrl, shift, cmd;\n    for (var i = 0; i < parts.length - 1; i++) {\n      var mod = parts[i];\n      if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }\n      else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n      else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n      else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n      else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n    }\n    if (alt) { name = \"Alt-\" + name; }\n    if (ctrl) { name = \"Ctrl-\" + name; }\n    if (cmd) { name = \"Cmd-\" + name; }\n    if (shift) { name = \"Shift-\" + name; }\n    return name\n  }\n\n  // This is a kludge to keep keymaps mostly working as raw objects\n  // (backwards compatibility) while at the same time support features\n  // like normalization and multi-stroke key bindings. It compiles a\n  // new normalized keymap, and then updates the old object to reflect\n  // this.\n  function normalizeKeyMap(keymap) {\n    var copy = {};\n    for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {\n      var value = keymap[keyname];\n      if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }\n      if (value == \"...\") { delete keymap[keyname]; continue }\n\n      var keys = map(keyname.split(\" \"), normalizeKeyName);\n      for (var i = 0; i < keys.length; i++) {\n        var val = (void 0), name = (void 0);\n        if (i == keys.length - 1) {\n          name = keys.join(\" \");\n          val = value;\n        } else {\n          name = keys.slice(0, i + 1).join(\" \");\n          val = \"...\";\n        }\n        var prev = copy[name];\n        if (!prev) { copy[name] = val; }\n        else if (prev != val) { throw new Error(\"Inconsistent bindings for \" + name) }\n      }\n      delete keymap[keyname];\n    } }\n    for (var prop in copy) { keymap[prop] = copy[prop]; }\n    return keymap\n  }\n\n  function lookupKey(key, map, handle, context) {\n    map = getKeyMap(map);\n    var found = map.call ? map.call(key, context) : map[key];\n    if (found === false) { return \"nothing\" }\n    if (found === \"...\") { return \"multi\" }\n    if (found != null && handle(found)) { return \"handled\" }\n\n    if (map.fallthrough) {\n      if (Object.prototype.toString.call(map.fallthrough) != \"[object Array]\")\n        { return lookupKey(key, map.fallthrough, handle, context) }\n      for (var i = 0; i < map.fallthrough.length; i++) {\n        var result = lookupKey(key, map.fallthrough[i], handle, context);\n        if (result) { return result }\n      }\n    }\n  }\n\n  // Modifier key presses don't count as 'real' key presses for the\n  // purpose of keymap fallthrough.\n  function isModifierKey(value) {\n    var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n    return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\"\n  }\n\n  function addModifierNames(name, event, noShift) {\n    var base = name;\n    if (event.altKey && base != \"Alt\") { name = \"Alt-\" + name; }\n    if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") { name = \"Ctrl-\" + name; }\n    if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Mod\") { name = \"Cmd-\" + name; }\n    if (!noShift && event.shiftKey && base != \"Shift\") { name = \"Shift-\" + name; }\n    return name\n  }\n\n  // Look up the name of a key as indicated by an event object.\n  function keyName(event, noShift) {\n    if (presto && event.keyCode == 34 && event[\"char\"]) { return false }\n    var name = keyNames[event.keyCode];\n    if (name == null || event.altGraphKey) { return false }\n    // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n    // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n    if (event.keyCode == 3 && event.code) { name = event.code; }\n    return addModifierNames(name, event, noShift)\n  }\n\n  function getKeyMap(val) {\n    return typeof val == \"string\" ? keyMap[val] : val\n  }\n\n  // Helper for deleting text near the selection(s), used to implement\n  // backspace, delete, and similar functionality.\n  function deleteNearSelection(cm, compute) {\n    var ranges = cm.doc.sel.ranges, kill = [];\n    // Build up a set of ranges to kill first, merging overlapping\n    // ranges.\n    for (var i = 0; i < ranges.length; i++) {\n      var toKill = compute(ranges[i]);\n      while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n        var replaced = kill.pop();\n        if (cmp(replaced.from, toKill.from) < 0) {\n          toKill.from = replaced.from;\n          break\n        }\n      }\n      kill.push(toKill);\n    }\n    // Next, remove those actual ranges.\n    runInOp(cm, function () {\n      for (var i = kill.length - 1; i >= 0; i--)\n        { replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\"); }\n      ensureCursorVisible(cm);\n    });\n  }\n\n  function moveCharLogically(line, ch, dir) {\n    var target = skipExtendingChars(line.text, ch + dir, dir);\n    return target < 0 || target > line.text.length ? null : target\n  }\n\n  function moveLogically(line, start, dir) {\n    var ch = moveCharLogically(line, start.ch, dir);\n    return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\")\n  }\n\n  function endOfLine(visually, cm, lineObj, lineNo, dir) {\n    if (visually) {\n      if (cm.doc.direction == \"rtl\") { dir = -dir; }\n      var order = getOrder(lineObj, cm.doc.direction);\n      if (order) {\n        var part = dir < 0 ? lst(order) : order[0];\n        var moveInStorageOrder = (dir < 0) == (part.level == 1);\n        var sticky = moveInStorageOrder ? \"after\" : \"before\";\n        var ch;\n        // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n        // it could be that the last bidi part is not on the last visual line,\n        // since visual lines contain content order-consecutive chunks.\n        // Thus, in rtl, we are looking for the first (content-order) character\n        // in the rtl chunk that is on the last line (that is, the same line\n        // as the last (content-order) character).\n        if (part.level > 0 || cm.doc.direction == \"rtl\") {\n          var prep = prepareMeasureForLine(cm, lineObj);\n          ch = dir < 0 ? lineObj.text.length - 1 : 0;\n          var targetTop = measureCharPrepared(cm, prep, ch).top;\n          ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);\n          if (sticky == \"before\") { ch = moveCharLogically(lineObj, ch, 1); }\n        } else { ch = dir < 0 ? part.to : part.from; }\n        return new Pos(lineNo, ch, sticky)\n      }\n    }\n    return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\")\n  }\n\n  function moveVisually(cm, line, start, dir) {\n    var bidi = getOrder(line, cm.doc.direction);\n    if (!bidi) { return moveLogically(line, start, dir) }\n    if (start.ch >= line.text.length) {\n      start.ch = line.text.length;\n      start.sticky = \"before\";\n    } else if (start.ch <= 0) {\n      start.ch = 0;\n      start.sticky = \"after\";\n    }\n    var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];\n    if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n      // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n      // nothing interesting happens.\n      return moveLogically(line, start, dir)\n    }\n\n    var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };\n    var prep;\n    var getWrappedLineExtent = function (ch) {\n      if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }\n      prep = prep || prepareMeasureForLine(cm, line);\n      return wrappedLineExtentChar(cm, line, prep, ch)\n    };\n    var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n    if (cm.doc.direction == \"rtl\" || part.level == 1) {\n      var moveInStorageOrder = (part.level == 1) == (dir < 0);\n      var ch = mv(start, moveInStorageOrder ? 1 : -1);\n      if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n        // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n        var sticky = moveInStorageOrder ? \"before\" : \"after\";\n        return new Pos(start.line, ch, sticky)\n      }\n    }\n\n    // Case 3: Could not move within this bidi part in this visual line, so leave\n    // the current bidi part\n\n    var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n      var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder\n        ? new Pos(start.line, mv(ch, 1), \"before\")\n        : new Pos(start.line, ch, \"after\"); };\n\n      for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n        var part = bidi[partPos];\n        var moveInStorageOrder = (dir > 0) == (part.level != 1);\n        var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n        if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }\n        ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n        if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }\n      }\n    };\n\n    // Case 3a: Look for other bidi parts on the same visual line\n    var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n    if (res) { return res }\n\n    // Case 3b: Look for other bidi parts on the next visual line\n    var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n    if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n      res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n      if (res) { return res }\n    }\n\n    // Case 4: Nowhere to move\n    return null\n  }\n\n  // Commands are parameter-less actions that can be performed on an\n  // editor, mostly used for keybindings.\n  var commands = {\n    selectAll: selectAll,\n    singleSelection: function (cm) { return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll); },\n    killLine: function (cm) { return deleteNearSelection(cm, function (range) {\n      if (range.empty()) {\n        var len = getLine(cm.doc, range.head.line).text.length;\n        if (range.head.ch == len && range.head.line < cm.lastLine())\n          { return {from: range.head, to: Pos(range.head.line + 1, 0)} }\n        else\n          { return {from: range.head, to: Pos(range.head.line, len)} }\n      } else {\n        return {from: range.from(), to: range.to()}\n      }\n    }); },\n    deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n      from: Pos(range.from().line, 0),\n      to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n    }); }); },\n    delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n      from: Pos(range.from().line, 0), to: range.from()\n    }); }); },\n    delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {\n      var top = cm.charCoords(range.head, \"div\").top + 5;\n      var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n      return {from: leftPos, to: range.from()}\n    }); },\n    delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {\n      var top = cm.charCoords(range.head, \"div\").top + 5;\n      var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n      return {from: range.from(), to: rightPos }\n    }); },\n    undo: function (cm) { return cm.undo(); },\n    redo: function (cm) { return cm.redo(); },\n    undoSelection: function (cm) { return cm.undoSelection(); },\n    redoSelection: function (cm) { return cm.redoSelection(); },\n    goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },\n    goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },\n    goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },\n      {origin: \"+move\", bias: 1}\n    ); },\n    goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },\n      {origin: \"+move\", bias: 1}\n    ); },\n    goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },\n      {origin: \"+move\", bias: -1}\n    ); },\n    goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n    }, sel_move); },\n    goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      return cm.coordsChar({left: 0, top: top}, \"div\")\n    }, sel_move); },\n    goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n      if (pos.ch < cm.getLine(pos.line).search(/\\S/)) { return lineStartSmart(cm, range.head) }\n      return pos\n    }, sel_move); },\n    goLineUp: function (cm) { return cm.moveV(-1, \"line\"); },\n    goLineDown: function (cm) { return cm.moveV(1, \"line\"); },\n    goPageUp: function (cm) { return cm.moveV(-1, \"page\"); },\n    goPageDown: function (cm) { return cm.moveV(1, \"page\"); },\n    goCharLeft: function (cm) { return cm.moveH(-1, \"char\"); },\n    goCharRight: function (cm) { return cm.moveH(1, \"char\"); },\n    goColumnLeft: function (cm) { return cm.moveH(-1, \"column\"); },\n    goColumnRight: function (cm) { return cm.moveH(1, \"column\"); },\n    goWordLeft: function (cm) { return cm.moveH(-1, \"word\"); },\n    goGroupRight: function (cm) { return cm.moveH(1, \"group\"); },\n    goGroupLeft: function (cm) { return cm.moveH(-1, \"group\"); },\n    goWordRight: function (cm) { return cm.moveH(1, \"word\"); },\n    delCharBefore: function (cm) { return cm.deleteH(-1, \"codepoint\"); },\n    delCharAfter: function (cm) { return cm.deleteH(1, \"char\"); },\n    delWordBefore: function (cm) { return cm.deleteH(-1, \"word\"); },\n    delWordAfter: function (cm) { return cm.deleteH(1, \"word\"); },\n    delGroupBefore: function (cm) { return cm.deleteH(-1, \"group\"); },\n    delGroupAfter: function (cm) { return cm.deleteH(1, \"group\"); },\n    indentAuto: function (cm) { return cm.indentSelection(\"smart\"); },\n    indentMore: function (cm) { return cm.indentSelection(\"add\"); },\n    indentLess: function (cm) { return cm.indentSelection(\"subtract\"); },\n    insertTab: function (cm) { return cm.replaceSelection(\"\\t\"); },\n    insertSoftTab: function (cm) {\n      var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n      for (var i = 0; i < ranges.length; i++) {\n        var pos = ranges[i].from();\n        var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n        spaces.push(spaceStr(tabSize - col % tabSize));\n      }\n      cm.replaceSelections(spaces);\n    },\n    defaultTab: function (cm) {\n      if (cm.somethingSelected()) { cm.indentSelection(\"add\"); }\n      else { cm.execCommand(\"insertTab\"); }\n    },\n    // Swap the two chars left and right of each selection's head.\n    // Move cursor behind the two swapped characters afterwards.\n    //\n    // Doesn't consider line feeds a character.\n    // Doesn't scan more than one line above to find a character.\n    // Doesn't do anything on an empty line.\n    // Doesn't do anything with non-empty selections.\n    transposeChars: function (cm) { return runInOp(cm, function () {\n      var ranges = cm.listSelections(), newSel = [];\n      for (var i = 0; i < ranges.length; i++) {\n        if (!ranges[i].empty()) { continue }\n        var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n        if (line) {\n          if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }\n          if (cur.ch > 0) {\n            cur = new Pos(cur.line, cur.ch + 1);\n            cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n                            Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n          } else if (cur.line > cm.doc.first) {\n            var prev = getLine(cm.doc, cur.line - 1).text;\n            if (prev) {\n              cur = new Pos(cur.line, 1);\n              cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n                              prev.charAt(prev.length - 1),\n                              Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n            }\n          }\n        }\n        newSel.push(new Range(cur, cur));\n      }\n      cm.setSelections(newSel);\n    }); },\n    newlineAndIndent: function (cm) { return runInOp(cm, function () {\n      var sels = cm.listSelections();\n      for (var i = sels.length - 1; i >= 0; i--)\n        { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\"); }\n      sels = cm.listSelections();\n      for (var i$1 = 0; i$1 < sels.length; i$1++)\n        { cm.indentLine(sels[i$1].from().line, null, true); }\n      ensureCursorVisible(cm);\n    }); },\n    openLine: function (cm) { return cm.replaceSelection(\"\\n\", \"start\"); },\n    toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }\n  };\n\n\n  function lineStart(cm, lineN) {\n    var line = getLine(cm.doc, lineN);\n    var visual = visualLine(line);\n    if (visual != line) { lineN = lineNo(visual); }\n    return endOfLine(true, cm, visual, lineN, 1)\n  }\n  function lineEnd(cm, lineN) {\n    var line = getLine(cm.doc, lineN);\n    var visual = visualLineEnd(line);\n    if (visual != line) { lineN = lineNo(visual); }\n    return endOfLine(true, cm, line, lineN, -1)\n  }\n  function lineStartSmart(cm, pos) {\n    var start = lineStart(cm, pos.line);\n    var line = getLine(cm.doc, start.line);\n    var order = getOrder(line, cm.doc.direction);\n    if (!order || order[0].level == 0) {\n      var firstNonWS = Math.max(start.ch, line.text.search(/\\S/));\n      var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n      return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)\n    }\n    return start\n  }\n\n  // Run a handler that was bound to a key.\n  function doHandleBinding(cm, bound, dropShift) {\n    if (typeof bound == \"string\") {\n      bound = commands[bound];\n      if (!bound) { return false }\n    }\n    // Ensure previous input has been read, so that the handler sees a\n    // consistent view of the document\n    cm.display.input.ensurePolled();\n    var prevShift = cm.display.shift, done = false;\n    try {\n      if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n      if (dropShift) { cm.display.shift = false; }\n      done = bound(cm) != Pass;\n    } finally {\n      cm.display.shift = prevShift;\n      cm.state.suppressEdits = false;\n    }\n    return done\n  }\n\n  function lookupKeyForEditor(cm, name, handle) {\n    for (var i = 0; i < cm.state.keyMaps.length; i++) {\n      var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n      if (result) { return result }\n    }\n    return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n      || lookupKey(name, cm.options.keyMap, handle, cm)\n  }\n\n  // Note that, despite the name, this function is also used to check\n  // for bound mouse clicks.\n\n  var stopSeq = new Delayed;\n\n  function dispatchKey(cm, name, e, handle) {\n    var seq = cm.state.keySeq;\n    if (seq) {\n      if (isModifierKey(name)) { return \"handled\" }\n      if (/\\'$/.test(name))\n        { cm.state.keySeq = null; }\n      else\n        { stopSeq.set(50, function () {\n          if (cm.state.keySeq == seq) {\n            cm.state.keySeq = null;\n            cm.display.input.reset();\n          }\n        }); }\n      if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) { return true }\n    }\n    return dispatchKeyInner(cm, name, e, handle)\n  }\n\n  function dispatchKeyInner(cm, name, e, handle) {\n    var result = lookupKeyForEditor(cm, name, handle);\n\n    if (result == \"multi\")\n      { cm.state.keySeq = name; }\n    if (result == \"handled\")\n      { signalLater(cm, \"keyHandled\", cm, name, e); }\n\n    if (result == \"handled\" || result == \"multi\") {\n      e_preventDefault(e);\n      restartBlink(cm);\n    }\n\n    return !!result\n  }\n\n  // Handle a key from the keydown event.\n  function handleKeyBinding(cm, e) {\n    var name = keyName(e, true);\n    if (!name) { return false }\n\n    if (e.shiftKey && !cm.state.keySeq) {\n      // First try to resolve full name (including 'Shift-'). Failing\n      // that, see if there is a cursor-motion command (starting with\n      // 'go') bound to the keyname without 'Shift-'.\n      return dispatchKey(cm, \"Shift-\" + name, e, function (b) { return doHandleBinding(cm, b, true); })\n          || dispatchKey(cm, name, e, function (b) {\n               if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n                 { return doHandleBinding(cm, b) }\n             })\n    } else {\n      return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })\n    }\n  }\n\n  // Handle a key from the keypress event\n  function handleCharBinding(cm, e, ch) {\n    return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) { return doHandleBinding(cm, b, true); })\n  }\n\n  var lastStoppedKey = null;\n  function onKeyDown(e) {\n    var cm = this;\n    if (e.target && e.target != cm.display.input.getField()) { return }\n    cm.curOp.focus = activeElt();\n    if (signalDOMEvent(cm, e)) { return }\n    // IE does strange things with escape.\n    if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }\n    var code = e.keyCode;\n    cm.display.shift = code == 16 || e.shiftKey;\n    var handled = handleKeyBinding(cm, e);\n    if (presto) {\n      lastStoppedKey = handled ? code : null;\n      // Opera has no cut event... we try to at least catch the key combo\n      if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n        { cm.replaceSelection(\"\", null, \"cut\"); }\n    }\n    if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand)\n      { document.execCommand(\"cut\"); }\n\n    // Turn mouse into crosshair when Alt is held on Mac.\n    if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n      { showCrossHair(cm); }\n  }\n\n  function showCrossHair(cm) {\n    var lineDiv = cm.display.lineDiv;\n    addClass(lineDiv, \"CodeMirror-crosshair\");\n\n    function up(e) {\n      if (e.keyCode == 18 || !e.altKey) {\n        rmClass(lineDiv, \"CodeMirror-crosshair\");\n        off(document, \"keyup\", up);\n        off(document, \"mouseover\", up);\n      }\n    }\n    on(document, \"keyup\", up);\n    on(document, \"mouseover\", up);\n  }\n\n  function onKeyUp(e) {\n    if (e.keyCode == 16) { this.doc.sel.shift = false; }\n    signalDOMEvent(this, e);\n  }\n\n  function onKeyPress(e) {\n    var cm = this;\n    if (e.target && e.target != cm.display.input.getField()) { return }\n    if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }\n    var keyCode = e.keyCode, charCode = e.charCode;\n    if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n    if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }\n    var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n    // Some browsers fire keypress events for backspace\n    if (ch == \"\\x08\") { return }\n    if (handleCharBinding(cm, e, ch)) { return }\n    cm.display.input.onKeyPress(e);\n  }\n\n  var DOUBLECLICK_DELAY = 400;\n\n  var PastClick = function(time, pos, button) {\n    this.time = time;\n    this.pos = pos;\n    this.button = button;\n  };\n\n  PastClick.prototype.compare = function (time, pos, button) {\n    return this.time + DOUBLECLICK_DELAY > time &&\n      cmp(pos, this.pos) == 0 && button == this.button\n  };\n\n  var lastClick, lastDoubleClick;\n  function clickRepeat(pos, button) {\n    var now = +new Date;\n    if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n      lastClick = lastDoubleClick = null;\n      return \"triple\"\n    } else if (lastClick && lastClick.compare(now, pos, button)) {\n      lastDoubleClick = new PastClick(now, pos, button);\n      lastClick = null;\n      return \"double\"\n    } else {\n      lastClick = new PastClick(now, pos, button);\n      lastDoubleClick = null;\n      return \"single\"\n    }\n  }\n\n  // A mouse down can be a single click, double click, triple click,\n  // start of selection drag, start of text drag, new cursor\n  // (ctrl-click), rectangle drag (alt-drag), or xwin\n  // middle-click-paste. Or it might be a click on something we should\n  // not interfere with, such as a scrollbar or widget.\n  function onMouseDown(e) {\n    var cm = this, display = cm.display;\n    if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }\n    display.input.ensurePolled();\n    display.shift = e.shiftKey;\n\n    if (eventInWidget(display, e)) {\n      if (!webkit) {\n        // Briefly turn off draggability, to allow widgets to do\n        // normal dragging things.\n        display.scroller.draggable = false;\n        setTimeout(function () { return display.scroller.draggable = true; }, 100);\n      }\n      return\n    }\n    if (clickInGutter(cm, e)) { return }\n    var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : \"single\";\n    window.focus();\n\n    // #3261: make sure, that we're not starting a second selection\n    if (button == 1 && cm.state.selectingText)\n      { cm.state.selectingText(e); }\n\n    if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }\n\n    if (button == 1) {\n      if (pos) { leftButtonDown(cm, pos, repeat, e); }\n      else if (e_target(e) == display.scroller) { e_preventDefault(e); }\n    } else if (button == 2) {\n      if (pos) { extendSelection(cm.doc, pos); }\n      setTimeout(function () { return display.input.focus(); }, 20);\n    } else if (button == 3) {\n      if (captureRightClick) { cm.display.input.onContextMenu(e); }\n      else { delayBlurEvent(cm); }\n    }\n  }\n\n  function handleMappedButton(cm, button, pos, repeat, event) {\n    var name = \"Click\";\n    if (repeat == \"double\") { name = \"Double\" + name; }\n    else if (repeat == \"triple\") { name = \"Triple\" + name; }\n    name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n\n    return dispatchKey(cm,  addModifierNames(name, event), event, function (bound) {\n      if (typeof bound == \"string\") { bound = commands[bound]; }\n      if (!bound) { return false }\n      var done = false;\n      try {\n        if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n        done = bound(cm, pos) != Pass;\n      } finally {\n        cm.state.suppressEdits = false;\n      }\n      return done\n    })\n  }\n\n  function configureMouse(cm, repeat, event) {\n    var option = cm.getOption(\"configureMouse\");\n    var value = option ? option(cm, repeat, event) : {};\n    if (value.unit == null) {\n      var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n      value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n    }\n    if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }\n    if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }\n    if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }\n    return value\n  }\n\n  function leftButtonDown(cm, pos, repeat, event) {\n    if (ie) { setTimeout(bind(ensureFocus, cm), 0); }\n    else { cm.curOp.focus = activeElt(); }\n\n    var behavior = configureMouse(cm, repeat, event);\n\n    var sel = cm.doc.sel, contained;\n    if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n        repeat == \"single\" && (contained = sel.contains(pos)) > -1 &&\n        (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&\n        (cmp(contained.to(), pos) > 0 || pos.xRel < 0))\n      { leftButtonStartDrag(cm, event, pos, behavior); }\n    else\n      { leftButtonSelect(cm, event, pos, behavior); }\n  }\n\n  // Start a text drag. When it ends, see if any dragging actually\n  // happen, and treat as a click if it didn't.\n  function leftButtonStartDrag(cm, event, pos, behavior) {\n    var display = cm.display, moved = false;\n    var dragEnd = operation(cm, function (e) {\n      if (webkit) { display.scroller.draggable = false; }\n      cm.state.draggingText = false;\n      if (cm.state.delayingBlurEvent) {\n        if (cm.hasFocus()) { cm.state.delayingBlurEvent = false; }\n        else { delayBlurEvent(cm); }\n      }\n      off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n      off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n      off(display.scroller, \"dragstart\", dragStart);\n      off(display.scroller, \"drop\", dragEnd);\n      if (!moved) {\n        e_preventDefault(e);\n        if (!behavior.addNew)\n          { extendSelection(cm.doc, pos, null, null, behavior.extend); }\n        // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n        if ((webkit && !safari) || ie && ie_version == 9)\n          { setTimeout(function () {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus();}, 20); }\n        else\n          { display.input.focus(); }\n      }\n    });\n    var mouseMove = function(e2) {\n      moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n    };\n    var dragStart = function () { return moved = true; };\n    // Let the drag handler handle this.\n    if (webkit) { display.scroller.draggable = true; }\n    cm.state.draggingText = dragEnd;\n    dragEnd.copy = !behavior.moveOnDrag;\n    on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n    on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n    on(display.scroller, \"dragstart\", dragStart);\n    on(display.scroller, \"drop\", dragEnd);\n\n    cm.state.delayingBlurEvent = true;\n    setTimeout(function () { return display.input.focus(); }, 20);\n    // IE's approach to draggable\n    if (display.scroller.dragDrop) { display.scroller.dragDrop(); }\n  }\n\n  function rangeForUnit(cm, pos, unit) {\n    if (unit == \"char\") { return new Range(pos, pos) }\n    if (unit == \"word\") { return cm.findWordAt(pos) }\n    if (unit == \"line\") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }\n    var result = unit(cm, pos);\n    return new Range(result.from, result.to)\n  }\n\n  // Normal selection, as opposed to text dragging.\n  function leftButtonSelect(cm, event, start, behavior) {\n    if (ie) { delayBlurEvent(cm); }\n    var display = cm.display, doc = cm.doc;\n    e_preventDefault(event);\n\n    var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;\n    if (behavior.addNew && !behavior.extend) {\n      ourIndex = doc.sel.contains(start);\n      if (ourIndex > -1)\n        { ourRange = ranges[ourIndex]; }\n      else\n        { ourRange = new Range(start, start); }\n    } else {\n      ourRange = doc.sel.primary();\n      ourIndex = doc.sel.primIndex;\n    }\n\n    if (behavior.unit == \"rectangle\") {\n      if (!behavior.addNew) { ourRange = new Range(start, start); }\n      start = posFromMouse(cm, event, true, true);\n      ourIndex = -1;\n    } else {\n      var range = rangeForUnit(cm, start, behavior.unit);\n      if (behavior.extend)\n        { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); }\n      else\n        { ourRange = range; }\n    }\n\n    if (!behavior.addNew) {\n      ourIndex = 0;\n      setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n      startSel = doc.sel;\n    } else if (ourIndex == -1) {\n      ourIndex = ranges.length;\n      setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),\n                   {scroll: false, origin: \"*mouse\"});\n    } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n      setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n                   {scroll: false, origin: \"*mouse\"});\n      startSel = doc.sel;\n    } else {\n      replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n    }\n\n    var lastPos = start;\n    function extendTo(pos) {\n      if (cmp(lastPos, pos) == 0) { return }\n      lastPos = pos;\n\n      if (behavior.unit == \"rectangle\") {\n        var ranges = [], tabSize = cm.options.tabSize;\n        var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n        var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n        var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n        for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n             line <= end; line++) {\n          var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n          if (left == right)\n            { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }\n          else if (text.length > leftPos)\n            { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }\n        }\n        if (!ranges.length) { ranges.push(new Range(start, start)); }\n        setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n                     {origin: \"*mouse\", scroll: false});\n        cm.scrollIntoView(pos);\n      } else {\n        var oldRange = ourRange;\n        var range = rangeForUnit(cm, pos, behavior.unit);\n        var anchor = oldRange.anchor, head;\n        if (cmp(range.anchor, anchor) > 0) {\n          head = range.head;\n          anchor = minPos(oldRange.from(), range.anchor);\n        } else {\n          head = range.anchor;\n          anchor = maxPos(oldRange.to(), range.head);\n        }\n        var ranges$1 = startSel.ranges.slice(0);\n        ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));\n        setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\n      }\n    }\n\n    var editorSize = display.wrapper.getBoundingClientRect();\n    // Used to ensure timeout re-tries don't fire when another extend\n    // happened in the meantime (clearTimeout isn't reliable -- at\n    // least on Chrome, the timeouts still happen even when cleared,\n    // if the clear happens after their scheduled firing time).\n    var counter = 0;\n\n    function extend(e) {\n      var curCount = ++counter;\n      var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n      if (!cur) { return }\n      if (cmp(cur, lastPos) != 0) {\n        cm.curOp.focus = activeElt();\n        extendTo(cur);\n        var visible = visibleLines(display, doc);\n        if (cur.line >= visible.to || cur.line < visible.from)\n          { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }\n      } else {\n        var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n        if (outside) { setTimeout(operation(cm, function () {\n          if (counter != curCount) { return }\n          display.scroller.scrollTop += outside;\n          extend(e);\n        }), 50); }\n      }\n    }\n\n    function done(e) {\n      cm.state.selectingText = false;\n      counter = Infinity;\n      // If e is null or undefined we interpret this as someone trying\n      // to explicitly cancel the selection rather than the user\n      // letting go of the mouse button.\n      if (e) {\n        e_preventDefault(e);\n        display.input.focus();\n      }\n      off(display.wrapper.ownerDocument, \"mousemove\", move);\n      off(display.wrapper.ownerDocument, \"mouseup\", up);\n      doc.history.lastSelOrigin = null;\n    }\n\n    var move = operation(cm, function (e) {\n      if (e.buttons === 0 || !e_button(e)) { done(e); }\n      else { extend(e); }\n    });\n    var up = operation(cm, done);\n    cm.state.selectingText = up;\n    on(display.wrapper.ownerDocument, \"mousemove\", move);\n    on(display.wrapper.ownerDocument, \"mouseup\", up);\n  }\n\n  // Used when mouse-selecting to adjust the anchor to the proper side\n  // of a bidi jump depending on the visual position of the head.\n  function bidiSimplify(cm, range) {\n    var anchor = range.anchor;\n    var head = range.head;\n    var anchorLine = getLine(cm.doc, anchor.line);\n    if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range }\n    var order = getOrder(anchorLine);\n    if (!order) { return range }\n    var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];\n    if (part.from != anchor.ch && part.to != anchor.ch) { return range }\n    var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);\n    if (boundary == 0 || boundary == order.length) { return range }\n\n    // Compute the relative visual position of the head compared to the\n    // anchor (<0 is to the left, >0 to the right)\n    var leftSide;\n    if (head.line != anchor.line) {\n      leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n    } else {\n      var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n      var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n      if (headIndex == boundary - 1 || headIndex == boundary)\n        { leftSide = dir < 0; }\n      else\n        { leftSide = dir > 0; }\n    }\n\n    var usePart = order[boundary + (leftSide ? -1 : 0)];\n    var from = leftSide == (usePart.level == 1);\n    var ch = from ? usePart.from : usePart.to, sticky = from ? \"after\" : \"before\";\n    return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head)\n  }\n\n\n  // Determines whether an event happened in the gutter, and fires the\n  // handlers for the corresponding event.\n  function gutterEvent(cm, e, type, prevent) {\n    var mX, mY;\n    if (e.touches) {\n      mX = e.touches[0].clientX;\n      mY = e.touches[0].clientY;\n    } else {\n      try { mX = e.clientX; mY = e.clientY; }\n      catch(e$1) { return false }\n    }\n    if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }\n    if (prevent) { e_preventDefault(e); }\n\n    var display = cm.display;\n    var lineBox = display.lineDiv.getBoundingClientRect();\n\n    if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }\n    mY -= lineBox.top - display.viewOffset;\n\n    for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {\n      var g = display.gutters.childNodes[i];\n      if (g && g.getBoundingClientRect().right >= mX) {\n        var line = lineAtHeight(cm.doc, mY);\n        var gutter = cm.display.gutterSpecs[i];\n        signal(cm, type, cm, line, gutter.className, e);\n        return e_defaultPrevented(e)\n      }\n    }\n  }\n\n  function clickInGutter(cm, e) {\n    return gutterEvent(cm, e, \"gutterClick\", true)\n  }\n\n  // CONTEXT MENU HANDLING\n\n  // To make the context menu work, we need to briefly unhide the\n  // textarea (making it as unobtrusive as possible) to let the\n  // right-click take effect on it.\n  function onContextMenu(cm, e) {\n    if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }\n    if (signalDOMEvent(cm, e, \"contextmenu\")) { return }\n    if (!captureRightClick) { cm.display.input.onContextMenu(e); }\n  }\n\n  function contextMenuInGutter(cm, e) {\n    if (!hasHandler(cm, \"gutterContextMenu\")) { return false }\n    return gutterEvent(cm, e, \"gutterContextMenu\", false)\n  }\n\n  function themeChanged(cm) {\n    cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n      cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n    clearCaches(cm);\n  }\n\n  var Init = {toString: function(){return \"CodeMirror.Init\"}};\n\n  var defaults = {};\n  var optionHandlers = {};\n\n  function defineOptions(CodeMirror) {\n    var optionHandlers = CodeMirror.optionHandlers;\n\n    function option(name, deflt, handle, notOnInit) {\n      CodeMirror.defaults[name] = deflt;\n      if (handle) { optionHandlers[name] =\n        notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }\n    }\n\n    CodeMirror.defineOption = option;\n\n    // Passed to option handlers when there is no old value.\n    CodeMirror.Init = Init;\n\n    // These two are, on init, called from the constructor because they\n    // have to be initialized before the editor can start at all.\n    option(\"value\", \"\", function (cm, val) { return cm.setValue(val); }, true);\n    option(\"mode\", null, function (cm, val) {\n      cm.doc.modeOption = val;\n      loadMode(cm);\n    }, true);\n\n    option(\"indentUnit\", 2, loadMode, true);\n    option(\"indentWithTabs\", false);\n    option(\"smartIndent\", true);\n    option(\"tabSize\", 4, function (cm) {\n      resetModeState(cm);\n      clearCaches(cm);\n      regChange(cm);\n    }, true);\n\n    option(\"lineSeparator\", null, function (cm, val) {\n      cm.doc.lineSep = val;\n      if (!val) { return }\n      var newBreaks = [], lineNo = cm.doc.first;\n      cm.doc.iter(function (line) {\n        for (var pos = 0;;) {\n          var found = line.text.indexOf(val, pos);\n          if (found == -1) { break }\n          pos = found + val.length;\n          newBreaks.push(Pos(lineNo, found));\n        }\n        lineNo++;\n      });\n      for (var i = newBreaks.length - 1; i >= 0; i--)\n        { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }\n    });\n    option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b-\\u200c\\u200e\\u200f\\u2028\\u2029\\ufeff\\ufff9-\\ufffc]/g, function (cm, val, old) {\n      cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n      if (old != Init) { cm.refresh(); }\n    });\n    option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);\n    option(\"electricChars\", true);\n    option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n      throw new Error(\"inputStyle can not (yet) be changed in a running editor\") // FIXME\n    }, true);\n    option(\"spellcheck\", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);\n    option(\"autocorrect\", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);\n    option(\"autocapitalize\", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);\n    option(\"rtlMoveVisually\", !windows);\n    option(\"wholeLineUpdateBefore\", true);\n\n    option(\"theme\", \"default\", function (cm) {\n      themeChanged(cm);\n      updateGutters(cm);\n    }, true);\n    option(\"keyMap\", \"default\", function (cm, val, old) {\n      var next = getKeyMap(val);\n      var prev = old != Init && getKeyMap(old);\n      if (prev && prev.detach) { prev.detach(cm, next); }\n      if (next.attach) { next.attach(cm, prev || null); }\n    });\n    option(\"extraKeys\", null);\n    option(\"configureMouse\", null);\n\n    option(\"lineWrapping\", false, wrappingChanged, true);\n    option(\"gutters\", [], function (cm, val) {\n      cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);\n      updateGutters(cm);\n    }, true);\n    option(\"fixedGutter\", true, function (cm, val) {\n      cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n      cm.refresh();\n    }, true);\n    option(\"coverGutterNextToScrollbar\", false, function (cm) { return updateScrollbars(cm); }, true);\n    option(\"scrollbarStyle\", \"native\", function (cm) {\n      initScrollbars(cm);\n      updateScrollbars(cm);\n      cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n      cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n    }, true);\n    option(\"lineNumbers\", false, function (cm, val) {\n      cm.display.gutterSpecs = getGutters(cm.options.gutters, val);\n      updateGutters(cm);\n    }, true);\n    option(\"firstLineNumber\", 1, updateGutters, true);\n    option(\"lineNumberFormatter\", function (integer) { return integer; }, updateGutters, true);\n    option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n    option(\"resetSelectionOnContextMenu\", true);\n    option(\"lineWiseCopyCut\", true);\n    option(\"pasteLinesPerSelection\", true);\n    option(\"selectionsMayTouch\", false);\n\n    option(\"readOnly\", false, function (cm, val) {\n      if (val == \"nocursor\") {\n        onBlur(cm);\n        cm.display.input.blur();\n      }\n      cm.display.input.readOnlyChanged(val);\n    });\n\n    option(\"screenReaderLabel\", null, function (cm, val) {\n      val = (val === '') ? null : val;\n      cm.display.input.screenReaderLabelChanged(val);\n    });\n\n    option(\"disableInput\", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);\n    option(\"dragDrop\", true, dragDropChanged);\n    option(\"allowDropFileTypes\", null);\n\n    option(\"cursorBlinkRate\", 530);\n    option(\"cursorScrollMargin\", 0);\n    option(\"cursorHeight\", 1, updateSelection, true);\n    option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n    option(\"workTime\", 100);\n    option(\"workDelay\", 100);\n    option(\"flattenSpans\", true, resetModeState, true);\n    option(\"addModeClass\", false, resetModeState, true);\n    option(\"pollInterval\", 100);\n    option(\"undoDepth\", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });\n    option(\"historyEventDelay\", 1250);\n    option(\"viewportMargin\", 10, function (cm) { return cm.refresh(); }, true);\n    option(\"maxHighlightLength\", 10000, resetModeState, true);\n    option(\"moveInputWithCursor\", true, function (cm, val) {\n      if (!val) { cm.display.input.resetPosition(); }\n    });\n\n    option(\"tabindex\", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || \"\"; });\n    option(\"autofocus\", null);\n    option(\"direction\", \"ltr\", function (cm, val) { return cm.doc.setDirection(val); }, true);\n    option(\"phrases\", null);\n  }\n\n  function dragDropChanged(cm, value, old) {\n    var wasOn = old && old != Init;\n    if (!value != !wasOn) {\n      var funcs = cm.display.dragFunctions;\n      var toggle = value ? on : off;\n      toggle(cm.display.scroller, \"dragstart\", funcs.start);\n      toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n      toggle(cm.display.scroller, \"dragover\", funcs.over);\n      toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n      toggle(cm.display.scroller, \"drop\", funcs.drop);\n    }\n  }\n\n  function wrappingChanged(cm) {\n    if (cm.options.lineWrapping) {\n      addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      cm.display.sizer.style.minWidth = \"\";\n      cm.display.sizerWidth = null;\n    } else {\n      rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      findMaxLine(cm);\n    }\n    estimateLineHeights(cm);\n    regChange(cm);\n    clearCaches(cm);\n    setTimeout(function () { return updateScrollbars(cm); }, 100);\n  }\n\n  // A CodeMirror instance represents an editor. This is the object\n  // that user code is usually dealing with.\n\n  function CodeMirror(place, options) {\n    var this$1 = this;\n\n    if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }\n\n    this.options = options = options ? copyObj(options) : {};\n    // Determine effective options based on given values and defaults.\n    copyObj(defaults, options, false);\n\n    var doc = options.value;\n    if (typeof doc == \"string\") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }\n    else if (options.mode) { doc.modeOption = options.mode; }\n    this.doc = doc;\n\n    var input = new CodeMirror.inputStyles[options.inputStyle](this);\n    var display = this.display = new Display(place, doc, input, options);\n    display.wrapper.CodeMirror = this;\n    themeChanged(this);\n    if (options.lineWrapping)\n      { this.display.wrapper.className += \" CodeMirror-wrap\"; }\n    initScrollbars(this);\n\n    this.state = {\n      keyMaps: [],  // stores maps added by addKeyMap\n      overlays: [], // highlighting overlays, as added by addOverlay\n      modeGen: 0,   // bumped when mode/overlay changes, used to invalidate highlighting info\n      overwrite: false,\n      delayingBlurEvent: false,\n      focused: false,\n      suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n      pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll\n      selectingText: false,\n      draggingText: false,\n      highlight: new Delayed(), // stores highlight worker timeout\n      keySeq: null,  // Unfinished key sequence\n      specialChars: null\n    };\n\n    if (options.autofocus && !mobile) { display.input.focus(); }\n\n    // Override magic textarea content restore that IE sometimes does\n    // on our hidden textarea on reload\n    if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }\n\n    registerEventHandlers(this);\n    ensureGlobalHandlers();\n\n    startOperation(this);\n    this.curOp.forceUpdate = true;\n    attachDoc(this, doc);\n\n    if ((options.autofocus && !mobile) || this.hasFocus())\n      { setTimeout(function () {\n        if (this$1.hasFocus() && !this$1.state.focused) { onFocus(this$1); }\n      }, 20); }\n    else\n      { onBlur(this); }\n\n    for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))\n      { optionHandlers[opt](this, options[opt], Init); } }\n    maybeUpdateLineNumberWidth(this);\n    if (options.finishInit) { options.finishInit(this); }\n    for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this); }\n    endOperation(this);\n    // Suppress optimizelegibility in Webkit, since it breaks text\n    // measuring on line wrapping boundaries.\n    if (webkit && options.lineWrapping &&\n        getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n      { display.lineDiv.style.textRendering = \"auto\"; }\n  }\n\n  // The default configuration options.\n  CodeMirror.defaults = defaults;\n  // Functions to run when options are changed.\n  CodeMirror.optionHandlers = optionHandlers;\n\n  // Attach the necessary event handlers when initializing the editor\n  function registerEventHandlers(cm) {\n    var d = cm.display;\n    on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n    // Older IE's will not fire a second mousedown for a double click\n    if (ie && ie_version < 11)\n      { on(d.scroller, \"dblclick\", operation(cm, function (e) {\n        if (signalDOMEvent(cm, e)) { return }\n        var pos = posFromMouse(cm, e);\n        if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }\n        e_preventDefault(e);\n        var word = cm.findWordAt(pos);\n        extendSelection(cm.doc, word.anchor, word.head);\n      })); }\n    else\n      { on(d.scroller, \"dblclick\", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }\n    // Some browsers fire contextmenu *after* opening the menu, at\n    // which point we can't mess with it anymore. Context menu is\n    // handled in onMouseDown for these browsers.\n    on(d.scroller, \"contextmenu\", function (e) { return onContextMenu(cm, e); });\n    on(d.input.getField(), \"contextmenu\", function (e) {\n      if (!d.scroller.contains(e.target)) { onContextMenu(cm, e); }\n    });\n\n    // Used to suppress mouse event handling when a touch happens\n    var touchFinished, prevTouch = {end: 0};\n    function finishTouch() {\n      if (d.activeTouch) {\n        touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);\n        prevTouch = d.activeTouch;\n        prevTouch.end = +new Date;\n      }\n    }\n    function isMouseLikeTouchEvent(e) {\n      if (e.touches.length != 1) { return false }\n      var touch = e.touches[0];\n      return touch.radiusX <= 1 && touch.radiusY <= 1\n    }\n    function farAway(touch, other) {\n      if (other.left == null) { return true }\n      var dx = other.left - touch.left, dy = other.top - touch.top;\n      return dx * dx + dy * dy > 20 * 20\n    }\n    on(d.scroller, \"touchstart\", function (e) {\n      if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n        d.input.ensurePolled();\n        clearTimeout(touchFinished);\n        var now = +new Date;\n        d.activeTouch = {start: now, moved: false,\n                         prev: now - prevTouch.end <= 300 ? prevTouch : null};\n        if (e.touches.length == 1) {\n          d.activeTouch.left = e.touches[0].pageX;\n          d.activeTouch.top = e.touches[0].pageY;\n        }\n      }\n    });\n    on(d.scroller, \"touchmove\", function () {\n      if (d.activeTouch) { d.activeTouch.moved = true; }\n    });\n    on(d.scroller, \"touchend\", function (e) {\n      var touch = d.activeTouch;\n      if (touch && !eventInWidget(d, e) && touch.left != null &&\n          !touch.moved && new Date - touch.start < 300) {\n        var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n        if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n          { range = new Range(pos, pos); }\n        else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n          { range = cm.findWordAt(pos); }\n        else // Triple tap\n          { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }\n        cm.setSelection(range.anchor, range.head);\n        cm.focus();\n        e_preventDefault(e);\n      }\n      finishTouch();\n    });\n    on(d.scroller, \"touchcancel\", finishTouch);\n\n    // Sync scrolling between fake scrollbars and real scrollable\n    // area, ensure viewport is updated when scrolling.\n    on(d.scroller, \"scroll\", function () {\n      if (d.scroller.clientHeight) {\n        updateScrollTop(cm, d.scroller.scrollTop);\n        setScrollLeft(cm, d.scroller.scrollLeft, true);\n        signal(cm, \"scroll\", cm);\n      }\n    });\n\n    // Listen to wheel events in order to try and update the viewport on time.\n    on(d.scroller, \"mousewheel\", function (e) { return onScrollWheel(cm, e); });\n    on(d.scroller, \"DOMMouseScroll\", function (e) { return onScrollWheel(cm, e); });\n\n    // Prevent wrapper from ever scrolling\n    on(d.wrapper, \"scroll\", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n    d.dragFunctions = {\n      enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},\n      over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n      start: function (e) { return onDragStart(cm, e); },\n      drop: operation(cm, onDrop),\n      leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n    };\n\n    var inp = d.input.getField();\n    on(inp, \"keyup\", function (e) { return onKeyUp.call(cm, e); });\n    on(inp, \"keydown\", operation(cm, onKeyDown));\n    on(inp, \"keypress\", operation(cm, onKeyPress));\n    on(inp, \"focus\", function (e) { return onFocus(cm, e); });\n    on(inp, \"blur\", function (e) { return onBlur(cm, e); });\n  }\n\n  var initHooks = [];\n  CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };\n\n  // Indent the given line. The how parameter can be \"smart\",\n  // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n  // (typically set to true for forced single-line indents), empty\n  // lines are not indented, and places where the mode returns Pass\n  // are left alone.\n  function indentLine(cm, n, how, aggressive) {\n    var doc = cm.doc, state;\n    if (how == null) { how = \"add\"; }\n    if (how == \"smart\") {\n      // Fall back to \"prev\" when the mode doesn't have an indentation\n      // method.\n      if (!doc.mode.indent) { how = \"prev\"; }\n      else { state = getContextBefore(cm, n).state; }\n    }\n\n    var tabSize = cm.options.tabSize;\n    var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n    if (line.stateAfter) { line.stateAfter = null; }\n    var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n    if (!aggressive && !/\\S/.test(line.text)) {\n      indentation = 0;\n      how = \"not\";\n    } else if (how == \"smart\") {\n      indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n      if (indentation == Pass || indentation > 150) {\n        if (!aggressive) { return }\n        how = \"prev\";\n      }\n    }\n    if (how == \"prev\") {\n      if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }\n      else { indentation = 0; }\n    } else if (how == \"add\") {\n      indentation = curSpace + cm.options.indentUnit;\n    } else if (how == \"subtract\") {\n      indentation = curSpace - cm.options.indentUnit;\n    } else if (typeof how == \"number\") {\n      indentation = curSpace + how;\n    }\n    indentation = Math.max(0, indentation);\n\n    var indentString = \"\", pos = 0;\n    if (cm.options.indentWithTabs)\n      { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";} }\n    if (pos < indentation) { indentString += spaceStr(indentation - pos); }\n\n    if (indentString != curSpaceString) {\n      replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n      line.stateAfter = null;\n      return true\n    } else {\n      // Ensure that, if the cursor was in the whitespace at the start\n      // of the line, it is moved to the end of that space.\n      for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n        var range = doc.sel.ranges[i$1];\n        if (range.head.line == n && range.head.ch < curSpaceString.length) {\n          var pos$1 = Pos(n, curSpaceString.length);\n          replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n          break\n        }\n      }\n    }\n  }\n\n  // This will be set to a {lineWise: bool, text: [string]} object, so\n  // that, when pasting, we know what kind of selections the copied\n  // text was made out of.\n  var lastCopied = null;\n\n  function setLastCopied(newLastCopied) {\n    lastCopied = newLastCopied;\n  }\n\n  function applyTextInput(cm, inserted, deleted, sel, origin) {\n    var doc = cm.doc;\n    cm.display.shift = false;\n    if (!sel) { sel = doc.sel; }\n\n    var recent = +new Date - 200;\n    var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n    var textLines = splitLinesAuto(inserted), multiPaste = null;\n    // When pasting N lines into N selections, insert one line per selection\n    if (paste && sel.ranges.length > 1) {\n      if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n        if (sel.ranges.length % lastCopied.text.length == 0) {\n          multiPaste = [];\n          for (var i = 0; i < lastCopied.text.length; i++)\n            { multiPaste.push(doc.splitLines(lastCopied.text[i])); }\n        }\n      } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n        multiPaste = map(textLines, function (l) { return [l]; });\n      }\n    }\n\n    var updateInput = cm.curOp.updateInput;\n    // Normal behavior is to insert the new text into every selection\n    for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n      var range = sel.ranges[i$1];\n      var from = range.from(), to = range.to();\n      if (range.empty()) {\n        if (deleted && deleted > 0) // Handle deletion\n          { from = Pos(from.line, from.ch - deleted); }\n        else if (cm.state.overwrite && !paste) // Handle overwrite\n          { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }\n        else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == textLines.join(\"\\n\"))\n          { from = to = Pos(from.line, 0); }\n      }\n      var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n                         origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")};\n      makeChange(cm.doc, changeEvent);\n      signalLater(cm, \"inputRead\", cm, changeEvent);\n    }\n    if (inserted && !paste)\n      { triggerElectric(cm, inserted); }\n\n    ensureCursorVisible(cm);\n    if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }\n    cm.curOp.typing = true;\n    cm.state.pasteIncoming = cm.state.cutIncoming = -1;\n  }\n\n  function handlePaste(e, cm) {\n    var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n    if (pasted) {\n      e.preventDefault();\n      if (!cm.isReadOnly() && !cm.options.disableInput)\n        { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, \"paste\"); }); }\n      return true\n    }\n  }\n\n  function triggerElectric(cm, inserted) {\n    // When an 'electric' character is inserted, immediately trigger a reindent\n    if (!cm.options.electricChars || !cm.options.smartIndent) { return }\n    var sel = cm.doc.sel;\n\n    for (var i = sel.ranges.length - 1; i >= 0; i--) {\n      var range = sel.ranges[i];\n      if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue }\n      var mode = cm.getModeAt(range.head);\n      var indented = false;\n      if (mode.electricChars) {\n        for (var j = 0; j < mode.electricChars.length; j++)\n          { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n            indented = indentLine(cm, range.head.line, \"smart\");\n            break\n          } }\n      } else if (mode.electricInput) {\n        if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))\n          { indented = indentLine(cm, range.head.line, \"smart\"); }\n      }\n      if (indented) { signalLater(cm, \"electricInput\", cm, range.head.line); }\n    }\n  }\n\n  function copyableRanges(cm) {\n    var text = [], ranges = [];\n    for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n      var line = cm.doc.sel.ranges[i].head.line;\n      var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n      ranges.push(lineRange);\n      text.push(cm.getRange(lineRange.anchor, lineRange.head));\n    }\n    return {text: text, ranges: ranges}\n  }\n\n  function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {\n    field.setAttribute(\"autocorrect\", autocorrect ? \"\" : \"off\");\n    field.setAttribute(\"autocapitalize\", autocapitalize ? \"\" : \"off\");\n    field.setAttribute(\"spellcheck\", !!spellcheck);\n  }\n\n  function hiddenTextarea() {\n    var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\");\n    var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n    // The textarea is kept positioned near the cursor to prevent the\n    // fact that it'll be scrolled into view on input from scrolling\n    // our fake cursor out of view. On webkit, when wrap=off, paste is\n    // very slow. So make the area wide instead.\n    if (webkit) { te.style.width = \"1000px\"; }\n    else { te.setAttribute(\"wrap\", \"off\"); }\n    // If border: 0; -- iOS fails to open keyboard (issue #1287)\n    if (ios) { te.style.border = \"1px solid black\"; }\n    disableBrowserMagic(te);\n    return div\n  }\n\n  // The publicly visible API. Note that methodOp(f) means\n  // 'wrap f in an operation, performed on its `this` parameter'.\n\n  // This is not the complete set of editor methods. Most of the\n  // methods defined on the Doc type are also injected into\n  // CodeMirror.prototype, for backwards compatibility and\n  // convenience.\n\n  function addEditorMethods(CodeMirror) {\n    var optionHandlers = CodeMirror.optionHandlers;\n\n    var helpers = CodeMirror.helpers = {};\n\n    CodeMirror.prototype = {\n      constructor: CodeMirror,\n      focus: function(){window.focus(); this.display.input.focus();},\n\n      setOption: function(option, value) {\n        var options = this.options, old = options[option];\n        if (options[option] == value && option != \"mode\") { return }\n        options[option] = value;\n        if (optionHandlers.hasOwnProperty(option))\n          { operation(this, optionHandlers[option])(this, value, old); }\n        signal(this, \"optionChange\", this, option);\n      },\n\n      getOption: function(option) {return this.options[option]},\n      getDoc: function() {return this.doc},\n\n      addKeyMap: function(map, bottom) {\n        this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map));\n      },\n      removeKeyMap: function(map) {\n        var maps = this.state.keyMaps;\n        for (var i = 0; i < maps.length; ++i)\n          { if (maps[i] == map || maps[i].name == map) {\n            maps.splice(i, 1);\n            return true\n          } }\n      },\n\n      addOverlay: methodOp(function(spec, options) {\n        var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n        if (mode.startState) { throw new Error(\"Overlays may not be stateful.\") }\n        insertSorted(this.state.overlays,\n                     {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n                      priority: (options && options.priority) || 0},\n                     function (overlay) { return overlay.priority; });\n        this.state.modeGen++;\n        regChange(this);\n      }),\n      removeOverlay: methodOp(function(spec) {\n        var overlays = this.state.overlays;\n        for (var i = 0; i < overlays.length; ++i) {\n          var cur = overlays[i].modeSpec;\n          if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n            overlays.splice(i, 1);\n            this.state.modeGen++;\n            regChange(this);\n            return\n          }\n        }\n      }),\n\n      indentLine: methodOp(function(n, dir, aggressive) {\n        if (typeof dir != \"string\" && typeof dir != \"number\") {\n          if (dir == null) { dir = this.options.smartIndent ? \"smart\" : \"prev\"; }\n          else { dir = dir ? \"add\" : \"subtract\"; }\n        }\n        if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }\n      }),\n      indentSelection: methodOp(function(how) {\n        var ranges = this.doc.sel.ranges, end = -1;\n        for (var i = 0; i < ranges.length; i++) {\n          var range = ranges[i];\n          if (!range.empty()) {\n            var from = range.from(), to = range.to();\n            var start = Math.max(end, from.line);\n            end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n            for (var j = start; j < end; ++j)\n              { indentLine(this, j, how); }\n            var newRanges = this.doc.sel.ranges;\n            if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n              { replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }\n          } else if (range.head.line > end) {\n            indentLine(this, range.head.line, how, true);\n            end = range.head.line;\n            if (i == this.doc.sel.primIndex) { ensureCursorVisible(this); }\n          }\n        }\n      }),\n\n      // Fetch the parser token for a given character. Useful for hacks\n      // that want to inspect the mode state (say, for completion).\n      getTokenAt: function(pos, precise) {\n        return takeToken(this, pos, precise)\n      },\n\n      getLineTokens: function(line, precise) {\n        return takeToken(this, Pos(line), precise, true)\n      },\n\n      getTokenTypeAt: function(pos) {\n        pos = clipPos(this.doc, pos);\n        var styles = getLineStyles(this, getLine(this.doc, pos.line));\n        var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n        var type;\n        if (ch == 0) { type = styles[2]; }\n        else { for (;;) {\n          var mid = (before + after) >> 1;\n          if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }\n          else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }\n          else { type = styles[mid * 2 + 2]; break }\n        } }\n        var cut = type ? type.indexOf(\"overlay \") : -1;\n        return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n      },\n\n      getModeAt: function(pos) {\n        var mode = this.doc.mode;\n        if (!mode.innerMode) { return mode }\n        return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n      },\n\n      getHelper: function(pos, type) {\n        return this.getHelpers(pos, type)[0]\n      },\n\n      getHelpers: function(pos, type) {\n        var found = [];\n        if (!helpers.hasOwnProperty(type)) { return found }\n        var help = helpers[type], mode = this.getModeAt(pos);\n        if (typeof mode[type] == \"string\") {\n          if (help[mode[type]]) { found.push(help[mode[type]]); }\n        } else if (mode[type]) {\n          for (var i = 0; i < mode[type].length; i++) {\n            var val = help[mode[type][i]];\n            if (val) { found.push(val); }\n          }\n        } else if (mode.helperType && help[mode.helperType]) {\n          found.push(help[mode.helperType]);\n        } else if (help[mode.name]) {\n          found.push(help[mode.name]);\n        }\n        for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n          var cur = help._global[i$1];\n          if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)\n            { found.push(cur.val); }\n        }\n        return found\n      },\n\n      getStateAfter: function(line, precise) {\n        var doc = this.doc;\n        line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n        return getContextBefore(this, line + 1, precise).state\n      },\n\n      cursorCoords: function(start, mode) {\n        var pos, range = this.doc.sel.primary();\n        if (start == null) { pos = range.head; }\n        else if (typeof start == \"object\") { pos = clipPos(this.doc, start); }\n        else { pos = start ? range.from() : range.to(); }\n        return cursorCoords(this, pos, mode || \"page\")\n      },\n\n      charCoords: function(pos, mode) {\n        return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n      },\n\n      coordsChar: function(coords, mode) {\n        coords = fromCoordSystem(this, coords, mode || \"page\");\n        return coordsChar(this, coords.left, coords.top)\n      },\n\n      lineAtHeight: function(height, mode) {\n        height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n        return lineAtHeight(this.doc, height + this.display.viewOffset)\n      },\n      heightAtLine: function(line, mode, includeWidgets) {\n        var end = false, lineObj;\n        if (typeof line == \"number\") {\n          var last = this.doc.first + this.doc.size - 1;\n          if (line < this.doc.first) { line = this.doc.first; }\n          else if (line > last) { line = last; end = true; }\n          lineObj = getLine(this.doc, line);\n        } else {\n          lineObj = line;\n        }\n        return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n          (end ? this.doc.height - heightAtLine(lineObj) : 0)\n      },\n\n      defaultTextHeight: function() { return textHeight(this.display) },\n      defaultCharWidth: function() { return charWidth(this.display) },\n\n      getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n      addWidget: function(pos, node, scroll, vert, horiz) {\n        var display = this.display;\n        pos = cursorCoords(this, clipPos(this.doc, pos));\n        var top = pos.bottom, left = pos.left;\n        node.style.position = \"absolute\";\n        node.setAttribute(\"cm-ignore-events\", \"true\");\n        this.display.input.setUneditable(node);\n        display.sizer.appendChild(node);\n        if (vert == \"over\") {\n          top = pos.top;\n        } else if (vert == \"above\" || vert == \"near\") {\n          var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n          hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n          // Default to positioning above (if specified and possible); otherwise default to positioning below\n          if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n            { top = pos.top - node.offsetHeight; }\n          else if (pos.bottom + node.offsetHeight <= vspace)\n            { top = pos.bottom; }\n          if (left + node.offsetWidth > hspace)\n            { left = hspace - node.offsetWidth; }\n        }\n        node.style.top = top + \"px\";\n        node.style.left = node.style.right = \"\";\n        if (horiz == \"right\") {\n          left = display.sizer.clientWidth - node.offsetWidth;\n          node.style.right = \"0px\";\n        } else {\n          if (horiz == \"left\") { left = 0; }\n          else if (horiz == \"middle\") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }\n          node.style.left = left + \"px\";\n        }\n        if (scroll)\n          { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }\n      },\n\n      triggerOnKeyDown: methodOp(onKeyDown),\n      triggerOnKeyPress: methodOp(onKeyPress),\n      triggerOnKeyUp: onKeyUp,\n      triggerOnMouseDown: methodOp(onMouseDown),\n\n      execCommand: function(cmd) {\n        if (commands.hasOwnProperty(cmd))\n          { return commands[cmd].call(null, this) }\n      },\n\n      triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n      findPosH: function(from, amount, unit, visually) {\n        var dir = 1;\n        if (amount < 0) { dir = -1; amount = -amount; }\n        var cur = clipPos(this.doc, from);\n        for (var i = 0; i < amount; ++i) {\n          cur = findPosH(this.doc, cur, dir, unit, visually);\n          if (cur.hitSide) { break }\n        }\n        return cur\n      },\n\n      moveH: methodOp(function(dir, unit) {\n        var this$1 = this;\n\n        this.extendSelectionsBy(function (range) {\n          if (this$1.display.shift || this$1.doc.extend || range.empty())\n            { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) }\n          else\n            { return dir < 0 ? range.from() : range.to() }\n        }, sel_move);\n      }),\n\n      deleteH: methodOp(function(dir, unit) {\n        var sel = this.doc.sel, doc = this.doc;\n        if (sel.somethingSelected())\n          { doc.replaceSelection(\"\", null, \"+delete\"); }\n        else\n          { deleteNearSelection(this, function (range) {\n            var other = findPosH(doc, range.head, dir, unit, false);\n            return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}\n          }); }\n      }),\n\n      findPosV: function(from, amount, unit, goalColumn) {\n        var dir = 1, x = goalColumn;\n        if (amount < 0) { dir = -1; amount = -amount; }\n        var cur = clipPos(this.doc, from);\n        for (var i = 0; i < amount; ++i) {\n          var coords = cursorCoords(this, cur, \"div\");\n          if (x == null) { x = coords.left; }\n          else { coords.left = x; }\n          cur = findPosV(this, coords, dir, unit);\n          if (cur.hitSide) { break }\n        }\n        return cur\n      },\n\n      moveV: methodOp(function(dir, unit) {\n        var this$1 = this;\n\n        var doc = this.doc, goals = [];\n        var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n        doc.extendSelectionsBy(function (range) {\n          if (collapse)\n            { return dir < 0 ? range.from() : range.to() }\n          var headPos = cursorCoords(this$1, range.head, \"div\");\n          if (range.goalColumn != null) { headPos.left = range.goalColumn; }\n          goals.push(headPos.left);\n          var pos = findPosV(this$1, headPos, dir, unit);\n          if (unit == \"page\" && range == doc.sel.primary())\n            { addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top); }\n          return pos\n        }, sel_move);\n        if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)\n          { doc.sel.ranges[i].goalColumn = goals[i]; } }\n      }),\n\n      // Find the word at the given position (as returned by coordsChar).\n      findWordAt: function(pos) {\n        var doc = this.doc, line = getLine(doc, pos.line).text;\n        var start = pos.ch, end = pos.ch;\n        if (line) {\n          var helper = this.getHelper(pos, \"wordChars\");\n          if ((pos.sticky == \"before\" || end == line.length) && start) { --start; } else { ++end; }\n          var startChar = line.charAt(start);\n          var check = isWordChar(startChar, helper)\n            ? function (ch) { return isWordChar(ch, helper); }\n            : /\\s/.test(startChar) ? function (ch) { return /\\s/.test(ch); }\n            : function (ch) { return (!/\\s/.test(ch) && !isWordChar(ch)); };\n          while (start > 0 && check(line.charAt(start - 1))) { --start; }\n          while (end < line.length && check(line.charAt(end))) { ++end; }\n        }\n        return new Range(Pos(pos.line, start), Pos(pos.line, end))\n      },\n\n      toggleOverwrite: function(value) {\n        if (value != null && value == this.state.overwrite) { return }\n        if (this.state.overwrite = !this.state.overwrite)\n          { addClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n        else\n          { rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n\n        signal(this, \"overwriteToggle\", this, this.state.overwrite);\n      },\n      hasFocus: function() { return this.display.input.getField() == activeElt() },\n      isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n      scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),\n      getScrollInfo: function() {\n        var scroller = this.display.scroller;\n        return {left: scroller.scrollLeft, top: scroller.scrollTop,\n                height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n                width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n                clientHeight: displayHeight(this), clientWidth: displayWidth(this)}\n      },\n\n      scrollIntoView: methodOp(function(range, margin) {\n        if (range == null) {\n          range = {from: this.doc.sel.primary().head, to: null};\n          if (margin == null) { margin = this.options.cursorScrollMargin; }\n        } else if (typeof range == \"number\") {\n          range = {from: Pos(range, 0), to: null};\n        } else if (range.from == null) {\n          range = {from: range, to: null};\n        }\n        if (!range.to) { range.to = range.from; }\n        range.margin = margin || 0;\n\n        if (range.from.line != null) {\n          scrollToRange(this, range);\n        } else {\n          scrollToCoordsRange(this, range.from, range.to, range.margin);\n        }\n      }),\n\n      setSize: methodOp(function(width, height) {\n        var this$1 = this;\n\n        var interpret = function (val) { return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val; };\n        if (width != null) { this.display.wrapper.style.width = interpret(width); }\n        if (height != null) { this.display.wrapper.style.height = interpret(height); }\n        if (this.options.lineWrapping) { clearLineMeasurementCache(this); }\n        var lineNo = this.display.viewFrom;\n        this.doc.iter(lineNo, this.display.viewTo, function (line) {\n          if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)\n            { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, \"widget\"); break } } }\n          ++lineNo;\n        });\n        this.curOp.forceUpdate = true;\n        signal(this, \"refresh\", this);\n      }),\n\n      operation: function(f){return runInOp(this, f)},\n      startOperation: function(){return startOperation(this)},\n      endOperation: function(){return endOperation(this)},\n\n      refresh: methodOp(function() {\n        var oldHeight = this.display.cachedTextHeight;\n        regChange(this);\n        this.curOp.forceUpdate = true;\n        clearCaches(this);\n        scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n        updateGutterSpace(this.display);\n        if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping)\n          { estimateLineHeights(this); }\n        signal(this, \"refresh\", this);\n      }),\n\n      swapDoc: methodOp(function(doc) {\n        var old = this.doc;\n        old.cm = null;\n        // Cancel the current text selection if any (#5821)\n        if (this.state.selectingText) { this.state.selectingText(); }\n        attachDoc(this, doc);\n        clearCaches(this);\n        this.display.input.reset();\n        scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n        this.curOp.forceScroll = true;\n        signalLater(this, \"swapDoc\", this, old);\n        return old\n      }),\n\n      phrase: function(phraseText) {\n        var phrases = this.options.phrases;\n        return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText\n      },\n\n      getInputField: function(){return this.display.input.getField()},\n      getWrapperElement: function(){return this.display.wrapper},\n      getScrollerElement: function(){return this.display.scroller},\n      getGutterElement: function(){return this.display.gutters}\n    };\n    eventMixin(CodeMirror);\n\n    CodeMirror.registerHelper = function(type, name, value) {\n      if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }\n      helpers[type][name] = value;\n    };\n    CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n      CodeMirror.registerHelper(type, name, value);\n      helpers[type]._global.push({pred: predicate, val: value});\n    };\n  }\n\n  // Used for horizontal relative motion. Dir is -1 or 1 (left or\n  // right), unit can be \"codepoint\", \"char\", \"column\" (like char, but\n  // doesn't cross line boundaries), \"word\" (across next word), or\n  // \"group\" (to the start of next group of word or\n  // non-word-non-whitespace chars). The visually param controls\n  // whether, in right-to-left text, direction 1 means to move towards\n  // the next index in the string, or towards the character to the right\n  // of the current position. The resulting position will have a\n  // hitSide=true property if it reached the end of the document.\n  function findPosH(doc, pos, dir, unit, visually) {\n    var oldPos = pos;\n    var origDir = dir;\n    var lineObj = getLine(doc, pos.line);\n    var lineDir = visually && doc.direction == \"rtl\" ? -dir : dir;\n    function findNextLine() {\n      var l = pos.line + lineDir;\n      if (l < doc.first || l >= doc.first + doc.size) { return false }\n      pos = new Pos(l, pos.ch, pos.sticky);\n      return lineObj = getLine(doc, l)\n    }\n    function moveOnce(boundToLine) {\n      var next;\n      if (unit == \"codepoint\") {\n        var ch = lineObj.text.charCodeAt(pos.ch + (unit > 0 ? 0 : -1));\n        if (isNaN(ch)) { next = null; }\n        else { next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (ch >= 0xD800 && ch < 0xDC00 ? 2 : 1))),\n                            -dir); }\n      } else if (visually) {\n        next = moveVisually(doc.cm, lineObj, pos, dir);\n      } else {\n        next = moveLogically(lineObj, pos, dir);\n      }\n      if (next == null) {\n        if (!boundToLine && findNextLine())\n          { pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); }\n        else\n          { return false }\n      } else {\n        pos = next;\n      }\n      return true\n    }\n\n    if (unit == \"char\" || unit == \"codepoint\") {\n      moveOnce();\n    } else if (unit == \"column\") {\n      moveOnce(true);\n    } else if (unit == \"word\" || unit == \"group\") {\n      var sawType = null, group = unit == \"group\";\n      var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n      for (var first = true;; first = false) {\n        if (dir < 0 && !moveOnce(!first)) { break }\n        var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n        var type = isWordChar(cur, helper) ? \"w\"\n          : group && cur == \"\\n\" ? \"n\"\n          : !group || /\\s/.test(cur) ? null\n          : \"p\";\n        if (group && !first && !type) { type = \"s\"; }\n        if (sawType && sawType != type) {\n          if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\";}\n          break\n        }\n\n        if (type) { sawType = type; }\n        if (dir > 0 && !moveOnce(!first)) { break }\n      }\n    }\n    var result = skipAtomic(doc, pos, oldPos, origDir, true);\n    if (equalCursorPos(oldPos, result)) { result.hitSide = true; }\n    return result\n  }\n\n  // For relative vertical movement. Dir may be -1 or 1. Unit can be\n  // \"page\" or \"line\". The resulting position will have a hitSide=true\n  // property if it reached the end of the document.\n  function findPosV(cm, pos, dir, unit) {\n    var doc = cm.doc, x = pos.left, y;\n    if (unit == \"page\") {\n      var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n      var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n      y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n\n    } else if (unit == \"line\") {\n      y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n    }\n    var target;\n    for (;;) {\n      target = coordsChar(cm, x, y);\n      if (!target.outside) { break }\n      if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n      y += dir * 5;\n    }\n    return target\n  }\n\n  // CONTENTEDITABLE INPUT STYLE\n\n  var ContentEditableInput = function(cm) {\n    this.cm = cm;\n    this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n    this.polling = new Delayed();\n    this.composing = null;\n    this.gracePeriod = false;\n    this.readDOMTimeout = null;\n  };\n\n  ContentEditableInput.prototype.init = function (display) {\n      var this$1 = this;\n\n    var input = this, cm = input.cm;\n    var div = input.div = display.lineDiv;\n    disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);\n\n    function belongsToInput(e) {\n      for (var t = e.target; t; t = t.parentNode) {\n        if (t == div) { return true }\n        if (/\\bCodeMirror-(?:line)?widget\\b/.test(t.className)) { break }\n      }\n      return false\n    }\n\n    on(div, \"paste\", function (e) {\n      if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n      // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n      if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }\n    });\n\n    on(div, \"compositionstart\", function (e) {\n      this$1.composing = {data: e.data, done: false};\n    });\n    on(div, \"compositionupdate\", function (e) {\n      if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }\n    });\n    on(div, \"compositionend\", function (e) {\n      if (this$1.composing) {\n        if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }\n        this$1.composing.done = true;\n      }\n    });\n\n    on(div, \"touchstart\", function () { return input.forceCompositionEnd(); });\n\n    on(div, \"input\", function () {\n      if (!this$1.composing) { this$1.readFromDOMSoon(); }\n    });\n\n    function onCopyCut(e) {\n      if (!belongsToInput(e) || signalDOMEvent(cm, e)) { return }\n      if (cm.somethingSelected()) {\n        setLastCopied({lineWise: false, text: cm.getSelections()});\n        if (e.type == \"cut\") { cm.replaceSelection(\"\", null, \"cut\"); }\n      } else if (!cm.options.lineWiseCopyCut) {\n        return\n      } else {\n        var ranges = copyableRanges(cm);\n        setLastCopied({lineWise: true, text: ranges.text});\n        if (e.type == \"cut\") {\n          cm.operation(function () {\n            cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n            cm.replaceSelection(\"\", null, \"cut\");\n          });\n        }\n      }\n      if (e.clipboardData) {\n        e.clipboardData.clearData();\n        var content = lastCopied.text.join(\"\\n\");\n        // iOS exposes the clipboard API, but seems to discard content inserted into it\n        e.clipboardData.setData(\"Text\", content);\n        if (e.clipboardData.getData(\"Text\") == content) {\n          e.preventDefault();\n          return\n        }\n      }\n      // Old-fashioned briefly-focus-a-textarea hack\n      var kludge = hiddenTextarea(), te = kludge.firstChild;\n      cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n      te.value = lastCopied.text.join(\"\\n\");\n      var hadFocus = document.activeElement;\n      selectInput(te);\n      setTimeout(function () {\n        cm.display.lineSpace.removeChild(kludge);\n        hadFocus.focus();\n        if (hadFocus == div) { input.showPrimarySelection(); }\n      }, 50);\n    }\n    on(div, \"copy\", onCopyCut);\n    on(div, \"cut\", onCopyCut);\n  };\n\n  ContentEditableInput.prototype.screenReaderLabelChanged = function (label) {\n    // Label for screenreaders, accessibility\n    if(label) {\n      this.div.setAttribute('aria-label', label);\n    } else {\n      this.div.removeAttribute('aria-label');\n    }\n  };\n\n  ContentEditableInput.prototype.prepareSelection = function () {\n    var result = prepareSelection(this.cm, false);\n    result.focus = document.activeElement == this.div;\n    return result\n  };\n\n  ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n    if (!info || !this.cm.display.view.length) { return }\n    if (info.focus || takeFocus) { this.showPrimarySelection(); }\n    this.showMultipleSelections(info);\n  };\n\n  ContentEditableInput.prototype.getSelection = function () {\n    return this.cm.display.wrapper.ownerDocument.getSelection()\n  };\n\n  ContentEditableInput.prototype.showPrimarySelection = function () {\n    var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();\n    var from = prim.from(), to = prim.to();\n\n    if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n      sel.removeAllRanges();\n      return\n    }\n\n    var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n    var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n    if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n        cmp(minPos(curAnchor, curFocus), from) == 0 &&\n        cmp(maxPos(curAnchor, curFocus), to) == 0)\n      { return }\n\n    var view = cm.display.view;\n    var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||\n        {node: view[0].measure.map[2], offset: 0};\n    var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n    if (!end) {\n      var measure = view[view.length - 1].measure;\n      var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n      end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]};\n    }\n\n    if (!start || !end) {\n      sel.removeAllRanges();\n      return\n    }\n\n    var old = sel.rangeCount && sel.getRangeAt(0), rng;\n    try { rng = range(start.node, start.offset, end.offset, end.node); }\n    catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n    if (rng) {\n      if (!gecko && cm.state.focused) {\n        sel.collapse(start.node, start.offset);\n        if (!rng.collapsed) {\n          sel.removeAllRanges();\n          sel.addRange(rng);\n        }\n      } else {\n        sel.removeAllRanges();\n        sel.addRange(rng);\n      }\n      if (old && sel.anchorNode == null) { sel.addRange(old); }\n      else if (gecko) { this.startGracePeriod(); }\n    }\n    this.rememberSelection();\n  };\n\n  ContentEditableInput.prototype.startGracePeriod = function () {\n      var this$1 = this;\n\n    clearTimeout(this.gracePeriod);\n    this.gracePeriod = setTimeout(function () {\n      this$1.gracePeriod = false;\n      if (this$1.selectionChanged())\n        { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }\n    }, 20);\n  };\n\n  ContentEditableInput.prototype.showMultipleSelections = function (info) {\n    removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n    removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n  };\n\n  ContentEditableInput.prototype.rememberSelection = function () {\n    var sel = this.getSelection();\n    this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;\n    this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n  };\n\n  ContentEditableInput.prototype.selectionInEditor = function () {\n    var sel = this.getSelection();\n    if (!sel.rangeCount) { return false }\n    var node = sel.getRangeAt(0).commonAncestorContainer;\n    return contains(this.div, node)\n  };\n\n  ContentEditableInput.prototype.focus = function () {\n    if (this.cm.options.readOnly != \"nocursor\") {\n      if (!this.selectionInEditor() || document.activeElement != this.div)\n        { this.showSelection(this.prepareSelection(), true); }\n      this.div.focus();\n    }\n  };\n  ContentEditableInput.prototype.blur = function () { this.div.blur(); };\n  ContentEditableInput.prototype.getField = function () { return this.div };\n\n  ContentEditableInput.prototype.supportsTouch = function () { return true };\n\n  ContentEditableInput.prototype.receivedFocus = function () {\n    var input = this;\n    if (this.selectionInEditor())\n      { this.pollSelection(); }\n    else\n      { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }\n\n    function poll() {\n      if (input.cm.state.focused) {\n        input.pollSelection();\n        input.polling.set(input.cm.options.pollInterval, poll);\n      }\n    }\n    this.polling.set(this.cm.options.pollInterval, poll);\n  };\n\n  ContentEditableInput.prototype.selectionChanged = function () {\n    var sel = this.getSelection();\n    return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n      sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n  };\n\n  ContentEditableInput.prototype.pollSelection = function () {\n    if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }\n    var sel = this.getSelection(), cm = this.cm;\n    // On Android Chrome (version 56, at least), backspacing into an\n    // uneditable block element will put the cursor in that element,\n    // and then, because it's not editable, hide the virtual keyboard.\n    // Because Android doesn't allow us to actually detect backspace\n    // presses in a sane way, this code checks for when that happens\n    // and simulates a backspace press in this case.\n    if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {\n      this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs});\n      this.blur();\n      this.focus();\n      return\n    }\n    if (this.composing) { return }\n    this.rememberSelection();\n    var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n    var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n    if (anchor && head) { runInOp(cm, function () {\n      setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n      if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }\n    }); }\n  };\n\n  ContentEditableInput.prototype.pollContent = function () {\n    if (this.readDOMTimeout != null) {\n      clearTimeout(this.readDOMTimeout);\n      this.readDOMTimeout = null;\n    }\n\n    var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();\n    var from = sel.from(), to = sel.to();\n    if (from.ch == 0 && from.line > cm.firstLine())\n      { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }\n    if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n      { to = Pos(to.line + 1, 0); }\n    if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }\n\n    var fromIndex, fromLine, fromNode;\n    if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n      fromLine = lineNo(display.view[0].line);\n      fromNode = display.view[0].node;\n    } else {\n      fromLine = lineNo(display.view[fromIndex].line);\n      fromNode = display.view[fromIndex - 1].node.nextSibling;\n    }\n    var toIndex = findViewIndex(cm, to.line);\n    var toLine, toNode;\n    if (toIndex == display.view.length - 1) {\n      toLine = display.viewTo - 1;\n      toNode = display.lineDiv.lastChild;\n    } else {\n      toLine = lineNo(display.view[toIndex + 1].line) - 1;\n      toNode = display.view[toIndex + 1].node.previousSibling;\n    }\n\n    if (!fromNode) { return false }\n    var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n    var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n    while (newText.length > 1 && oldText.length > 1) {\n      if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n      else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n      else { break }\n    }\n\n    var cutFront = 0, cutEnd = 0;\n    var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n    while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n      { ++cutFront; }\n    var newBot = lst(newText), oldBot = lst(oldText);\n    var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n                             oldBot.length - (oldText.length == 1 ? cutFront : 0));\n    while (cutEnd < maxCutEnd &&\n           newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n      { ++cutEnd; }\n    // Try to move start of change to start of selection if ambiguous\n    if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n      while (cutFront && cutFront > from.ch &&\n             newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n        cutFront--;\n        cutEnd++;\n      }\n    }\n\n    newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n    newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n\n    var chFrom = Pos(fromLine, cutFront);\n    var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n    if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n      replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n      return true\n    }\n  };\n\n  ContentEditableInput.prototype.ensurePolled = function () {\n    this.forceCompositionEnd();\n  };\n  ContentEditableInput.prototype.reset = function () {\n    this.forceCompositionEnd();\n  };\n  ContentEditableInput.prototype.forceCompositionEnd = function () {\n    if (!this.composing) { return }\n    clearTimeout(this.readDOMTimeout);\n    this.composing = null;\n    this.updateFromDOM();\n    this.div.blur();\n    this.div.focus();\n  };\n  ContentEditableInput.prototype.readFromDOMSoon = function () {\n      var this$1 = this;\n\n    if (this.readDOMTimeout != null) { return }\n    this.readDOMTimeout = setTimeout(function () {\n      this$1.readDOMTimeout = null;\n      if (this$1.composing) {\n        if (this$1.composing.done) { this$1.composing = null; }\n        else { return }\n      }\n      this$1.updateFromDOM();\n    }, 80);\n  };\n\n  ContentEditableInput.prototype.updateFromDOM = function () {\n      var this$1 = this;\n\n    if (this.cm.isReadOnly() || !this.pollContent())\n      { runInOp(this.cm, function () { return regChange(this$1.cm); }); }\n  };\n\n  ContentEditableInput.prototype.setUneditable = function (node) {\n    node.contentEditable = \"false\";\n  };\n\n  ContentEditableInput.prototype.onKeyPress = function (e) {\n    if (e.charCode == 0 || this.composing) { return }\n    e.preventDefault();\n    if (!this.cm.isReadOnly())\n      { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }\n  };\n\n  ContentEditableInput.prototype.readOnlyChanged = function (val) {\n    this.div.contentEditable = String(val != \"nocursor\");\n  };\n\n  ContentEditableInput.prototype.onContextMenu = function () {};\n  ContentEditableInput.prototype.resetPosition = function () {};\n\n  ContentEditableInput.prototype.needsContentAttribute = true;\n\n  function posToDOM(cm, pos) {\n    var view = findViewForLine(cm, pos.line);\n    if (!view || view.hidden) { return null }\n    var line = getLine(cm.doc, pos.line);\n    var info = mapFromLineView(view, line, pos.line);\n\n    var order = getOrder(line, cm.doc.direction), side = \"left\";\n    if (order) {\n      var partPos = getBidiPartAt(order, pos.ch);\n      side = partPos % 2 ? \"right\" : \"left\";\n    }\n    var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n    result.offset = result.collapse == \"right\" ? result.end : result.start;\n    return result\n  }\n\n  function isInGutter(node) {\n    for (var scan = node; scan; scan = scan.parentNode)\n      { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }\n    return false\n  }\n\n  function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }\n\n  function domTextBetween(cm, from, to, fromLine, toLine) {\n    var text = \"\", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;\n    function recognizeMarker(id) { return function (marker) { return marker.id == id; } }\n    function close() {\n      if (closing) {\n        text += lineSep;\n        if (extraLinebreak) { text += lineSep; }\n        closing = extraLinebreak = false;\n      }\n    }\n    function addText(str) {\n      if (str) {\n        close();\n        text += str;\n      }\n    }\n    function walk(node) {\n      if (node.nodeType == 1) {\n        var cmText = node.getAttribute(\"cm-text\");\n        if (cmText) {\n          addText(cmText);\n          return\n        }\n        var markerID = node.getAttribute(\"cm-marker\"), range;\n        if (markerID) {\n          var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n          if (found.length && (range = found[0].find(0)))\n            { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); }\n          return\n        }\n        if (node.getAttribute(\"contenteditable\") == \"false\") { return }\n        var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n        if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }\n\n        if (isBlock) { close(); }\n        for (var i = 0; i < node.childNodes.length; i++)\n          { walk(node.childNodes[i]); }\n\n        if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }\n        if (isBlock) { closing = true; }\n      } else if (node.nodeType == 3) {\n        addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n      }\n    }\n    for (;;) {\n      walk(from);\n      if (from == to) { break }\n      from = from.nextSibling;\n      extraLinebreak = false;\n    }\n    return text\n  }\n\n  function domToPos(cm, node, offset) {\n    var lineNode;\n    if (node == cm.display.lineDiv) {\n      lineNode = cm.display.lineDiv.childNodes[offset];\n      if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }\n      node = null; offset = 0;\n    } else {\n      for (lineNode = node;; lineNode = lineNode.parentNode) {\n        if (!lineNode || lineNode == cm.display.lineDiv) { return null }\n        if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }\n      }\n    }\n    for (var i = 0; i < cm.display.view.length; i++) {\n      var lineView = cm.display.view[i];\n      if (lineView.node == lineNode)\n        { return locateNodeInLineView(lineView, node, offset) }\n    }\n  }\n\n  function locateNodeInLineView(lineView, node, offset) {\n    var wrapper = lineView.text.firstChild, bad = false;\n    if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }\n    if (node == wrapper) {\n      bad = true;\n      node = wrapper.childNodes[offset];\n      offset = 0;\n      if (!node) {\n        var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n        return badPos(Pos(lineNo(line), line.text.length), bad)\n      }\n    }\n\n    var textNode = node.nodeType == 3 ? node : null, topNode = node;\n    if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n      textNode = node.firstChild;\n      if (offset) { offset = textNode.nodeValue.length; }\n    }\n    while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }\n    var measure = lineView.measure, maps = measure.maps;\n\n    function find(textNode, topNode, offset) {\n      for (var i = -1; i < (maps ? maps.length : 0); i++) {\n        var map = i < 0 ? measure.map : maps[i];\n        for (var j = 0; j < map.length; j += 3) {\n          var curNode = map[j + 2];\n          if (curNode == textNode || curNode == topNode) {\n            var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n            var ch = map[j] + offset;\n            if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)]; }\n            return Pos(line, ch)\n          }\n        }\n      }\n    }\n    var found = find(textNode, topNode, offset);\n    if (found) { return badPos(found, bad) }\n\n    // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n    for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n      found = find(after, after.firstChild, 0);\n      if (found)\n        { return badPos(Pos(found.line, found.ch - dist), bad) }\n      else\n        { dist += after.textContent.length; }\n    }\n    for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n      found = find(before, before.firstChild, -1);\n      if (found)\n        { return badPos(Pos(found.line, found.ch + dist$1), bad) }\n      else\n        { dist$1 += before.textContent.length; }\n    }\n  }\n\n  // TEXTAREA INPUT STYLE\n\n  var TextareaInput = function(cm) {\n    this.cm = cm;\n    // See input.poll and input.reset\n    this.prevInput = \"\";\n\n    // Flag that indicates whether we expect input to appear real soon\n    // now (after some event like 'keypress' or 'input') and are\n    // polling intensively.\n    this.pollingFast = false;\n    // Self-resetting timeout for the poller\n    this.polling = new Delayed();\n    // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n    this.hasSelection = false;\n    this.composing = null;\n  };\n\n  TextareaInput.prototype.init = function (display) {\n      var this$1 = this;\n\n    var input = this, cm = this.cm;\n    this.createField(display);\n    var te = this.textarea;\n\n    display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n    // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n    if (ios) { te.style.width = \"0px\"; }\n\n    on(te, \"input\", function () {\n      if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }\n      input.poll();\n    });\n\n    on(te, \"paste\", function (e) {\n      if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n\n      cm.state.pasteIncoming = +new Date;\n      input.fastPoll();\n    });\n\n    function prepareCopyCut(e) {\n      if (signalDOMEvent(cm, e)) { return }\n      if (cm.somethingSelected()) {\n        setLastCopied({lineWise: false, text: cm.getSelections()});\n      } else if (!cm.options.lineWiseCopyCut) {\n        return\n      } else {\n        var ranges = copyableRanges(cm);\n        setLastCopied({lineWise: true, text: ranges.text});\n        if (e.type == \"cut\") {\n          cm.setSelections(ranges.ranges, null, sel_dontScroll);\n        } else {\n          input.prevInput = \"\";\n          te.value = ranges.text.join(\"\\n\");\n          selectInput(te);\n        }\n      }\n      if (e.type == \"cut\") { cm.state.cutIncoming = +new Date; }\n    }\n    on(te, \"cut\", prepareCopyCut);\n    on(te, \"copy\", prepareCopyCut);\n\n    on(display.scroller, \"paste\", function (e) {\n      if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }\n      if (!te.dispatchEvent) {\n        cm.state.pasteIncoming = +new Date;\n        input.focus();\n        return\n      }\n\n      // Pass the `paste` event to the textarea so it's handled by its event listener.\n      var event = new Event(\"paste\");\n      event.clipboardData = e.clipboardData;\n      te.dispatchEvent(event);\n    });\n\n    // Prevent normal selection in the editor (we handle our own)\n    on(display.lineSpace, \"selectstart\", function (e) {\n      if (!eventInWidget(display, e)) { e_preventDefault(e); }\n    });\n\n    on(te, \"compositionstart\", function () {\n      var start = cm.getCursor(\"from\");\n      if (input.composing) { input.composing.range.clear(); }\n      input.composing = {\n        start: start,\n        range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n      };\n    });\n    on(te, \"compositionend\", function () {\n      if (input.composing) {\n        input.poll();\n        input.composing.range.clear();\n        input.composing = null;\n      }\n    });\n  };\n\n  TextareaInput.prototype.createField = function (_display) {\n    // Wraps and hides input textarea\n    this.wrapper = hiddenTextarea();\n    // The semihidden textarea that is focused when the editor is\n    // focused, and receives input.\n    this.textarea = this.wrapper.firstChild;\n  };\n\n  TextareaInput.prototype.screenReaderLabelChanged = function (label) {\n    // Label for screenreaders, accessibility\n    if(label) {\n      this.textarea.setAttribute('aria-label', label);\n    } else {\n      this.textarea.removeAttribute('aria-label');\n    }\n  };\n\n  TextareaInput.prototype.prepareSelection = function () {\n    // Redraw the selection and/or cursor\n    var cm = this.cm, display = cm.display, doc = cm.doc;\n    var result = prepareSelection(cm);\n\n    // Move the hidden textarea near the cursor to prevent scrolling artifacts\n    if (cm.options.moveInputWithCursor) {\n      var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n      var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n      result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n                                          headPos.top + lineOff.top - wrapOff.top));\n      result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n                                           headPos.left + lineOff.left - wrapOff.left));\n    }\n\n    return result\n  };\n\n  TextareaInput.prototype.showSelection = function (drawn) {\n    var cm = this.cm, display = cm.display;\n    removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n    removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n    if (drawn.teTop != null) {\n      this.wrapper.style.top = drawn.teTop + \"px\";\n      this.wrapper.style.left = drawn.teLeft + \"px\";\n    }\n  };\n\n  // Reset the input to correspond to the selection (or to be empty,\n  // when not typing and nothing is selected)\n  TextareaInput.prototype.reset = function (typing) {\n    if (this.contextMenuPending || this.composing) { return }\n    var cm = this.cm;\n    if (cm.somethingSelected()) {\n      this.prevInput = \"\";\n      var content = cm.getSelection();\n      this.textarea.value = content;\n      if (cm.state.focused) { selectInput(this.textarea); }\n      if (ie && ie_version >= 9) { this.hasSelection = content; }\n    } else if (!typing) {\n      this.prevInput = this.textarea.value = \"\";\n      if (ie && ie_version >= 9) { this.hasSelection = null; }\n    }\n  };\n\n  TextareaInput.prototype.getField = function () { return this.textarea };\n\n  TextareaInput.prototype.supportsTouch = function () { return false };\n\n  TextareaInput.prototype.focus = function () {\n    if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n      try { this.textarea.focus(); }\n      catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n    }\n  };\n\n  TextareaInput.prototype.blur = function () { this.textarea.blur(); };\n\n  TextareaInput.prototype.resetPosition = function () {\n    this.wrapper.style.top = this.wrapper.style.left = 0;\n  };\n\n  TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };\n\n  // Poll for input changes, using the normal rate of polling. This\n  // runs as long as the editor is focused.\n  TextareaInput.prototype.slowPoll = function () {\n      var this$1 = this;\n\n    if (this.pollingFast) { return }\n    this.polling.set(this.cm.options.pollInterval, function () {\n      this$1.poll();\n      if (this$1.cm.state.focused) { this$1.slowPoll(); }\n    });\n  };\n\n  // When an event has just come in that is likely to add or change\n  // something in the input textarea, we poll faster, to ensure that\n  // the change appears on the screen quickly.\n  TextareaInput.prototype.fastPoll = function () {\n    var missed = false, input = this;\n    input.pollingFast = true;\n    function p() {\n      var changed = input.poll();\n      if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n      else {input.pollingFast = false; input.slowPoll();}\n    }\n    input.polling.set(20, p);\n  };\n\n  // Read input from the textarea, and update the document to match.\n  // When something is selected, it is present in the textarea, and\n  // selected (unless it is huge, in which case a placeholder is\n  // used). When nothing is selected, the cursor sits after previously\n  // seen text (can be empty), which is stored in prevInput (we must\n  // not reset the textarea when typing, because that breaks IME).\n  TextareaInput.prototype.poll = function () {\n      var this$1 = this;\n\n    var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n    // Since this is called a *lot*, try to bail out as cheaply as\n    // possible when it is clear that nothing happened. hasSelection\n    // will be the case when there is a lot of text in the textarea,\n    // in which case reading its value would be expensive.\n    if (this.contextMenuPending || !cm.state.focused ||\n        (hasSelection(input) && !prevInput && !this.composing) ||\n        cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n      { return false }\n\n    var text = input.value;\n    // If nothing changed, bail.\n    if (text == prevInput && !cm.somethingSelected()) { return false }\n    // Work around nonsensical selection resetting in IE9/10, and\n    // inexplicable appearance of private area unicode characters on\n    // some key combos in Mac (#2689).\n    if (ie && ie_version >= 9 && this.hasSelection === text ||\n        mac && /[\\uf700-\\uf7ff]/.test(text)) {\n      cm.display.input.reset();\n      return false\n    }\n\n    if (cm.doc.sel == cm.display.selForContextMenu) {\n      var first = text.charCodeAt(0);\n      if (first == 0x200b && !prevInput) { prevInput = \"\\u200b\"; }\n      if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n    }\n    // Find the part of the input that is actually new\n    var same = 0, l = Math.min(prevInput.length, text.length);\n    while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }\n\n    runInOp(cm, function () {\n      applyTextInput(cm, text.slice(same), prevInput.length - same,\n                     null, this$1.composing ? \"*compose\" : null);\n\n      // Don't leave long text in the textarea, since it makes further polling slow\n      if (text.length > 1000 || text.indexOf(\"\\n\") > -1) { input.value = this$1.prevInput = \"\"; }\n      else { this$1.prevInput = text; }\n\n      if (this$1.composing) {\n        this$1.composing.range.clear();\n        this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"),\n                                           {className: \"CodeMirror-composing\"});\n      }\n    });\n    return true\n  };\n\n  TextareaInput.prototype.ensurePolled = function () {\n    if (this.pollingFast && this.poll()) { this.pollingFast = false; }\n  };\n\n  TextareaInput.prototype.onKeyPress = function () {\n    if (ie && ie_version >= 9) { this.hasSelection = null; }\n    this.fastPoll();\n  };\n\n  TextareaInput.prototype.onContextMenu = function (e) {\n    var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n    if (input.contextMenuPending) { input.contextMenuPending(); }\n    var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n    if (!pos || presto) { return } // Opera is difficult.\n\n    // Reset the current text selection only if the click is done outside of the selection\n    // and 'resetSelectionOnContextMenu' option is true.\n    var reset = cm.options.resetSelectionOnContextMenu;\n    if (reset && cm.doc.sel.contains(pos) == -1)\n      { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }\n\n    var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;\n    var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n    input.wrapper.style.cssText = \"position: static\";\n    te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n      top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n      z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n    var oldScrollY;\n    if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)\n    display.input.focus();\n    if (webkit) { window.scrollTo(null, oldScrollY); }\n    display.input.reset();\n    // Adds \"Select all\" to context menu in FF\n    if (!cm.somethingSelected()) { te.value = input.prevInput = \" \"; }\n    input.contextMenuPending = rehide;\n    display.selForContextMenu = cm.doc.sel;\n    clearTimeout(display.detectingSelectAll);\n\n    // Select-all will be greyed out if there's nothing to select, so\n    // this adds a zero-width space so that we can later check whether\n    // it got selected.\n    function prepareSelectAllHack() {\n      if (te.selectionStart != null) {\n        var selected = cm.somethingSelected();\n        var extval = \"\\u200b\" + (selected ? te.value : \"\");\n        te.value = \"\\u21da\"; // Used to catch context-menu undo\n        te.value = extval;\n        input.prevInput = selected ? \"\" : \"\\u200b\";\n        te.selectionStart = 1; te.selectionEnd = extval.length;\n        // Re-set this, in case some other handler touched the\n        // selection in the meantime.\n        display.selForContextMenu = cm.doc.sel;\n      }\n    }\n    function rehide() {\n      if (input.contextMenuPending != rehide) { return }\n      input.contextMenuPending = false;\n      input.wrapper.style.cssText = oldWrapperCSS;\n      te.style.cssText = oldCSS;\n      if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }\n\n      // Try to detect the user choosing select-all\n      if (te.selectionStart != null) {\n        if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }\n        var i = 0, poll = function () {\n          if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n              te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n            operation(cm, selectAll)(cm);\n          } else if (i++ < 10) {\n            display.detectingSelectAll = setTimeout(poll, 500);\n          } else {\n            display.selForContextMenu = null;\n            display.input.reset();\n          }\n        };\n        display.detectingSelectAll = setTimeout(poll, 200);\n      }\n    }\n\n    if (ie && ie_version >= 9) { prepareSelectAllHack(); }\n    if (captureRightClick) {\n      e_stop(e);\n      var mouseup = function () {\n        off(window, \"mouseup\", mouseup);\n        setTimeout(rehide, 20);\n      };\n      on(window, \"mouseup\", mouseup);\n    } else {\n      setTimeout(rehide, 50);\n    }\n  };\n\n  TextareaInput.prototype.readOnlyChanged = function (val) {\n    if (!val) { this.reset(); }\n    this.textarea.disabled = val == \"nocursor\";\n    this.textarea.readOnly = !!val;\n  };\n\n  TextareaInput.prototype.setUneditable = function () {};\n\n  TextareaInput.prototype.needsContentAttribute = false;\n\n  function fromTextArea(textarea, options) {\n    options = options ? copyObj(options) : {};\n    options.value = textarea.value;\n    if (!options.tabindex && textarea.tabIndex)\n      { options.tabindex = textarea.tabIndex; }\n    if (!options.placeholder && textarea.placeholder)\n      { options.placeholder = textarea.placeholder; }\n    // Set autofocus to true if this textarea is focused, or if it has\n    // autofocus and no other element is focused.\n    if (options.autofocus == null) {\n      var hasFocus = activeElt();\n      options.autofocus = hasFocus == textarea ||\n        textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n    }\n\n    function save() {textarea.value = cm.getValue();}\n\n    var realSubmit;\n    if (textarea.form) {\n      on(textarea.form, \"submit\", save);\n      // Deplorable hack to make the submit method do the right thing.\n      if (!options.leaveSubmitMethodAlone) {\n        var form = textarea.form;\n        realSubmit = form.submit;\n        try {\n          var wrappedSubmit = form.submit = function () {\n            save();\n            form.submit = realSubmit;\n            form.submit();\n            form.submit = wrappedSubmit;\n          };\n        } catch(e) {}\n      }\n    }\n\n    options.finishInit = function (cm) {\n      cm.save = save;\n      cm.getTextArea = function () { return textarea; };\n      cm.toTextArea = function () {\n        cm.toTextArea = isNaN; // Prevent this from being ran twice\n        save();\n        textarea.parentNode.removeChild(cm.getWrapperElement());\n        textarea.style.display = \"\";\n        if (textarea.form) {\n          off(textarea.form, \"submit\", save);\n          if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == \"function\")\n            { textarea.form.submit = realSubmit; }\n        }\n      };\n    };\n\n    textarea.style.display = \"none\";\n    var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },\n      options);\n    return cm\n  }\n\n  function addLegacyProps(CodeMirror) {\n    CodeMirror.off = off;\n    CodeMirror.on = on;\n    CodeMirror.wheelEventPixels = wheelEventPixels;\n    CodeMirror.Doc = Doc;\n    CodeMirror.splitLines = splitLinesAuto;\n    CodeMirror.countColumn = countColumn;\n    CodeMirror.findColumn = findColumn;\n    CodeMirror.isWordChar = isWordCharBasic;\n    CodeMirror.Pass = Pass;\n    CodeMirror.signal = signal;\n    CodeMirror.Line = Line;\n    CodeMirror.changeEnd = changeEnd;\n    CodeMirror.scrollbarModel = scrollbarModel;\n    CodeMirror.Pos = Pos;\n    CodeMirror.cmpPos = cmp;\n    CodeMirror.modes = modes;\n    CodeMirror.mimeModes = mimeModes;\n    CodeMirror.resolveMode = resolveMode;\n    CodeMirror.getMode = getMode;\n    CodeMirror.modeExtensions = modeExtensions;\n    CodeMirror.extendMode = extendMode;\n    CodeMirror.copyState = copyState;\n    CodeMirror.startState = startState;\n    CodeMirror.innerMode = innerMode;\n    CodeMirror.commands = commands;\n    CodeMirror.keyMap = keyMap;\n    CodeMirror.keyName = keyName;\n    CodeMirror.isModifierKey = isModifierKey;\n    CodeMirror.lookupKey = lookupKey;\n    CodeMirror.normalizeKeyMap = normalizeKeyMap;\n    CodeMirror.StringStream = StringStream;\n    CodeMirror.SharedTextMarker = SharedTextMarker;\n    CodeMirror.TextMarker = TextMarker;\n    CodeMirror.LineWidget = LineWidget;\n    CodeMirror.e_preventDefault = e_preventDefault;\n    CodeMirror.e_stopPropagation = e_stopPropagation;\n    CodeMirror.e_stop = e_stop;\n    CodeMirror.addClass = addClass;\n    CodeMirror.contains = contains;\n    CodeMirror.rmClass = rmClass;\n    CodeMirror.keyNames = keyNames;\n  }\n\n  // EDITOR CONSTRUCTOR\n\n  defineOptions(CodeMirror);\n\n  addEditorMethods(CodeMirror);\n\n  // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n  var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n  for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n    { CodeMirror.prototype[prop] = (function(method) {\n      return function() {return method.apply(this.doc, arguments)}\n    })(Doc.prototype[prop]); } }\n\n  eventMixin(Doc);\n  CodeMirror.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\n  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\n  CodeMirror.defineMode = function(name/*, mode, …*/) {\n    if (!CodeMirror.defaults.mode && name != \"null\") { CodeMirror.defaults.mode = name; }\n    defineMode.apply(this, arguments);\n  };\n\n  CodeMirror.defineMIME = defineMIME;\n\n  // Minimal default mode.\n  CodeMirror.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\n  CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n  // EXTENSIONS\n\n  CodeMirror.defineExtension = function (name, func) {\n    CodeMirror.prototype[name] = func;\n  };\n  CodeMirror.defineDocExtension = function (name, func) {\n    Doc.prototype[name] = func;\n  };\n\n  CodeMirror.fromTextArea = fromTextArea;\n\n  addLegacyProps(CodeMirror);\n\n  CodeMirror.version = \"5.58.3\";\n\n  return CodeMirror;\n\n})));\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"))\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod)\n  else // Plain browser env\n    mod(CodeMirror)\n})(function(CodeMirror) {\n  \"use strict\"\n\n  CodeMirror.defineOption(\"autoRefresh\", false, function(cm, val) {\n    if (cm.state.autoRefresh) {\n      stopListening(cm, cm.state.autoRefresh)\n      cm.state.autoRefresh = null\n    }\n    if (val && cm.display.wrapper.offsetHeight == 0)\n      startListening(cm, cm.state.autoRefresh = {delay: val.delay || 250})\n  })\n\n  function startListening(cm, state) {\n    function check() {\n      if (cm.display.wrapper.offsetHeight) {\n        stopListening(cm, state)\n        if (cm.display.lastWrapHeight != cm.display.wrapper.clientHeight)\n          cm.refresh()\n      } else {\n        state.timeout = setTimeout(check, state.delay)\n      }\n    }\n    state.timeout = setTimeout(check, state.delay)\n    state.hurry = function() {\n      clearTimeout(state.timeout)\n      state.timeout = setTimeout(check, 50)\n    }\n    CodeMirror.on(window, \"mouseup\", state.hurry)\n    CodeMirror.on(window, \"keyup\", state.hurry)\n  }\n\n  function stopListening(_cm, state) {\n    clearTimeout(state.timeout)\n    CodeMirror.off(window, \"mouseup\", state.hurry)\n    CodeMirror.off(window, \"keyup\", state.hurry)\n  }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar htmlConfig = {\n  autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,\n                    'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,\n                    'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,\n                    'track': true, 'wbr': true, 'menuitem': true},\n  implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,\n                     'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,\n                     'th': true, 'tr': true},\n  contextGrabbers: {\n    'dd': {'dd': true, 'dt': true},\n    'dt': {'dd': true, 'dt': true},\n    'li': {'li': true},\n    'option': {'option': true, 'optgroup': true},\n    'optgroup': {'optgroup': true},\n    'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,\n          'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,\n          'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,\n          'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,\n          'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},\n    'rp': {'rp': true, 'rt': true},\n    'rt': {'rp': true, 'rt': true},\n    'tbody': {'tbody': true, 'tfoot': true},\n    'td': {'td': true, 'th': true},\n    'tfoot': {'tbody': true},\n    'th': {'td': true, 'th': true},\n    'thead': {'tbody': true, 'tfoot': true},\n    'tr': {'tr': true}\n  },\n  doNotIndent: {\"pre\": true},\n  allowUnquoted: true,\n  allowMissing: true,\n  caseFold: true\n}\n\nvar xmlConfig = {\n  autoSelfClosers: {},\n  implicitlyClosed: {},\n  contextGrabbers: {},\n  doNotIndent: {},\n  allowUnquoted: false,\n  allowMissing: false,\n  allowMissingTagName: false,\n  caseFold: false\n}\n\nCodeMirror.defineMode(\"xml\", function(editorConf, config_) {\n  var indentUnit = editorConf.indentUnit\n  var config = {}\n  var defaults = config_.htmlMode ? htmlConfig : xmlConfig\n  for (var prop in defaults) config[prop] = defaults[prop]\n  for (var prop in config_) config[prop] = config_[prop]\n\n  // Return variables for tokenizers\n  var type, setStyle;\n\n  function inText(stream, state) {\n    function chain(parser) {\n      state.tokenize = parser;\n      return parser(stream, state);\n    }\n\n    var ch = stream.next();\n    if (ch == \"<\") {\n      if (stream.eat(\"!\")) {\n        if (stream.eat(\"[\")) {\n          if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n          else return null;\n        } else if (stream.match(\"--\")) {\n          return chain(inBlock(\"comment\", \"-->\"));\n        } else if (stream.match(\"DOCTYPE\", true, true)) {\n          stream.eatWhile(/[\\w\\._\\-]/);\n          return chain(doctype(1));\n        } else {\n          return null;\n        }\n      } else if (stream.eat(\"?\")) {\n        stream.eatWhile(/[\\w\\._\\-]/);\n        state.tokenize = inBlock(\"meta\", \"?>\");\n        return \"meta\";\n      } else {\n        type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n        state.tokenize = inTag;\n        return \"tag bracket\";\n      }\n    } else if (ch == \"&\") {\n      var ok;\n      if (stream.eat(\"#\")) {\n        if (stream.eat(\"x\")) {\n          ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n        } else {\n          ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n        }\n      } else {\n        ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n      }\n      return ok ? \"atom\" : \"error\";\n    } else {\n      stream.eatWhile(/[^&<]/);\n      return null;\n    }\n  }\n  inText.isInText = true;\n\n  function inTag(stream, state) {\n    var ch = stream.next();\n    if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n      state.tokenize = inText;\n      type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n      return \"tag bracket\";\n    } else if (ch == \"=\") {\n      type = \"equals\";\n      return null;\n    } else if (ch == \"<\") {\n      state.tokenize = inText;\n      state.state = baseState;\n      state.tagName = state.tagStart = null;\n      var next = state.tokenize(stream, state);\n      return next ? next + \" tag error\" : \"tag error\";\n    } else if (/[\\'\\\"]/.test(ch)) {\n      state.tokenize = inAttribute(ch);\n      state.stringStartCol = stream.column();\n      return state.tokenize(stream, state);\n    } else {\n      stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n      return \"word\";\n    }\n  }\n\n  function inAttribute(quote) {\n    var closure = function(stream, state) {\n      while (!stream.eol()) {\n        if (stream.next() == quote) {\n          state.tokenize = inTag;\n          break;\n        }\n      }\n      return \"string\";\n    };\n    closure.isInAttribute = true;\n    return closure;\n  }\n\n  function inBlock(style, terminator) {\n    return function(stream, state) {\n      while (!stream.eol()) {\n        if (stream.match(terminator)) {\n          state.tokenize = inText;\n          break;\n        }\n        stream.next();\n      }\n      return style;\n    }\n  }\n\n  function doctype(depth) {\n    return function(stream, state) {\n      var ch;\n      while ((ch = stream.next()) != null) {\n        if (ch == \"<\") {\n          state.tokenize = doctype(depth + 1);\n          return state.tokenize(stream, state);\n        } else if (ch == \">\") {\n          if (depth == 1) {\n            state.tokenize = inText;\n            break;\n          } else {\n            state.tokenize = doctype(depth - 1);\n            return state.tokenize(stream, state);\n          }\n        }\n      }\n      return \"meta\";\n    };\n  }\n\n  function Context(state, tagName, startOfLine) {\n    this.prev = state.context;\n    this.tagName = tagName || \"\";\n    this.indent = state.indented;\n    this.startOfLine = startOfLine;\n    if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n      this.noIndent = true;\n  }\n  function popContext(state) {\n    if (state.context) state.context = state.context.prev;\n  }\n  function maybePopContext(state, nextTagName) {\n    var parentTagName;\n    while (true) {\n      if (!state.context) {\n        return;\n      }\n      parentTagName = state.context.tagName;\n      if (!config.contextGrabbers.hasOwnProperty(parentTagName) ||\n          !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {\n        return;\n      }\n      popContext(state);\n    }\n  }\n\n  function baseState(type, stream, state) {\n    if (type == \"openTag\") {\n      state.tagStart = stream.column();\n      return tagNameState;\n    } else if (type == \"closeTag\") {\n      return closeTagNameState;\n    } else {\n      return baseState;\n    }\n  }\n  function tagNameState(type, stream, state) {\n    if (type == \"word\") {\n      state.tagName = stream.current();\n      setStyle = \"tag\";\n      return attrState;\n    } else if (config.allowMissingTagName && type == \"endTag\") {\n      setStyle = \"tag bracket\";\n      return attrState(type, stream, state);\n    } else {\n      setStyle = \"error\";\n      return tagNameState;\n    }\n  }\n  function closeTagNameState(type, stream, state) {\n    if (type == \"word\") {\n      var tagName = stream.current();\n      if (state.context && state.context.tagName != tagName &&\n          config.implicitlyClosed.hasOwnProperty(state.context.tagName))\n        popContext(state);\n      if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {\n        setStyle = \"tag\";\n        return closeState;\n      } else {\n        setStyle = \"tag error\";\n        return closeStateErr;\n      }\n    } else if (config.allowMissingTagName && type == \"endTag\") {\n      setStyle = \"tag bracket\";\n      return closeState(type, stream, state);\n    } else {\n      setStyle = \"error\";\n      return closeStateErr;\n    }\n  }\n\n  function closeState(type, _stream, state) {\n    if (type != \"endTag\") {\n      setStyle = \"error\";\n      return closeState;\n    }\n    popContext(state);\n    return baseState;\n  }\n  function closeStateErr(type, stream, state) {\n    setStyle = \"error\";\n    return closeState(type, stream, state);\n  }\n\n  function attrState(type, _stream, state) {\n    if (type == \"word\") {\n      setStyle = \"attribute\";\n      return attrEqState;\n    } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n      var tagName = state.tagName, tagStart = state.tagStart;\n      state.tagName = state.tagStart = null;\n      if (type == \"selfcloseTag\" ||\n          config.autoSelfClosers.hasOwnProperty(tagName)) {\n        maybePopContext(state, tagName);\n      } else {\n        maybePopContext(state, tagName);\n        state.context = new Context(state, tagName, tagStart == state.indented);\n      }\n      return baseState;\n    }\n    setStyle = \"error\";\n    return attrState;\n  }\n  function attrEqState(type, stream, state) {\n    if (type == \"equals\") return attrValueState;\n    if (!config.allowMissing) setStyle = \"error\";\n    return attrState(type, stream, state);\n  }\n  function attrValueState(type, stream, state) {\n    if (type == \"string\") return attrContinuedState;\n    if (type == \"word\" && config.allowUnquoted) {setStyle = \"string\"; return attrState;}\n    setStyle = \"error\";\n    return attrState(type, stream, state);\n  }\n  function attrContinuedState(type, stream, state) {\n    if (type == \"string\") return attrContinuedState;\n    return attrState(type, stream, state);\n  }\n\n  return {\n    startState: function(baseIndent) {\n      var state = {tokenize: inText,\n                   state: baseState,\n                   indented: baseIndent || 0,\n                   tagName: null, tagStart: null,\n                   context: null}\n      if (baseIndent != null) state.baseIndent = baseIndent\n      return state\n    },\n\n    token: function(stream, state) {\n      if (!state.tagName && stream.sol())\n        state.indented = stream.indentation();\n\n      if (stream.eatSpace()) return null;\n      type = null;\n      var style = state.tokenize(stream, state);\n      if ((style || type) && style != \"comment\") {\n        setStyle = null;\n        state.state = state.state(type || style, stream, state);\n        if (setStyle)\n          style = setStyle == \"error\" ? style + \" error\" : setStyle;\n      }\n      return style;\n    },\n\n    indent: function(state, textAfter, fullLine) {\n      var context = state.context;\n      // Indent multi-line strings (e.g. css).\n      if (state.tokenize.isInAttribute) {\n        if (state.tagStart == state.indented)\n          return state.stringStartCol + 1;\n        else\n          return state.indented + indentUnit;\n      }\n      if (context && context.noIndent) return CodeMirror.Pass;\n      if (state.tokenize != inTag && state.tokenize != inText)\n        return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n      // Indent the starts of attribute names.\n      if (state.tagName) {\n        if (config.multilineTagIndentPastTag !== false)\n          return state.tagStart + state.tagName.length + 2;\n        else\n          return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n      }\n      if (config.alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n      var tagAfter = textAfter && /^<(\\/)?([\\w_:\\.-]*)/.exec(textAfter);\n      if (tagAfter && tagAfter[1]) { // Closing tag spotted\n        while (context) {\n          if (context.tagName == tagAfter[2]) {\n            context = context.prev;\n            break;\n          } else if (config.implicitlyClosed.hasOwnProperty(context.tagName)) {\n            context = context.prev;\n          } else {\n            break;\n          }\n        }\n      } else if (tagAfter) { // Opening tag spotted\n        while (context) {\n          var grabbers = config.contextGrabbers[context.tagName];\n          if (grabbers && grabbers.hasOwnProperty(tagAfter[2]))\n            context = context.prev;\n          else\n            break;\n        }\n      }\n      while (context && context.prev && !context.startOfLine)\n        context = context.prev;\n      if (context) return context.indent + indentUnit;\n      else return state.baseIndent || 0;\n    },\n\n    electricInput: /<\\/[\\s\\w:]+>$/,\n    blockCommentStart: \"<!--\",\n    blockCommentEnd: \"-->\",\n\n    configuration: config.htmlMode ? \"html\" : \"xml\",\n    helperType: config.htmlMode ? \"html\" : \"xml\",\n\n    skipAttribute: function(state) {\n      if (state.state == attrValueState)\n        state.state = attrState\n    },\n\n    xmlCurrentTag: function(state) {\n      return state.tagName ? {name: state.tagName, close: state.type == \"closeTag\"} : null\n    },\n\n    xmlCurrentContext: function(state) {\n      var context = []\n      for (var cx = state.context; cx; cx = cx.prev)\n        context.push(cx.tagName)\n      return context.reverse()\n    }\n  };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n  CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"yaml\", function() {\n\n  var cons = ['true', 'false', 'on', 'off', 'yes', 'no'];\n  var keywordRegex = new RegExp(\"\\\\b((\"+cons.join(\")|(\")+\"))$\", 'i');\n\n  return {\n    token: function(stream, state) {\n      var ch = stream.peek();\n      var esc = state.escaped;\n      state.escaped = false;\n      /* comments */\n      if (ch == \"#\" && (stream.pos == 0 || /\\s/.test(stream.string.charAt(stream.pos - 1)))) {\n        stream.skipToEnd();\n        return \"comment\";\n      }\n\n      if (stream.match(/^('([^']|\\\\.)*'?|\"([^\"]|\\\\.)*\"?)/))\n        return \"string\";\n\n      if (state.literal && stream.indentation() > state.keyCol) {\n        stream.skipToEnd(); return \"string\";\n      } else if (state.literal) { state.literal = false; }\n      if (stream.sol()) {\n        state.keyCol = 0;\n        state.pair = false;\n        state.pairStart = false;\n        /* document start */\n        if(stream.match(/---/)) { return \"def\"; }\n        /* document end */\n        if (stream.match(/\\.\\.\\./)) { return \"def\"; }\n        /* array list item */\n        if (stream.match(/\\s*-\\s+/)) { return 'meta'; }\n      }\n      /* inline pairs/lists */\n      if (stream.match(/^(\\{|\\}|\\[|\\])/)) {\n        if (ch == '{')\n          state.inlinePairs++;\n        else if (ch == '}')\n          state.inlinePairs--;\n        else if (ch == '[')\n          state.inlineList++;\n        else\n          state.inlineList--;\n        return 'meta';\n      }\n\n      /* list seperator */\n      if (state.inlineList > 0 && !esc && ch == ',') {\n        stream.next();\n        return 'meta';\n      }\n      /* pairs seperator */\n      if (state.inlinePairs > 0 && !esc && ch == ',') {\n        state.keyCol = 0;\n        state.pair = false;\n        state.pairStart = false;\n        stream.next();\n        return 'meta';\n      }\n\n      /* start of value of a pair */\n      if (state.pairStart) {\n        /* block literals */\n        if (stream.match(/^\\s*(\\||\\>)\\s*/)) { state.literal = true; return 'meta'; };\n        /* references */\n        if (stream.match(/^\\s*(\\&|\\*)[a-z0-9\\._-]+\\b/i)) { return 'variable-2'; }\n        /* numbers */\n        if (state.inlinePairs == 0 && stream.match(/^\\s*-?[0-9\\.\\,]+\\s?$/)) { return 'number'; }\n        if (state.inlinePairs > 0 && stream.match(/^\\s*-?[0-9\\.\\,]+\\s?(?=(,|}))/)) { return 'number'; }\n        /* keywords */\n        if (stream.match(keywordRegex)) { return 'keyword'; }\n      }\n\n      /* pairs (associative arrays) -> key */\n      if (!state.pair && stream.match(/^\\s*(?:[,\\[\\]{}&*!|>'\"%@`][^\\s'\":]|[^,\\[\\]{}#&*!|>'\"%@`])[^#]*?(?=\\s*:($|\\s))/)) {\n        state.pair = true;\n        state.keyCol = stream.indentation();\n        return \"atom\";\n      }\n      if (state.pair && stream.match(/^:\\s*/)) { state.pairStart = true; return 'meta'; }\n\n      /* nothing found, continue */\n      state.pairStart = false;\n      state.escaped = (ch == '\\\\');\n      stream.next();\n      return null;\n    },\n    startState: function() {\n      return {\n        pair: false,\n        pairStart: false,\n        keyCol: 0,\n        inlinePairs: 0,\n        inlineList: 0,\n        literal: false,\n        escaped: false\n      };\n    },\n    lineComment: \"#\",\n    fold: \"indent\"\n  };\n});\n\nCodeMirror.defineMIME(\"text/x-yaml\", \"yaml\");\nCodeMirror.defineMIME(\"text/yaml\", \"yaml\");\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  function wordRegexp(words) {\n    return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\");\n  }\n\n  var wordOperators = wordRegexp([\"and\", \"or\", \"not\", \"is\"]);\n  var commonKeywords = [\"as\", \"assert\", \"break\", \"class\", \"continue\",\n                        \"def\", \"del\", \"elif\", \"else\", \"except\", \"finally\",\n                        \"for\", \"from\", \"global\", \"if\", \"import\",\n                        \"lambda\", \"pass\", \"raise\", \"return\",\n                        \"try\", \"while\", \"with\", \"yield\", \"in\"];\n  var commonBuiltins = [\"abs\", \"all\", \"any\", \"bin\", \"bool\", \"bytearray\", \"callable\", \"chr\",\n                        \"classmethod\", \"compile\", \"complex\", \"delattr\", \"dict\", \"dir\", \"divmod\",\n                        \"enumerate\", \"eval\", \"filter\", \"float\", \"format\", \"frozenset\",\n                        \"getattr\", \"globals\", \"hasattr\", \"hash\", \"help\", \"hex\", \"id\",\n                        \"input\", \"int\", \"isinstance\", \"issubclass\", \"iter\", \"len\",\n                        \"list\", \"locals\", \"map\", \"max\", \"memoryview\", \"min\", \"next\",\n                        \"object\", \"oct\", \"open\", \"ord\", \"pow\", \"property\", \"range\",\n                        \"repr\", \"reversed\", \"round\", \"set\", \"setattr\", \"slice\",\n                        \"sorted\", \"staticmethod\", \"str\", \"sum\", \"super\", \"tuple\",\n                        \"type\", \"vars\", \"zip\", \"__import__\", \"NotImplemented\",\n                        \"Ellipsis\", \"__debug__\"];\n  CodeMirror.registerHelper(\"hintWords\", \"python\", commonKeywords.concat(commonBuiltins));\n\n  function top(state) {\n    return state.scopes[state.scopes.length - 1];\n  }\n\n  CodeMirror.defineMode(\"python\", function(conf, parserConf) {\n    var ERRORCLASS = \"error\";\n\n    var delimiters = parserConf.delimiters || parserConf.singleDelimiters || /^[\\(\\)\\[\\]\\{\\}@,:`=;\\.\\\\]/;\n    //               (Backwards-compatibility with old, cumbersome config system)\n    var operators = [parserConf.singleOperators, parserConf.doubleOperators, parserConf.doubleDelimiters, parserConf.tripleDelimiters,\n                     parserConf.operators || /^([-+*/%\\/&|^]=?|[<>=]+|\\/\\/=?|\\*\\*=?|!=|[~!@]|\\.\\.\\.)/]\n    for (var i = 0; i < operators.length; i++) if (!operators[i]) operators.splice(i--, 1)\n\n    var hangingIndent = parserConf.hangingIndent || conf.indentUnit;\n\n    var myKeywords = commonKeywords, myBuiltins = commonBuiltins;\n    if (parserConf.extra_keywords != undefined)\n      myKeywords = myKeywords.concat(parserConf.extra_keywords);\n\n    if (parserConf.extra_builtins != undefined)\n      myBuiltins = myBuiltins.concat(parserConf.extra_builtins);\n\n    var py3 = !(parserConf.version && Number(parserConf.version) < 3)\n    if (py3) {\n      // since http://legacy.python.org/dev/peps/pep-0465/ @ is also an operator\n      var identifiers = parserConf.identifiers|| /^[_A-Za-z\\u00A1-\\uFFFF][_A-Za-z0-9\\u00A1-\\uFFFF]*/;\n      myKeywords = myKeywords.concat([\"nonlocal\", \"False\", \"True\", \"None\", \"async\", \"await\"]);\n      myBuiltins = myBuiltins.concat([\"ascii\", \"bytes\", \"exec\", \"print\"]);\n      var stringPrefixes = new RegExp(\"^(([rbuf]|(br)|(fr))?('{3}|\\\"{3}|['\\\"]))\", \"i\");\n    } else {\n      var identifiers = parserConf.identifiers|| /^[_A-Za-z][_A-Za-z0-9]*/;\n      myKeywords = myKeywords.concat([\"exec\", \"print\"]);\n      myBuiltins = myBuiltins.concat([\"apply\", \"basestring\", \"buffer\", \"cmp\", \"coerce\", \"execfile\",\n                                      \"file\", \"intern\", \"long\", \"raw_input\", \"reduce\", \"reload\",\n                                      \"unichr\", \"unicode\", \"xrange\", \"False\", \"True\", \"None\"]);\n      var stringPrefixes = new RegExp(\"^(([rubf]|(ur)|(br))?('{3}|\\\"{3}|['\\\"]))\", \"i\");\n    }\n    var keywords = wordRegexp(myKeywords);\n    var builtins = wordRegexp(myBuiltins);\n\n    // tokenizers\n    function tokenBase(stream, state) {\n      var sol = stream.sol() && state.lastToken != \"\\\\\"\n      if (sol) state.indent = stream.indentation()\n      // Handle scope changes\n      if (sol && top(state).type == \"py\") {\n        var scopeOffset = top(state).offset;\n        if (stream.eatSpace()) {\n          var lineOffset = stream.indentation();\n          if (lineOffset > scopeOffset)\n            pushPyScope(state);\n          else if (lineOffset < scopeOffset && dedent(stream, state) && stream.peek() != \"#\")\n            state.errorToken = true;\n          return null;\n        } else {\n          var style = tokenBaseInner(stream, state);\n          if (scopeOffset > 0 && dedent(stream, state))\n            style += \" \" + ERRORCLASS;\n          return style;\n        }\n      }\n      return tokenBaseInner(stream, state);\n    }\n\n    function tokenBaseInner(stream, state, inFormat) {\n      if (stream.eatSpace()) return null;\n\n      // Handle Comments\n      if (!inFormat && stream.match(/^#.*/)) return \"comment\";\n\n      // Handle Number Literals\n      if (stream.match(/^[0-9\\.]/, false)) {\n        var floatLiteral = false;\n        // Floats\n        if (stream.match(/^[\\d_]*\\.\\d+(e[\\+\\-]?\\d+)?/i)) { floatLiteral = true; }\n        if (stream.match(/^[\\d_]+\\.\\d*/)) { floatLiteral = true; }\n        if (stream.match(/^\\.\\d+/)) { floatLiteral = true; }\n        if (floatLiteral) {\n          // Float literals may be \"imaginary\"\n          stream.eat(/J/i);\n          return \"number\";\n        }\n        // Integers\n        var intLiteral = false;\n        // Hex\n        if (stream.match(/^0x[0-9a-f_]+/i)) intLiteral = true;\n        // Binary\n        if (stream.match(/^0b[01_]+/i)) intLiteral = true;\n        // Octal\n        if (stream.match(/^0o[0-7_]+/i)) intLiteral = true;\n        // Decimal\n        if (stream.match(/^[1-9][\\d_]*(e[\\+\\-]?[\\d_]+)?/)) {\n          // Decimal literals may be \"imaginary\"\n          stream.eat(/J/i);\n          // TODO - Can you have imaginary longs?\n          intLiteral = true;\n        }\n        // Zero by itself with no other piece of number.\n        if (stream.match(/^0(?![\\dx])/i)) intLiteral = true;\n        if (intLiteral) {\n          // Integer literals may be \"long\"\n          stream.eat(/L/i);\n          return \"number\";\n        }\n      }\n\n      // Handle Strings\n      if (stream.match(stringPrefixes)) {\n        var isFmtString = stream.current().toLowerCase().indexOf('f') !== -1;\n        if (!isFmtString) {\n          state.tokenize = tokenStringFactory(stream.current(), state.tokenize);\n          return state.tokenize(stream, state);\n        } else {\n          state.tokenize = formatStringFactory(stream.current(), state.tokenize);\n          return state.tokenize(stream, state);\n        }\n      }\n\n      for (var i = 0; i < operators.length; i++)\n        if (stream.match(operators[i])) return \"operator\"\n\n      if (stream.match(delimiters)) return \"punctuation\";\n\n      if (state.lastToken == \".\" && stream.match(identifiers))\n        return \"property\";\n\n      if (stream.match(keywords) || stream.match(wordOperators))\n        return \"keyword\";\n\n      if (stream.match(builtins))\n        return \"builtin\";\n\n      if (stream.match(/^(self|cls)\\b/))\n        return \"variable-2\";\n\n      if (stream.match(identifiers)) {\n        if (state.lastToken == \"def\" || state.lastToken == \"class\")\n          return \"def\";\n        return \"variable\";\n      }\n\n      // Handle non-detected items\n      stream.next();\n      return inFormat ? null :ERRORCLASS;\n    }\n\n    function formatStringFactory(delimiter, tokenOuter) {\n      while (\"rubf\".indexOf(delimiter.charAt(0).toLowerCase()) >= 0)\n        delimiter = delimiter.substr(1);\n\n      var singleline = delimiter.length == 1;\n      var OUTCLASS = \"string\";\n\n      function tokenNestedExpr(depth) {\n        return function(stream, state) {\n          var inner = tokenBaseInner(stream, state, true)\n          if (inner == \"punctuation\") {\n            if (stream.current() == \"{\") {\n              state.tokenize = tokenNestedExpr(depth + 1)\n            } else if (stream.current() == \"}\") {\n              if (depth > 1) state.tokenize = tokenNestedExpr(depth - 1)\n              else state.tokenize = tokenString\n            }\n          }\n          return inner\n        }\n      }\n\n      function tokenString(stream, state) {\n        while (!stream.eol()) {\n          stream.eatWhile(/[^'\"\\{\\}\\\\]/);\n          if (stream.eat(\"\\\\\")) {\n            stream.next();\n            if (singleline && stream.eol())\n              return OUTCLASS;\n          } else if (stream.match(delimiter)) {\n            state.tokenize = tokenOuter;\n            return OUTCLASS;\n          } else if (stream.match('{{')) {\n            // ignore {{ in f-str\n            return OUTCLASS;\n          } else if (stream.match('{', false)) {\n            // switch to nested mode\n            state.tokenize = tokenNestedExpr(0)\n            if (stream.current()) return OUTCLASS;\n            else return state.tokenize(stream, state)\n          } else if (stream.match('}}')) {\n            return OUTCLASS;\n          } else if (stream.match('}')) {\n            // single } in f-string is an error\n            return ERRORCLASS;\n          } else {\n            stream.eat(/['\"]/);\n          }\n        }\n        if (singleline) {\n          if (parserConf.singleLineStringErrors)\n            return ERRORCLASS;\n          else\n            state.tokenize = tokenOuter;\n        }\n        return OUTCLASS;\n      }\n      tokenString.isString = true;\n      return tokenString;\n    }\n\n    function tokenStringFactory(delimiter, tokenOuter) {\n      while (\"rubf\".indexOf(delimiter.charAt(0).toLowerCase()) >= 0)\n        delimiter = delimiter.substr(1);\n\n      var singleline = delimiter.length == 1;\n      var OUTCLASS = \"string\";\n\n      function tokenString(stream, state) {\n        while (!stream.eol()) {\n          stream.eatWhile(/[^'\"\\\\]/);\n          if (stream.eat(\"\\\\\")) {\n            stream.next();\n            if (singleline && stream.eol())\n              return OUTCLASS;\n          } else if (stream.match(delimiter)) {\n            state.tokenize = tokenOuter;\n            return OUTCLASS;\n          } else {\n            stream.eat(/['\"]/);\n          }\n        }\n        if (singleline) {\n          if (parserConf.singleLineStringErrors)\n            return ERRORCLASS;\n          else\n            state.tokenize = tokenOuter;\n        }\n        return OUTCLASS;\n      }\n      tokenString.isString = true;\n      return tokenString;\n    }\n\n    function pushPyScope(state) {\n      while (top(state).type != \"py\") state.scopes.pop()\n      state.scopes.push({offset: top(state).offset + conf.indentUnit,\n                         type: \"py\",\n                         align: null})\n    }\n\n    function pushBracketScope(stream, state, type) {\n      var align = stream.match(/^([\\s\\[\\{\\(]|#.*)*$/, false) ? null : stream.column() + 1\n      state.scopes.push({offset: state.indent + hangingIndent,\n                         type: type,\n                         align: align})\n    }\n\n    function dedent(stream, state) {\n      var indented = stream.indentation();\n      while (state.scopes.length > 1 && top(state).offset > indented) {\n        if (top(state).type != \"py\") return true;\n        state.scopes.pop();\n      }\n      return top(state).offset != indented;\n    }\n\n    function tokenLexer(stream, state) {\n      if (stream.sol()) state.beginningOfLine = true;\n\n      var style = state.tokenize(stream, state);\n      var current = stream.current();\n\n      // Handle decorators\n      if (state.beginningOfLine && current == \"@\")\n        return stream.match(identifiers, false) ? \"meta\" : py3 ? \"operator\" : ERRORCLASS;\n\n      if (/\\S/.test(current)) state.beginningOfLine = false;\n\n      if ((style == \"variable\" || style == \"builtin\")\n          && state.lastToken == \"meta\")\n        style = \"meta\";\n\n      // Handle scope changes.\n      if (current == \"pass\" || current == \"return\")\n        state.dedent += 1;\n\n      if (current == \"lambda\") state.lambda = true;\n      if (current == \":\" && !state.lambda && top(state).type == \"py\")\n        pushPyScope(state);\n\n      if (current.length == 1 && !/string|comment/.test(style)) {\n        var delimiter_index = \"[({\".indexOf(current);\n        if (delimiter_index != -1)\n          pushBracketScope(stream, state, \"])}\".slice(delimiter_index, delimiter_index+1));\n\n        delimiter_index = \"])}\".indexOf(current);\n        if (delimiter_index != -1) {\n          if (top(state).type == current) state.indent = state.scopes.pop().offset - hangingIndent\n          else return ERRORCLASS;\n        }\n      }\n      if (state.dedent > 0 && stream.eol() && top(state).type == \"py\") {\n        if (state.scopes.length > 1) state.scopes.pop();\n        state.dedent -= 1;\n      }\n\n      return style;\n    }\n\n    var external = {\n      startState: function(basecolumn) {\n        return {\n          tokenize: tokenBase,\n          scopes: [{offset: basecolumn || 0, type: \"py\", align: null}],\n          indent: basecolumn || 0,\n          lastToken: null,\n          lambda: false,\n          dedent: 0\n        };\n      },\n\n      token: function(stream, state) {\n        var addErr = state.errorToken;\n        if (addErr) state.errorToken = false;\n        var style = tokenLexer(stream, state);\n\n        if (style && style != \"comment\")\n          state.lastToken = (style == \"keyword\" || style == \"punctuation\") ? stream.current() : style;\n        if (style == \"punctuation\") style = null;\n\n        if (stream.eol() && state.lambda)\n          state.lambda = false;\n        return addErr ? style + \" \" + ERRORCLASS : style;\n      },\n\n      indent: function(state, textAfter) {\n        if (state.tokenize != tokenBase)\n          return state.tokenize.isString ? CodeMirror.Pass : 0;\n\n        var scope = top(state), closing = scope.type == textAfter.charAt(0)\n        if (scope.align != null)\n          return scope.align - (closing ? 1 : 0)\n        else\n          return scope.offset - (closing ? hangingIndent : 0)\n      },\n\n      electricInput: /^\\s*[\\}\\]\\)]$/,\n      closeBrackets: {triples: \"'\\\"\"},\n      lineComment: \"#\",\n      fold: \"indent\"\n    };\n    return external;\n  });\n\n  CodeMirror.defineMIME(\"text/x-python\", \"python\");\n\n  var words = function(str) { return str.split(\" \"); };\n\n  CodeMirror.defineMIME(\"text/x-cython\", {\n    name: \"python\",\n    extra_keywords: words(\"by cdef cimport cpdef ctypedef enum except \"+\n                          \"extern gil include nogil property public \"+\n                          \"readonly struct union DEF IF ELIF ELSE\")\n  });\n\n});\n",null,null,null,null,null,null,null,null,"//! moment.js\n//! version : 2.29.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks() {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback(callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return (\n            input instanceof Array ||\n            Object.prototype.toString.call(input) === '[object Array]'\n        );\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return (\n            input != null &&\n            Object.prototype.toString.call(input) === '[object Object]'\n        );\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return Object.getOwnPropertyNames(obj).length === 0;\n        } else {\n            var k;\n            for (k in obj) {\n                if (hasOwnProp(obj, k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return (\n            typeof input === 'number' ||\n            Object.prototype.toString.call(input) === '[object Number]'\n        );\n    }\n\n    function isDate(input) {\n        return (\n            input instanceof Date ||\n            Object.prototype.toString.call(input) === '[object Date]'\n        );\n    }\n\n    function map(arr, fn) {\n        var res = [],\n            i;\n        for (i = 0; i < arr.length; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty: false,\n            unusedTokens: [],\n            unusedInput: [],\n            overflow: -2,\n            charsLeftOver: 0,\n            nullInput: false,\n            invalidEra: null,\n            invalidMonth: null,\n            invalidFormat: false,\n            userInvalidated: false,\n            iso: false,\n            parsedDateParts: [],\n            era: null,\n            meridiem: null,\n            rfc2822: false,\n            weekdayMismatch: false,\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this),\n                len = t.length >>> 0,\n                i;\n\n            for (i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m),\n                parsedParts = some.call(flags.parsedDateParts, function (i) {\n                    return i != null;\n                }),\n                isNowValid =\n                    !isNaN(m._d.getTime()) &&\n                    flags.overflow < 0 &&\n                    !flags.empty &&\n                    !flags.invalidEra &&\n                    !flags.invalidMonth &&\n                    !flags.invalidWeekday &&\n                    !flags.weekdayMismatch &&\n                    !flags.nullInput &&\n                    !flags.invalidFormat &&\n                    !flags.userInvalidated &&\n                    (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid =\n                    isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            } else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid(flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        } else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = (hooks.momentProperties = []),\n        updateInProgress = false;\n\n    function copyConfig(to, from) {\n        var i, prop, val;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentProperties.length > 0) {\n            for (i = 0; i < momentProperties.length; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment(obj) {\n        return (\n            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n        );\n    }\n\n    function warn(msg) {\n        if (\n            hooks.suppressDeprecationWarnings === false &&\n            typeof console !== 'undefined' &&\n            console.warn\n        ) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [],\n                    arg,\n                    i,\n                    key;\n                for (i = 0; i < arguments.length; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (key in arguments[0]) {\n                            if (hasOwnProp(arguments[0], key)) {\n                                arg += key + ': ' + arguments[0][key] + ', ';\n                            }\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(\n                    msg +\n                        '\\nArguments: ' +\n                        Array.prototype.slice.call(args).join('') +\n                        '\\n' +\n                        new Error().stack\n                );\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    function set(config) {\n        var prop, i;\n        for (i in config) {\n            if (hasOwnProp(config, i)) {\n                prop = config[i];\n                if (isFunction(prop)) {\n                    this[i] = prop;\n                } else {\n                    this['_' + i] = prop;\n                }\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' +\n                /\\d{1,2}/.source\n        );\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig),\n            prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (\n                hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])\n            ) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i,\n                res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay: '[Today at] LT',\n        nextDay: '[Tomorrow at] LT',\n        nextWeek: 'dddd [at] LT',\n        lastDay: '[Yesterday at] LT',\n        lastWeek: '[Last] dddd [at] LT',\n        sameElse: 'L',\n    };\n\n    function calendar(key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (\n            (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n            absNumber\n        );\n    }\n\n    var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n        formatFunctions = {},\n        formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken(token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(\n                    func.apply(this, arguments),\n                    token\n                );\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens),\n            i,\n            length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '',\n                i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i])\n                    ? array[i].call(mom, format)\n                    : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] =\n            formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(\n                localFormattingTokens,\n                replaceLongDateFormatTokens\n            );\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var defaultLongDateFormat = {\n        LTS: 'h:mm:ss A',\n        LT: 'h:mm A',\n        L: 'MM/DD/YYYY',\n        LL: 'MMMM D, YYYY',\n        LLL: 'MMMM D, YYYY h:mm A',\n        LLLL: 'dddd, MMMM D, YYYY h:mm A',\n    };\n\n    function longDateFormat(key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper\n            .match(formattingTokens)\n            .map(function (tok) {\n                if (\n                    tok === 'MMMM' ||\n                    tok === 'MM' ||\n                    tok === 'DD' ||\n                    tok === 'dddd'\n                ) {\n                    return tok.slice(1);\n                }\n                return tok;\n            })\n            .join('');\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate() {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d',\n        defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal(number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future: 'in %s',\n        past: '%s ago',\n        s: 'a few seconds',\n        ss: '%d seconds',\n        m: 'a minute',\n        mm: '%d minutes',\n        h: 'an hour',\n        hh: '%d hours',\n        d: 'a day',\n        dd: '%d days',\n        w: 'a week',\n        ww: '%d weeks',\n        M: 'a month',\n        MM: '%d months',\n        y: 'a year',\n        yy: '%d years',\n    };\n\n    function relativeTime(number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return isFunction(output)\n            ? output(number, withoutSuffix, string, isFuture)\n            : output.replace(/%d/i, number);\n    }\n\n    function pastFuture(diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias(unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string'\n            ? aliases[units] || aliases[units.toLowerCase()]\n            : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [],\n            u;\n        for (u in unitsObj) {\n            if (hasOwnProp(unitsObj, u)) {\n                units.push({ unit: u, priority: priorities[u] });\n            }\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    function absFloor(number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    function makeGetSet(unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get(mom, unit) {\n        return mom.isValid()\n            ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n            : NaN;\n    }\n\n    function set$1(mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (\n                unit === 'FullYear' &&\n                isLeapYear(mom.year()) &&\n                mom.month() === 1 &&\n                mom.date() === 29\n            ) {\n                value = toInt(value);\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n                    value,\n                    mom.month(),\n                    daysInMonth(value, mom.month())\n                );\n            } else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet(units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n    function stringSet(units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units),\n                i;\n            for (i = 0; i < prioritized.length; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    var match1 = /\\d/, //       0 - 9\n        match2 = /\\d\\d/, //      00 - 99\n        match3 = /\\d{3}/, //     000 - 999\n        match4 = /\\d{4}/, //    0000 - 9999\n        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n        match1to2 = /\\d\\d?/, //       0 - 99\n        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n        match1to3 = /\\d{1,3}/, //       0 - 999\n        match1to4 = /\\d{1,4}/, //       0 - 9999\n        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n        matchUnsigned = /\\d+/, //       0 - inf\n        matchSigned = /[+-]?\\d+/, //    -inf - inf\n        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n        // any word (or two) characters or numbers including two/three word month in arabic.\n        // includes scottish gaelic two word and hyphenated months\n        matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n        regexes;\n\n    regexes = {};\n\n    function addRegexToken(token, regex, strictRegex) {\n        regexes[token] = isFunction(regex)\n            ? regex\n            : function (isStrict, localeData) {\n                  return isStrict && strictRegex ? strictRegex : regex;\n              };\n    }\n\n    function getParseRegexForToken(token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(\n            s\n                .replace('\\\\', '')\n                .replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (\n                    matched,\n                    p1,\n                    p2,\n                    p3,\n                    p4\n                ) {\n                    return p1 || p2 || p3 || p4;\n                })\n        );\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken(token, callback) {\n        var i,\n            func = callback;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        for (i = 0; i < token.length; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken(token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0,\n        MONTH = 1,\n        DATE = 2,\n        HOUR = 3,\n        MINUTE = 4,\n        SECOND = 5,\n        MILLISECOND = 6,\n        WEEK = 7,\n        WEEKDAY = 8;\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1\n            ? isLeapYear(year)\n                ? 29\n                : 28\n            : 31 - ((modMonth % 7) % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M', match1to2);\n    addRegexToken('MM', match1to2, match2);\n    addRegexToken('MMM', function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(\n            '_'\n        ),\n        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n        defaultMonthsShortRegex = matchWord,\n        defaultMonthsRegex = matchWord;\n\n    function localeMonths(m, format) {\n        if (!m) {\n            return isArray(this._months)\n                ? this._months\n                : this._months['standalone'];\n        }\n        return isArray(this._months)\n            ? this._months[m.month()]\n            : this._months[\n                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                      ? 'format'\n                      : 'standalone'\n              ][m.month()];\n    }\n\n    function localeMonthsShort(m, format) {\n        if (!m) {\n            return isArray(this._monthsShort)\n                ? this._monthsShort\n                : this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort)\n            ? this._monthsShort[m.month()]\n            : this._monthsShort[\n                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n              ][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse(monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp(\n                    '^' + this.months(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n                this._shortMonthsParse[i] = new RegExp(\n                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex =\n                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'MMMM' &&\n                this._longMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'MMM' &&\n                this._shortMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth(mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth(value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth() {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function monthsShortRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict\n                ? this._monthsShortStrictRegex\n                : this._monthsShortRegex;\n        }\n    }\n\n    function monthsRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict\n                ? this._monthsStrictRegex\n                : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._monthsShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY', 4], 0, 'year');\n    addFormatToken(0, ['YYYYY', 5], 0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y', matchSigned);\n    addRegexToken('YY', match1to2, match2);\n    addRegexToken('YYYY', match1to4, match4);\n    addRegexToken('YYYYY', match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] =\n            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear() {\n        return isLeapYear(this.year());\n    }\n\n    function createDate(y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate(y) {\n        var date, args;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear,\n            resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear,\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek,\n            resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear,\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w', match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W', match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (\n        input,\n        week,\n        config,\n        token\n    ) {\n        week[token.substr(0, 1)] = toInt(input);\n    });\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek(mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow: 0, // Sunday is the first day of the week.\n        doy: 6, // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek() {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear() {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek(input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek(input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d', match1to2);\n    addRegexToken('e', match1to2);\n    addRegexToken('E', match1to2);\n    addRegexToken('dd', function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd', function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd', function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays(ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        defaultWeekdaysRegex = matchWord,\n        defaultWeekdaysShortRegex = matchWord,\n        defaultWeekdaysMinRegex = matchWord;\n\n    function localeWeekdays(m, format) {\n        var weekdays = isArray(this._weekdays)\n            ? this._weekdays\n            : this._weekdays[\n                  m && m !== true && this._weekdays.isFormat.test(format)\n                      ? 'format'\n                      : 'standalone'\n              ];\n        return m === true\n            ? shiftWeekdays(weekdays, this._week.dow)\n            : m\n            ? weekdays[m.day()]\n            : weekdays;\n    }\n\n    function localeWeekdaysShort(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : m\n            ? this._weekdaysShort[m.day()]\n            : this._weekdaysShort;\n    }\n\n    function localeWeekdaysMin(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : m\n            ? this._weekdaysMin[m.day()]\n            : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse(weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._shortWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._minWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n            }\n            if (!this._weekdaysParse[i]) {\n                regex =\n                    '^' +\n                    this.weekdays(mom, '') +\n                    '|^' +\n                    this.weekdaysShort(mom, '') +\n                    '|^' +\n                    this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'dddd' &&\n                this._fullWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'ddd' &&\n                this._shortWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'dd' &&\n                this._minWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    function weekdaysRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict\n                ? this._weekdaysStrictRegex\n                : this._weekdaysRegex;\n        }\n    }\n\n    function weekdaysShortRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict\n                ? this._weekdaysShortStrictRegex\n                : this._weekdaysShortRegex;\n        }\n    }\n\n    function weekdaysMinRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict\n                ? this._weekdaysMinStrictRegex\n                : this._weekdaysMinRegex;\n        }\n    }\n\n    function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [],\n            shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            minp,\n            shortp,\n            longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = regexEscape(this.weekdaysMin(mom, ''));\n            shortp = regexEscape(this.weekdaysShort(mom, ''));\n            longp = regexEscape(this.weekdays(mom, ''));\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n            '^(' + minPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return (\n            '' +\n            hFormat.apply(this) +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return (\n            '' +\n            this.hours() +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    function meridiem(token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(\n                this.hours(),\n                this.minutes(),\n                lowercase\n            );\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem(isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a', matchMeridiem);\n    addRegexToken('A', matchMeridiem);\n    addRegexToken('H', match1to2);\n    addRegexToken('h', match1to2);\n    addRegexToken('k', match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM(input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return (input + '').toLowerCase().charAt(0) === 'p';\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n        // Setting the hour should keep the time, because the user explicitly\n        // specified which hour they want. So trying to maintain the same hour (in\n        // a new timezone) makes sense. Adding/subtracting hours does not follow\n        // this rule.\n        getSetHour = makeGetSet('Hours', true);\n\n    function localeMeridiem(hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse,\n    };\n\n    // internal storage for locale config files\n    var locales = {},\n        localeFamilies = {},\n        globalLocale;\n\n    function commonPrefix(arr1, arr2) {\n        var i,\n            minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n            if (arr1[i] !== arr2[i]) {\n                return i;\n            }\n        }\n        return minl;\n    }\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0,\n            j,\n            next,\n            locale,\n            split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (\n                    next &&\n                    next.length >= j &&\n                    commonPrefix(split, next) >= j - 1\n                ) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null,\n            aliasedRequire;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (\n            locales[name] === undefined &&\n            typeof module !== 'undefined' &&\n            module &&\n            module.exports\n        ) {\n            try {\n                oldLocale = globalLocale._abbr;\n                aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {\n                // mark as not found to avoid repeating expensive file require call causing high CPU\n                // when trying to find en-US, en_US, en-us for every format call\n                locales[name] = null; // null means not found\n            }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale(key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            } else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            } else {\n                if (typeof console !== 'undefined' && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn(\n                        'Locale ' + key + ' not found. Did you forget to load it?'\n                    );\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale(name, config) {\n        if (config !== null) {\n            var locale,\n                parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple(\n                    'defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n                );\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config,\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale,\n                tmpLocale,\n                parentConfig = baseConfig;\n\n            if (locales[name] != null && locales[name].parentLocale != null) {\n                // Update existing child locale in-place to avoid memory-leaks\n                locales[name].set(mergeConfigs(locales[name]._config, config));\n            } else {\n                // MERGE\n                tmpLocale = loadLocale(name);\n                if (tmpLocale != null) {\n                    parentConfig = tmpLocale._config;\n                }\n                config = mergeConfigs(parentConfig, config);\n                if (tmpLocale == null) {\n                    // updateLocale is called for creating a new locale\n                    // Set abbr so it will have a name (getters return\n                    // undefined otherwise).\n                    config.abbr = name;\n                }\n                locale = new Locale(config);\n                locale.parentLocale = locales[name];\n                locales[name] = locale;\n            }\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                    if (name === getSetGlobalLocale()) {\n                        getSetGlobalLocale(name);\n                    }\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale(key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow(m) {\n        var overflow,\n            a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH] < 0 || a[MONTH] > 11\n                    ? MONTH\n                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                    ? DATE\n                    : a[HOUR] < 0 ||\n                      a[HOUR] > 24 ||\n                      (a[HOUR] === 24 &&\n                          (a[MINUTE] !== 0 ||\n                              a[SECOND] !== 0 ||\n                              a[MILLISECOND] !== 0))\n                    ? HOUR\n                    : a[MINUTE] < 0 || a[MINUTE] > 59\n                    ? MINUTE\n                    : a[SECOND] < 0 || a[SECOND] > 59\n                    ? SECOND\n                    : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                    ? MILLISECOND\n                    : -1;\n\n            if (\n                getParsingFlags(m)._overflowDayOfYear &&\n                (overflow < YEAR || overflow > DATE)\n            ) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n        isoDates = [\n            ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n            ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n            ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n            ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n            ['YYYY-DDD', /\\d{4}-\\d{3}/],\n            ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n            ['YYYYYYMMDD', /[+-]\\d{10}/],\n            ['YYYYMMDD', /\\d{8}/],\n            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n            ['YYYYDDD', /\\d{7}/],\n            ['YYYYMM', /\\d{6}/, false],\n            ['YYYY', /\\d{4}/, false],\n        ],\n        // iso time formats and regexes\n        isoTimes = [\n            ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n            ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n            ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n            ['HH:mm', /\\d\\d:\\d\\d/],\n            ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n            ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n            ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n            ['HHmm', /\\d\\d\\d\\d/],\n            ['HH', /\\d\\d/],\n        ],\n        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n        rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n        obsOffsets = {\n            UT: 0,\n            GMT: 0,\n            EDT: -4 * 60,\n            EST: -5 * 60,\n            CDT: -5 * 60,\n            CST: -6 * 60,\n            MDT: -6 * 60,\n            MST: -7 * 60,\n            PDT: -7 * 60,\n            PST: -8 * 60,\n        };\n\n    // date from iso format\n    function configFromISO(config) {\n        var i,\n            l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime,\n            dateFormat,\n            timeFormat,\n            tzFormat;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n\n            for (i = 0, l = isoDates.length; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimes.length; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    function extractFromRFC2822Strings(\n        yearStr,\n        monthStr,\n        dayStr,\n        hourStr,\n        minuteStr,\n        secondStr\n    ) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10),\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s\n            .replace(/\\([^)]*\\)|[\\n\\t]/g, ' ')\n            .replace(/(\\s\\s+)/g, ' ')\n            .replace(/^\\s\\s*/, '')\n            .replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(\n                    parsedInput[0],\n                    parsedInput[1],\n                    parsedInput[2]\n                ).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10),\n                m = hm % 100,\n                h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i)),\n            parsedArray;\n        if (match) {\n            parsedArray = extractFromRFC2822Strings(\n                match[4],\n                match[3],\n                match[2],\n                match[5],\n                match[6],\n                match[7]\n            );\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        if (config._strict) {\n            config._isValid = false;\n        } else {\n            // Final attempt, use Input Fallback\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [\n                nowValue.getUTCFullYear(),\n                nowValue.getUTCMonth(),\n                nowValue.getUTCDate(),\n            ];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray(config) {\n        var i,\n            date,\n            input = [],\n            currentDate,\n            expectedWeekday,\n            yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (\n                config._dayOfYear > daysInYear(yearToUse) ||\n                config._dayOfYear === 0\n            ) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] =\n                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (\n            config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0\n        ) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n            null,\n            input\n        );\n        expectedWeekday = config._useUTC\n            ? config._d.getUTCDay()\n            : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (\n            config._w &&\n            typeof config._w.d !== 'undefined' &&\n            config._w.d !== expectedWeekday\n        ) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(\n                w.GG,\n                config._a[YEAR],\n                weekOfYear(createLocal(), 1, 4).year\n            );\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i,\n            parsedInput,\n            tokens,\n            token,\n            skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0,\n            era;\n\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n        for (i = 0; i < tokens.length; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n                [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(\n                    string.indexOf(parsedInput) + parsedInput.length\n                );\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                } else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            } else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver =\n            stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (\n            config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0\n        ) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(\n            config._locale,\n            config._a[HOUR],\n            config._meridiem\n        );\n\n        // handle era\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n    function meridiemFixWrap(locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n            scoreToBeat,\n            i,\n            currentScore,\n            validFormatFound,\n            bestFormatIsValid = false;\n\n        if (config._f.length === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < config._f.length; i++) {\n            currentScore = 0;\n            validFormatFound = false;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (isValid(tempConfig)) {\n                validFormatFound = true;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (!bestFormatIsValid) {\n                if (\n                    scoreToBeat == null ||\n                    currentScore < scoreToBeat ||\n                    validFormatFound\n                ) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                    if (validFormatFound) {\n                        bestFormatIsValid = true;\n                    }\n                }\n            } else {\n                if (currentScore < scoreToBeat) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                }\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i),\n            dayOrDate = i.day === undefined ? i.date : i.day;\n        config._a = map(\n            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n            function (obj) {\n                return obj && parseInt(obj, 10);\n            }\n        );\n\n        configFromArray(config);\n    }\n\n    function createFromConfig(config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig(config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({ nullInput: true });\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC(input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (format === true || format === false) {\n            strict = format;\n            format = undefined;\n        }\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if (\n            (isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)\n        ) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other < this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        ),\n        prototypeMax = deprecate(\n            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other > this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +new Date();\n    };\n\n    var ordering = [\n        'year',\n        'quarter',\n        'month',\n        'week',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'millisecond',\n    ];\n\n    function isDurationValid(m) {\n        var key,\n            unitHasDecimal = false,\n            i;\n        for (key in m) {\n            if (\n                hasOwnProp(m, key) &&\n                !(\n                    indexOf.call(ordering, key) !== -1 &&\n                    (m[key] == null || !isNaN(m[key]))\n                )\n            ) {\n                return false;\n            }\n        }\n\n        for (i = 0; i < ordering.length; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration(duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds =\n            +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days + weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months + quarters * 3 + years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration(obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound(number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if (\n                (dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n            ) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    // FORMATTING\n\n    function offset(token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset(),\n                sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return (\n                sign +\n                zeroFill(~~(offset / 60), 2) +\n                separator +\n                zeroFill(~~offset % 60, 2)\n            );\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z', matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher),\n            chunk,\n            parts,\n            minutes;\n\n        if (matches === null) {\n            return null;\n        }\n\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff =\n                (isMoment(input) || isDate(input)\n                    ? input.valueOf()\n                    : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset(m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset());\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset(input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(\n                        this,\n                        createDuration(input - offset, 'm'),\n                        1,\n                        false\n                    );\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone(input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC(keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal(keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset() {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            } else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset(input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime() {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted() {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {},\n            other;\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted =\n                this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal() {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset() {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc() {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n        // and further modified to allow for strings containing both week and day\n        isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration(input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms: input._milliseconds,\n                d: input._days,\n                M: input._months,\n            };\n        } else if (isNumber(input) || !isNaN(+input)) {\n            duration = {};\n            if (key) {\n                duration[key] = +input;\n            } else {\n                duration.milliseconds = +input;\n            }\n        } else if ((match = aspNetRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: 0,\n                d: toInt(match[DATE]) * sign,\n                h: toInt(match[HOUR]) * sign,\n                m: toInt(match[MINUTE]) * sign,\n                s: toInt(match[SECOND]) * sign,\n                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n            };\n        } else if ((match = isoRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: parseIso(match[2], sign),\n                M: parseIso(match[3], sign),\n                w: parseIso(match[4], sign),\n                d: parseIso(match[5], sign),\n                h: parseIso(match[6], sign),\n                m: parseIso(match[7], sign),\n                s: parseIso(match[8], sign),\n            };\n        } else if (duration == null) {\n            // checks for null or undefined\n            duration = {};\n        } else if (\n            typeof duration === 'object' &&\n            ('from' in duration || 'to' in duration)\n        ) {\n            diffRes = momentsDifference(\n                createLocal(duration.from),\n                createLocal(duration.to)\n            );\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n            ret._isValid = input._isValid;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso(inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months =\n            other.month() - base.month() + (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return { milliseconds: 0, months: 0 };\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(\n                    name,\n                    'moment().' +\n                        name +\n                        '(period, number) is deprecated. Please use moment().' +\n                        name +\n                        '(number, period). ' +\n                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n                );\n                tmp = val;\n                val = period;\n                period = tmp;\n            }\n\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract(mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add = createAdder(1, 'add'),\n        subtract = createAdder(-1, 'subtract');\n\n    function isString(input) {\n        return typeof input === 'string' || input instanceof String;\n    }\n\n    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n    function isMomentInput(input) {\n        return (\n            isMoment(input) ||\n            isDate(input) ||\n            isString(input) ||\n            isNumber(input) ||\n            isNumberOrStringArray(input) ||\n            isMomentInputObject(input) ||\n            input === null ||\n            input === undefined\n        );\n    }\n\n    function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'years',\n                'year',\n                'y',\n                'months',\n                'month',\n                'M',\n                'days',\n                'day',\n                'd',\n                'dates',\n                'date',\n                'D',\n                'hours',\n                'hour',\n                'h',\n                'minutes',\n                'minute',\n                'm',\n                'seconds',\n                'second',\n                's',\n                'milliseconds',\n                'millisecond',\n                'ms',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input),\n            dataTypeTest = false;\n        if (arrayTest) {\n            dataTypeTest =\n                input.filter(function (item) {\n                    return !isNumber(item) && isString(input);\n                }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n    }\n\n    function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'sameDay',\n                'nextDay',\n                'lastDay',\n                'nextWeek',\n                'lastWeek',\n                'sameElse',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6\n            ? 'sameElse'\n            : diff < -1\n            ? 'lastWeek'\n            : diff < 0\n            ? 'lastDay'\n            : diff < 1\n            ? 'sameDay'\n            : diff < 2\n            ? 'nextDay'\n            : diff < 7\n            ? 'nextWeek'\n            : 'sameElse';\n    }\n\n    function calendar$1(time, formats) {\n        // Support for single parameter, formats only overload to the calendar function\n        if (arguments.length === 1) {\n            if (!arguments[0]) {\n                time = undefined;\n                formats = undefined;\n            } else if (isMomentInput(arguments[0])) {\n                time = arguments[0];\n                formats = undefined;\n            } else if (isCalendarSpec(arguments[0])) {\n                formats = arguments[0];\n                time = undefined;\n            }\n        }\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse',\n            output =\n                formats &&\n                (isFunction(formats[format])\n                    ? formats[format].call(this, now)\n                    : formats[format]);\n\n        return this.format(\n            output || this.localeData().calendar(format, this, createLocal(now))\n        );\n    }\n\n    function clone() {\n        return new Moment(this);\n    }\n\n    function isAfter(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween(from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (\n            (inclusivity[0] === '('\n                ? this.isAfter(localFrom, units)\n                : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')'\n                ? this.isBefore(localTo, units)\n                : !this.isAfter(localTo, units))\n        );\n    }\n\n    function isSame(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return (\n                this.clone().startOf(units).valueOf() <= inputMs &&\n                inputMs <= this.clone().endOf(units).valueOf()\n            );\n        }\n    }\n\n    function isSameOrAfter(input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore(input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff(input, units, asFloat) {\n        var that, zoneDelta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year':\n                output = monthDiff(this, that) / 12;\n                break;\n            case 'month':\n                output = monthDiff(this, that);\n                break;\n            case 'quarter':\n                output = monthDiff(this, that) / 3;\n                break;\n            case 'second':\n                output = (this - that) / 1e3;\n                break; // 1000\n            case 'minute':\n                output = (this - that) / 6e4;\n                break; // 1000 * 60\n            case 'hour':\n                output = (this - that) / 36e5;\n                break; // 1000 * 60 * 60\n            case 'day':\n                output = (this - that - zoneDelta) / 864e5;\n                break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week':\n                output = (this - that - zoneDelta) / 6048e5;\n                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default:\n                output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n            // end-of-month calculations work correct when the start month has more\n            // days than the end month.\n            return -monthDiff(b, a);\n        }\n        // difference in months\n        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2,\n            adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString() {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true,\n            m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(\n                m,\n                utc\n                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n            );\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                    .toISOString()\n                    .replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(\n            m,\n            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect() {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment',\n            zone = '',\n            prefix,\n            year,\n            datetime,\n            suffix;\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        prefix = '[' + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format(inputString) {\n        if (!inputString) {\n            inputString = this.isUtc()\n                ? hooks.defaultFormatUtc\n                : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ to: this, from: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow(withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ from: this, to: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow(withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale(key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData() {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000,\n        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return ((dividend % divisor) + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3),\n                    1\n                );\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday()\n                );\n                break;\n            case 'isoWeek':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1)\n                );\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                );\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month() - (this.month() % 3) + 3,\n                        1\n                    ) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - this.weekday() + 7\n                    ) - 1;\n                break;\n            case 'isoWeek':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - (this.isoWeekday() - 1) + 7\n                    ) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time +=\n                    MS_PER_HOUR -\n                    mod$1(\n                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                        MS_PER_HOUR\n                    ) -\n                    1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf() {\n        return this._d.valueOf() - (this._offset || 0) * 60000;\n    }\n\n    function unix() {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate() {\n        return new Date(this.valueOf());\n    }\n\n    function toArray() {\n        var m = this;\n        return [\n            m.year(),\n            m.month(),\n            m.date(),\n            m.hour(),\n            m.minute(),\n            m.second(),\n            m.millisecond(),\n        ];\n    }\n\n    function toObject() {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds(),\n        };\n    }\n\n    function toJSON() {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2() {\n        return isValid(this);\n    }\n\n    function parsingFlags() {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt() {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict,\n        };\n    }\n\n    addFormatToken('N', 0, 0, 'eraAbbr');\n    addFormatToken('NN', 0, 0, 'eraAbbr');\n    addFormatToken('NNN', 0, 0, 'eraAbbr');\n    addFormatToken('NNNN', 0, 0, 'eraName');\n    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n    addRegexToken('N', matchEraAbbr);\n    addRegexToken('NN', matchEraAbbr);\n    addRegexToken('NNN', matchEraAbbr);\n    addRegexToken('NNNN', matchEraName);\n    addRegexToken('NNNNN', matchEraNarrow);\n\n    addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (\n        input,\n        array,\n        config,\n        token\n    ) {\n        var era = config._locale.erasParse(input, token, config._strict);\n        if (era) {\n            getParsingFlags(config).era = era;\n        } else {\n            getParsingFlags(config).invalidEra = input;\n        }\n    });\n\n    addRegexToken('y', matchUnsigned);\n    addRegexToken('yy', matchUnsigned);\n    addRegexToken('yyy', matchUnsigned);\n    addRegexToken('yyyy', matchUnsigned);\n    addRegexToken('yo', matchEraYearOrdinal);\n\n    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n    addParseToken(['yo'], function (input, array, config, token) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n            match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n\n        if (config._locale.eraYearOrdinalParse) {\n            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n            array[YEAR] = parseInt(input, 10);\n        }\n    });\n\n    function localeEras(m, format) {\n        var i,\n            l,\n            date,\n            eras = this._eras || getLocale('en')._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n            switch (typeof eras[i].since) {\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].since).startOf('day');\n                    eras[i].since = date.valueOf();\n                    break;\n            }\n\n            switch (typeof eras[i].until) {\n                case 'undefined':\n                    eras[i].until = +Infinity;\n                    break;\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].until).startOf('day').valueOf();\n                    eras[i].until = date.valueOf();\n                    break;\n            }\n        }\n        return eras;\n    }\n\n    function localeErasParse(eraName, format, strict) {\n        var i,\n            l,\n            eras = this.eras(),\n            name,\n            abbr,\n            narrow;\n        eraName = eraName.toUpperCase();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            name = eras[i].name.toUpperCase();\n            abbr = eras[i].abbr.toUpperCase();\n            narrow = eras[i].narrow.toUpperCase();\n\n            if (strict) {\n                switch (format) {\n                    case 'N':\n                    case 'NN':\n                    case 'NNN':\n                        if (abbr === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNN':\n                        if (name === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNNN':\n                        if (narrow === eraName) {\n                            return eras[i];\n                        }\n                        break;\n                }\n            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n                return eras[i];\n            }\n        }\n    }\n\n    function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? +1 : -1;\n        if (year === undefined) {\n            return hooks(era.since).year();\n        } else {\n            return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n    }\n\n    function getEraName() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].name;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].name;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraNarrow() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].narrow;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].narrow;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraAbbr() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].abbr;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].abbr;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraYear() {\n        var i,\n            l,\n            dir,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (\n                (eras[i].since <= val && val <= eras[i].until) ||\n                (eras[i].until <= val && val <= eras[i].since)\n            ) {\n                return (\n                    (this.year() - hooks(eras[i].since).year()) * dir +\n                    eras[i].offset\n                );\n            }\n        }\n\n        return this.year();\n    }\n\n    function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNameRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n    }\n\n    function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n    }\n\n    function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n    }\n\n    function matchEraAbbr(isStrict, locale) {\n        return locale.erasAbbrRegex(isStrict);\n    }\n\n    function matchEraName(isStrict, locale) {\n        return locale.erasNameRegex(isStrict);\n    }\n\n    function matchEraNarrow(isStrict, locale) {\n        return locale.erasNarrowRegex(isStrict);\n    }\n\n    function matchEraYearOrdinal(isStrict, locale) {\n        return locale._eraYearOrdinalRegex || matchUnsigned;\n    }\n\n    function computeErasParse() {\n        var abbrPieces = [],\n            namePieces = [],\n            narrowPieces = [],\n            mixedPieces = [],\n            i,\n            l,\n            eras = this.eras();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            namePieces.push(regexEscape(eras[i].name));\n            abbrPieces.push(regexEscape(eras[i].abbr));\n            narrowPieces.push(regexEscape(eras[i].narrow));\n\n            mixedPieces.push(regexEscape(eras[i].name));\n            mixedPieces.push(regexEscape(eras[i].abbr));\n            mixedPieces.push(regexEscape(eras[i].narrow));\n        }\n\n        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n        this._erasNarrowRegex = new RegExp(\n            '^(' + narrowPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken(token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg', 'weekYear');\n    addWeekYearFormatToken('ggggg', 'weekYear');\n    addWeekYearFormatToken('GGGG', 'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n    // PARSING\n\n    addRegexToken('G', matchSigned);\n    addRegexToken('g', matchSigned);\n    addRegexToken('GG', match1to2, match2);\n    addRegexToken('gg', match1to2, match2);\n    addRegexToken('GGGG', match1to4, match4);\n    addRegexToken('gggg', match1to4, match4);\n    addRegexToken('GGGGG', match1to6, match6);\n    addRegexToken('ggggg', match1to6, match6);\n\n    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (\n        input,\n        week,\n        config,\n        token\n    ) {\n        week[token.substr(0, 2)] = toInt(input);\n    });\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.week(),\n            this.weekday(),\n            this.localeData()._week.dow,\n            this.localeData()._week.doy\n        );\n    }\n\n    function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.isoWeek(),\n            this.isoWeekday(),\n            1,\n            4\n        );\n    }\n\n    function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 1, 4);\n    }\n\n    function getWeeksInYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter(input) {\n        return input == null\n            ? Math.ceil((this.month() + 1) / 3)\n            : this.month((input - 1) * 3 + (this.month() % 3));\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D', match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict\n            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n            : locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD', match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear(input) {\n        var dayOfYear =\n            Math.round(\n                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n            ) + 1;\n        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m', match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s', match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S', match1to3, match1);\n    addRegexToken('SS', match1to3, match2);\n    addRegexToken('SSS', match1to3, match3);\n\n    var token, getSetMillisecond;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n\n    getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z', 0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr() {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName() {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add = add;\n    proto.calendar = calendar$1;\n    proto.clone = clone;\n    proto.diff = diff;\n    proto.endOf = endOf;\n    proto.format = format;\n    proto.from = from;\n    proto.fromNow = fromNow;\n    proto.to = to;\n    proto.toNow = toNow;\n    proto.get = stringGet;\n    proto.invalidAt = invalidAt;\n    proto.isAfter = isAfter;\n    proto.isBefore = isBefore;\n    proto.isBetween = isBetween;\n    proto.isSame = isSame;\n    proto.isSameOrAfter = isSameOrAfter;\n    proto.isSameOrBefore = isSameOrBefore;\n    proto.isValid = isValid$2;\n    proto.lang = lang;\n    proto.locale = locale;\n    proto.localeData = localeData;\n    proto.max = prototypeMax;\n    proto.min = prototypeMin;\n    proto.parsingFlags = parsingFlags;\n    proto.set = stringSet;\n    proto.startOf = startOf;\n    proto.subtract = subtract;\n    proto.toArray = toArray;\n    proto.toObject = toObject;\n    proto.toDate = toDate;\n    proto.toISOString = toISOString;\n    proto.inspect = inspect;\n    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n            return 'Moment<' + this.format() + '>';\n        };\n    }\n    proto.toJSON = toJSON;\n    proto.toString = toString;\n    proto.unix = unix;\n    proto.valueOf = valueOf;\n    proto.creationData = creationData;\n    proto.eraName = getEraName;\n    proto.eraNarrow = getEraNarrow;\n    proto.eraAbbr = getEraAbbr;\n    proto.eraYear = getEraYear;\n    proto.year = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week = proto.weeks = getSetWeek;\n    proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n    proto.weeksInYear = getWeeksInYear;\n    proto.weeksInWeekYear = getWeeksInWeekYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n    proto.date = getSetDayOfMonth;\n    proto.day = proto.days = getSetDayOfWeek;\n    proto.weekday = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset = getSetOffset;\n    proto.utc = setOffsetToUTC;\n    proto.local = setOffsetToLocal;\n    proto.parseZone = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST = isDaylightSavingTime;\n    proto.isLocal = isLocal;\n    proto.isUtcOffset = isUtcOffset;\n    proto.isUtc = isUtc;\n    proto.isUTC = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates = deprecate(\n        'dates accessor is deprecated. Use date instead.',\n        getSetDayOfMonth\n    );\n    proto.months = deprecate(\n        'months accessor is deprecated. Use month instead',\n        getSetMonth\n    );\n    proto.years = deprecate(\n        'years accessor is deprecated. Use year instead',\n        getSetYear\n    );\n    proto.zone = deprecate(\n        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n        getSetZone\n    );\n    proto.isDSTShifted = deprecate(\n        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n        isDaylightSavingTimeShifted\n    );\n\n    function createUnix(input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone() {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat(string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar = calendar;\n    proto$1.longDateFormat = longDateFormat;\n    proto$1.invalidDate = invalidDate;\n    proto$1.ordinal = ordinal;\n    proto$1.preparse = preParsePostFormat;\n    proto$1.postformat = preParsePostFormat;\n    proto$1.relativeTime = relativeTime;\n    proto$1.pastFuture = pastFuture;\n    proto$1.set = set;\n    proto$1.eras = localeEras;\n    proto$1.erasParse = localeErasParse;\n    proto$1.erasConvertYear = localeErasConvertYear;\n    proto$1.erasAbbrRegex = erasAbbrRegex;\n    proto$1.erasNameRegex = erasNameRegex;\n    proto$1.erasNarrowRegex = erasNarrowRegex;\n\n    proto$1.months = localeMonths;\n    proto$1.monthsShort = localeMonthsShort;\n    proto$1.monthsParse = localeMonthsParse;\n    proto$1.monthsRegex = monthsRegex;\n    proto$1.monthsShortRegex = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays = localeWeekdays;\n    proto$1.weekdaysMin = localeWeekdaysMin;\n    proto$1.weekdaysShort = localeWeekdaysShort;\n    proto$1.weekdaysParse = localeWeekdaysParse;\n\n    proto$1.weekdaysRegex = weekdaysRegex;\n    proto$1.weekdaysShortRegex = weekdaysShortRegex;\n    proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1(format, index, field, setter) {\n        var locale = getLocale(),\n            utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl(format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i,\n            out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl(localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0,\n            i,\n            out = [];\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths(format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort(format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        eras: [\n            {\n                since: '0001-01-01',\n                until: +Infinity,\n                offset: 1,\n                name: 'Anno Domini',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: 'Before Christ',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    toInt((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate(\n        'moment.lang is deprecated. Use moment.locale instead.',\n        getSetGlobalLocale\n    );\n    hooks.langData = deprecate(\n        'moment.langData is deprecated. Use moment.localeData instead.',\n        getLocale\n    );\n\n    var mathAbs = Math.abs;\n\n    function abs() {\n        var data = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days = mathAbs(this._days);\n        this._months = mathAbs(this._months);\n\n        data.milliseconds = mathAbs(data.milliseconds);\n        data.seconds = mathAbs(data.seconds);\n        data.minutes = mathAbs(data.minutes);\n        data.hours = mathAbs(data.hours);\n        data.months = mathAbs(data.months);\n        data.years = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1(duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days += direction * other._days;\n        duration._months += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1(input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1(input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil(number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble() {\n        var milliseconds = this._milliseconds,\n            days = this._days,\n            months = this._months,\n            data = this._data,\n            seconds,\n            minutes,\n            hours,\n            years,\n            monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (\n            !(\n                (milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0)\n            )\n        ) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds = absFloor(milliseconds / 1000);\n        data.seconds = seconds % 60;\n\n        minutes = absFloor(seconds / 60);\n        data.minutes = minutes % 60;\n\n        hours = absFloor(minutes / 60);\n        data.hours = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days = days;\n        data.months = months;\n        data.years = years;\n\n        return this;\n    }\n\n    function daysToMonths(days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return (days * 4800) / 146097;\n    }\n\n    function monthsToDays(months) {\n        // the reverse of daysToMonths\n        return (months * 146097) / 4800;\n    }\n\n    function as(units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days,\n            months,\n            milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':\n                    return months;\n                case 'quarter':\n                    return months / 3;\n                case 'year':\n                    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week':\n                    return days / 7 + milliseconds / 6048e5;\n                case 'day':\n                    return days + milliseconds / 864e5;\n                case 'hour':\n                    return days * 24 + milliseconds / 36e5;\n                case 'minute':\n                    return days * 1440 + milliseconds / 6e4;\n                case 'second':\n                    return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond':\n                    return Math.floor(days * 864e5) + milliseconds;\n                default:\n                    throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function valueOf$1() {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs(alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms'),\n        asSeconds = makeAs('s'),\n        asMinutes = makeAs('m'),\n        asHours = makeAs('h'),\n        asDays = makeAs('d'),\n        asWeeks = makeAs('w'),\n        asMonths = makeAs('M'),\n        asQuarters = makeAs('Q'),\n        asYears = makeAs('y');\n\n    function clone$1() {\n        return createDuration(this);\n    }\n\n    function get$2(units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds'),\n        seconds = makeGetter('seconds'),\n        minutes = makeGetter('minutes'),\n        hours = makeGetter('hours'),\n        days = makeGetter('days'),\n        months = makeGetter('months'),\n        years = makeGetter('years');\n\n    function weeks() {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round,\n        thresholds = {\n            ss: 44, // a few seconds to seconds\n            s: 45, // seconds to minute\n            m: 45, // minutes to hour\n            h: 22, // hours to day\n            d: 26, // days to month/week\n            w: null, // weeks to month\n            M: 11, // months to year\n        };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n        var duration = createDuration(posNegDuration).abs(),\n            seconds = round(duration.as('s')),\n            minutes = round(duration.as('m')),\n            hours = round(duration.as('h')),\n            days = round(duration.as('d')),\n            months = round(duration.as('M')),\n            weeks = round(duration.as('w')),\n            years = round(duration.as('y')),\n            a =\n                (seconds <= thresholds.ss && ['s', seconds]) ||\n                (seconds < thresholds.s && ['ss', seconds]) ||\n                (minutes <= 1 && ['m']) ||\n                (minutes < thresholds.m && ['mm', minutes]) ||\n                (hours <= 1 && ['h']) ||\n                (hours < thresholds.h && ['hh', hours]) ||\n                (days <= 1 && ['d']) ||\n                (days < thresholds.d && ['dd', days]);\n\n        if (thresholds.w != null) {\n            a =\n                a ||\n                (weeks <= 1 && ['w']) ||\n                (weeks < thresholds.w && ['ww', weeks]);\n        }\n        a = a ||\n            (months <= 1 && ['M']) ||\n            (months < thresholds.M && ['MM', months]) ||\n            (years <= 1 && ['y']) || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding(roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof roundingFunction === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold(threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var withSuffix = false,\n            th = thresholds,\n            locale,\n            output;\n\n        if (typeof argWithSuffix === 'object') {\n            argThresholds = argWithSuffix;\n            argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === 'boolean') {\n            withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === 'object') {\n            th = Object.assign({}, thresholds, argThresholds);\n            if (argThresholds.s != null && argThresholds.ss == null) {\n                th.ss = argThresholds.s - 1;\n            }\n        }\n\n        locale = this.localeData();\n        output = relativeTime$1(this, !withSuffix, th, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return (x > 0) - (x < 0) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000,\n            days = abs$1(this._days),\n            months = abs$1(this._months),\n            minutes,\n            hours,\n            years,\n            s,\n            total = this.asSeconds(),\n            totalSign,\n            ymSign,\n            daysSign,\n            hmsSign;\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes = absFloor(seconds / 60);\n        hours = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n        totalSign = total < 0 ? '-' : '';\n        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return (\n            totalSign +\n            'P' +\n            (years ? ymSign + years + 'Y' : '') +\n            (months ? ymSign + months + 'M' : '') +\n            (days ? daysSign + days + 'D' : '') +\n            (hours || minutes || seconds ? 'T' : '') +\n            (hours ? hmsSign + hours + 'H' : '') +\n            (minutes ? hmsSign + minutes + 'M' : '') +\n            (seconds ? hmsSign + s + 'S' : '')\n        );\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid = isValid$1;\n    proto$2.abs = abs;\n    proto$2.add = add$1;\n    proto$2.subtract = subtract$1;\n    proto$2.as = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds = asSeconds;\n    proto$2.asMinutes = asMinutes;\n    proto$2.asHours = asHours;\n    proto$2.asDays = asDays;\n    proto$2.asWeeks = asWeeks;\n    proto$2.asMonths = asMonths;\n    proto$2.asQuarters = asQuarters;\n    proto$2.asYears = asYears;\n    proto$2.valueOf = valueOf$1;\n    proto$2._bubble = bubble;\n    proto$2.clone = clone$1;\n    proto$2.get = get$2;\n    proto$2.milliseconds = milliseconds;\n    proto$2.seconds = seconds;\n    proto$2.minutes = minutes;\n    proto$2.hours = hours;\n    proto$2.days = days;\n    proto$2.weeks = weeks;\n    proto$2.months = months;\n    proto$2.years = years;\n    proto$2.humanize = humanize;\n    proto$2.toISOString = toISOString$1;\n    proto$2.toString = toISOString$1;\n    proto$2.toJSON = toISOString$1;\n    proto$2.locale = locale;\n    proto$2.localeData = localeData;\n\n    proto$2.toIsoString = deprecate(\n        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n        toISOString$1\n    );\n    proto$2.lang = lang;\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    //! moment.js\n\n    hooks.version = '2.29.1';\n\n    setHookCallback(createLocal);\n\n    hooks.fn = proto;\n    hooks.min = min;\n    hooks.max = max;\n    hooks.now = now;\n    hooks.utc = createUTC;\n    hooks.unix = createUnix;\n    hooks.months = listMonths;\n    hooks.isDate = isDate;\n    hooks.locale = getSetGlobalLocale;\n    hooks.invalid = createInvalid;\n    hooks.duration = createDuration;\n    hooks.isMoment = isMoment;\n    hooks.weekdays = listWeekdays;\n    hooks.parseZone = createInZone;\n    hooks.localeData = getLocale;\n    hooks.isDuration = isDuration;\n    hooks.monthsShort = listMonthsShort;\n    hooks.weekdaysMin = listWeekdaysMin;\n    hooks.defineLocale = defineLocale;\n    hooks.updateLocale = updateLocale;\n    hooks.locales = listLocales;\n    hooks.weekdaysShort = listWeekdaysShort;\n    hooks.normalizeUnits = normalizeUnits;\n    hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat = getCalendarFormat;\n    hooks.prototype = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n        TIME: 'HH:mm', // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n        MONTH: 'YYYY-MM', // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n","/*!\n * Chart.js v2.9.4\n * https://www.chartjs.org\n * (c) 2020 Chart.js Contributors\n * Released under the MIT License\n */\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(function() { try { return require('moment'); } catch(e) { } }()) :\ntypeof define === 'function' && define.amd ? define(['require'], function(require) { return factory(function() { try { return require('moment'); } catch(e) { } }()); }) :\n(global = global || self, global.Chart = factory(global.moment));\n}(this, (function (moment) { 'use strict';\n\nmoment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nfunction getCjsExportFromNamespace (n) {\n\treturn n && n['default'] || n;\n}\n\nvar colorName = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\n\nvar conversions = createCommonjsModule(function (module) {\n/* MIT license */\n\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n//       values that give correct `typeof` results).\n//       do not use box values types (i.e. Number(), String(), etc.)\n\nvar reverseKeywords = {};\nfor (var key in colorName) {\n\tif (colorName.hasOwnProperty(key)) {\n\t\treverseKeywords[colorName[key]] = key;\n\t}\n}\n\nvar convert = module.exports = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\n// hide .channels and .labels properties\nfor (var model in convert) {\n\tif (convert.hasOwnProperty(model)) {\n\t\tif (!('channels' in convert[model])) {\n\t\t\tthrow new Error('missing channels property: ' + model);\n\t\t}\n\n\t\tif (!('labels' in convert[model])) {\n\t\t\tthrow new Error('missing channel labels property: ' + model);\n\t\t}\n\n\t\tif (convert[model].labels.length !== convert[model].channels) {\n\t\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t\t}\n\n\t\tvar channels = convert[model].channels;\n\t\tvar labels = convert[model].labels;\n\t\tdelete convert[model].channels;\n\t\tdelete convert[model].labels;\n\t\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\t\tObject.defineProperty(convert[model], 'labels', {value: labels});\n\t}\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar min = Math.min(r, g, b);\n\tvar max = Math.max(r, g, b);\n\tvar delta = max - min;\n\tvar h;\n\tvar s;\n\tvar l;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tl = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tvar rdif;\n\tvar gdif;\n\tvar bdif;\n\tvar h;\n\tvar s;\n\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar v = Math.max(r, g, b);\n\tvar diff = v - Math.min(r, g, b);\n\tvar diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = s = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tvar r = rgb[0];\n\tvar g = rgb[1];\n\tvar b = rgb[2];\n\tvar h = convert.rgb.hsl(rgb)[0];\n\tvar w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar c;\n\tvar m;\n\tvar y;\n\tvar k;\n\n\tk = Math.min(1 - r, 1 - g, 1 - b);\n\tc = (1 - r - k) / (1 - k) || 0;\n\tm = (1 - g - k) / (1 - k) || 0;\n\ty = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\n/**\n * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n * */\nfunction comparativeDistance(x, y) {\n\treturn (\n\t\tMath.pow(x[0] - y[0], 2) +\n\t\tMath.pow(x[1] - y[1], 2) +\n\t\tMath.pow(x[2] - y[2], 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tvar reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tvar currentClosestDistance = Infinity;\n\tvar currentClosestKeyword;\n\n\tfor (var keyword in colorName) {\n\t\tif (colorName.hasOwnProperty(keyword)) {\n\t\t\tvar value = colorName[keyword];\n\n\t\t\t// Compute comparative distance\n\t\t\tvar distance = comparativeDistance(rgb, value);\n\n\t\t\t// Check if its less, if so set as closest\n\t\t\tif (distance < currentClosestDistance) {\n\t\t\t\tcurrentClosestDistance = distance;\n\t\t\t\tcurrentClosestKeyword = keyword;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn colorName[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\n\t// assume sRGB\n\tr = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n\tvar x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tvar y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tvar z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tvar xyz = convert.rgb.xyz(rgb);\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tvar h = hsl[0] / 360;\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar t1;\n\tvar t2;\n\tvar t3;\n\tvar rgb;\n\tvar val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tt1 = 2 * l - t2;\n\n\trgb = [0, 0, 0];\n\tfor (var i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tvar h = hsl[0];\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar smin = s;\n\tvar lmin = Math.max(l, 0.01);\n\tvar sv;\n\tvar v;\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tv = (l + s) / 2;\n\tsv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tvar h = hsv[0] / 60;\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar hi = Math.floor(h) % 6;\n\n\tvar f = h - Math.floor(h);\n\tvar p = 255 * v * (1 - s);\n\tvar q = 255 * v * (1 - (s * f));\n\tvar t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tvar h = hsv[0];\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\tvar vmin = Math.max(v, 0.01);\n\tvar lmin;\n\tvar sl;\n\tvar l;\n\n\tl = (2 - s) * v;\n\tlmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tvar h = hwb[0] / 360;\n\tvar wh = hwb[1] / 100;\n\tvar bl = hwb[2] / 100;\n\tvar ratio = wh + bl;\n\tvar i;\n\tvar v;\n\tvar f;\n\tvar n;\n\n\t// wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\ti = Math.floor(6 * h);\n\tv = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tn = wh + f * (v - wh); // linear interpolation\n\n\tvar r;\n\tvar g;\n\tvar b;\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tvar c = cmyk[0] / 100;\n\tvar m = cmyk[1] / 100;\n\tvar y = cmyk[2] / 100;\n\tvar k = cmyk[3] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = 1 - Math.min(1, c * (1 - k) + k);\n\tg = 1 - Math.min(1, m * (1 - k) + k);\n\tb = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tvar x = xyz[0] / 100;\n\tvar y = xyz[1] / 100;\n\tvar z = xyz[2] / 100;\n\tvar r;\n\tvar g;\n\tvar b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tvar x = xyz[0];\n\tvar y = xyz[1];\n\tvar z = xyz[2];\n\tvar l;\n\tvar a;\n\tvar b;\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);\n\n\tl = (116 * y) - 16;\n\ta = 500 * (x - y);\n\tb = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar x;\n\tvar y;\n\tvar z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tvar y2 = Math.pow(y, 3);\n\tvar x2 = Math.pow(x, 3);\n\tvar z2 = Math.pow(z, 3);\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tvar l = lab[0];\n\tvar a = lab[1];\n\tvar b = lab[2];\n\tvar hr;\n\tvar h;\n\tvar c;\n\n\thr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tc = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tvar l = lch[0];\n\tvar c = lch[1];\n\tvar h = lch[2];\n\tvar a;\n\tvar b;\n\tvar hr;\n\n\thr = h / 360 * 2 * Math.PI;\n\ta = c * Math.cos(hr);\n\tb = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\tvar value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tvar ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tvar r = args[0];\n\tvar g = args[1];\n\tvar b = args[2];\n\n\t// we use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tvar ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tvar color = args % 10;\n\n\t// handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tvar mult = (~~(args > 50) + 1) * 0.5;\n\tvar r = ((color & 1) * mult) * 255;\n\tvar g = (((color >> 1) & 1) * mult) * 255;\n\tvar b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// handle greyscale\n\tif (args >= 232) {\n\t\tvar c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tvar rem;\n\tvar r = Math.floor(args / 36) / 5 * 255;\n\tvar g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tvar b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tvar integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tvar match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tvar colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(function (char) {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tvar integer = parseInt(colorString, 16);\n\tvar r = (integer >> 16) & 0xFF;\n\tvar g = (integer >> 8) & 0xFF;\n\tvar b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tvar r = rgb[0] / 255;\n\tvar g = rgb[1] / 255;\n\tvar b = rgb[2] / 255;\n\tvar max = Math.max(Math.max(r, g), b);\n\tvar min = Math.min(Math.min(r, g), b);\n\tvar chroma = (max - min);\n\tvar grayscale;\n\tvar hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma + 4;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tvar s = hsl[1] / 100;\n\tvar l = hsl[2] / 100;\n\tvar c = 1;\n\tvar f = 0;\n\n\tif (l < 0.5) {\n\t\tc = 2.0 * s * l;\n\t} else {\n\t\tc = 2.0 * s * (1.0 - l);\n\t}\n\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tvar s = hsv[1] / 100;\n\tvar v = hsv[2] / 100;\n\n\tvar c = s * v;\n\tvar f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tvar h = hcg[0] / 360;\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tvar pure = [0, 0, 0];\n\tvar hi = (h % 1) * 6;\n\tvar v = hi % 1;\n\tvar w = 1 - v;\n\tvar mg = 0;\n\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar v = c + g * (1.0 - c);\n\tvar f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\n\tvar l = g * (1.0 - c) + 0.5 * c;\n\tvar s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tvar c = hcg[1] / 100;\n\tvar g = hcg[2] / 100;\n\tvar v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tvar w = hwb[1] / 100;\n\tvar b = hwb[2] / 100;\n\tvar v = 1 - b;\n\tvar c = v - w;\n\tvar g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = convert.gray.hsv = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tvar val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tvar integer = (val << 16) + (val << 8) + val;\n\n\tvar string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tvar val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n});\nvar conversions_1 = conversions.rgb;\nvar conversions_2 = conversions.hsl;\nvar conversions_3 = conversions.hsv;\nvar conversions_4 = conversions.hwb;\nvar conversions_5 = conversions.cmyk;\nvar conversions_6 = conversions.xyz;\nvar conversions_7 = conversions.lab;\nvar conversions_8 = conversions.lch;\nvar conversions_9 = conversions.hex;\nvar conversions_10 = conversions.keyword;\nvar conversions_11 = conversions.ansi16;\nvar conversions_12 = conversions.ansi256;\nvar conversions_13 = conversions.hcg;\nvar conversions_14 = conversions.apple;\nvar conversions_15 = conversions.gray;\n\n/*\n\tthis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tvar graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tvar models = Object.keys(conversions);\n\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tvar graph = buildGraph();\n\tvar queue = [fromModel]; // unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tvar current = queue.pop();\n\t\tvar adjacents = Object.keys(conversions[current]);\n\n\t\tfor (var len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tvar adjacent = adjacents[i];\n\t\t\tvar node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tvar path = [graph[toModel].parent, toModel];\n\tvar fn = conversions[graph[toModel].parent][toModel];\n\n\tvar cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nvar route = function (fromModel) {\n\tvar graph = deriveBFS(fromModel);\n\tvar conversion = {};\n\n\tvar models = Object.keys(graph);\n\tfor (var len = models.length, i = 0; i < len; i++) {\n\t\tvar toModel = models[i];\n\t\tvar node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// no possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\nvar convert = {};\n\nvar models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tvar wrappedFn = function (args) {\n\t\tif (args === undefined || args === null) {\n\t\t\treturn args;\n\t\t}\n\n\t\tif (arguments.length > 1) {\n\t\t\targs = Array.prototype.slice.call(arguments);\n\t\t}\n\n\t\tvar result = fn(args);\n\n\t\t// we're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (var len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(function (fromModel) {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tvar routes = route(fromModel);\n\tvar routeModels = Object.keys(routes);\n\n\trouteModels.forEach(function (toModel) {\n\t\tvar fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nvar colorConvert = convert;\n\nvar colorName$1 = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\n\n/* MIT license */\n\n\nvar colorString = {\n   getRgba: getRgba,\n   getHsla: getHsla,\n   getRgb: getRgb,\n   getHsl: getHsl,\n   getHwb: getHwb,\n   getAlpha: getAlpha,\n\n   hexString: hexString,\n   rgbString: rgbString,\n   rgbaString: rgbaString,\n   percentString: percentString,\n   percentaString: percentaString,\n   hslString: hslString,\n   hslaString: hslaString,\n   hwbString: hwbString,\n   keyword: keyword\n};\n\nfunction getRgba(string) {\n   if (!string) {\n      return;\n   }\n   var abbr =  /^#([a-fA-F0-9]{3,4})$/i,\n       hex =  /^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i,\n       rgba = /^rgba?\\(\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n       per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n       keyword = /(\\w+)/;\n\n   var rgb = [0, 0, 0],\n       a = 1,\n       match = string.match(abbr),\n       hexAlpha = \"\";\n   if (match) {\n      match = match[1];\n      hexAlpha = match[3];\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = parseInt(match[i] + match[i], 16);\n      }\n      if (hexAlpha) {\n         a = Math.round((parseInt(hexAlpha + hexAlpha, 16) / 255) * 100) / 100;\n      }\n   }\n   else if (match = string.match(hex)) {\n      hexAlpha = match[2];\n      match = match[1];\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);\n      }\n      if (hexAlpha) {\n         a = Math.round((parseInt(hexAlpha, 16) / 255) * 100) / 100;\n      }\n   }\n   else if (match = string.match(rgba)) {\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = parseInt(match[i + 1]);\n      }\n      a = parseFloat(match[4]);\n   }\n   else if (match = string.match(per)) {\n      for (var i = 0; i < rgb.length; i++) {\n         rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n      }\n      a = parseFloat(match[4]);\n   }\n   else if (match = string.match(keyword)) {\n      if (match[1] == \"transparent\") {\n         return [0, 0, 0, 0];\n      }\n      rgb = colorName$1[match[1]];\n      if (!rgb) {\n         return;\n      }\n   }\n\n   for (var i = 0; i < rgb.length; i++) {\n      rgb[i] = scale(rgb[i], 0, 255);\n   }\n   if (!a && a != 0) {\n      a = 1;\n   }\n   else {\n      a = scale(a, 0, 1);\n   }\n   rgb[3] = a;\n   return rgb;\n}\n\nfunction getHsla(string) {\n   if (!string) {\n      return;\n   }\n   var hsl = /^hsla?\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n   var match = string.match(hsl);\n   if (match) {\n      var alpha = parseFloat(match[4]);\n      var h = scale(parseInt(match[1]), 0, 360),\n          s = scale(parseFloat(match[2]), 0, 100),\n          l = scale(parseFloat(match[3]), 0, 100),\n          a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n      return [h, s, l, a];\n   }\n}\n\nfunction getHwb(string) {\n   if (!string) {\n      return;\n   }\n   var hwb = /^hwb\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n   var match = string.match(hwb);\n   if (match) {\n    var alpha = parseFloat(match[4]);\n      var h = scale(parseInt(match[1]), 0, 360),\n          w = scale(parseFloat(match[2]), 0, 100),\n          b = scale(parseFloat(match[3]), 0, 100),\n          a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n      return [h, w, b, a];\n   }\n}\n\nfunction getRgb(string) {\n   var rgba = getRgba(string);\n   return rgba && rgba.slice(0, 3);\n}\n\nfunction getHsl(string) {\n  var hsla = getHsla(string);\n  return hsla && hsla.slice(0, 3);\n}\n\nfunction getAlpha(string) {\n   var vals = getRgba(string);\n   if (vals) {\n      return vals[3];\n   }\n   else if (vals = getHsla(string)) {\n      return vals[3];\n   }\n   else if (vals = getHwb(string)) {\n      return vals[3];\n   }\n}\n\n// generators\nfunction hexString(rgba, a) {\n   var a = (a !== undefined && rgba.length === 3) ? a : rgba[3];\n   return \"#\" + hexDouble(rgba[0]) \n              + hexDouble(rgba[1])\n              + hexDouble(rgba[2])\n              + (\n                 (a >= 0 && a < 1)\n                 ? hexDouble(Math.round(a * 255))\n                 : \"\"\n              );\n}\n\nfunction rgbString(rgba, alpha) {\n   if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n      return rgbaString(rgba, alpha);\n   }\n   return \"rgb(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \")\";\n}\n\nfunction rgbaString(rgba, alpha) {\n   if (alpha === undefined) {\n      alpha = (rgba[3] !== undefined ? rgba[3] : 1);\n   }\n   return \"rgba(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2]\n           + \", \" + alpha + \")\";\n}\n\nfunction percentString(rgba, alpha) {\n   if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n      return percentaString(rgba, alpha);\n   }\n   var r = Math.round(rgba[0]/255 * 100),\n       g = Math.round(rgba[1]/255 * 100),\n       b = Math.round(rgba[2]/255 * 100);\n\n   return \"rgb(\" + r + \"%, \" + g + \"%, \" + b + \"%)\";\n}\n\nfunction percentaString(rgba, alpha) {\n   var r = Math.round(rgba[0]/255 * 100),\n       g = Math.round(rgba[1]/255 * 100),\n       b = Math.round(rgba[2]/255 * 100);\n   return \"rgba(\" + r + \"%, \" + g + \"%, \" + b + \"%, \" + (alpha || rgba[3] || 1) + \")\";\n}\n\nfunction hslString(hsla, alpha) {\n   if (alpha < 1 || (hsla[3] && hsla[3] < 1)) {\n      return hslaString(hsla, alpha);\n   }\n   return \"hsl(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%)\";\n}\n\nfunction hslaString(hsla, alpha) {\n   if (alpha === undefined) {\n      alpha = (hsla[3] !== undefined ? hsla[3] : 1);\n   }\n   return \"hsla(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%, \"\n           + alpha + \")\";\n}\n\n// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n// (hwb have alpha optional & 1 is default value)\nfunction hwbString(hwb, alpha) {\n   if (alpha === undefined) {\n      alpha = (hwb[3] !== undefined ? hwb[3] : 1);\n   }\n   return \"hwb(\" + hwb[0] + \", \" + hwb[1] + \"%, \" + hwb[2] + \"%\"\n           + (alpha !== undefined && alpha !== 1 ? \", \" + alpha : \"\") + \")\";\n}\n\nfunction keyword(rgb) {\n  return reverseNames[rgb.slice(0, 3)];\n}\n\n// helpers\nfunction scale(num, min, max) {\n   return Math.min(Math.max(min, num), max);\n}\n\nfunction hexDouble(num) {\n  var str = num.toString(16).toUpperCase();\n  return (str.length < 2) ? \"0\" + str : str;\n}\n\n\n//create a list of reverse color names\nvar reverseNames = {};\nfor (var name in colorName$1) {\n   reverseNames[colorName$1[name]] = name;\n}\n\n/* MIT license */\n\n\n\nvar Color = function (obj) {\n\tif (obj instanceof Color) {\n\t\treturn obj;\n\t}\n\tif (!(this instanceof Color)) {\n\t\treturn new Color(obj);\n\t}\n\n\tthis.valid = false;\n\tthis.values = {\n\t\trgb: [0, 0, 0],\n\t\thsl: [0, 0, 0],\n\t\thsv: [0, 0, 0],\n\t\thwb: [0, 0, 0],\n\t\tcmyk: [0, 0, 0, 0],\n\t\talpha: 1\n\t};\n\n\t// parse Color() argument\n\tvar vals;\n\tif (typeof obj === 'string') {\n\t\tvals = colorString.getRgba(obj);\n\t\tif (vals) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals = colorString.getHsla(obj)) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals = colorString.getHwb(obj)) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t}\n\t} else if (typeof obj === 'object') {\n\t\tvals = obj;\n\t\tif (vals.r !== undefined || vals.red !== undefined) {\n\t\t\tthis.setValues('rgb', vals);\n\t\t} else if (vals.l !== undefined || vals.lightness !== undefined) {\n\t\t\tthis.setValues('hsl', vals);\n\t\t} else if (vals.v !== undefined || vals.value !== undefined) {\n\t\t\tthis.setValues('hsv', vals);\n\t\t} else if (vals.w !== undefined || vals.whiteness !== undefined) {\n\t\t\tthis.setValues('hwb', vals);\n\t\t} else if (vals.c !== undefined || vals.cyan !== undefined) {\n\t\t\tthis.setValues('cmyk', vals);\n\t\t}\n\t}\n};\n\nColor.prototype = {\n\tisValid: function () {\n\t\treturn this.valid;\n\t},\n\trgb: function () {\n\t\treturn this.setSpace('rgb', arguments);\n\t},\n\thsl: function () {\n\t\treturn this.setSpace('hsl', arguments);\n\t},\n\thsv: function () {\n\t\treturn this.setSpace('hsv', arguments);\n\t},\n\thwb: function () {\n\t\treturn this.setSpace('hwb', arguments);\n\t},\n\tcmyk: function () {\n\t\treturn this.setSpace('cmyk', arguments);\n\t},\n\n\trgbArray: function () {\n\t\treturn this.values.rgb;\n\t},\n\thslArray: function () {\n\t\treturn this.values.hsl;\n\t},\n\thsvArray: function () {\n\t\treturn this.values.hsv;\n\t},\n\thwbArray: function () {\n\t\tvar values = this.values;\n\t\tif (values.alpha !== 1) {\n\t\t\treturn values.hwb.concat([values.alpha]);\n\t\t}\n\t\treturn values.hwb;\n\t},\n\tcmykArray: function () {\n\t\treturn this.values.cmyk;\n\t},\n\trgbaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.rgb.concat([values.alpha]);\n\t},\n\thslaArray: function () {\n\t\tvar values = this.values;\n\t\treturn values.hsl.concat([values.alpha]);\n\t},\n\talpha: function (val) {\n\t\tif (val === undefined) {\n\t\t\treturn this.values.alpha;\n\t\t}\n\t\tthis.setValues('alpha', val);\n\t\treturn this;\n\t},\n\n\tred: function (val) {\n\t\treturn this.setChannel('rgb', 0, val);\n\t},\n\tgreen: function (val) {\n\t\treturn this.setChannel('rgb', 1, val);\n\t},\n\tblue: function (val) {\n\t\treturn this.setChannel('rgb', 2, val);\n\t},\n\thue: function (val) {\n\t\tif (val) {\n\t\t\tval %= 360;\n\t\t\tval = val < 0 ? 360 + val : val;\n\t\t}\n\t\treturn this.setChannel('hsl', 0, val);\n\t},\n\tsaturation: function (val) {\n\t\treturn this.setChannel('hsl', 1, val);\n\t},\n\tlightness: function (val) {\n\t\treturn this.setChannel('hsl', 2, val);\n\t},\n\tsaturationv: function (val) {\n\t\treturn this.setChannel('hsv', 1, val);\n\t},\n\twhiteness: function (val) {\n\t\treturn this.setChannel('hwb', 1, val);\n\t},\n\tblackness: function (val) {\n\t\treturn this.setChannel('hwb', 2, val);\n\t},\n\tvalue: function (val) {\n\t\treturn this.setChannel('hsv', 2, val);\n\t},\n\tcyan: function (val) {\n\t\treturn this.setChannel('cmyk', 0, val);\n\t},\n\tmagenta: function (val) {\n\t\treturn this.setChannel('cmyk', 1, val);\n\t},\n\tyellow: function (val) {\n\t\treturn this.setChannel('cmyk', 2, val);\n\t},\n\tblack: function (val) {\n\t\treturn this.setChannel('cmyk', 3, val);\n\t},\n\n\thexString: function () {\n\t\treturn colorString.hexString(this.values.rgb);\n\t},\n\trgbString: function () {\n\t\treturn colorString.rgbString(this.values.rgb, this.values.alpha);\n\t},\n\trgbaString: function () {\n\t\treturn colorString.rgbaString(this.values.rgb, this.values.alpha);\n\t},\n\tpercentString: function () {\n\t\treturn colorString.percentString(this.values.rgb, this.values.alpha);\n\t},\n\thslString: function () {\n\t\treturn colorString.hslString(this.values.hsl, this.values.alpha);\n\t},\n\thslaString: function () {\n\t\treturn colorString.hslaString(this.values.hsl, this.values.alpha);\n\t},\n\thwbString: function () {\n\t\treturn colorString.hwbString(this.values.hwb, this.values.alpha);\n\t},\n\tkeyword: function () {\n\t\treturn colorString.keyword(this.values.rgb, this.values.alpha);\n\t},\n\n\trgbNumber: function () {\n\t\tvar rgb = this.values.rgb;\n\t\treturn (rgb[0] << 16) | (rgb[1] << 8) | rgb[2];\n\t},\n\n\tluminosity: function () {\n\t\t// http://www.w3.org/TR/WCAG20/#relativeluminancedef\n\t\tvar rgb = this.values.rgb;\n\t\tvar lum = [];\n\t\tfor (var i = 0; i < rgb.length; i++) {\n\t\t\tvar chan = rgb[i] / 255;\n\t\t\tlum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);\n\t\t}\n\t\treturn 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n\t},\n\n\tcontrast: function (color2) {\n\t\t// http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n\t\tvar lum1 = this.luminosity();\n\t\tvar lum2 = color2.luminosity();\n\t\tif (lum1 > lum2) {\n\t\t\treturn (lum1 + 0.05) / (lum2 + 0.05);\n\t\t}\n\t\treturn (lum2 + 0.05) / (lum1 + 0.05);\n\t},\n\n\tlevel: function (color2) {\n\t\tvar contrastRatio = this.contrast(color2);\n\t\tif (contrastRatio >= 7.1) {\n\t\t\treturn 'AAA';\n\t\t}\n\n\t\treturn (contrastRatio >= 4.5) ? 'AA' : '';\n\t},\n\n\tdark: function () {\n\t\t// YIQ equation from http://24ways.org/2010/calculating-color-contrast\n\t\tvar rgb = this.values.rgb;\n\t\tvar yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n\t\treturn yiq < 128;\n\t},\n\n\tlight: function () {\n\t\treturn !this.dark();\n\t},\n\n\tnegate: function () {\n\t\tvar rgb = [];\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\trgb[i] = 255 - this.values.rgb[i];\n\t\t}\n\t\tthis.setValues('rgb', rgb);\n\t\treturn this;\n\t},\n\n\tlighten: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] += hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdarken: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[2] -= hsl[2] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tsaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] += hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\tdesaturate: function (ratio) {\n\t\tvar hsl = this.values.hsl;\n\t\thsl[1] -= hsl[1] * ratio;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\twhiten: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[1] += hwb[1] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tblacken: function (ratio) {\n\t\tvar hwb = this.values.hwb;\n\t\thwb[2] += hwb[2] * ratio;\n\t\tthis.setValues('hwb', hwb);\n\t\treturn this;\n\t},\n\n\tgreyscale: function () {\n\t\tvar rgb = this.values.rgb;\n\t\t// http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\t\tvar val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n\t\tthis.setValues('rgb', [val, val, val]);\n\t\treturn this;\n\t},\n\n\tclearer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha - (alpha * ratio));\n\t\treturn this;\n\t},\n\n\topaquer: function (ratio) {\n\t\tvar alpha = this.values.alpha;\n\t\tthis.setValues('alpha', alpha + (alpha * ratio));\n\t\treturn this;\n\t},\n\n\trotate: function (degrees) {\n\t\tvar hsl = this.values.hsl;\n\t\tvar hue = (hsl[0] + degrees) % 360;\n\t\thsl[0] = hue < 0 ? 360 + hue : hue;\n\t\tthis.setValues('hsl', hsl);\n\t\treturn this;\n\t},\n\n\t/**\n\t * Ported from sass implementation in C\n\t * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n\t */\n\tmix: function (mixinColor, weight) {\n\t\tvar color1 = this;\n\t\tvar color2 = mixinColor;\n\t\tvar p = weight === undefined ? 0.5 : weight;\n\n\t\tvar w = 2 * p - 1;\n\t\tvar a = color1.alpha() - color2.alpha();\n\n\t\tvar w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\tvar w2 = 1 - w1;\n\n\t\treturn this\n\t\t\t.rgb(\n\t\t\t\tw1 * color1.red() + w2 * color2.red(),\n\t\t\t\tw1 * color1.green() + w2 * color2.green(),\n\t\t\t\tw1 * color1.blue() + w2 * color2.blue()\n\t\t\t)\n\t\t\t.alpha(color1.alpha() * p + color2.alpha() * (1 - p));\n\t},\n\n\ttoJSON: function () {\n\t\treturn this.rgb();\n\t},\n\n\tclone: function () {\n\t\t// NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,\n\t\t// making the final build way to big to embed in Chart.js. So let's do it manually,\n\t\t// assuming that values to clone are 1 dimension arrays containing only numbers,\n\t\t// except 'alpha' which is a number.\n\t\tvar result = new Color();\n\t\tvar source = this.values;\n\t\tvar target = result.values;\n\t\tvar value, type;\n\n\t\tfor (var prop in source) {\n\t\t\tif (source.hasOwnProperty(prop)) {\n\t\t\t\tvalue = source[prop];\n\t\t\t\ttype = ({}).toString.call(value);\n\t\t\t\tif (type === '[object Array]') {\n\t\t\t\t\ttarget[prop] = value.slice(0);\n\t\t\t\t} else if (type === '[object Number]') {\n\t\t\t\t\ttarget[prop] = value;\n\t\t\t\t} else {\n\t\t\t\t\tconsole.error('unexpected color value:', value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n};\n\nColor.prototype.spaces = {\n\trgb: ['red', 'green', 'blue'],\n\thsl: ['hue', 'saturation', 'lightness'],\n\thsv: ['hue', 'saturation', 'value'],\n\thwb: ['hue', 'whiteness', 'blackness'],\n\tcmyk: ['cyan', 'magenta', 'yellow', 'black']\n};\n\nColor.prototype.maxes = {\n\trgb: [255, 255, 255],\n\thsl: [360, 100, 100],\n\thsv: [360, 100, 100],\n\thwb: [360, 100, 100],\n\tcmyk: [100, 100, 100, 100]\n};\n\nColor.prototype.getValues = function (space) {\n\tvar values = this.values;\n\tvar vals = {};\n\n\tfor (var i = 0; i < space.length; i++) {\n\t\tvals[space.charAt(i)] = values[space][i];\n\t}\n\n\tif (values.alpha !== 1) {\n\t\tvals.a = values.alpha;\n\t}\n\n\t// {r: 255, g: 255, b: 255, a: 0.4}\n\treturn vals;\n};\n\nColor.prototype.setValues = function (space, vals) {\n\tvar values = this.values;\n\tvar spaces = this.spaces;\n\tvar maxes = this.maxes;\n\tvar alpha = 1;\n\tvar i;\n\n\tthis.valid = true;\n\n\tif (space === 'alpha') {\n\t\talpha = vals;\n\t} else if (vals.length) {\n\t\t// [10, 10, 10]\n\t\tvalues[space] = vals.slice(0, space.length);\n\t\talpha = vals[space.length];\n\t} else if (vals[space.charAt(0)] !== undefined) {\n\t\t// {r: 10, g: 10, b: 10}\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[space.charAt(i)];\n\t\t}\n\n\t\talpha = vals.a;\n\t} else if (vals[spaces[space][0]] !== undefined) {\n\t\t// {red: 10, green: 10, blue: 10}\n\t\tvar chans = spaces[space];\n\n\t\tfor (i = 0; i < space.length; i++) {\n\t\t\tvalues[space][i] = vals[chans[i]];\n\t\t}\n\n\t\talpha = vals.alpha;\n\t}\n\n\tvalues.alpha = Math.max(0, Math.min(1, (alpha === undefined ? values.alpha : alpha)));\n\n\tif (space === 'alpha') {\n\t\treturn false;\n\t}\n\n\tvar capped;\n\n\t// cap values of the space prior converting all values\n\tfor (i = 0; i < space.length; i++) {\n\t\tcapped = Math.max(0, Math.min(maxes[space][i], values[space][i]));\n\t\tvalues[space][i] = Math.round(capped);\n\t}\n\n\t// convert to all the other color spaces\n\tfor (var sname in spaces) {\n\t\tif (sname !== space) {\n\t\t\tvalues[sname] = colorConvert[space][sname](values[space]);\n\t\t}\n\t}\n\n\treturn true;\n};\n\nColor.prototype.setSpace = function (space, args) {\n\tvar vals = args[0];\n\n\tif (vals === undefined) {\n\t\t// color.rgb()\n\t\treturn this.getValues(space);\n\t}\n\n\t// color.rgb(10, 10, 10)\n\tif (typeof vals === 'number') {\n\t\tvals = Array.prototype.slice.call(args);\n\t}\n\n\tthis.setValues(space, vals);\n\treturn this;\n};\n\nColor.prototype.setChannel = function (space, index, val) {\n\tvar svalues = this.values[space];\n\tif (val === undefined) {\n\t\t// color.red()\n\t\treturn svalues[index];\n\t} else if (val === svalues[index]) {\n\t\t// color.red(color.red())\n\t\treturn this;\n\t}\n\n\t// color.red(100)\n\tsvalues[index] = val;\n\tthis.setValues(space, svalues);\n\n\treturn this;\n};\n\nif (typeof window !== 'undefined') {\n\twindow.Color = Color;\n}\n\nvar chartjsColor = Color;\n\nfunction isValidKey(key) {\r\n\treturn ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\r\n}\r\n\r\n/**\r\n * @namespace Chart.helpers\r\n */\r\nvar helpers = {\r\n\t/**\r\n\t * An empty function that can be used, for example, for optional callback.\r\n\t */\r\n\tnoop: function() {},\r\n\r\n\t/**\r\n\t * Returns a unique id, sequentially generated from a global variable.\r\n\t * @returns {number}\r\n\t * @function\r\n\t */\r\n\tuid: (function() {\r\n\t\tvar id = 0;\r\n\t\treturn function() {\r\n\t\t\treturn id++;\r\n\t\t};\r\n\t}()),\r\n\r\n\t/**\r\n\t * Returns true if `value` is neither null nor undefined, else returns false.\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t * @since 2.7.0\r\n\t */\r\n\tisNullOrUndef: function(value) {\r\n\t\treturn value === null || typeof value === 'undefined';\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if `value` is an array (including typed arrays), else returns false.\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t * @function\r\n\t */\r\n\tisArray: function(value) {\r\n\t\tif (Array.isArray && Array.isArray(value)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar type = Object.prototype.toString.call(value);\r\n\t\tif (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if `value` is an object (excluding null), else returns false.\r\n\t * @param {*} value - The value to test.\r\n\t * @returns {boolean}\r\n\t * @since 2.7.0\r\n\t */\r\n\tisObject: function(value) {\r\n\t\treturn value !== null && Object.prototype.toString.call(value) === '[object Object]';\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if `value` is a finite number, else returns false\r\n\t * @param {*} value  - The value to test.\r\n\t * @returns {boolean}\r\n\t */\r\n\tisFinite: function(value) {\r\n\t\treturn (typeof value === 'number' || value instanceof Number) && isFinite(value);\r\n\t},\r\n\r\n\t/**\r\n\t * Returns `value` if defined, else returns `defaultValue`.\r\n\t * @param {*} value - The value to return if defined.\r\n\t * @param {*} defaultValue - The value to return if `value` is undefined.\r\n\t * @returns {*}\r\n\t */\r\n\tvalueOrDefault: function(value, defaultValue) {\r\n\t\treturn typeof value === 'undefined' ? defaultValue : value;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns value at the given `index` in array if defined, else returns `defaultValue`.\r\n\t * @param {Array} value - The array to lookup for value at `index`.\r\n\t * @param {number} index - The index in `value` to lookup for value.\r\n\t * @param {*} defaultValue - The value to return if `value[index]` is undefined.\r\n\t * @returns {*}\r\n\t */\r\n\tvalueAtIndexOrDefault: function(value, index, defaultValue) {\r\n\t\treturn helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue);\r\n\t},\r\n\r\n\t/**\r\n\t * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\r\n\t * value returned by `fn`. If `fn` is not a function, this method returns undefined.\r\n\t * @param {function} fn - The function to call.\r\n\t * @param {Array|undefined|null} args - The arguments with which `fn` should be called.\r\n\t * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\r\n\t * @returns {*}\r\n\t */\r\n\tcallback: function(fn, args, thisArg) {\r\n\t\tif (fn && typeof fn.call === 'function') {\r\n\t\t\treturn fn.apply(thisArg, args);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Note(SB) for performance sake, this method should only be used when loopable type\r\n\t * is unknown or in none intensive code (not called often and small loopable). Else\r\n\t * it's preferable to use a regular for() loop and save extra function calls.\r\n\t * @param {object|Array} loopable - The object or array to be iterated.\r\n\t * @param {function} fn - The function to call for each item.\r\n\t * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\r\n\t * @param {boolean} [reverse] - If true, iterates backward on the loopable.\r\n\t */\r\n\teach: function(loopable, fn, thisArg, reverse) {\r\n\t\tvar i, len, keys;\r\n\t\tif (helpers.isArray(loopable)) {\r\n\t\t\tlen = loopable.length;\r\n\t\t\tif (reverse) {\r\n\t\t\t\tfor (i = len - 1; i >= 0; i--) {\r\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfor (i = 0; i < len; i++) {\r\n\t\t\t\t\tfn.call(thisArg, loopable[i], i);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if (helpers.isObject(loopable)) {\r\n\t\t\tkeys = Object.keys(loopable);\r\n\t\t\tlen = keys.length;\r\n\t\t\tfor (i = 0; i < len; i++) {\r\n\t\t\t\tfn.call(thisArg, loopable[keys[i]], keys[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\r\n\t * @see https://stackoverflow.com/a/14853974\r\n\t * @param {Array} a0 - The array to compare\r\n\t * @param {Array} a1 - The array to compare\r\n\t * @returns {boolean}\r\n\t */\r\n\tarrayEquals: function(a0, a1) {\r\n\t\tvar i, ilen, v0, v1;\r\n\r\n\t\tif (!a0 || !a1 || a0.length !== a1.length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = a0.length; i < ilen; ++i) {\r\n\t\t\tv0 = a0[i];\r\n\t\t\tv1 = a1[i];\r\n\r\n\t\t\tif (v0 instanceof Array && v1 instanceof Array) {\r\n\t\t\t\tif (!helpers.arrayEquals(v0, v1)) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t} else if (v0 !== v1) {\r\n\t\t\t\t// NOTE: two different object instances will never be equal: {x:20} != {x:20}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns a deep copy of `source` without keeping references on objects and arrays.\r\n\t * @param {*} source - The value to clone.\r\n\t * @returns {*}\r\n\t */\r\n\tclone: function(source) {\r\n\t\tif (helpers.isArray(source)) {\r\n\t\t\treturn source.map(helpers.clone);\r\n\t\t}\r\n\r\n\t\tif (helpers.isObject(source)) {\r\n\t\t\tvar target = Object.create(source);\r\n\t\t\tvar keys = Object.keys(source);\r\n\t\t\tvar klen = keys.length;\r\n\t\t\tvar k = 0;\r\n\r\n\t\t\tfor (; k < klen; ++k) {\r\n\t\t\t\ttarget[keys[k]] = helpers.clone(source[keys[k]]);\r\n\t\t\t}\r\n\r\n\t\t\treturn target;\r\n\t\t}\r\n\r\n\t\treturn source;\r\n\t},\r\n\r\n\t/**\r\n\t * The default merger when Chart.helpers.merge is called without merger option.\r\n\t * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\r\n\t * @private\r\n\t */\r\n\t_merger: function(key, target, source, options) {\r\n\t\tif (!isValidKey(key)) {\r\n\t\t\t// We want to ensure we do not copy prototypes over\r\n\t\t\t// as this can pollute global namespaces\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar tval = target[key];\r\n\t\tvar sval = source[key];\r\n\r\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\r\n\t\t\thelpers.merge(tval, sval, options);\r\n\t\t} else {\r\n\t\t\ttarget[key] = helpers.clone(sval);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Merges source[key] in target[key] only if target[key] is undefined.\r\n\t * @private\r\n\t */\r\n\t_mergerIf: function(key, target, source) {\r\n\t\tif (!isValidKey(key)) {\r\n\t\t\t// We want to ensure we do not copy prototypes over\r\n\t\t\t// as this can pollute global namespaces\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar tval = target[key];\r\n\t\tvar sval = source[key];\r\n\r\n\t\tif (helpers.isObject(tval) && helpers.isObject(sval)) {\r\n\t\t\thelpers.mergeIf(tval, sval);\r\n\t\t} else if (!target.hasOwnProperty(key)) {\r\n\t\t\ttarget[key] = helpers.clone(sval);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Recursively deep copies `source` properties into `target` with the given `options`.\r\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\r\n\t * @param {object} target - The target object in which all sources are merged into.\r\n\t * @param {object|object[]} source - Object(s) to merge into `target`.\r\n\t * @param {object} [options] - Merging options:\r\n\t * @param {function} [options.merger] - The merge method (key, target, source, options)\r\n\t * @returns {object} The `target` object.\r\n\t */\r\n\tmerge: function(target, source, options) {\r\n\t\tvar sources = helpers.isArray(source) ? source : [source];\r\n\t\tvar ilen = sources.length;\r\n\t\tvar merge, i, keys, klen, k;\r\n\r\n\t\tif (!helpers.isObject(target)) {\r\n\t\t\treturn target;\r\n\t\t}\r\n\r\n\t\toptions = options || {};\r\n\t\tmerge = options.merger || helpers._merger;\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tsource = sources[i];\r\n\t\t\tif (!helpers.isObject(source)) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tkeys = Object.keys(source);\r\n\t\t\tfor (k = 0, klen = keys.length; k < klen; ++k) {\r\n\t\t\t\tmerge(keys[k], target, source, options);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn target;\r\n\t},\r\n\r\n\t/**\r\n\t * Recursively deep copies `source` properties into `target` *only* if not defined in target.\r\n\t * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\r\n\t * @param {object} target - The target object in which all sources are merged into.\r\n\t * @param {object|object[]} source - Object(s) to merge into `target`.\r\n\t * @returns {object} The `target` object.\r\n\t */\r\n\tmergeIf: function(target, source) {\r\n\t\treturn helpers.merge(target, source, {merger: helpers._mergerIf});\r\n\t},\r\n\r\n\t/**\r\n\t * Applies the contents of two or more objects together into the first object.\r\n\t * @param {object} target - The target object in which all objects are merged into.\r\n\t * @param {object} arg1 - Object containing additional properties to merge in target.\r\n\t * @param {object} argN - Additional objects containing properties to merge in target.\r\n\t * @returns {object} The `target` object.\r\n\t */\r\n\textend: Object.assign || function(target) {\r\n\t\treturn helpers.merge(target, [].slice.call(arguments, 1), {\r\n\t\t\tmerger: function(key, dst, src) {\r\n\t\t\t\tdst[key] = src[key];\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t/**\r\n\t * Basic javascript inheritance based on the model created in Backbone.js\r\n\t */\r\n\tinherits: function(extensions) {\r\n\t\tvar me = this;\r\n\t\tvar ChartElement = (extensions && extensions.hasOwnProperty('constructor')) ? extensions.constructor : function() {\r\n\t\t\treturn me.apply(this, arguments);\r\n\t\t};\r\n\r\n\t\tvar Surrogate = function() {\r\n\t\t\tthis.constructor = ChartElement;\r\n\t\t};\r\n\r\n\t\tSurrogate.prototype = me.prototype;\r\n\t\tChartElement.prototype = new Surrogate();\r\n\t\tChartElement.extend = helpers.inherits;\r\n\r\n\t\tif (extensions) {\r\n\t\t\thelpers.extend(ChartElement.prototype, extensions);\r\n\t\t}\r\n\r\n\t\tChartElement.__super__ = me.prototype;\r\n\t\treturn ChartElement;\r\n\t},\r\n\r\n\t_deprecated: function(scope, value, previous, current) {\r\n\t\tif (value !== undefined) {\r\n\t\t\tconsole.warn(scope + ': \"' + previous +\r\n\t\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\r\n\t\t}\r\n\t}\r\n};\r\n\r\nvar helpers_core = helpers;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.callback instead.\r\n * @function Chart.helpers.callCallback\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.callCallback = helpers.callback;\r\n\r\n/**\r\n * Provided for backward compatibility, use Array.prototype.indexOf instead.\r\n * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+\r\n * @function Chart.helpers.indexOf\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.indexOf = function(array, item, fromIndex) {\r\n\treturn Array.prototype.indexOf.call(array, item, fromIndex);\r\n};\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead.\r\n * @function Chart.helpers.getValueOrDefault\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.getValueOrDefault = helpers.valueOrDefault;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead.\r\n * @function Chart.helpers.getValueAtIndexOrDefault\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\n/**\r\n * Easing functions adapted from Robert Penner's easing equations.\r\n * @namespace Chart.helpers.easingEffects\r\n * @see http://www.robertpenner.com/easing/\r\n */\r\nvar effects = {\r\n\tlinear: function(t) {\r\n\t\treturn t;\r\n\t},\r\n\r\n\teaseInQuad: function(t) {\r\n\t\treturn t * t;\r\n\t},\r\n\r\n\teaseOutQuad: function(t) {\r\n\t\treturn -t * (t - 2);\r\n\t},\r\n\r\n\teaseInOutQuad: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t;\r\n\t\t}\r\n\t\treturn -0.5 * ((--t) * (t - 2) - 1);\r\n\t},\r\n\r\n\teaseInCubic: function(t) {\r\n\t\treturn t * t * t;\r\n\t},\r\n\r\n\teaseOutCubic: function(t) {\r\n\t\treturn (t = t - 1) * t * t + 1;\r\n\t},\r\n\r\n\teaseInOutCubic: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t * t;\r\n\t\t}\r\n\t\treturn 0.5 * ((t -= 2) * t * t + 2);\r\n\t},\r\n\r\n\teaseInQuart: function(t) {\r\n\t\treturn t * t * t * t;\r\n\t},\r\n\r\n\teaseOutQuart: function(t) {\r\n\t\treturn -((t = t - 1) * t * t * t - 1);\r\n\t},\r\n\r\n\teaseInOutQuart: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t * t * t;\r\n\t\t}\r\n\t\treturn -0.5 * ((t -= 2) * t * t * t - 2);\r\n\t},\r\n\r\n\teaseInQuint: function(t) {\r\n\t\treturn t * t * t * t * t;\r\n\t},\r\n\r\n\teaseOutQuint: function(t) {\r\n\t\treturn (t = t - 1) * t * t * t * t + 1;\r\n\t},\r\n\r\n\teaseInOutQuint: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * t * t * t * t * t;\r\n\t\t}\r\n\t\treturn 0.5 * ((t -= 2) * t * t * t * t + 2);\r\n\t},\r\n\r\n\teaseInSine: function(t) {\r\n\t\treturn -Math.cos(t * (Math.PI / 2)) + 1;\r\n\t},\r\n\r\n\teaseOutSine: function(t) {\r\n\t\treturn Math.sin(t * (Math.PI / 2));\r\n\t},\r\n\r\n\teaseInOutSine: function(t) {\r\n\t\treturn -0.5 * (Math.cos(Math.PI * t) - 1);\r\n\t},\r\n\r\n\teaseInExpo: function(t) {\r\n\t\treturn (t === 0) ? 0 : Math.pow(2, 10 * (t - 1));\r\n\t},\r\n\r\n\teaseOutExpo: function(t) {\r\n\t\treturn (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1;\r\n\t},\r\n\r\n\teaseInOutExpo: function(t) {\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif (t === 1) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * Math.pow(2, 10 * (t - 1));\r\n\t\t}\r\n\t\treturn 0.5 * (-Math.pow(2, -10 * --t) + 2);\r\n\t},\r\n\r\n\teaseInCirc: function(t) {\r\n\t\tif (t >= 1) {\r\n\t\t\treturn t;\r\n\t\t}\r\n\t\treturn -(Math.sqrt(1 - t * t) - 1);\r\n\t},\r\n\r\n\teaseOutCirc: function(t) {\r\n\t\treturn Math.sqrt(1 - (t = t - 1) * t);\r\n\t},\r\n\r\n\teaseInOutCirc: function(t) {\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn -0.5 * (Math.sqrt(1 - t * t) - 1);\r\n\t\t}\r\n\t\treturn 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\r\n\t},\r\n\r\n\teaseInElastic: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tvar p = 0;\r\n\t\tvar a = 1;\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif (t === 1) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif (!p) {\r\n\t\t\tp = 0.3;\r\n\t\t}\r\n\t\tif (a < 1) {\r\n\t\t\ta = 1;\r\n\t\t\ts = p / 4;\r\n\t\t} else {\r\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\r\n\t\t}\r\n\t\treturn -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\r\n\t},\r\n\r\n\teaseOutElastic: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tvar p = 0;\r\n\t\tvar a = 1;\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif (t === 1) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif (!p) {\r\n\t\t\tp = 0.3;\r\n\t\t}\r\n\t\tif (a < 1) {\r\n\t\t\ta = 1;\r\n\t\t\ts = p / 4;\r\n\t\t} else {\r\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\r\n\t\t}\r\n\t\treturn a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;\r\n\t},\r\n\r\n\teaseInOutElastic: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tvar p = 0;\r\n\t\tvar a = 1;\r\n\t\tif (t === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif ((t /= 0.5) === 2) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\tif (!p) {\r\n\t\t\tp = 0.45;\r\n\t\t}\r\n\t\tif (a < 1) {\r\n\t\t\ta = 1;\r\n\t\t\ts = p / 4;\r\n\t\t} else {\r\n\t\t\ts = p / (2 * Math.PI) * Math.asin(1 / a);\r\n\t\t}\r\n\t\tif (t < 1) {\r\n\t\t\treturn -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\r\n\t\t}\r\n\t\treturn a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1;\r\n\t},\r\n\teaseInBack: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\treturn t * t * ((s + 1) * t - s);\r\n\t},\r\n\r\n\teaseOutBack: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\treturn (t = t - 1) * t * ((s + 1) * t + s) + 1;\r\n\t},\r\n\r\n\teaseInOutBack: function(t) {\r\n\t\tvar s = 1.70158;\r\n\t\tif ((t /= 0.5) < 1) {\r\n\t\t\treturn 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\r\n\t\t}\r\n\t\treturn 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\r\n\t},\r\n\r\n\teaseInBounce: function(t) {\r\n\t\treturn 1 - effects.easeOutBounce(1 - t);\r\n\t},\r\n\r\n\teaseOutBounce: function(t) {\r\n\t\tif (t < (1 / 2.75)) {\r\n\t\t\treturn 7.5625 * t * t;\r\n\t\t}\r\n\t\tif (t < (2 / 2.75)) {\r\n\t\t\treturn 7.5625 * (t -= (1.5 / 2.75)) * t + 0.75;\r\n\t\t}\r\n\t\tif (t < (2.5 / 2.75)) {\r\n\t\t\treturn 7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375;\r\n\t\t}\r\n\t\treturn 7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375;\r\n\t},\r\n\r\n\teaseInOutBounce: function(t) {\r\n\t\tif (t < 0.5) {\r\n\t\t\treturn effects.easeInBounce(t * 2) * 0.5;\r\n\t\t}\r\n\t\treturn effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\r\n\t}\r\n};\r\n\r\nvar helpers_easing = {\r\n\teffects: effects\r\n};\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.easing.effects instead.\r\n * @function Chart.helpers.easingEffects\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.easingEffects = effects;\n\nvar PI = Math.PI;\r\nvar RAD_PER_DEG = PI / 180;\r\nvar DOUBLE_PI = PI * 2;\r\nvar HALF_PI = PI / 2;\r\nvar QUARTER_PI = PI / 4;\r\nvar TWO_THIRDS_PI = PI * 2 / 3;\r\n\r\n/**\r\n * @namespace Chart.helpers.canvas\r\n */\r\nvar exports$1 = {\r\n\t/**\r\n\t * Clears the entire canvas associated to the given `chart`.\r\n\t * @param {Chart} chart - The chart for which to clear the canvas.\r\n\t */\r\n\tclear: function(chart) {\r\n\t\tchart.ctx.clearRect(0, 0, chart.width, chart.height);\r\n\t},\r\n\r\n\t/**\r\n\t * Creates a \"path\" for a rectangle with rounded corners at position (x, y) with a\r\n\t * given size (width, height) and the same `radius` for all corners.\r\n\t * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context.\r\n\t * @param {number} x - The x axis of the coordinate for the rectangle starting point.\r\n\t * @param {number} y - The y axis of the coordinate for the rectangle starting point.\r\n\t * @param {number} width - The rectangle's width.\r\n\t * @param {number} height - The rectangle's height.\r\n\t * @param {number} radius - The rounded amount (in pixels) for the four corners.\r\n\t * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object?\r\n\t */\r\n\troundedRect: function(ctx, x, y, width, height, radius) {\r\n\t\tif (radius) {\r\n\t\t\tvar r = Math.min(radius, height / 2, width / 2);\r\n\t\t\tvar left = x + r;\r\n\t\t\tvar top = y + r;\r\n\t\t\tvar right = x + width - r;\r\n\t\t\tvar bottom = y + height - r;\r\n\r\n\t\t\tctx.moveTo(x, top);\r\n\t\t\tif (left < right && top < bottom) {\r\n\t\t\t\tctx.arc(left, top, r, -PI, -HALF_PI);\r\n\t\t\t\tctx.arc(right, top, r, -HALF_PI, 0);\r\n\t\t\t\tctx.arc(right, bottom, r, 0, HALF_PI);\r\n\t\t\t\tctx.arc(left, bottom, r, HALF_PI, PI);\r\n\t\t\t} else if (left < right) {\r\n\t\t\t\tctx.moveTo(left, y);\r\n\t\t\t\tctx.arc(right, top, r, -HALF_PI, HALF_PI);\r\n\t\t\t\tctx.arc(left, top, r, HALF_PI, PI + HALF_PI);\r\n\t\t\t} else if (top < bottom) {\r\n\t\t\t\tctx.arc(left, top, r, -PI, 0);\r\n\t\t\t\tctx.arc(left, bottom, r, 0, PI);\r\n\t\t\t} else {\r\n\t\t\t\tctx.arc(left, top, r, -PI, PI);\r\n\t\t\t}\r\n\t\t\tctx.closePath();\r\n\t\t\tctx.moveTo(x, y);\r\n\t\t} else {\r\n\t\t\tctx.rect(x, y, width, height);\r\n\t\t}\r\n\t},\r\n\r\n\tdrawPoint: function(ctx, style, radius, x, y, rotation) {\r\n\t\tvar type, xOffset, yOffset, size, cornerRadius;\r\n\t\tvar rad = (rotation || 0) * RAD_PER_DEG;\r\n\r\n\t\tif (style && typeof style === 'object') {\r\n\t\t\ttype = style.toString();\r\n\t\t\tif (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\r\n\t\t\t\tctx.save();\r\n\t\t\t\tctx.translate(x, y);\r\n\t\t\t\tctx.rotate(rad);\r\n\t\t\t\tctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\r\n\t\t\t\tctx.restore();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (isNaN(radius) || radius <= 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tctx.beginPath();\r\n\r\n\t\tswitch (style) {\r\n\t\t// Default includes circle\r\n\t\tdefault:\r\n\t\t\tctx.arc(x, y, radius, 0, DOUBLE_PI);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'triangle':\r\n\t\t\tctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\r\n\t\t\trad += TWO_THIRDS_PI;\r\n\t\t\tctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\r\n\t\t\trad += TWO_THIRDS_PI;\r\n\t\t\tctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'rectRounded':\r\n\t\t\t// NOTE: the rounded rect implementation changed to use `arc` instead of\r\n\t\t\t// `quadraticCurveTo` since it generates better results when rect is\r\n\t\t\t// almost a circle. 0.516 (instead of 0.5) produces results with visually\r\n\t\t\t// closer proportion to the previous impl and it is inscribed in the\r\n\t\t\t// circle with `radius`. For more details, see the following PRs:\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/5597\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/5858\r\n\t\t\tcornerRadius = radius * 0.516;\r\n\t\t\tsize = radius - cornerRadius;\r\n\t\t\txOffset = Math.cos(rad + QUARTER_PI) * size;\r\n\t\t\tyOffset = Math.sin(rad + QUARTER_PI) * size;\r\n\t\t\tctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\r\n\t\t\tctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\r\n\t\t\tctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\r\n\t\t\tctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'rect':\r\n\t\t\tif (!rotation) {\r\n\t\t\t\tsize = Math.SQRT1_2 * radius;\r\n\t\t\t\tctx.rect(x - size, y - size, 2 * size, 2 * size);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\trad += QUARTER_PI;\r\n\t\t\t/* falls through */\r\n\t\tcase 'rectRot':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\tctx.closePath();\r\n\t\t\tbreak;\r\n\t\tcase 'crossRot':\r\n\t\t\trad += QUARTER_PI;\r\n\t\t\t/* falls through */\r\n\t\tcase 'cross':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\tbreak;\r\n\t\tcase 'star':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\trad += QUARTER_PI;\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tctx.moveTo(x + yOffset, y - xOffset);\r\n\t\t\tctx.lineTo(x - yOffset, y + xOffset);\r\n\t\t\tbreak;\r\n\t\tcase 'line':\r\n\t\t\txOffset = Math.cos(rad) * radius;\r\n\t\t\tyOffset = Math.sin(rad) * radius;\r\n\t\t\tctx.moveTo(x - xOffset, y - yOffset);\r\n\t\t\tctx.lineTo(x + xOffset, y + yOffset);\r\n\t\t\tbreak;\r\n\t\tcase 'dash':\r\n\t\t\tctx.moveTo(x, y);\r\n\t\t\tctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tctx.fill();\r\n\t\tctx.stroke();\r\n\t},\r\n\r\n\t/**\r\n\t * Returns true if the point is inside the rectangle\r\n\t * @param {object} point - The point to test\r\n\t * @param {object} area - The rectangle\r\n\t * @returns {boolean}\r\n\t * @private\r\n\t */\r\n\t_isPointInArea: function(point, area) {\r\n\t\tvar epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\r\n\r\n\t\treturn point.x > area.left - epsilon && point.x < area.right + epsilon &&\r\n\t\t\tpoint.y > area.top - epsilon && point.y < area.bottom + epsilon;\r\n\t},\r\n\r\n\tclipArea: function(ctx, area) {\r\n\t\tctx.save();\r\n\t\tctx.beginPath();\r\n\t\tctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\r\n\t\tctx.clip();\r\n\t},\r\n\r\n\tunclipArea: function(ctx) {\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\tlineTo: function(ctx, previous, target, flip) {\r\n\t\tvar stepped = target.steppedLine;\r\n\t\tif (stepped) {\r\n\t\t\tif (stepped === 'middle') {\r\n\t\t\t\tvar midpoint = (previous.x + target.x) / 2.0;\r\n\t\t\t\tctx.lineTo(midpoint, flip ? target.y : previous.y);\r\n\t\t\t\tctx.lineTo(midpoint, flip ? previous.y : target.y);\r\n\t\t\t} else if ((stepped === 'after' && !flip) || (stepped !== 'after' && flip)) {\r\n\t\t\t\tctx.lineTo(previous.x, target.y);\r\n\t\t\t} else {\r\n\t\t\t\tctx.lineTo(target.x, previous.y);\r\n\t\t\t}\r\n\t\t\tctx.lineTo(target.x, target.y);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!target.tension) {\r\n\t\t\tctx.lineTo(target.x, target.y);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tctx.bezierCurveTo(\r\n\t\t\tflip ? previous.controlPointPreviousX : previous.controlPointNextX,\r\n\t\t\tflip ? previous.controlPointPreviousY : previous.controlPointNextY,\r\n\t\t\tflip ? target.controlPointNextX : target.controlPointPreviousX,\r\n\t\t\tflip ? target.controlPointNextY : target.controlPointPreviousY,\r\n\t\t\ttarget.x,\r\n\t\t\ttarget.y);\r\n\t}\r\n};\r\n\r\nvar helpers_canvas = exports$1;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.canvas.clear instead.\r\n * @namespace Chart.helpers.clear\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.clear = exports$1.clear;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead.\r\n * @namespace Chart.helpers.drawRoundedRectangle\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.drawRoundedRectangle = function(ctx) {\r\n\tctx.beginPath();\r\n\texports$1.roundedRect.apply(exports$1, arguments);\r\n};\n\nvar defaults = {\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_set: function(scope, values) {\r\n\t\treturn helpers_core.merge(this[scope] || (this[scope] = {}), values);\r\n\t}\r\n};\r\n\r\n// TODO(v3): remove 'global' from namespace.  all default are global and\r\n// there's inconsistency around which options are under 'global'\r\ndefaults._set('global', {\r\n\tdefaultColor: 'rgba(0,0,0,0.1)',\r\n\tdefaultFontColor: '#666',\r\n\tdefaultFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\r\n\tdefaultFontSize: 12,\r\n\tdefaultFontStyle: 'normal',\r\n\tdefaultLineHeight: 1.2,\r\n\tshowLines: true\r\n});\r\n\r\nvar core_defaults = defaults;\n\nvar valueOrDefault = helpers_core.valueOrDefault;\r\n\r\n/**\r\n * Converts the given font object into a CSS font string.\r\n * @param {object} font - A font object.\r\n * @return {string} The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\r\n * @private\r\n */\r\nfunction toFontString(font) {\r\n\tif (!font || helpers_core.isNullOrUndef(font.size) || helpers_core.isNullOrUndef(font.family)) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (font.style ? font.style + ' ' : '')\r\n\t\t+ (font.weight ? font.weight + ' ' : '')\r\n\t\t+ font.size + 'px '\r\n\t\t+ font.family;\r\n}\r\n\r\n/**\r\n * @alias Chart.helpers.options\r\n * @namespace\r\n */\r\nvar helpers_options = {\r\n\t/**\r\n\t * Converts the given line height `value` in pixels for a specific font `size`.\r\n\t * @param {number|string} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\r\n\t * @param {number} size - The font size (in pixels) used to resolve relative `value`.\r\n\t * @returns {number} The effective line height in pixels (size * 1.2 if value is invalid).\r\n\t * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\r\n\t * @since 2.7.0\r\n\t */\r\n\ttoLineHeight: function(value, size) {\r\n\t\tvar matches = ('' + value).match(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\r\n\t\tif (!matches || matches[1] === 'normal') {\r\n\t\t\treturn size * 1.2;\r\n\t\t}\r\n\r\n\t\tvalue = +matches[2];\r\n\r\n\t\tswitch (matches[3]) {\r\n\t\tcase 'px':\r\n\t\t\treturn value;\r\n\t\tcase '%':\r\n\t\t\tvalue /= 100;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn size * value;\r\n\t},\r\n\r\n\t/**\r\n\t * Converts the given value into a padding object with pre-computed width/height.\r\n\t * @param {number|object} value - If a number, set the value to all TRBL component,\r\n\t *  else, if and object, use defined properties and sets undefined ones to 0.\r\n\t * @returns {object} The padding values (top, right, bottom, left, width, height)\r\n\t * @since 2.7.0\r\n\t */\r\n\ttoPadding: function(value) {\r\n\t\tvar t, r, b, l;\r\n\r\n\t\tif (helpers_core.isObject(value)) {\r\n\t\t\tt = +value.top || 0;\r\n\t\t\tr = +value.right || 0;\r\n\t\t\tb = +value.bottom || 0;\r\n\t\t\tl = +value.left || 0;\r\n\t\t} else {\r\n\t\t\tt = r = b = l = +value || 0;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\ttop: t,\r\n\t\t\tright: r,\r\n\t\t\tbottom: b,\r\n\t\t\tleft: l,\r\n\t\t\theight: t + b,\r\n\t\t\twidth: l + r\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Parses font options and returns the font object.\r\n\t * @param {object} options - A object that contains font options to be parsed.\r\n\t * @return {object} The font object.\r\n\t * @todo Support font.* options and renamed to toFont().\r\n\t * @private\r\n\t */\r\n\t_parseFont: function(options) {\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize);\r\n\t\tvar font = {\r\n\t\t\tfamily: valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily),\r\n\t\t\tlineHeight: helpers_core.options.toLineHeight(valueOrDefault(options.lineHeight, globalDefaults.defaultLineHeight), size),\r\n\t\t\tsize: size,\r\n\t\t\tstyle: valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle),\r\n\t\t\tweight: null,\r\n\t\t\tstring: ''\r\n\t\t};\r\n\r\n\t\tfont.string = toFontString(font);\r\n\t\treturn font;\r\n\t},\r\n\r\n\t/**\r\n\t * Evaluates the given `inputs` sequentially and returns the first defined value.\r\n\t * @param {Array} inputs - An array of values, falling back to the last value.\r\n\t * @param {object} [context] - If defined and the current value is a function, the value\r\n\t * is called with `context` as first argument and the result becomes the new input.\r\n\t * @param {number} [index] - If defined and the current value is an array, the value\r\n\t * at `index` become the new input.\r\n\t * @param {object} [info] - object to return information about resolution in\r\n\t * @param {boolean} [info.cacheable] - Will be set to `false` if option is not cacheable.\r\n\t * @since 2.7.0\r\n\t */\r\n\tresolve: function(inputs, context, index, info) {\r\n\t\tvar cacheable = true;\r\n\t\tvar i, ilen, value;\r\n\r\n\t\tfor (i = 0, ilen = inputs.length; i < ilen; ++i) {\r\n\t\t\tvalue = inputs[i];\r\n\t\t\tif (value === undefined) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tif (context !== undefined && typeof value === 'function') {\r\n\t\t\t\tvalue = value(context);\r\n\t\t\t\tcacheable = false;\r\n\t\t\t}\r\n\t\t\tif (index !== undefined && helpers_core.isArray(value)) {\r\n\t\t\t\tvalue = value[index];\r\n\t\t\t\tcacheable = false;\r\n\t\t\t}\r\n\t\t\tif (value !== undefined) {\r\n\t\t\t\tif (info && !cacheable) {\r\n\t\t\t\t\tinfo.cacheable = false;\r\n\t\t\t\t}\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\n\n/**\r\n * @alias Chart.helpers.math\r\n * @namespace\r\n */\r\nvar exports$2 = {\r\n\t/**\r\n\t * Returns an array of factors sorted from 1 to sqrt(value)\r\n\t * @private\r\n\t */\r\n\t_factorize: function(value) {\r\n\t\tvar result = [];\r\n\t\tvar sqrt = Math.sqrt(value);\r\n\t\tvar i;\r\n\r\n\t\tfor (i = 1; i < sqrt; i++) {\r\n\t\t\tif (value % i === 0) {\r\n\t\t\t\tresult.push(i);\r\n\t\t\t\tresult.push(value / i);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (sqrt === (sqrt | 0)) { // if value is a square number\r\n\t\t\tresult.push(sqrt);\r\n\t\t}\r\n\r\n\t\tresult.sort(function(a, b) {\r\n\t\t\treturn a - b;\r\n\t\t}).pop();\r\n\t\treturn result;\r\n\t},\r\n\r\n\tlog10: Math.log10 || function(x) {\r\n\t\tvar exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10.\r\n\t\t// Check for whole powers of 10,\r\n\t\t// which due to floating point rounding error should be corrected.\r\n\t\tvar powerOf10 = Math.round(exponent);\r\n\t\tvar isPowerOf10 = x === Math.pow(10, powerOf10);\r\n\r\n\t\treturn isPowerOf10 ? powerOf10 : exponent;\r\n\t}\r\n};\r\n\r\nvar helpers_math = exports$2;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.math.log10 instead.\r\n * @namespace Chart.helpers.log10\r\n * @deprecated since version 2.9.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers_core.log10 = exports$2.log10;\n\nvar getRtlAdapter = function(rectX, width) {\r\n\treturn {\r\n\t\tx: function(x) {\r\n\t\t\treturn rectX + rectX + width - x;\r\n\t\t},\r\n\t\tsetWidth: function(w) {\r\n\t\t\twidth = w;\r\n\t\t},\r\n\t\ttextAlign: function(align) {\r\n\t\t\tif (align === 'center') {\r\n\t\t\t\treturn align;\r\n\t\t\t}\r\n\t\t\treturn align === 'right' ? 'left' : 'right';\r\n\t\t},\r\n\t\txPlus: function(x, value) {\r\n\t\t\treturn x - value;\r\n\t\t},\r\n\t\tleftForLtr: function(x, itemWidth) {\r\n\t\t\treturn x - itemWidth;\r\n\t\t},\r\n\t};\r\n};\r\n\r\nvar getLtrAdapter = function() {\r\n\treturn {\r\n\t\tx: function(x) {\r\n\t\t\treturn x;\r\n\t\t},\r\n\t\tsetWidth: function(w) { // eslint-disable-line no-unused-vars\r\n\t\t},\r\n\t\ttextAlign: function(align) {\r\n\t\t\treturn align;\r\n\t\t},\r\n\t\txPlus: function(x, value) {\r\n\t\t\treturn x + value;\r\n\t\t},\r\n\t\tleftForLtr: function(x, _itemWidth) { // eslint-disable-line no-unused-vars\r\n\t\t\treturn x;\r\n\t\t},\r\n\t};\r\n};\r\n\r\nvar getAdapter = function(rtl, rectX, width) {\r\n\treturn rtl ? getRtlAdapter(rectX, width) : getLtrAdapter();\r\n};\r\n\r\nvar overrideTextDirection = function(ctx, direction) {\r\n\tvar style, original;\r\n\tif (direction === 'ltr' || direction === 'rtl') {\r\n\t\tstyle = ctx.canvas.style;\r\n\t\toriginal = [\r\n\t\t\tstyle.getPropertyValue('direction'),\r\n\t\t\tstyle.getPropertyPriority('direction'),\r\n\t\t];\r\n\r\n\t\tstyle.setProperty('direction', direction, 'important');\r\n\t\tctx.prevTextDirection = original;\r\n\t}\r\n};\r\n\r\nvar restoreTextDirection = function(ctx) {\r\n\tvar original = ctx.prevTextDirection;\r\n\tif (original !== undefined) {\r\n\t\tdelete ctx.prevTextDirection;\r\n\t\tctx.canvas.style.setProperty('direction', original[0], original[1]);\r\n\t}\r\n};\r\n\r\nvar helpers_rtl = {\r\n\tgetRtlAdapter: getAdapter,\r\n\toverrideTextDirection: overrideTextDirection,\r\n\trestoreTextDirection: restoreTextDirection,\r\n};\n\nvar helpers$1 = helpers_core;\r\nvar easing = helpers_easing;\r\nvar canvas = helpers_canvas;\r\nvar options = helpers_options;\r\nvar math = helpers_math;\r\nvar rtl = helpers_rtl;\nhelpers$1.easing = easing;\nhelpers$1.canvas = canvas;\nhelpers$1.options = options;\nhelpers$1.math = math;\nhelpers$1.rtl = rtl;\n\nfunction interpolate(start, view, model, ease) {\r\n\tvar keys = Object.keys(model);\r\n\tvar i, ilen, key, actual, origin, target, type, c0, c1;\r\n\r\n\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\r\n\t\tkey = keys[i];\r\n\r\n\t\ttarget = model[key];\r\n\r\n\t\t// if a value is added to the model after pivot() has been called, the view\r\n\t\t// doesn't contain it, so let's initialize the view to the target value.\r\n\t\tif (!view.hasOwnProperty(key)) {\r\n\t\t\tview[key] = target;\r\n\t\t}\r\n\r\n\t\tactual = view[key];\r\n\r\n\t\tif (actual === target || key[0] === '_') {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tif (!start.hasOwnProperty(key)) {\r\n\t\t\tstart[key] = actual;\r\n\t\t}\r\n\r\n\t\torigin = start[key];\r\n\r\n\t\ttype = typeof target;\r\n\r\n\t\tif (type === typeof origin) {\r\n\t\t\tif (type === 'string') {\r\n\t\t\t\tc0 = chartjsColor(origin);\r\n\t\t\t\tif (c0.valid) {\r\n\t\t\t\t\tc1 = chartjsColor(target);\r\n\t\t\t\t\tif (c1.valid) {\r\n\t\t\t\t\t\tview[key] = c1.mix(c0, ease).rgbString();\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else if (helpers$1.isFinite(origin) && helpers$1.isFinite(target)) {\r\n\t\t\t\tview[key] = origin + (target - origin) * ease;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tview[key] = target;\r\n\t}\r\n}\r\n\r\nvar Element = function(configuration) {\r\n\thelpers$1.extend(this, configuration);\r\n\tthis.initialize.apply(this, arguments);\r\n};\r\n\r\nhelpers$1.extend(Element.prototype, {\r\n\t_type: undefined,\r\n\r\n\tinitialize: function() {\r\n\t\tthis.hidden = false;\r\n\t},\r\n\r\n\tpivot: function() {\r\n\t\tvar me = this;\r\n\t\tif (!me._view) {\r\n\t\t\tme._view = helpers$1.extend({}, me._model);\r\n\t\t}\r\n\t\tme._start = {};\r\n\t\treturn me;\r\n\t},\r\n\r\n\ttransition: function(ease) {\r\n\t\tvar me = this;\r\n\t\tvar model = me._model;\r\n\t\tvar start = me._start;\r\n\t\tvar view = me._view;\r\n\r\n\t\t// No animation -> No Transition\r\n\t\tif (!model || ease === 1) {\r\n\t\t\tme._view = helpers$1.extend({}, model);\r\n\t\t\tme._start = null;\r\n\t\t\treturn me;\r\n\t\t}\r\n\r\n\t\tif (!view) {\r\n\t\t\tview = me._view = {};\r\n\t\t}\r\n\r\n\t\tif (!start) {\r\n\t\t\tstart = me._start = {};\r\n\t\t}\r\n\r\n\t\tinterpolate(start, view, model, ease);\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\treturn {\r\n\t\t\tx: this._model.x,\r\n\t\t\ty: this._model.y\r\n\t\t};\r\n\t},\r\n\r\n\thasValue: function() {\r\n\t\treturn helpers$1.isNumber(this._model.x) && helpers$1.isNumber(this._model.y);\r\n\t}\r\n});\r\n\r\nElement.extend = helpers$1.inherits;\r\n\r\nvar core_element = Element;\n\nvar exports$3 = core_element.extend({\r\n\tchart: null, // the animation associated chart instance\r\n\tcurrentStep: 0, // the current animation step\r\n\tnumSteps: 60, // default number of steps\r\n\teasing: '', // the easing to use for this animation\r\n\trender: null, // render function used by the animation service\r\n\r\n\tonAnimationProgress: null, // user specified callback to fire on each step of the animation\r\n\tonAnimationComplete: null, // user specified callback to fire when the animation finishes\r\n});\r\n\r\nvar core_animation = exports$3;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.Animation instead\r\n * @prop Chart.Animation#animationObject\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n */\r\nObject.defineProperty(exports$3.prototype, 'animationObject', {\r\n\tget: function() {\r\n\t\treturn this;\r\n\t}\r\n});\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.Animation#chart instead\r\n * @prop Chart.Animation#chartInstance\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n */\r\nObject.defineProperty(exports$3.prototype, 'chartInstance', {\r\n\tget: function() {\r\n\t\treturn this.chart;\r\n\t},\r\n\tset: function(value) {\r\n\t\tthis.chart = value;\r\n\t}\r\n});\n\ncore_defaults._set('global', {\r\n\tanimation: {\r\n\t\tduration: 1000,\r\n\t\teasing: 'easeOutQuart',\r\n\t\tonProgress: helpers$1.noop,\r\n\t\tonComplete: helpers$1.noop\r\n\t}\r\n});\r\n\r\nvar core_animations = {\r\n\tanimations: [],\r\n\trequest: null,\r\n\r\n\t/**\r\n\t * @param {Chart} chart - The chart to animate.\r\n\t * @param {Chart.Animation} animation - The animation that we will animate.\r\n\t * @param {number} duration - The animation duration in ms.\r\n\t * @param {boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions\r\n\t */\r\n\taddAnimation: function(chart, animation, duration, lazy) {\r\n\t\tvar animations = this.animations;\r\n\t\tvar i, ilen;\r\n\r\n\t\tanimation.chart = chart;\r\n\t\tanimation.startTime = Date.now();\r\n\t\tanimation.duration = duration;\r\n\r\n\t\tif (!lazy) {\r\n\t\t\tchart.animating = true;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = animations.length; i < ilen; ++i) {\r\n\t\t\tif (animations[i].chart === chart) {\r\n\t\t\t\tanimations[i] = animation;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tanimations.push(animation);\r\n\r\n\t\t// If there are no animations queued, manually kickstart a digest, for lack of a better word\r\n\t\tif (animations.length === 1) {\r\n\t\t\tthis.requestAnimationFrame();\r\n\t\t}\r\n\t},\r\n\r\n\tcancelAnimation: function(chart) {\r\n\t\tvar index = helpers$1.findIndex(this.animations, function(animation) {\r\n\t\t\treturn animation.chart === chart;\r\n\t\t});\r\n\r\n\t\tif (index !== -1) {\r\n\t\t\tthis.animations.splice(index, 1);\r\n\t\t\tchart.animating = false;\r\n\t\t}\r\n\t},\r\n\r\n\trequestAnimationFrame: function() {\r\n\t\tvar me = this;\r\n\t\tif (me.request === null) {\r\n\t\t\t// Skip animation frame requests until the active one is executed.\r\n\t\t\t// This can happen when processing mouse events, e.g. 'mousemove'\r\n\t\t\t// and 'mouseout' events will trigger multiple renders.\r\n\t\t\tme.request = helpers$1.requestAnimFrame.call(window, function() {\r\n\t\t\t\tme.request = null;\r\n\t\t\t\tme.startDigest();\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tstartDigest: function() {\r\n\t\tvar me = this;\r\n\r\n\t\tme.advance();\r\n\r\n\t\t// Do we have more stuff to animate?\r\n\t\tif (me.animations.length > 0) {\r\n\t\t\tme.requestAnimationFrame();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tadvance: function() {\r\n\t\tvar animations = this.animations;\r\n\t\tvar animation, chart, numSteps, nextStep;\r\n\t\tvar i = 0;\r\n\r\n\t\t// 1 animation per chart, so we are looping charts here\r\n\t\twhile (i < animations.length) {\r\n\t\t\tanimation = animations[i];\r\n\t\t\tchart = animation.chart;\r\n\t\t\tnumSteps = animation.numSteps;\r\n\r\n\t\t\t// Make sure that currentStep starts at 1\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/6104\r\n\t\t\tnextStep = Math.floor((Date.now() - animation.startTime) / animation.duration * numSteps) + 1;\r\n\t\t\tanimation.currentStep = Math.min(nextStep, numSteps);\r\n\r\n\t\t\thelpers$1.callback(animation.render, [chart, animation], chart);\r\n\t\t\thelpers$1.callback(animation.onAnimationProgress, [animation], chart);\r\n\r\n\t\t\tif (animation.currentStep >= numSteps) {\r\n\t\t\t\thelpers$1.callback(animation.onAnimationComplete, [animation], chart);\r\n\t\t\t\tchart.animating = false;\r\n\t\t\t\tanimations.splice(i, 1);\r\n\t\t\t} else {\r\n\t\t\t\t++i;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\n\nvar resolve = helpers$1.options.resolve;\r\n\r\nvar arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\r\n\r\n/**\r\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\r\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\r\n * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.\r\n */\r\nfunction listenArrayEvents(array, listener) {\r\n\tif (array._chartjs) {\r\n\t\tarray._chartjs.listeners.push(listener);\r\n\t\treturn;\r\n\t}\r\n\r\n\tObject.defineProperty(array, '_chartjs', {\r\n\t\tconfigurable: true,\r\n\t\tenumerable: false,\r\n\t\tvalue: {\r\n\t\t\tlisteners: [listener]\r\n\t\t}\r\n\t});\r\n\r\n\tarrayEvents.forEach(function(key) {\r\n\t\tvar method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);\r\n\t\tvar base = array[key];\r\n\r\n\t\tObject.defineProperty(array, key, {\r\n\t\t\tconfigurable: true,\r\n\t\t\tenumerable: false,\r\n\t\t\tvalue: function() {\r\n\t\t\t\tvar args = Array.prototype.slice.call(arguments);\r\n\t\t\t\tvar res = base.apply(this, args);\r\n\r\n\t\t\t\thelpers$1.each(array._chartjs.listeners, function(object) {\r\n\t\t\t\t\tif (typeof object[method] === 'function') {\r\n\t\t\t\t\t\tobject[method].apply(object, args);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn res;\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n}\r\n\r\n/**\r\n * Removes the given array event listener and cleanup extra attached properties (such as\r\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\r\n */\r\nfunction unlistenArrayEvents(array, listener) {\r\n\tvar stub = array._chartjs;\r\n\tif (!stub) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar listeners = stub.listeners;\r\n\tvar index = listeners.indexOf(listener);\r\n\tif (index !== -1) {\r\n\t\tlisteners.splice(index, 1);\r\n\t}\r\n\r\n\tif (listeners.length > 0) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tarrayEvents.forEach(function(key) {\r\n\t\tdelete array[key];\r\n\t});\r\n\r\n\tdelete array._chartjs;\r\n}\r\n\r\n// Base class for all dataset controllers (line, bar, etc)\r\nvar DatasetController = function(chart, datasetIndex) {\r\n\tthis.initialize(chart, datasetIndex);\r\n};\r\n\r\nhelpers$1.extend(DatasetController.prototype, {\r\n\r\n\t/**\r\n\t * Element type used to generate a meta dataset (e.g. Chart.element.Line).\r\n\t * @type {Chart.core.element}\r\n\t */\r\n\tdatasetElementType: null,\r\n\r\n\t/**\r\n\t * Element type used to generate a meta data (e.g. Chart.element.Point).\r\n\t * @type {Chart.core.element}\r\n\t */\r\n\tdataElementType: null,\r\n\r\n\t/**\r\n\t * Dataset element option keys to be resolved in _resolveDatasetElementOptions.\r\n\t * A derived controller may override this to resolve controller-specific options.\r\n\t * The keys defined here are for backward compatibility for legend styles.\r\n\t * @private\r\n\t */\r\n\t_datasetElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderCapStyle',\r\n\t\t'borderColor',\r\n\t\t'borderDash',\r\n\t\t'borderDashOffset',\r\n\t\t'borderJoinStyle',\r\n\t\t'borderWidth'\r\n\t],\r\n\r\n\t/**\r\n\t * Data element option keys to be resolved in _resolveDataElementOptions.\r\n\t * A derived controller may override this to resolve controller-specific options.\r\n\t * The keys defined here are for backward compatibility for legend styles.\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'pointStyle'\r\n\t],\r\n\r\n\tinitialize: function(chart, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tme.chart = chart;\r\n\t\tme.index = datasetIndex;\r\n\t\tme.linkScales();\r\n\t\tme.addElements();\r\n\t\tme._type = me.getMeta().type;\r\n\t},\r\n\r\n\tupdateIndex: function(datasetIndex) {\r\n\t\tthis.index = datasetIndex;\r\n\t},\r\n\r\n\tlinkScales: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar chart = me.chart;\r\n\t\tvar scales = chart.scales;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar scalesOpts = chart.options.scales;\r\n\r\n\t\tif (meta.xAxisID === null || !(meta.xAxisID in scales) || dataset.xAxisID) {\r\n\t\t\tmeta.xAxisID = dataset.xAxisID || scalesOpts.xAxes[0].id;\r\n\t\t}\r\n\t\tif (meta.yAxisID === null || !(meta.yAxisID in scales) || dataset.yAxisID) {\r\n\t\t\tmeta.yAxisID = dataset.yAxisID || scalesOpts.yAxes[0].id;\r\n\t\t}\r\n\t},\r\n\r\n\tgetDataset: function() {\r\n\t\treturn this.chart.data.datasets[this.index];\r\n\t},\r\n\r\n\tgetMeta: function() {\r\n\t\treturn this.chart.getDatasetMeta(this.index);\r\n\t},\r\n\r\n\tgetScaleForId: function(scaleID) {\r\n\t\treturn this.chart.scales[scaleID];\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.getMeta().yAxisID;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.getMeta().xAxisID;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScale: function() {\r\n\t\treturn this.getScaleForId(this._getValueScaleId());\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScale: function() {\r\n\t\treturn this.getScaleForId(this._getIndexScaleId());\r\n\t},\r\n\r\n\treset: function() {\r\n\t\tthis._update(true);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tdestroy: function() {\r\n\t\tif (this._data) {\r\n\t\t\tunlistenArrayEvents(this._data, this);\r\n\t\t}\r\n\t},\r\n\r\n\tcreateMetaDataset: function() {\r\n\t\tvar me = this;\r\n\t\tvar type = me.datasetElementType;\r\n\t\treturn type && new type({\r\n\t\t\t_chart: me.chart,\r\n\t\t\t_datasetIndex: me.index\r\n\t\t});\r\n\t},\r\n\r\n\tcreateMetaData: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar type = me.dataElementType;\r\n\t\treturn type && new type({\r\n\t\t\t_chart: me.chart,\r\n\t\t\t_datasetIndex: me.index,\r\n\t\t\t_index: index\r\n\t\t});\r\n\t},\r\n\r\n\taddElements: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar data = me.getDataset().data || [];\r\n\t\tvar metaData = meta.data;\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = data.length; i < ilen; ++i) {\r\n\t\t\tmetaData[i] = metaData[i] || me.createMetaData(i);\r\n\t\t}\r\n\r\n\t\tmeta.dataset = meta.dataset || me.createMetaDataset();\r\n\t},\r\n\r\n\taddElementAndReset: function(index) {\r\n\t\tvar element = this.createMetaData(index);\r\n\t\tthis.getMeta().data.splice(index, 0, element);\r\n\t\tthis.updateElement(element, index, true);\r\n\t},\r\n\r\n\tbuildOrUpdateElements: function() {\r\n\t\tvar me = this;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar data = dataset.data || (dataset.data = []);\r\n\r\n\t\t// In order to correctly handle data addition/deletion animation (an thus simulate\r\n\t\t// real-time charts), we need to monitor these data modifications and synchronize\r\n\t\t// the internal meta data accordingly.\r\n\t\tif (me._data !== data) {\r\n\t\t\tif (me._data) {\r\n\t\t\t\t// This case happens when the user replaced the data array instance.\r\n\t\t\t\tunlistenArrayEvents(me._data, me);\r\n\t\t\t}\r\n\r\n\t\t\tif (data && Object.isExtensible(data)) {\r\n\t\t\t\tlistenArrayEvents(data, me);\r\n\t\t\t}\r\n\t\t\tme._data = data;\r\n\t\t}\r\n\r\n\t\t// Re-sync meta data in case the user replaced the data array or if we missed\r\n\t\t// any updates and so make sure that we handle number of datapoints changing.\r\n\t\tme.resyncElements();\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the merged user-supplied and default dataset-level options\r\n\t * @private\r\n\t */\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tme._config = helpers$1.merge(Object.create(null), [\r\n\t\t\tme.chart.options.datasets[me._type],\r\n\t\t\tme.getDataset(),\r\n\t\t], {\r\n\t\t\tmerger: function(key, target, source) {\r\n\t\t\t\tif (key !== '_meta' && key !== 'data') {\r\n\t\t\t\t\thelpers$1._merger(key, target, source);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t},\r\n\r\n\t_update: function(reset) {\r\n\t\tvar me = this;\r\n\t\tme._configure();\r\n\t\tme._cachedDataOpts = null;\r\n\t\tme.update(reset);\r\n\t},\r\n\r\n\tupdate: helpers$1.noop,\r\n\r\n\ttransition: function(easingValue) {\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar elements = meta.data || [];\r\n\t\tvar ilen = elements.length;\r\n\t\tvar i = 0;\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\telements[i].transition(easingValue);\r\n\t\t}\r\n\r\n\t\tif (meta.dataset) {\r\n\t\t\tmeta.dataset.transition(easingValue);\r\n\t\t}\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar elements = meta.data || [];\r\n\t\tvar ilen = elements.length;\r\n\t\tvar i = 0;\r\n\r\n\t\tif (meta.dataset) {\r\n\t\t\tmeta.dataset.draw();\r\n\t\t}\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\telements[i].draw();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Returns a set of predefined style properties that should be used to represent the dataset\r\n\t * or the data if the index is specified\r\n\t * @param {number} index - data index\r\n\t * @return {IStyleInterface} style object\r\n\t */\r\n\tgetStyle: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar dataset = meta.dataset;\r\n\t\tvar style;\r\n\r\n\t\tme._configure();\r\n\t\tif (dataset && index === undefined) {\r\n\t\t\tstyle = me._resolveDatasetElementOptions(dataset || {});\r\n\t\t} else {\r\n\t\t\tindex = index || 0;\r\n\t\t\tstyle = me._resolveDataElementOptions(meta.data[index] || {}, index);\r\n\t\t}\r\n\r\n\t\tif (style.fill === false || style.fill === null) {\r\n\t\t\tstyle.backgroundColor = style.borderColor;\r\n\t\t}\r\n\r\n\t\treturn style;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDatasetElementOptions: function(element, hover) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasetOpts = me._config;\r\n\t\tvar custom = element.custom || {};\r\n\t\tvar options = chart.options.elements[me.datasetElementType.prototype._type] || {};\r\n\t\tvar elementOptions = me._datasetElementOptions;\r\n\t\tvar values = {};\r\n\t\tvar i, ilen, key, readKey;\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: chart,\r\n\t\t\tdataset: me.getDataset(),\r\n\t\t\tdatasetIndex: me.index,\r\n\t\t\thover: hover\r\n\t\t};\r\n\r\n\t\tfor (i = 0, ilen = elementOptions.length; i < ilen; ++i) {\r\n\t\t\tkey = elementOptions[i];\r\n\t\t\treadKey = hover ? 'hover' + key.charAt(0).toUpperCase() + key.slice(1) : key;\r\n\t\t\tvalues[key] = resolve([\r\n\t\t\t\tcustom[readKey],\r\n\t\t\t\tdatasetOpts[readKey],\r\n\t\t\t\toptions[readKey]\r\n\t\t\t], context);\r\n\t\t}\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDataElementOptions: function(element, index) {\r\n\t\tvar me = this;\r\n\t\tvar custom = element && element.custom;\r\n\t\tvar cached = me._cachedDataOpts;\r\n\t\tif (cached && !custom) {\r\n\t\t\treturn cached;\r\n\t\t}\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasetOpts = me._config;\r\n\t\tvar options = chart.options.elements[me.dataElementType.prototype._type] || {};\r\n\t\tvar elementOptions = me._dataElementOptions;\r\n\t\tvar values = {};\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: chart,\r\n\t\t\tdataIndex: index,\r\n\t\t\tdataset: me.getDataset(),\r\n\t\t\tdatasetIndex: me.index\r\n\t\t};\r\n\r\n\t\t// `resolve` sets cacheable to `false` if any option is indexed or scripted\r\n\t\tvar info = {cacheable: !custom};\r\n\r\n\t\tvar keys, i, ilen, key;\r\n\r\n\t\tcustom = custom || {};\r\n\r\n\t\tif (helpers$1.isArray(elementOptions)) {\r\n\t\t\tfor (i = 0, ilen = elementOptions.length; i < ilen; ++i) {\r\n\t\t\t\tkey = elementOptions[i];\r\n\t\t\t\tvalues[key] = resolve([\r\n\t\t\t\t\tcustom[key],\r\n\t\t\t\t\tdatasetOpts[key],\r\n\t\t\t\t\toptions[key]\r\n\t\t\t\t], context, index, info);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tkeys = Object.keys(elementOptions);\r\n\t\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\r\n\t\t\t\tkey = keys[i];\r\n\t\t\t\tvalues[key] = resolve([\r\n\t\t\t\t\tcustom[key],\r\n\t\t\t\t\tdatasetOpts[elementOptions[key]],\r\n\t\t\t\t\tdatasetOpts[key],\r\n\t\t\t\t\toptions[key]\r\n\t\t\t\t], context, index, info);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (info.cacheable) {\r\n\t\t\tme._cachedDataOpts = Object.freeze(values);\r\n\t\t}\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\tremoveHoverStyle: function(element) {\r\n\t\thelpers$1.merge(element._model, element.$previousStyle || {});\r\n\t\tdelete element.$previousStyle;\r\n\t},\r\n\r\n\tsetHoverStyle: function(element) {\r\n\t\tvar dataset = this.chart.data.datasets[element._datasetIndex];\r\n\t\tvar index = element._index;\r\n\t\tvar custom = element.custom || {};\r\n\t\tvar model = element._model;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\telement.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = resolve([custom.hoverBackgroundColor, dataset.hoverBackgroundColor, getHoverColor(model.backgroundColor)], undefined, index);\r\n\t\tmodel.borderColor = resolve([custom.hoverBorderColor, dataset.hoverBorderColor, getHoverColor(model.borderColor)], undefined, index);\r\n\t\tmodel.borderWidth = resolve([custom.hoverBorderWidth, dataset.hoverBorderWidth, model.borderWidth], undefined, index);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_removeDatasetHoverStyle: function() {\r\n\t\tvar element = this.getMeta().dataset;\r\n\r\n\t\tif (element) {\r\n\t\t\tthis.removeHoverStyle(element);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_setDatasetHoverStyle: function() {\r\n\t\tvar element = this.getMeta().dataset;\r\n\t\tvar prev = {};\r\n\t\tvar i, ilen, key, keys, hoverOptions, model;\r\n\r\n\t\tif (!element) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmodel = element._model;\r\n\t\thoverOptions = this._resolveDatasetElementOptions(element, true);\r\n\r\n\t\tkeys = Object.keys(hoverOptions);\r\n\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\r\n\t\t\tkey = keys[i];\r\n\t\t\tprev[key] = model[key];\r\n\t\t\tmodel[key] = hoverOptions[key];\r\n\t\t}\r\n\r\n\t\telement.$previousStyle = prev;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tresyncElements: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar data = me.getDataset().data;\r\n\t\tvar numMeta = meta.data.length;\r\n\t\tvar numData = data.length;\r\n\r\n\t\tif (numData < numMeta) {\r\n\t\t\tmeta.data.splice(numData, numMeta - numData);\r\n\t\t} else if (numData > numMeta) {\r\n\t\t\tme.insertElements(numMeta, numData - numMeta);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tinsertElements: function(start, count) {\r\n\t\tfor (var i = 0; i < count; ++i) {\r\n\t\t\tthis.addElementAndReset(start + i);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataPush: function() {\r\n\t\tvar count = arguments.length;\r\n\t\tthis.insertElements(this.getDataset().data.length - count, count);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataPop: function() {\r\n\t\tthis.getMeta().data.pop();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataShift: function() {\r\n\t\tthis.getMeta().data.shift();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataSplice: function(start, count) {\r\n\t\tthis.getMeta().data.splice(start, count);\r\n\t\tthis.insertElements(start, arguments.length - 2);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tonDataUnshift: function() {\r\n\t\tthis.insertElements(0, arguments.length);\r\n\t}\r\n});\r\n\r\nDatasetController.extend = helpers$1.inherits;\r\n\r\nvar core_datasetController = DatasetController;\n\nvar TAU = Math.PI * 2;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\tarc: {\r\n\t\t\tbackgroundColor: core_defaults.global.defaultColor,\r\n\t\t\tborderColor: '#fff',\r\n\t\t\tborderWidth: 2,\r\n\t\t\tborderAlign: 'center'\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction clipArc(ctx, arc) {\r\n\tvar startAngle = arc.startAngle;\r\n\tvar endAngle = arc.endAngle;\r\n\tvar pixelMargin = arc.pixelMargin;\r\n\tvar angleMargin = pixelMargin / arc.outerRadius;\r\n\tvar x = arc.x;\r\n\tvar y = arc.y;\r\n\r\n\t// Draw an inner border by cliping the arc and drawing a double-width border\r\n\t// Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\r\n\tctx.beginPath();\r\n\tctx.arc(x, y, arc.outerRadius, startAngle - angleMargin, endAngle + angleMargin);\r\n\tif (arc.innerRadius > pixelMargin) {\r\n\t\tangleMargin = pixelMargin / arc.innerRadius;\r\n\t\tctx.arc(x, y, arc.innerRadius - pixelMargin, endAngle + angleMargin, startAngle - angleMargin, true);\r\n\t} else {\r\n\t\tctx.arc(x, y, pixelMargin, endAngle + Math.PI / 2, startAngle - Math.PI / 2);\r\n\t}\r\n\tctx.closePath();\r\n\tctx.clip();\r\n}\r\n\r\nfunction drawFullCircleBorders(ctx, vm, arc, inner) {\r\n\tvar endAngle = arc.endAngle;\r\n\tvar i;\r\n\r\n\tif (inner) {\r\n\t\tarc.endAngle = arc.startAngle + TAU;\r\n\t\tclipArc(ctx, arc);\r\n\t\tarc.endAngle = endAngle;\r\n\t\tif (arc.endAngle === arc.startAngle && arc.fullCircles) {\r\n\t\t\tarc.endAngle += TAU;\r\n\t\t\tarc.fullCircles--;\r\n\t\t}\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.startAngle + TAU, arc.startAngle, true);\r\n\tfor (i = 0; i < arc.fullCircles; ++i) {\r\n\t\tctx.stroke();\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.startAngle + TAU);\r\n\tfor (i = 0; i < arc.fullCircles; ++i) {\r\n\t\tctx.stroke();\r\n\t}\r\n}\r\n\r\nfunction drawBorder(ctx, vm, arc) {\r\n\tvar inner = vm.borderAlign === 'inner';\r\n\r\n\tif (inner) {\r\n\t\tctx.lineWidth = vm.borderWidth * 2;\r\n\t\tctx.lineJoin = 'round';\r\n\t} else {\r\n\t\tctx.lineWidth = vm.borderWidth;\r\n\t\tctx.lineJoin = 'bevel';\r\n\t}\r\n\r\n\tif (arc.fullCircles) {\r\n\t\tdrawFullCircleBorders(ctx, vm, arc, inner);\r\n\t}\r\n\r\n\tif (inner) {\r\n\t\tclipArc(ctx, arc);\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.endAngle);\r\n\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\r\n\tctx.closePath();\r\n\tctx.stroke();\r\n}\r\n\r\nvar element_arc = core_element.extend({\r\n\t_type: 'arc',\r\n\r\n\tinLabelRange: function(mouseX) {\r\n\t\tvar vm = this._view;\r\n\r\n\t\tif (vm) {\r\n\t\t\treturn (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2));\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\tinRange: function(chartX, chartY) {\r\n\t\tvar vm = this._view;\r\n\r\n\t\tif (vm) {\r\n\t\t\tvar pointRelativePosition = helpers$1.getAngleFromPoint(vm, {x: chartX, y: chartY});\r\n\t\t\tvar angle = pointRelativePosition.angle;\r\n\t\t\tvar distance = pointRelativePosition.distance;\r\n\r\n\t\t\t// Sanitise angle range\r\n\t\t\tvar startAngle = vm.startAngle;\r\n\t\t\tvar endAngle = vm.endAngle;\r\n\t\t\twhile (endAngle < startAngle) {\r\n\t\t\t\tendAngle += TAU;\r\n\t\t\t}\r\n\t\t\twhile (angle > endAngle) {\r\n\t\t\t\tangle -= TAU;\r\n\t\t\t}\r\n\t\t\twhile (angle < startAngle) {\r\n\t\t\t\tangle += TAU;\r\n\t\t\t}\r\n\r\n\t\t\t// Check if within the range of the open/close angle\r\n\t\t\tvar betweenAngles = (angle >= startAngle && angle <= endAngle);\r\n\t\t\tvar withinRadius = (distance >= vm.innerRadius && distance <= vm.outerRadius);\r\n\r\n\t\t\treturn (betweenAngles && withinRadius);\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\r\n\tgetCenterPoint: function() {\r\n\t\tvar vm = this._view;\r\n\t\tvar halfAngle = (vm.startAngle + vm.endAngle) / 2;\r\n\t\tvar halfRadius = (vm.innerRadius + vm.outerRadius) / 2;\r\n\t\treturn {\r\n\t\t\tx: vm.x + Math.cos(halfAngle) * halfRadius,\r\n\t\t\ty: vm.y + Math.sin(halfAngle) * halfRadius\r\n\t\t};\r\n\t},\r\n\r\n\tgetArea: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\tvar vm = this._view;\r\n\t\tvar centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2);\r\n\t\tvar rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;\r\n\r\n\t\treturn {\r\n\t\t\tx: vm.x + (Math.cos(centreAngle) * rangeFromCentre),\r\n\t\t\ty: vm.y + (Math.sin(centreAngle) * rangeFromCentre)\r\n\t\t};\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\t\tvar pixelMargin = (vm.borderAlign === 'inner') ? 0.33 : 0;\r\n\t\tvar arc = {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y,\r\n\t\t\tinnerRadius: vm.innerRadius,\r\n\t\t\touterRadius: Math.max(vm.outerRadius - pixelMargin, 0),\r\n\t\t\tpixelMargin: pixelMargin,\r\n\t\t\tstartAngle: vm.startAngle,\r\n\t\t\tendAngle: vm.endAngle,\r\n\t\t\tfullCircles: Math.floor(vm.circumference / TAU)\r\n\t\t};\r\n\t\tvar i;\r\n\r\n\t\tctx.save();\r\n\r\n\t\tctx.fillStyle = vm.backgroundColor;\r\n\t\tctx.strokeStyle = vm.borderColor;\r\n\r\n\t\tif (arc.fullCircles) {\r\n\t\t\tarc.endAngle = arc.startAngle + TAU;\r\n\t\t\tctx.beginPath();\r\n\t\t\tctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);\r\n\t\t\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\r\n\t\t\tctx.closePath();\r\n\t\t\tfor (i = 0; i < arc.fullCircles; ++i) {\r\n\t\t\t\tctx.fill();\r\n\t\t\t}\r\n\t\t\tarc.endAngle = arc.startAngle + vm.circumference % TAU;\r\n\t\t}\r\n\r\n\t\tctx.beginPath();\r\n\t\tctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);\r\n\t\tctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);\r\n\t\tctx.closePath();\r\n\t\tctx.fill();\r\n\r\n\t\tif (vm.borderWidth) {\r\n\t\t\tdrawBorder(ctx, vm, arc);\r\n\t\t}\r\n\r\n\t\tctx.restore();\r\n\t}\r\n});\n\nvar valueOrDefault$1 = helpers$1.valueOrDefault;\r\n\r\nvar defaultColor = core_defaults.global.defaultColor;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\tline: {\r\n\t\t\ttension: 0.4,\r\n\t\t\tbackgroundColor: defaultColor,\r\n\t\t\tborderWidth: 3,\r\n\t\t\tborderColor: defaultColor,\r\n\t\t\tborderCapStyle: 'butt',\r\n\t\t\tborderDash: [],\r\n\t\t\tborderDashOffset: 0.0,\r\n\t\t\tborderJoinStyle: 'miter',\r\n\t\t\tcapBezierPoints: true,\r\n\t\t\tfill: true, // do we fill in the area between the line and its base axis\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar element_line = core_element.extend({\r\n\t_type: 'line',\r\n\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar vm = me._view;\r\n\t\tvar ctx = me._chart.ctx;\r\n\t\tvar spanGaps = vm.spanGaps;\r\n\t\tvar points = me._children.slice(); // clone array\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar globalOptionLineElements = globalDefaults.elements.line;\r\n\t\tvar lastDrawnIndex = -1;\r\n\t\tvar closePath = me._loop;\r\n\t\tvar index, previous, currentVM;\r\n\r\n\t\tif (!points.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (me._loop) {\r\n\t\t\tfor (index = 0; index < points.length; ++index) {\r\n\t\t\t\tprevious = helpers$1.previousItem(points, index);\r\n\t\t\t\t// If the line has an open path, shift the point array\r\n\t\t\t\tif (!points[index]._view.skip && previous._view.skip) {\r\n\t\t\t\t\tpoints = points.slice(index).concat(points.slice(0, index));\r\n\t\t\t\t\tclosePath = spanGaps;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// If the line has a close path, add the first point again\r\n\t\t\tif (closePath) {\r\n\t\t\t\tpoints.push(points[0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\r\n\t\t// Stroke Line Options\r\n\t\tctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle;\r\n\r\n\t\t// IE 9 and 10 do not support line dash\r\n\t\tif (ctx.setLineDash) {\r\n\t\t\tctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);\r\n\t\t}\r\n\r\n\t\tctx.lineDashOffset = valueOrDefault$1(vm.borderDashOffset, globalOptionLineElements.borderDashOffset);\r\n\t\tctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;\r\n\t\tctx.lineWidth = valueOrDefault$1(vm.borderWidth, globalOptionLineElements.borderWidth);\r\n\t\tctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor;\r\n\r\n\t\t// Stroke Line\r\n\t\tctx.beginPath();\r\n\r\n\t\t// First point moves to it's starting position no matter what\r\n\t\tcurrentVM = points[0]._view;\r\n\t\tif (!currentVM.skip) {\r\n\t\t\tctx.moveTo(currentVM.x, currentVM.y);\r\n\t\t\tlastDrawnIndex = 0;\r\n\t\t}\r\n\r\n\t\tfor (index = 1; index < points.length; ++index) {\r\n\t\t\tcurrentVM = points[index]._view;\r\n\t\t\tprevious = lastDrawnIndex === -1 ? helpers$1.previousItem(points, index) : points[lastDrawnIndex];\r\n\r\n\t\t\tif (!currentVM.skip) {\r\n\t\t\t\tif ((lastDrawnIndex !== (index - 1) && !spanGaps) || lastDrawnIndex === -1) {\r\n\t\t\t\t\t// There was a gap and this is the first point after the gap\r\n\t\t\t\t\tctx.moveTo(currentVM.x, currentVM.y);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Line to next point\r\n\t\t\t\t\thelpers$1.canvas.lineTo(ctx, previous._view, currentVM);\r\n\t\t\t\t}\r\n\t\t\t\tlastDrawnIndex = index;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (closePath) {\r\n\t\t\tctx.closePath();\r\n\t\t}\r\n\r\n\t\tctx.stroke();\r\n\t\tctx.restore();\r\n\t}\r\n});\n\nvar valueOrDefault$2 = helpers$1.valueOrDefault;\r\n\r\nvar defaultColor$1 = core_defaults.global.defaultColor;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\tpoint: {\r\n\t\t\tradius: 3,\r\n\t\t\tpointStyle: 'circle',\r\n\t\t\tbackgroundColor: defaultColor$1,\r\n\t\t\tborderColor: defaultColor$1,\r\n\t\t\tborderWidth: 1,\r\n\t\t\t// Hover\r\n\t\t\thitRadius: 1,\r\n\t\t\thoverRadius: 4,\r\n\t\t\thoverBorderWidth: 1\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction xRange(mouseX) {\r\n\tvar vm = this._view;\r\n\treturn vm ? (Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius) : false;\r\n}\r\n\r\nfunction yRange(mouseY) {\r\n\tvar vm = this._view;\r\n\treturn vm ? (Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius) : false;\r\n}\r\n\r\nvar element_point = core_element.extend({\r\n\t_type: 'point',\r\n\r\n\tinRange: function(mouseX, mouseY) {\r\n\t\tvar vm = this._view;\r\n\t\treturn vm ? ((Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2)) < Math.pow(vm.hitRadius + vm.radius, 2)) : false;\r\n\t},\r\n\r\n\tinLabelRange: xRange,\r\n\tinXRange: xRange,\r\n\tinYRange: yRange,\r\n\r\n\tgetCenterPoint: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y\r\n\t\t};\r\n\t},\r\n\r\n\tgetArea: function() {\r\n\t\treturn Math.PI * Math.pow(this._view.radius, 2);\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y,\r\n\t\t\tpadding: vm.radius + vm.borderWidth\r\n\t\t};\r\n\t},\r\n\r\n\tdraw: function(chartArea) {\r\n\t\tvar vm = this._view;\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar pointStyle = vm.pointStyle;\r\n\t\tvar rotation = vm.rotation;\r\n\t\tvar radius = vm.radius;\r\n\t\tvar x = vm.x;\r\n\t\tvar y = vm.y;\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar defaultColor = globalDefaults.defaultColor; // eslint-disable-line no-shadow\r\n\r\n\t\tif (vm.skip) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Clipping for Points.\r\n\t\tif (chartArea === undefined || helpers$1.canvas._isPointInArea(vm, chartArea)) {\r\n\t\t\tctx.strokeStyle = vm.borderColor || defaultColor;\r\n\t\t\tctx.lineWidth = valueOrDefault$2(vm.borderWidth, globalDefaults.elements.point.borderWidth);\r\n\t\t\tctx.fillStyle = vm.backgroundColor || defaultColor;\r\n\t\t\thelpers$1.canvas.drawPoint(ctx, pointStyle, radius, x, y, rotation);\r\n\t\t}\r\n\t}\r\n});\n\nvar defaultColor$2 = core_defaults.global.defaultColor;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {\r\n\t\trectangle: {\r\n\t\t\tbackgroundColor: defaultColor$2,\r\n\t\t\tborderColor: defaultColor$2,\r\n\t\t\tborderSkipped: 'bottom',\r\n\t\t\tborderWidth: 0\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction isVertical(vm) {\r\n\treturn vm && vm.width !== undefined;\r\n}\r\n\r\n/**\r\n * Helper function to get the bounds of the bar regardless of the orientation\r\n * @param bar {Chart.Element.Rectangle} the bar\r\n * @return {Bounds} bounds of the bar\r\n * @private\r\n */\r\nfunction getBarBounds(vm) {\r\n\tvar x1, x2, y1, y2, half;\r\n\r\n\tif (isVertical(vm)) {\r\n\t\thalf = vm.width / 2;\r\n\t\tx1 = vm.x - half;\r\n\t\tx2 = vm.x + half;\r\n\t\ty1 = Math.min(vm.y, vm.base);\r\n\t\ty2 = Math.max(vm.y, vm.base);\r\n\t} else {\r\n\t\thalf = vm.height / 2;\r\n\t\tx1 = Math.min(vm.x, vm.base);\r\n\t\tx2 = Math.max(vm.x, vm.base);\r\n\t\ty1 = vm.y - half;\r\n\t\ty2 = vm.y + half;\r\n\t}\r\n\r\n\treturn {\r\n\t\tleft: x1,\r\n\t\ttop: y1,\r\n\t\tright: x2,\r\n\t\tbottom: y2\r\n\t};\r\n}\r\n\r\nfunction swap(orig, v1, v2) {\r\n\treturn orig === v1 ? v2 : orig === v2 ? v1 : orig;\r\n}\r\n\r\nfunction parseBorderSkipped(vm) {\r\n\tvar edge = vm.borderSkipped;\r\n\tvar res = {};\r\n\r\n\tif (!edge) {\r\n\t\treturn res;\r\n\t}\r\n\r\n\tif (vm.horizontal) {\r\n\t\tif (vm.base > vm.x) {\r\n\t\t\tedge = swap(edge, 'left', 'right');\r\n\t\t}\r\n\t} else if (vm.base < vm.y) {\r\n\t\tedge = swap(edge, 'bottom', 'top');\r\n\t}\r\n\r\n\tres[edge] = true;\r\n\treturn res;\r\n}\r\n\r\nfunction parseBorderWidth(vm, maxW, maxH) {\r\n\tvar value = vm.borderWidth;\r\n\tvar skip = parseBorderSkipped(vm);\r\n\tvar t, r, b, l;\r\n\r\n\tif (helpers$1.isObject(value)) {\r\n\t\tt = +value.top || 0;\r\n\t\tr = +value.right || 0;\r\n\t\tb = +value.bottom || 0;\r\n\t\tl = +value.left || 0;\r\n\t} else {\r\n\t\tt = r = b = l = +value || 0;\r\n\t}\r\n\r\n\treturn {\r\n\t\tt: skip.top || (t < 0) ? 0 : t > maxH ? maxH : t,\r\n\t\tr: skip.right || (r < 0) ? 0 : r > maxW ? maxW : r,\r\n\t\tb: skip.bottom || (b < 0) ? 0 : b > maxH ? maxH : b,\r\n\t\tl: skip.left || (l < 0) ? 0 : l > maxW ? maxW : l\r\n\t};\r\n}\r\n\r\nfunction boundingRects(vm) {\r\n\tvar bounds = getBarBounds(vm);\r\n\tvar width = bounds.right - bounds.left;\r\n\tvar height = bounds.bottom - bounds.top;\r\n\tvar border = parseBorderWidth(vm, width / 2, height / 2);\r\n\r\n\treturn {\r\n\t\touter: {\r\n\t\t\tx: bounds.left,\r\n\t\t\ty: bounds.top,\r\n\t\t\tw: width,\r\n\t\t\th: height\r\n\t\t},\r\n\t\tinner: {\r\n\t\t\tx: bounds.left + border.l,\r\n\t\t\ty: bounds.top + border.t,\r\n\t\t\tw: width - border.l - border.r,\r\n\t\t\th: height - border.t - border.b\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction inRange(vm, x, y) {\r\n\tvar skipX = x === null;\r\n\tvar skipY = y === null;\r\n\tvar bounds = !vm || (skipX && skipY) ? false : getBarBounds(vm);\r\n\r\n\treturn bounds\r\n\t\t&& (skipX || x >= bounds.left && x <= bounds.right)\r\n\t\t&& (skipY || y >= bounds.top && y <= bounds.bottom);\r\n}\r\n\r\nvar element_rectangle = core_element.extend({\r\n\t_type: 'rectangle',\r\n\r\n\tdraw: function() {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\t\tvar rects = boundingRects(vm);\r\n\t\tvar outer = rects.outer;\r\n\t\tvar inner = rects.inner;\r\n\r\n\t\tctx.fillStyle = vm.backgroundColor;\r\n\t\tctx.fillRect(outer.x, outer.y, outer.w, outer.h);\r\n\r\n\t\tif (outer.w === inner.w && outer.h === inner.h) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\t\tctx.beginPath();\r\n\t\tctx.rect(outer.x, outer.y, outer.w, outer.h);\r\n\t\tctx.clip();\r\n\t\tctx.fillStyle = vm.borderColor;\r\n\t\tctx.rect(inner.x, inner.y, inner.w, inner.h);\r\n\t\tctx.fill('evenodd');\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\theight: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn vm.base - vm.y;\r\n\t},\r\n\r\n\tinRange: function(mouseX, mouseY) {\r\n\t\treturn inRange(this._view, mouseX, mouseY);\r\n\t},\r\n\r\n\tinLabelRange: function(mouseX, mouseY) {\r\n\t\tvar vm = this._view;\r\n\t\treturn isVertical(vm)\r\n\t\t\t? inRange(vm, mouseX, null)\r\n\t\t\t: inRange(vm, null, mouseY);\r\n\t},\r\n\r\n\tinXRange: function(mouseX) {\r\n\t\treturn inRange(this._view, mouseX, null);\r\n\t},\r\n\r\n\tinYRange: function(mouseY) {\r\n\t\treturn inRange(this._view, null, mouseY);\r\n\t},\r\n\r\n\tgetCenterPoint: function() {\r\n\t\tvar vm = this._view;\r\n\t\tvar x, y;\r\n\t\tif (isVertical(vm)) {\r\n\t\t\tx = vm.x;\r\n\t\t\ty = (vm.y + vm.base) / 2;\r\n\t\t} else {\r\n\t\t\tx = (vm.x + vm.base) / 2;\r\n\t\t\ty = vm.y;\r\n\t\t}\r\n\r\n\t\treturn {x: x, y: y};\r\n\t},\r\n\r\n\tgetArea: function() {\r\n\t\tvar vm = this._view;\r\n\r\n\t\treturn isVertical(vm)\r\n\t\t\t? vm.width * Math.abs(vm.y - vm.base)\r\n\t\t\t: vm.height * Math.abs(vm.x - vm.base);\r\n\t},\r\n\r\n\ttooltipPosition: function() {\r\n\t\tvar vm = this._view;\r\n\t\treturn {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y\r\n\t\t};\r\n\t}\r\n});\n\nvar elements = {};\r\nvar Arc = element_arc;\r\nvar Line = element_line;\r\nvar Point = element_point;\r\nvar Rectangle = element_rectangle;\nelements.Arc = Arc;\nelements.Line = Line;\nelements.Point = Point;\nelements.Rectangle = Rectangle;\n\nvar deprecated = helpers$1._deprecated;\r\nvar valueOrDefault$3 = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('bar', {\r\n\thover: {\r\n\t\tmode: 'label'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'category',\r\n\t\t\toffset: true,\r\n\t\t\tgridLines: {\r\n\t\t\t\toffsetGridLines: true\r\n\t\t\t}\r\n\t\t}],\r\n\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'linear'\r\n\t\t}]\r\n\t}\r\n});\r\n\r\ncore_defaults._set('global', {\r\n\tdatasets: {\r\n\t\tbar: {\r\n\t\t\tcategoryPercentage: 0.8,\r\n\t\t\tbarPercentage: 0.9\r\n\t\t}\r\n\t}\r\n});\r\n\r\n/**\r\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\r\n * @private\r\n */\r\nfunction computeMinSampleSize(scale, pixels) {\r\n\tvar min = scale._length;\r\n\tvar prev, curr, i, ilen;\r\n\r\n\tfor (i = 1, ilen = pixels.length; i < ilen; ++i) {\r\n\t\tmin = Math.min(min, Math.abs(pixels[i] - pixels[i - 1]));\r\n\t}\r\n\r\n\tfor (i = 0, ilen = scale.getTicks().length; i < ilen; ++i) {\r\n\t\tcurr = scale.getPixelForTick(i);\r\n\t\tmin = i > 0 ? Math.min(min, Math.abs(curr - prev)) : min;\r\n\t\tprev = curr;\r\n\t}\r\n\r\n\treturn min;\r\n}\r\n\r\n/**\r\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\r\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\r\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\r\n * @private\r\n */\r\nfunction computeFitCategoryTraits(index, ruler, options) {\r\n\tvar thickness = options.barThickness;\r\n\tvar count = ruler.stackCount;\r\n\tvar curr = ruler.pixels[index];\r\n\tvar min = helpers$1.isNullOrUndef(thickness)\r\n\t\t? computeMinSampleSize(ruler.scale, ruler.pixels)\r\n\t\t: -1;\r\n\tvar size, ratio;\r\n\r\n\tif (helpers$1.isNullOrUndef(thickness)) {\r\n\t\tsize = min * options.categoryPercentage;\r\n\t\tratio = options.barPercentage;\r\n\t} else {\r\n\t\t// When bar thickness is enforced, category and bar percentages are ignored.\r\n\t\t// Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\r\n\t\t// and deprecate barPercentage since this value is ignored when thickness is absolute.\r\n\t\tsize = thickness * count;\r\n\t\tratio = 1;\r\n\t}\r\n\r\n\treturn {\r\n\t\tchunk: size / count,\r\n\t\tratio: ratio,\r\n\t\tstart: curr - (size / 2)\r\n\t};\r\n}\r\n\r\n/**\r\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\r\n * percentage options are 1), based on the previous and following categories. This mode\r\n * generates bars with different widths when data are not evenly spaced.\r\n * @private\r\n */\r\nfunction computeFlexCategoryTraits(index, ruler, options) {\r\n\tvar pixels = ruler.pixels;\r\n\tvar curr = pixels[index];\r\n\tvar prev = index > 0 ? pixels[index - 1] : null;\r\n\tvar next = index < pixels.length - 1 ? pixels[index + 1] : null;\r\n\tvar percent = options.categoryPercentage;\r\n\tvar start, size;\r\n\r\n\tif (prev === null) {\r\n\t\t// first data: its size is double based on the next point or,\r\n\t\t// if it's also the last data, we use the scale size.\r\n\t\tprev = curr - (next === null ? ruler.end - ruler.start : next - curr);\r\n\t}\r\n\r\n\tif (next === null) {\r\n\t\t// last data: its size is also double based on the previous point.\r\n\t\tnext = curr + curr - prev;\r\n\t}\r\n\r\n\tstart = curr - (curr - Math.min(prev, next)) / 2 * percent;\r\n\tsize = Math.abs(next - prev) / 2 * percent;\r\n\r\n\treturn {\r\n\t\tchunk: size / ruler.stackCount,\r\n\t\tratio: options.barPercentage,\r\n\t\tstart: start\r\n\t};\r\n}\r\n\r\nvar controller_bar = core_datasetController.extend({\r\n\r\n\tdataElementType: elements.Rectangle,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderSkipped',\r\n\t\t'borderWidth',\r\n\t\t'barPercentage',\r\n\t\t'barThickness',\r\n\t\t'categoryPercentage',\r\n\t\t'maxBarThickness',\r\n\t\t'minBarLength'\r\n\t],\r\n\r\n\tinitialize: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta, scaleOpts;\r\n\r\n\t\tcore_datasetController.prototype.initialize.apply(me, arguments);\r\n\r\n\t\tmeta = me.getMeta();\r\n\t\tmeta.stack = me.getDataset().stack;\r\n\t\tmeta.bar = true;\r\n\r\n\t\tscaleOpts = me._getIndexScale().options;\r\n\t\tdeprecated('bar chart', scaleOpts.barPercentage, 'scales.[x/y]Axes.barPercentage', 'dataset.barPercentage');\r\n\t\tdeprecated('bar chart', scaleOpts.barThickness, 'scales.[x/y]Axes.barThickness', 'dataset.barThickness');\r\n\t\tdeprecated('bar chart', scaleOpts.categoryPercentage, 'scales.[x/y]Axes.categoryPercentage', 'dataset.categoryPercentage');\r\n\t\tdeprecated('bar chart', me._getValueScale().options.minBarLength, 'scales.[x/y]Axes.minBarLength', 'dataset.minBarLength');\r\n\t\tdeprecated('bar chart', scaleOpts.maxBarThickness, 'scales.[x/y]Axes.maxBarThickness', 'dataset.maxBarThickness');\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar rects = me.getMeta().data;\r\n\t\tvar i, ilen;\r\n\r\n\t\tme._ruler = me.getRuler();\r\n\r\n\t\tfor (i = 0, ilen = rects.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(rects[i], i, reset);\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(rectangle, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar options = me._resolveDataElementOptions(rectangle, index);\r\n\r\n\t\trectangle._xScale = me.getScaleForId(meta.xAxisID);\r\n\t\trectangle._yScale = me.getScaleForId(meta.yAxisID);\r\n\t\trectangle._datasetIndex = me.index;\r\n\t\trectangle._index = index;\r\n\t\trectangle._model = {\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderSkipped: options.borderSkipped,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\tdatasetLabel: dataset.label,\r\n\t\t\tlabel: me.chart.data.labels[index]\r\n\t\t};\r\n\r\n\t\tif (helpers$1.isArray(dataset.data[index])) {\r\n\t\t\trectangle._model.borderSkipped = null;\r\n\t\t}\r\n\r\n\t\tme._updateElementGeometry(rectangle, index, reset, options);\r\n\r\n\t\trectangle.pivot();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_updateElementGeometry: function(rectangle, index, reset, options) {\r\n\t\tvar me = this;\r\n\t\tvar model = rectangle._model;\r\n\t\tvar vscale = me._getValueScale();\r\n\t\tvar base = vscale.getBasePixel();\r\n\t\tvar horizontal = vscale.isHorizontal();\r\n\t\tvar ruler = me._ruler || me.getRuler();\r\n\t\tvar vpixels = me.calculateBarValuePixels(me.index, index, options);\r\n\t\tvar ipixels = me.calculateBarIndexPixels(me.index, index, ruler, options);\r\n\r\n\t\tmodel.horizontal = horizontal;\r\n\t\tmodel.base = reset ? base : vpixels.base;\r\n\t\tmodel.x = horizontal ? reset ? base : vpixels.head : ipixels.center;\r\n\t\tmodel.y = horizontal ? ipixels.center : reset ? base : vpixels.head;\r\n\t\tmodel.height = horizontal ? ipixels.size : undefined;\r\n\t\tmodel.width = horizontal ? undefined : ipixels.size;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the stacks based on groups and bar visibility.\r\n\t * @param {number} [last] - The dataset index\r\n\t * @returns {string[]} The list of stack IDs\r\n\t * @private\r\n\t */\r\n\t_getStacks: function(last) {\r\n\t\tvar me = this;\r\n\t\tvar scale = me._getIndexScale();\r\n\t\tvar metasets = scale._getMatchingVisibleMetas(me._type);\r\n\t\tvar stacked = scale.options.stacked;\r\n\t\tvar ilen = metasets.length;\r\n\t\tvar stacks = [];\r\n\t\tvar i, meta;\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tmeta = metasets[i];\r\n\t\t\t// stacked   | meta.stack\r\n\t\t\t//           | found | not found | undefined\r\n\t\t\t// false     |   x   |     x     |     x\r\n\t\t\t// true      |       |     x     |\r\n\t\t\t// undefined |       |     x     |     x\r\n\t\t\tif (stacked === false || stacks.indexOf(meta.stack) === -1 ||\r\n\t\t\t\t(stacked === undefined && meta.stack === undefined)) {\r\n\t\t\t\tstacks.push(meta.stack);\r\n\t\t\t}\r\n\t\t\tif (meta.index === last) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn stacks;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the effective number of stacks based on groups and bar visibility.\r\n\t * @private\r\n\t */\r\n\tgetStackCount: function() {\r\n\t\treturn this._getStacks().length;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the stack index for the given dataset based on groups and bar visibility.\r\n\t * @param {number} [datasetIndex] - The dataset index\r\n\t * @param {string} [name] - The stack name to find\r\n\t * @returns {number} The stack index\r\n\t * @private\r\n\t */\r\n\tgetStackIndex: function(datasetIndex, name) {\r\n\t\tvar stacks = this._getStacks(datasetIndex);\r\n\t\tvar index = (name !== undefined)\r\n\t\t\t? stacks.indexOf(name)\r\n\t\t\t: -1; // indexOf returns -1 if element is not present\r\n\r\n\t\treturn (index === -1)\r\n\t\t\t? stacks.length - 1\r\n\t\t\t: index;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tgetRuler: function() {\r\n\t\tvar me = this;\r\n\t\tvar scale = me._getIndexScale();\r\n\t\tvar pixels = [];\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) {\r\n\t\t\tpixels.push(scale.getPixelForValue(null, i, me.index));\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tpixels: pixels,\r\n\t\t\tstart: scale._startPixel,\r\n\t\t\tend: scale._endPixel,\r\n\t\t\tstackCount: me.getStackCount(),\r\n\t\t\tscale: scale\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Note: pixel values are not clamped to the scale area.\r\n\t * @private\r\n\t */\r\n\tcalculateBarValuePixels: function(datasetIndex, index, options) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar scale = me._getValueScale();\r\n\t\tvar isHorizontal = scale.isHorizontal();\r\n\t\tvar datasets = chart.data.datasets;\r\n\t\tvar metasets = scale._getMatchingVisibleMetas(me._type);\r\n\t\tvar value = scale._parseValue(datasets[datasetIndex].data[index]);\r\n\t\tvar minBarLength = options.minBarLength;\r\n\t\tvar stacked = scale.options.stacked;\r\n\t\tvar stack = me.getMeta().stack;\r\n\t\tvar start = value.start === undefined ? 0 : value.max >= 0 && value.min >= 0 ? value.min : value.max;\r\n\t\tvar length = value.start === undefined ? value.end : value.max >= 0 && value.min >= 0 ? value.max - value.min : value.min - value.max;\r\n\t\tvar ilen = metasets.length;\r\n\t\tvar i, imeta, ivalue, base, head, size, stackLength;\r\n\r\n\t\tif (stacked || (stacked === undefined && stack !== undefined)) {\r\n\t\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\t\timeta = metasets[i];\r\n\r\n\t\t\t\tif (imeta.index === datasetIndex) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (imeta.stack === stack) {\r\n\t\t\t\t\tstackLength = scale._parseValue(datasets[imeta.index].data[index]);\r\n\t\t\t\t\tivalue = stackLength.start === undefined ? stackLength.end : stackLength.min >= 0 && stackLength.max >= 0 ? stackLength.max : stackLength.min;\r\n\r\n\t\t\t\t\tif ((value.min < 0 && ivalue < 0) || (value.max >= 0 && ivalue > 0)) {\r\n\t\t\t\t\t\tstart += ivalue;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tbase = scale.getPixelForValue(start);\r\n\t\thead = scale.getPixelForValue(start + length);\r\n\t\tsize = head - base;\r\n\r\n\t\tif (minBarLength !== undefined && Math.abs(size) < minBarLength) {\r\n\t\t\tsize = minBarLength;\r\n\t\t\tif (length >= 0 && !isHorizontal || length < 0 && isHorizontal) {\r\n\t\t\t\thead = base - minBarLength;\r\n\t\t\t} else {\r\n\t\t\t\thead = base + minBarLength;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tsize: size,\r\n\t\t\tbase: base,\r\n\t\t\thead: head,\r\n\t\t\tcenter: head + size / 2\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tcalculateBarIndexPixels: function(datasetIndex, index, ruler, options) {\r\n\t\tvar me = this;\r\n\t\tvar range = options.barThickness === 'flex'\r\n\t\t\t? computeFlexCategoryTraits(index, ruler, options)\r\n\t\t\t: computeFitCategoryTraits(index, ruler, options);\r\n\r\n\t\tvar stackIndex = me.getStackIndex(datasetIndex, me.getMeta().stack);\r\n\t\tvar center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\r\n\t\tvar size = Math.min(\r\n\t\t\tvalueOrDefault$3(options.maxBarThickness, Infinity),\r\n\t\t\trange.chunk * range.ratio);\r\n\r\n\t\treturn {\r\n\t\t\tbase: center - size / 2,\r\n\t\t\thead: center + size / 2,\r\n\t\t\tcenter: center,\r\n\t\t\tsize: size\r\n\t\t};\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar scale = me._getValueScale();\r\n\t\tvar rects = me.getMeta().data;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar ilen = rects.length;\r\n\t\tvar i = 0;\r\n\r\n\t\thelpers$1.canvas.clipArea(chart.ctx, chart.chartArea);\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\tvar val = scale._parseValue(dataset.data[i]);\r\n\t\t\tif (!isNaN(val.min) && !isNaN(val.max)) {\r\n\t\t\t\trects[i].draw();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\thelpers$1.canvas.unclipArea(chart.ctx);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDataElementOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar values = helpers$1.extend({}, core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments));\r\n\t\tvar indexOpts = me._getIndexScale().options;\r\n\t\tvar valueOpts = me._getValueScale().options;\r\n\r\n\t\tvalues.barPercentage = valueOrDefault$3(indexOpts.barPercentage, values.barPercentage);\r\n\t\tvalues.barThickness = valueOrDefault$3(indexOpts.barThickness, values.barThickness);\r\n\t\tvalues.categoryPercentage = valueOrDefault$3(indexOpts.categoryPercentage, values.categoryPercentage);\r\n\t\tvalues.maxBarThickness = valueOrDefault$3(indexOpts.maxBarThickness, values.maxBarThickness);\r\n\t\tvalues.minBarLength = valueOrDefault$3(valueOpts.minBarLength, values.minBarLength);\r\n\r\n\t\treturn values;\r\n\t}\r\n\r\n});\n\nvar valueOrDefault$4 = helpers$1.valueOrDefault;\r\nvar resolve$1 = helpers$1.options.resolve;\r\n\r\ncore_defaults._set('bubble', {\r\n\thover: {\r\n\t\tmode: 'single'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'linear', // bubble should probably use a linear scale by default\r\n\t\t\tposition: 'bottom',\r\n\t\t\tid: 'x-axis-0' // need an ID so datasets can reference the scale\r\n\t\t}],\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'linear',\r\n\t\t\tposition: 'left',\r\n\t\t\tid: 'y-axis-0'\r\n\t\t}]\r\n\t},\r\n\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\t// Title doesn't make sense for scatter since we format the data as a point\r\n\t\t\t\treturn '';\r\n\t\t\t},\r\n\t\t\tlabel: function(item, data) {\r\n\t\t\t\tvar datasetLabel = data.datasets[item.datasetIndex].label || '';\r\n\t\t\t\tvar dataPoint = data.datasets[item.datasetIndex].data[item.index];\r\n\t\t\t\treturn datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_bubble = core_datasetController.extend({\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tdataElementType: elements.Point,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'hoverBackgroundColor',\r\n\t\t'hoverBorderColor',\r\n\t\t'hoverBorderWidth',\r\n\t\t'hoverRadius',\r\n\t\t'hitRadius',\r\n\t\t'pointStyle',\r\n\t\t'rotation'\r\n\t],\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar points = meta.data;\r\n\r\n\t\t// Update Points\r\n\t\thelpers$1.each(points, function(point, index) {\r\n\t\t\tme.updateElement(point, index, reset);\r\n\t\t});\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tupdateElement: function(point, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar xScale = me.getScaleForId(meta.xAxisID);\r\n\t\tvar yScale = me.getScaleForId(meta.yAxisID);\r\n\t\tvar options = me._resolveDataElementOptions(point, index);\r\n\t\tvar data = me.getDataset().data[index];\r\n\t\tvar dsIndex = me.index;\r\n\r\n\t\tvar x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex);\r\n\t\tvar y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);\r\n\r\n\t\tpoint._xScale = xScale;\r\n\t\tpoint._yScale = yScale;\r\n\t\tpoint._options = options;\r\n\t\tpoint._datasetIndex = dsIndex;\r\n\t\tpoint._index = index;\r\n\t\tpoint._model = {\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\thitRadius: options.hitRadius,\r\n\t\t\tpointStyle: options.pointStyle,\r\n\t\t\trotation: options.rotation,\r\n\t\t\tradius: reset ? 0 : options.radius,\r\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\r\n\t\t\tx: x,\r\n\t\t\ty: y,\r\n\t\t};\r\n\r\n\t\tpoint.pivot();\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(point) {\r\n\t\tvar model = point._model;\r\n\t\tvar options = point._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tpoint.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t\tradius: model.radius\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$4(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$4(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$4(options.hoverBorderWidth, options.borderWidth);\r\n\t\tmodel.radius = options.radius + options.hoverRadius;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDataElementOptions: function(point, index) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar data = dataset.data[index] || {};\r\n\t\tvar values = core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments);\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: chart,\r\n\t\t\tdataIndex: index,\r\n\t\t\tdataset: dataset,\r\n\t\t\tdatasetIndex: me.index\r\n\t\t};\r\n\r\n\t\t// In case values were cached (and thus frozen), we need to clone the values\r\n\t\tif (me._cachedDataOpts === values) {\r\n\t\t\tvalues = helpers$1.extend({}, values);\r\n\t\t}\r\n\r\n\t\t// Custom radius resolution\r\n\t\tvalues.radius = resolve$1([\r\n\t\t\tcustom.radius,\r\n\t\t\tdata.r,\r\n\t\t\tme._config.radius,\r\n\t\t\tchart.options.elements.point.radius\r\n\t\t], context, index);\r\n\r\n\t\treturn values;\r\n\t}\r\n});\n\nvar valueOrDefault$5 = helpers$1.valueOrDefault;\r\n\r\nvar PI$1 = Math.PI;\r\nvar DOUBLE_PI$1 = PI$1 * 2;\r\nvar HALF_PI$1 = PI$1 / 2;\r\n\r\ncore_defaults._set('doughnut', {\r\n\tanimation: {\r\n\t\t// Boolean - Whether we animate the rotation of the Doughnut\r\n\t\tanimateRotate: true,\r\n\t\t// Boolean - Whether we animate scaling the Doughnut from the centre\r\n\t\tanimateScale: false\r\n\t},\r\n\thover: {\r\n\t\tmode: 'single'\r\n\t},\r\n\tlegendCallback: function(chart) {\r\n\t\tvar list = document.createElement('ul');\r\n\t\tvar data = chart.data;\r\n\t\tvar datasets = data.datasets;\r\n\t\tvar labels = data.labels;\r\n\t\tvar i, ilen, listItem, listItemSpan;\r\n\r\n\t\tlist.setAttribute('class', chart.id + '-legend');\r\n\t\tif (datasets.length) {\r\n\t\t\tfor (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {\r\n\t\t\t\tlistItem = list.appendChild(document.createElement('li'));\r\n\t\t\t\tlistItemSpan = listItem.appendChild(document.createElement('span'));\r\n\t\t\t\tlistItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];\r\n\t\t\t\tif (labels[i]) {\r\n\t\t\t\t\tlistItem.appendChild(document.createTextNode(labels[i]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn list.outerHTML;\r\n\t},\r\n\tlegend: {\r\n\t\tlabels: {\r\n\t\t\tgenerateLabels: function(chart) {\r\n\t\t\t\tvar data = chart.data;\r\n\t\t\t\tif (data.labels.length && data.datasets.length) {\r\n\t\t\t\t\treturn data.labels.map(function(label, i) {\r\n\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\r\n\t\t\t\t\t\tvar style = meta.controller.getStyle(i);\r\n\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\ttext: label,\r\n\t\t\t\t\t\t\tfillStyle: style.backgroundColor,\r\n\t\t\t\t\t\t\tstrokeStyle: style.borderColor,\r\n\t\t\t\t\t\t\tlineWidth: style.borderWidth,\r\n\t\t\t\t\t\t\thidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,\r\n\r\n\t\t\t\t\t\t\t// Extra data used for toggling the correct item\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tonClick: function(e, legendItem) {\r\n\t\t\tvar index = legendItem.index;\r\n\t\t\tvar chart = this.chart;\r\n\t\t\tvar i, ilen, meta;\r\n\r\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\t// toggle visibility of index if exists\r\n\t\t\t\tif (meta.data[index]) {\r\n\t\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tchart.update();\r\n\t\t}\r\n\t},\r\n\r\n\t// The percentage of the chart that we cut out of the middle.\r\n\tcutoutPercentage: 50,\r\n\r\n\t// The rotation of the chart, where the first data arc begins.\r\n\trotation: -HALF_PI$1,\r\n\r\n\t// The total circumference of the chart.\r\n\tcircumference: DOUBLE_PI$1,\r\n\r\n\t// Need to override these to give a nice default\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\treturn '';\r\n\t\t\t},\r\n\t\t\tlabel: function(tooltipItem, data) {\r\n\t\t\t\tvar dataLabel = data.labels[tooltipItem.index];\r\n\t\t\t\tvar value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];\r\n\r\n\t\t\t\tif (helpers$1.isArray(dataLabel)) {\r\n\t\t\t\t\t// show value on first line of multiline label\r\n\t\t\t\t\t// need to clone because we are changing the value\r\n\t\t\t\t\tdataLabel = dataLabel.slice();\r\n\t\t\t\t\tdataLabel[0] += value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdataLabel += value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn dataLabel;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_doughnut = core_datasetController.extend({\r\n\r\n\tdataElementType: elements.Arc,\r\n\r\n\tlinkScales: helpers$1.noop,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'borderAlign',\r\n\t\t'hoverBackgroundColor',\r\n\t\t'hoverBorderColor',\r\n\t\t'hoverBorderWidth',\r\n\t],\r\n\r\n\t// Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly\r\n\tgetRingIndex: function(datasetIndex) {\r\n\t\tvar ringIndex = 0;\r\n\r\n\t\tfor (var j = 0; j < datasetIndex; ++j) {\r\n\t\t\tif (this.chart.isDatasetVisible(j)) {\r\n\t\t\t\t++ringIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ringIndex;\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar chartArea = chart.chartArea;\r\n\t\tvar opts = chart.options;\r\n\t\tvar ratioX = 1;\r\n\t\tvar ratioY = 1;\r\n\t\tvar offsetX = 0;\r\n\t\tvar offsetY = 0;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar arcs = meta.data;\r\n\t\tvar cutout = opts.cutoutPercentage / 100 || 0;\r\n\t\tvar circumference = opts.circumference;\r\n\t\tvar chartWeight = me._getRingWeight(me.index);\r\n\t\tvar maxWidth, maxHeight, i, ilen;\r\n\r\n\t\t// If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc\r\n\t\tif (circumference < DOUBLE_PI$1) {\r\n\t\t\tvar startAngle = opts.rotation % DOUBLE_PI$1;\r\n\t\t\tstartAngle += startAngle >= PI$1 ? -DOUBLE_PI$1 : startAngle < -PI$1 ? DOUBLE_PI$1 : 0;\r\n\t\t\tvar endAngle = startAngle + circumference;\r\n\t\t\tvar startX = Math.cos(startAngle);\r\n\t\t\tvar startY = Math.sin(startAngle);\r\n\t\t\tvar endX = Math.cos(endAngle);\r\n\t\t\tvar endY = Math.sin(endAngle);\r\n\t\t\tvar contains0 = (startAngle <= 0 && endAngle >= 0) || endAngle >= DOUBLE_PI$1;\r\n\t\t\tvar contains90 = (startAngle <= HALF_PI$1 && endAngle >= HALF_PI$1) || endAngle >= DOUBLE_PI$1 + HALF_PI$1;\r\n\t\t\tvar contains180 = startAngle === -PI$1 || endAngle >= PI$1;\r\n\t\t\tvar contains270 = (startAngle <= -HALF_PI$1 && endAngle >= -HALF_PI$1) || endAngle >= PI$1 + HALF_PI$1;\r\n\t\t\tvar minX = contains180 ? -1 : Math.min(startX, startX * cutout, endX, endX * cutout);\r\n\t\t\tvar minY = contains270 ? -1 : Math.min(startY, startY * cutout, endY, endY * cutout);\r\n\t\t\tvar maxX = contains0 ? 1 : Math.max(startX, startX * cutout, endX, endX * cutout);\r\n\t\t\tvar maxY = contains90 ? 1 : Math.max(startY, startY * cutout, endY, endY * cutout);\r\n\t\t\tratioX = (maxX - minX) / 2;\r\n\t\t\tratioY = (maxY - minY) / 2;\r\n\t\t\toffsetX = -(maxX + minX) / 2;\r\n\t\t\toffsetY = -(maxY + minY) / 2;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tarcs[i]._options = me._resolveDataElementOptions(arcs[i], i);\r\n\t\t}\r\n\r\n\t\tchart.borderWidth = me.getMaxBorderWidth();\r\n\t\tmaxWidth = (chartArea.right - chartArea.left - chart.borderWidth) / ratioX;\r\n\t\tmaxHeight = (chartArea.bottom - chartArea.top - chart.borderWidth) / ratioY;\r\n\t\tchart.outerRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\r\n\t\tchart.innerRadius = Math.max(chart.outerRadius * cutout, 0);\r\n\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / (me._getVisibleDatasetWeightTotal() || 1);\r\n\t\tchart.offsetX = offsetX * chart.outerRadius;\r\n\t\tchart.offsetY = offsetY * chart.outerRadius;\r\n\r\n\t\tmeta.total = me.calculateTotal();\r\n\r\n\t\tme.outerRadius = chart.outerRadius - chart.radiusLength * me._getRingWeightOffset(me.index);\r\n\t\tme.innerRadius = Math.max(me.outerRadius - chart.radiusLength * chartWeight, 0);\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(arcs[i], i, reset);\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(arc, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar chartArea = chart.chartArea;\r\n\t\tvar opts = chart.options;\r\n\t\tvar animationOpts = opts.animation;\r\n\t\tvar centerX = (chartArea.left + chartArea.right) / 2;\r\n\t\tvar centerY = (chartArea.top + chartArea.bottom) / 2;\r\n\t\tvar startAngle = opts.rotation; // non reset case handled later\r\n\t\tvar endAngle = opts.rotation; // non reset case handled later\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / DOUBLE_PI$1);\r\n\t\tvar innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius;\r\n\t\tvar outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius;\r\n\t\tvar options = arc._options || {};\r\n\r\n\t\thelpers$1.extend(arc, {\r\n\t\t\t// Utility\r\n\t\t\t_datasetIndex: me.index,\r\n\t\t\t_index: index,\r\n\r\n\t\t\t// Desired view properties\r\n\t\t\t_model: {\r\n\t\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\t\tborderColor: options.borderColor,\r\n\t\t\t\tborderWidth: options.borderWidth,\r\n\t\t\t\tborderAlign: options.borderAlign,\r\n\t\t\t\tx: centerX + chart.offsetX,\r\n\t\t\t\ty: centerY + chart.offsetY,\r\n\t\t\t\tstartAngle: startAngle,\r\n\t\t\t\tendAngle: endAngle,\r\n\t\t\t\tcircumference: circumference,\r\n\t\t\t\touterRadius: outerRadius,\r\n\t\t\t\tinnerRadius: innerRadius,\r\n\t\t\t\tlabel: helpers$1.valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tvar model = arc._model;\r\n\r\n\t\t// Set correct angles if not resetting\r\n\t\tif (!reset || !animationOpts.animateRotate) {\r\n\t\t\tif (index === 0) {\r\n\t\t\t\tmodel.startAngle = opts.rotation;\r\n\t\t\t} else {\r\n\t\t\t\tmodel.startAngle = me.getMeta().data[index - 1]._model.endAngle;\r\n\t\t\t}\r\n\r\n\t\t\tmodel.endAngle = model.startAngle + model.circumference;\r\n\t\t}\r\n\r\n\t\tarc.pivot();\r\n\t},\r\n\r\n\tcalculateTotal: function() {\r\n\t\tvar dataset = this.getDataset();\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar total = 0;\r\n\t\tvar value;\r\n\r\n\t\thelpers$1.each(meta.data, function(element, index) {\r\n\t\t\tvalue = dataset.data[index];\r\n\t\t\tif (!isNaN(value) && !element.hidden) {\r\n\t\t\t\ttotal += Math.abs(value);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t/* if (total === 0) {\r\n\t\t\ttotal = NaN;\r\n\t\t}*/\r\n\r\n\t\treturn total;\r\n\t},\r\n\r\n\tcalculateCircumference: function(value) {\r\n\t\tvar total = this.getMeta().total;\r\n\t\tif (total > 0 && !isNaN(value)) {\r\n\t\t\treturn DOUBLE_PI$1 * (Math.abs(value) / total);\r\n\t\t}\r\n\t\treturn 0;\r\n\t},\r\n\r\n\t// gets the max border or hover width to properly scale pie charts\r\n\tgetMaxBorderWidth: function(arcs) {\r\n\t\tvar me = this;\r\n\t\tvar max = 0;\r\n\t\tvar chart = me.chart;\r\n\t\tvar i, ilen, meta, arc, controller, options, borderWidth, hoverWidth;\r\n\r\n\t\tif (!arcs) {\r\n\t\t\t// Find the outmost visible dataset\r\n\t\t\tfor (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\r\n\t\t\t\tif (chart.isDatasetVisible(i)) {\r\n\t\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\t\tarcs = meta.data;\r\n\t\t\t\t\tif (i !== me.index) {\r\n\t\t\t\t\t\tcontroller = meta.controller;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!arcs) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tarc = arcs[i];\r\n\t\t\tif (controller) {\r\n\t\t\t\tcontroller._configure();\r\n\t\t\t\toptions = controller._resolveDataElementOptions(arc, i);\r\n\t\t\t} else {\r\n\t\t\t\toptions = arc._options;\r\n\t\t\t}\r\n\t\t\tif (options.borderAlign !== 'inner') {\r\n\t\t\t\tborderWidth = options.borderWidth;\r\n\t\t\t\thoverWidth = options.hoverBorderWidth;\r\n\r\n\t\t\t\tmax = borderWidth > max ? borderWidth : max;\r\n\t\t\t\tmax = hoverWidth > max ? hoverWidth : max;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn max;\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(arc) {\r\n\t\tvar model = arc._model;\r\n\t\tvar options = arc._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tarc.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$5(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$5(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$5(options.hoverBorderWidth, options.borderWidth);\r\n\t},\r\n\r\n\t/**\r\n\t * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\r\n\t * @private\r\n\t */\r\n\t_getRingWeightOffset: function(datasetIndex) {\r\n\t\tvar ringWeightOffset = 0;\r\n\r\n\t\tfor (var i = 0; i < datasetIndex; ++i) {\r\n\t\t\tif (this.chart.isDatasetVisible(i)) {\r\n\t\t\t\tringWeightOffset += this._getRingWeight(i);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ringWeightOffset;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getRingWeight: function(dataSetIndex) {\r\n\t\treturn Math.max(valueOrDefault$5(this.chart.data.datasets[dataSetIndex].weight, 1), 0);\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the sum of all visibile data set weights.  This value can be 0.\r\n\t * @private\r\n\t */\r\n\t_getVisibleDatasetWeightTotal: function() {\r\n\t\treturn this._getRingWeightOffset(this.chart.data.datasets.length);\r\n\t}\r\n});\n\ncore_defaults._set('horizontalBar', {\r\n\thover: {\r\n\t\tmode: 'index',\r\n\t\taxis: 'y'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'linear',\r\n\t\t\tposition: 'bottom'\r\n\t\t}],\r\n\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'category',\r\n\t\t\tposition: 'left',\r\n\t\t\toffset: true,\r\n\t\t\tgridLines: {\r\n\t\t\t\toffsetGridLines: true\r\n\t\t\t}\r\n\t\t}]\r\n\t},\r\n\r\n\telements: {\r\n\t\trectangle: {\r\n\t\t\tborderSkipped: 'left'\r\n\t\t}\r\n\t},\r\n\r\n\ttooltips: {\r\n\t\tmode: 'index',\r\n\t\taxis: 'y'\r\n\t}\r\n});\r\n\r\ncore_defaults._set('global', {\r\n\tdatasets: {\r\n\t\thorizontalBar: {\r\n\t\t\tcategoryPercentage: 0.8,\r\n\t\t\tbarPercentage: 0.9\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_horizontalBar = controller_bar.extend({\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.getMeta().xAxisID;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.getMeta().yAxisID;\r\n\t}\r\n});\n\nvar valueOrDefault$6 = helpers$1.valueOrDefault;\r\nvar resolve$2 = helpers$1.options.resolve;\r\nvar isPointInArea = helpers$1.canvas._isPointInArea;\r\n\r\ncore_defaults._set('line', {\r\n\tshowLines: true,\r\n\tspanGaps: false,\r\n\r\n\thover: {\r\n\t\tmode: 'label'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\ttype: 'category',\r\n\t\t\tid: 'x-axis-0'\r\n\t\t}],\r\n\t\tyAxes: [{\r\n\t\t\ttype: 'linear',\r\n\t\t\tid: 'y-axis-0'\r\n\t\t}]\r\n\t}\r\n});\r\n\r\nfunction scaleClip(scale, halfBorderWidth) {\r\n\tvar tickOpts = scale && scale.options.ticks || {};\r\n\tvar reverse = tickOpts.reverse;\r\n\tvar min = tickOpts.min === undefined ? halfBorderWidth : 0;\r\n\tvar max = tickOpts.max === undefined ? halfBorderWidth : 0;\r\n\treturn {\r\n\t\tstart: reverse ? max : min,\r\n\t\tend: reverse ? min : max\r\n\t};\r\n}\r\n\r\nfunction defaultClip(xScale, yScale, borderWidth) {\r\n\tvar halfBorderWidth = borderWidth / 2;\r\n\tvar x = scaleClip(xScale, halfBorderWidth);\r\n\tvar y = scaleClip(yScale, halfBorderWidth);\r\n\r\n\treturn {\r\n\t\ttop: y.end,\r\n\t\tright: x.end,\r\n\t\tbottom: y.start,\r\n\t\tleft: x.start\r\n\t};\r\n}\r\n\r\nfunction toClip(value) {\r\n\tvar t, r, b, l;\r\n\r\n\tif (helpers$1.isObject(value)) {\r\n\t\tt = value.top;\r\n\t\tr = value.right;\r\n\t\tb = value.bottom;\r\n\t\tl = value.left;\r\n\t} else {\r\n\t\tt = r = b = l = value;\r\n\t}\r\n\r\n\treturn {\r\n\t\ttop: t,\r\n\t\tright: r,\r\n\t\tbottom: b,\r\n\t\tleft: l\r\n\t};\r\n}\r\n\r\n\r\nvar controller_line = core_datasetController.extend({\r\n\r\n\tdatasetElementType: elements.Line,\r\n\r\n\tdataElementType: elements.Point,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_datasetElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderCapStyle',\r\n\t\t'borderColor',\r\n\t\t'borderDash',\r\n\t\t'borderDashOffset',\r\n\t\t'borderJoinStyle',\r\n\t\t'borderWidth',\r\n\t\t'cubicInterpolationMode',\r\n\t\t'fill'\r\n\t],\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: {\r\n\t\tbackgroundColor: 'pointBackgroundColor',\r\n\t\tborderColor: 'pointBorderColor',\r\n\t\tborderWidth: 'pointBorderWidth',\r\n\t\thitRadius: 'pointHitRadius',\r\n\t\thoverBackgroundColor: 'pointHoverBackgroundColor',\r\n\t\thoverBorderColor: 'pointHoverBorderColor',\r\n\t\thoverBorderWidth: 'pointHoverBorderWidth',\r\n\t\thoverRadius: 'pointHoverRadius',\r\n\t\tpointStyle: 'pointStyle',\r\n\t\tradius: 'pointRadius',\r\n\t\trotation: 'pointRotation'\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar line = meta.dataset;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar options = me.chart.options;\r\n\t\tvar config = me._config;\r\n\t\tvar showLine = me._showLine = valueOrDefault$6(config.showLine, options.showLines);\r\n\t\tvar i, ilen;\r\n\r\n\t\tme._xScale = me.getScaleForId(meta.xAxisID);\r\n\t\tme._yScale = me.getScaleForId(meta.yAxisID);\r\n\r\n\t\t// Update Line\r\n\t\tif (showLine) {\r\n\t\t\t// Compatibility: If the properties are defined with only the old name, use those values\r\n\t\t\tif (config.tension !== undefined && config.lineTension === undefined) {\r\n\t\t\t\tconfig.lineTension = config.tension;\r\n\t\t\t}\r\n\r\n\t\t\t// Utility\r\n\t\t\tline._scale = me._yScale;\r\n\t\t\tline._datasetIndex = me.index;\r\n\t\t\t// Data\r\n\t\t\tline._children = points;\r\n\t\t\t// Model\r\n\t\t\tline._model = me._resolveDatasetElementOptions(line);\r\n\r\n\t\t\tline.pivot();\r\n\t\t}\r\n\r\n\t\t// Update Points\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(points[i], i, reset);\r\n\t\t}\r\n\r\n\t\tif (showLine && line._model.tension !== 0) {\r\n\t\t\tme.updateBezierControlPoints();\r\n\t\t}\r\n\r\n\t\t// Now pivot the point for animation\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tpoints[i].pivot();\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(point, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar datasetIndex = me.index;\r\n\t\tvar value = dataset.data[index];\r\n\t\tvar xScale = me._xScale;\r\n\t\tvar yScale = me._yScale;\r\n\t\tvar lineModel = meta.dataset._model;\r\n\t\tvar x, y;\r\n\r\n\t\tvar options = me._resolveDataElementOptions(point, index);\r\n\r\n\t\tx = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex);\r\n\t\ty = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex);\r\n\r\n\t\t// Utility\r\n\t\tpoint._xScale = xScale;\r\n\t\tpoint._yScale = yScale;\r\n\t\tpoint._options = options;\r\n\t\tpoint._datasetIndex = datasetIndex;\r\n\t\tpoint._index = index;\r\n\r\n\t\t// Desired view properties\r\n\t\tpoint._model = {\r\n\t\t\tx: x,\r\n\t\t\ty: y,\r\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\r\n\t\t\t// Appearance\r\n\t\t\tradius: options.radius,\r\n\t\t\tpointStyle: options.pointStyle,\r\n\t\t\trotation: options.rotation,\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\ttension: valueOrDefault$6(custom.tension, lineModel ? lineModel.tension : 0),\r\n\t\t\tsteppedLine: lineModel ? lineModel.steppedLine : false,\r\n\t\t\t// Tooltip\r\n\t\t\thitRadius: options.hitRadius\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDatasetElementOptions: function(element) {\r\n\t\tvar me = this;\r\n\t\tvar config = me._config;\r\n\t\tvar custom = element.custom || {};\r\n\t\tvar options = me.chart.options;\r\n\t\tvar lineOptions = options.elements.line;\r\n\t\tvar values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments);\r\n\r\n\t\t// The default behavior of lines is to break at null values, according\r\n\t\t// to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158\r\n\t\t// This option gives lines the ability to span gaps\r\n\t\tvalues.spanGaps = valueOrDefault$6(config.spanGaps, options.spanGaps);\r\n\t\tvalues.tension = valueOrDefault$6(config.lineTension, lineOptions.tension);\r\n\t\tvalues.steppedLine = resolve$2([custom.steppedLine, config.steppedLine, lineOptions.stepped]);\r\n\t\tvalues.clip = toClip(valueOrDefault$6(config.clip, defaultClip(me._xScale, me._yScale, values.borderWidth)));\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\tcalculatePointY: function(value, index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar yScale = me._yScale;\r\n\t\tvar sumPos = 0;\r\n\t\tvar sumNeg = 0;\r\n\t\tvar i, ds, dsMeta, stackedRightValue, rightValue, metasets, ilen;\r\n\r\n\t\tif (yScale.options.stacked) {\r\n\t\t\trightValue = +yScale.getRightValue(value);\r\n\t\t\tmetasets = chart._getSortedVisibleDatasetMetas();\r\n\t\t\tilen = metasets.length;\r\n\r\n\t\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\t\tdsMeta = metasets[i];\r\n\t\t\t\tif (dsMeta.index === datasetIndex) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tds = chart.data.datasets[dsMeta.index];\r\n\t\t\t\tif (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id) {\r\n\t\t\t\t\tstackedRightValue = +yScale.getRightValue(ds.data[index]);\r\n\t\t\t\t\tif (stackedRightValue < 0) {\r\n\t\t\t\t\t\tsumNeg += stackedRightValue || 0;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tsumPos += stackedRightValue || 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (rightValue < 0) {\r\n\t\t\t\treturn yScale.getPixelForValue(sumNeg + rightValue);\r\n\t\t\t}\r\n\t\t\treturn yScale.getPixelForValue(sumPos + rightValue);\r\n\t\t}\r\n\t\treturn yScale.getPixelForValue(value);\r\n\t},\r\n\r\n\tupdateBezierControlPoints: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar lineModel = meta.dataset._model;\r\n\t\tvar area = chart.chartArea;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar i, ilen, model, controlPoints;\r\n\r\n\t\t// Only consider points that are drawn in case the spanGaps option is used\r\n\t\tif (lineModel.spanGaps) {\r\n\t\t\tpoints = points.filter(function(pt) {\r\n\t\t\t\treturn !pt._model.skip;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction capControlPoint(pt, min, max) {\r\n\t\t\treturn Math.max(Math.min(pt, max), min);\r\n\t\t}\r\n\r\n\t\tif (lineModel.cubicInterpolationMode === 'monotone') {\r\n\t\t\thelpers$1.splineCurveMonotone(points);\r\n\t\t} else {\r\n\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\t\tmodel = points[i]._model;\r\n\t\t\t\tcontrolPoints = helpers$1.splineCurve(\r\n\t\t\t\t\thelpers$1.previousItem(points, i)._model,\r\n\t\t\t\t\tmodel,\r\n\t\t\t\t\thelpers$1.nextItem(points, i)._model,\r\n\t\t\t\t\tlineModel.tension\r\n\t\t\t\t);\r\n\t\t\t\tmodel.controlPointPreviousX = controlPoints.previous.x;\r\n\t\t\t\tmodel.controlPointPreviousY = controlPoints.previous.y;\r\n\t\t\t\tmodel.controlPointNextX = controlPoints.next.x;\r\n\t\t\t\tmodel.controlPointNextY = controlPoints.next.y;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (chart.options.elements.line.capBezierPoints) {\r\n\t\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\t\tmodel = points[i]._model;\r\n\t\t\t\tif (isPointInArea(model, area)) {\r\n\t\t\t\t\tif (i > 0 && isPointInArea(points[i - 1]._model, area)) {\r\n\t\t\t\t\t\tmodel.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);\r\n\t\t\t\t\t\tmodel.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (i < points.length - 1 && isPointInArea(points[i + 1]._model, area)) {\r\n\t\t\t\t\t\tmodel.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);\r\n\t\t\t\t\t\tmodel.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar points = meta.data || [];\r\n\t\tvar area = chart.chartArea;\r\n\t\tvar canvas = chart.canvas;\r\n\t\tvar i = 0;\r\n\t\tvar ilen = points.length;\r\n\t\tvar clip;\r\n\r\n\t\tif (me._showLine) {\r\n\t\t\tclip = meta.dataset._model.clip;\r\n\r\n\t\t\thelpers$1.canvas.clipArea(chart.ctx, {\r\n\t\t\t\tleft: clip.left === false ? 0 : area.left - clip.left,\r\n\t\t\t\tright: clip.right === false ? canvas.width : area.right + clip.right,\r\n\t\t\t\ttop: clip.top === false ? 0 : area.top - clip.top,\r\n\t\t\t\tbottom: clip.bottom === false ? canvas.height : area.bottom + clip.bottom\r\n\t\t\t});\r\n\r\n\t\t\tmeta.dataset.draw();\r\n\r\n\t\t\thelpers$1.canvas.unclipArea(chart.ctx);\r\n\t\t}\r\n\r\n\t\t// Draw the points\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\tpoints[i].draw(area);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(point) {\r\n\t\tvar model = point._model;\r\n\t\tvar options = point._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tpoint.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t\tradius: model.radius\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$6(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$6(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$6(options.hoverBorderWidth, options.borderWidth);\r\n\t\tmodel.radius = valueOrDefault$6(options.hoverRadius, options.radius);\r\n\t},\r\n});\n\nvar resolve$3 = helpers$1.options.resolve;\r\n\r\ncore_defaults._set('polarArea', {\r\n\tscale: {\r\n\t\ttype: 'radialLinear',\r\n\t\tangleLines: {\r\n\t\t\tdisplay: false\r\n\t\t},\r\n\t\tgridLines: {\r\n\t\t\tcircular: true\r\n\t\t},\r\n\t\tpointLabels: {\r\n\t\t\tdisplay: false\r\n\t\t},\r\n\t\tticks: {\r\n\t\t\tbeginAtZero: true\r\n\t\t}\r\n\t},\r\n\r\n\t// Boolean - Whether to animate the rotation of the chart\r\n\tanimation: {\r\n\t\tanimateRotate: true,\r\n\t\tanimateScale: true\r\n\t},\r\n\r\n\tstartAngle: -0.5 * Math.PI,\r\n\tlegendCallback: function(chart) {\r\n\t\tvar list = document.createElement('ul');\r\n\t\tvar data = chart.data;\r\n\t\tvar datasets = data.datasets;\r\n\t\tvar labels = data.labels;\r\n\t\tvar i, ilen, listItem, listItemSpan;\r\n\r\n\t\tlist.setAttribute('class', chart.id + '-legend');\r\n\t\tif (datasets.length) {\r\n\t\t\tfor (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {\r\n\t\t\t\tlistItem = list.appendChild(document.createElement('li'));\r\n\t\t\t\tlistItemSpan = listItem.appendChild(document.createElement('span'));\r\n\t\t\t\tlistItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];\r\n\t\t\t\tif (labels[i]) {\r\n\t\t\t\t\tlistItem.appendChild(document.createTextNode(labels[i]));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn list.outerHTML;\r\n\t},\r\n\tlegend: {\r\n\t\tlabels: {\r\n\t\t\tgenerateLabels: function(chart) {\r\n\t\t\t\tvar data = chart.data;\r\n\t\t\t\tif (data.labels.length && data.datasets.length) {\r\n\t\t\t\t\treturn data.labels.map(function(label, i) {\r\n\t\t\t\t\t\tvar meta = chart.getDatasetMeta(0);\r\n\t\t\t\t\t\tvar style = meta.controller.getStyle(i);\r\n\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\ttext: label,\r\n\t\t\t\t\t\t\tfillStyle: style.backgroundColor,\r\n\t\t\t\t\t\t\tstrokeStyle: style.borderColor,\r\n\t\t\t\t\t\t\tlineWidth: style.borderWidth,\r\n\t\t\t\t\t\t\thidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,\r\n\r\n\t\t\t\t\t\t\t// Extra data used for toggling the correct item\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\treturn [];\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tonClick: function(e, legendItem) {\r\n\t\t\tvar index = legendItem.index;\r\n\t\t\tvar chart = this.chart;\r\n\t\t\tvar i, ilen, meta;\r\n\r\n\t\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\tmeta.data[index].hidden = !meta.data[index].hidden;\r\n\t\t\t}\r\n\r\n\t\t\tchart.update();\r\n\t\t}\r\n\t},\r\n\r\n\t// Need to override these to give a nice default\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\treturn '';\r\n\t\t\t},\r\n\t\t\tlabel: function(item, data) {\r\n\t\t\t\treturn data.labels[item.index] + ': ' + item.yLabel;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_polarArea = core_datasetController.extend({\r\n\r\n\tdataElementType: elements.Arc,\r\n\r\n\tlinkScales: helpers$1.noop,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderColor',\r\n\t\t'borderWidth',\r\n\t\t'borderAlign',\r\n\t\t'hoverBackgroundColor',\r\n\t\t'hoverBorderColor',\r\n\t\t'hoverBorderWidth',\r\n\t],\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar start = me.chart.options.startAngle || 0;\r\n\t\tvar starts = me._starts = [];\r\n\t\tvar angles = me._angles = [];\r\n\t\tvar arcs = meta.data;\r\n\t\tvar i, ilen, angle;\r\n\r\n\t\tme._updateRadius();\r\n\r\n\t\tmeta.count = me.countVisibleElements();\r\n\r\n\t\tfor (i = 0, ilen = dataset.data.length; i < ilen; i++) {\r\n\t\t\tstarts[i] = start;\r\n\t\t\tangle = me._computeAngle(i);\r\n\t\t\tangles[i] = angle;\r\n\t\t\tstart += angle;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = arcs.length; i < ilen; ++i) {\r\n\t\t\tarcs[i]._options = me._resolveDataElementOptions(arcs[i], i);\r\n\t\t\tme.updateElement(arcs[i], i, reset);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_updateRadius: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar chartArea = chart.chartArea;\r\n\t\tvar opts = chart.options;\r\n\t\tvar minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\r\n\r\n\t\tchart.outerRadius = Math.max(minSize / 2, 0);\r\n\t\tchart.innerRadius = Math.max(opts.cutoutPercentage ? (chart.outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\r\n\t\tchart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\r\n\r\n\t\tme.outerRadius = chart.outerRadius - (chart.radiusLength * me.index);\r\n\t\tme.innerRadius = me.outerRadius - chart.radiusLength;\r\n\t},\r\n\r\n\tupdateElement: function(arc, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar opts = chart.options;\r\n\t\tvar animationOpts = opts.animation;\r\n\t\tvar scale = chart.scale;\r\n\t\tvar labels = chart.data.labels;\r\n\r\n\t\tvar centerX = scale.xCenter;\r\n\t\tvar centerY = scale.yCenter;\r\n\r\n\t\t// var negHalfPI = -0.5 * Math.PI;\r\n\t\tvar datasetStartAngle = opts.startAngle;\r\n\t\tvar distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\r\n\t\tvar startAngle = me._starts[index];\r\n\t\tvar endAngle = startAngle + (arc.hidden ? 0 : me._angles[index]);\r\n\r\n\t\tvar resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\r\n\t\tvar options = arc._options || {};\r\n\r\n\t\thelpers$1.extend(arc, {\r\n\t\t\t// Utility\r\n\t\t\t_datasetIndex: me.index,\r\n\t\t\t_index: index,\r\n\t\t\t_scale: scale,\r\n\r\n\t\t\t// Desired view properties\r\n\t\t\t_model: {\r\n\t\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\t\tborderColor: options.borderColor,\r\n\t\t\t\tborderWidth: options.borderWidth,\r\n\t\t\t\tborderAlign: options.borderAlign,\r\n\t\t\t\tx: centerX,\r\n\t\t\t\ty: centerY,\r\n\t\t\t\tinnerRadius: 0,\r\n\t\t\t\touterRadius: reset ? resetRadius : distance,\r\n\t\t\t\tstartAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,\r\n\t\t\t\tendAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,\r\n\t\t\t\tlabel: helpers$1.valueAtIndexOrDefault(labels, index, labels[index])\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tarc.pivot();\r\n\t},\r\n\r\n\tcountVisibleElements: function() {\r\n\t\tvar dataset = this.getDataset();\r\n\t\tvar meta = this.getMeta();\r\n\t\tvar count = 0;\r\n\r\n\t\thelpers$1.each(meta.data, function(element, index) {\r\n\t\t\tif (!isNaN(dataset.data[index]) && !element.hidden) {\r\n\t\t\t\tcount++;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn count;\r\n\t},\r\n\r\n\t/**\r\n\t * @protected\r\n\t */\r\n\tsetHoverStyle: function(arc) {\r\n\t\tvar model = arc._model;\r\n\t\tvar options = arc._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\t\tvar valueOrDefault = helpers$1.valueOrDefault;\r\n\r\n\t\tarc.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault(options.hoverBorderWidth, options.borderWidth);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_computeAngle: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar count = this.getMeta().count;\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar meta = me.getMeta();\r\n\r\n\t\tif (isNaN(dataset.data[index]) || meta.data[index].hidden) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t// Scriptable options\r\n\t\tvar context = {\r\n\t\t\tchart: me.chart,\r\n\t\t\tdataIndex: index,\r\n\t\t\tdataset: dataset,\r\n\t\t\tdatasetIndex: me.index\r\n\t\t};\r\n\r\n\t\treturn resolve$3([\r\n\t\t\tme.chart.options.elements.arc.angle,\r\n\t\t\t(2 * Math.PI) / count\r\n\t\t], context, index);\r\n\t}\r\n});\n\ncore_defaults._set('pie', helpers$1.clone(core_defaults.doughnut));\r\ncore_defaults._set('pie', {\r\n\tcutoutPercentage: 0\r\n});\r\n\r\n// Pie charts are Doughnut chart with different defaults\r\nvar controller_pie = controller_doughnut;\n\nvar valueOrDefault$7 = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('radar', {\r\n\tspanGaps: false,\r\n\tscale: {\r\n\t\ttype: 'radialLinear'\r\n\t},\r\n\telements: {\r\n\t\tline: {\r\n\t\t\tfill: 'start',\r\n\t\t\ttension: 0 // no bezier in radar\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar controller_radar = core_datasetController.extend({\r\n\tdatasetElementType: elements.Line,\r\n\r\n\tdataElementType: elements.Point,\r\n\r\n\tlinkScales: helpers$1.noop,\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_datasetElementOptions: [\r\n\t\t'backgroundColor',\r\n\t\t'borderWidth',\r\n\t\t'borderColor',\r\n\t\t'borderCapStyle',\r\n\t\t'borderDash',\r\n\t\t'borderDashOffset',\r\n\t\t'borderJoinStyle',\r\n\t\t'fill'\r\n\t],\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_dataElementOptions: {\r\n\t\tbackgroundColor: 'pointBackgroundColor',\r\n\t\tborderColor: 'pointBorderColor',\r\n\t\tborderWidth: 'pointBorderWidth',\r\n\t\thitRadius: 'pointHitRadius',\r\n\t\thoverBackgroundColor: 'pointHoverBackgroundColor',\r\n\t\thoverBorderColor: 'pointHoverBorderColor',\r\n\t\thoverBorderWidth: 'pointHoverBorderWidth',\r\n\t\thoverRadius: 'pointHoverRadius',\r\n\t\tpointStyle: 'pointStyle',\r\n\t\tradius: 'pointRadius',\r\n\t\trotation: 'pointRotation'\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getIndexScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getValueScaleId: function() {\r\n\t\treturn this.chart.scale.id;\r\n\t},\r\n\r\n\tupdate: function(reset) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar line = meta.dataset;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar scale = me.chart.scale;\r\n\t\tvar config = me._config;\r\n\t\tvar i, ilen;\r\n\r\n\t\t// Compatibility: If the properties are defined with only the old name, use those values\r\n\t\tif (config.tension !== undefined && config.lineTension === undefined) {\r\n\t\t\tconfig.lineTension = config.tension;\r\n\t\t}\r\n\r\n\t\t// Utility\r\n\t\tline._scale = scale;\r\n\t\tline._datasetIndex = me.index;\r\n\t\t// Data\r\n\t\tline._children = points;\r\n\t\tline._loop = true;\r\n\t\t// Model\r\n\t\tline._model = me._resolveDatasetElementOptions(line);\r\n\r\n\t\tline.pivot();\r\n\r\n\t\t// Update Points\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tme.updateElement(points[i], i, reset);\r\n\t\t}\r\n\r\n\t\t// Update bezier control points\r\n\t\tme.updateBezierControlPoints();\r\n\r\n\t\t// Now pivot the point for animation\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tpoints[i].pivot();\r\n\t\t}\r\n\t},\r\n\r\n\tupdateElement: function(point, index, reset) {\r\n\t\tvar me = this;\r\n\t\tvar custom = point.custom || {};\r\n\t\tvar dataset = me.getDataset();\r\n\t\tvar scale = me.chart.scale;\r\n\t\tvar pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);\r\n\t\tvar options = me._resolveDataElementOptions(point, index);\r\n\t\tvar lineModel = me.getMeta().dataset._model;\r\n\t\tvar x = reset ? scale.xCenter : pointPosition.x;\r\n\t\tvar y = reset ? scale.yCenter : pointPosition.y;\r\n\r\n\t\t// Utility\r\n\t\tpoint._scale = scale;\r\n\t\tpoint._options = options;\r\n\t\tpoint._datasetIndex = me.index;\r\n\t\tpoint._index = index;\r\n\r\n\t\t// Desired view properties\r\n\t\tpoint._model = {\r\n\t\t\tx: x, // value not used in dataset scale, but we want a consistent API between scales\r\n\t\t\ty: y,\r\n\t\t\tskip: custom.skip || isNaN(x) || isNaN(y),\r\n\t\t\t// Appearance\r\n\t\t\tradius: options.radius,\r\n\t\t\tpointStyle: options.pointStyle,\r\n\t\t\trotation: options.rotation,\r\n\t\t\tbackgroundColor: options.backgroundColor,\r\n\t\t\tborderColor: options.borderColor,\r\n\t\t\tborderWidth: options.borderWidth,\r\n\t\t\ttension: valueOrDefault$7(custom.tension, lineModel ? lineModel.tension : 0),\r\n\r\n\t\t\t// Tooltip\r\n\t\t\thitRadius: options.hitRadius\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_resolveDatasetElementOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar config = me._config;\r\n\t\tvar options = me.chart.options;\r\n\t\tvar values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments);\r\n\r\n\t\tvalues.spanGaps = valueOrDefault$7(config.spanGaps, options.spanGaps);\r\n\t\tvalues.tension = valueOrDefault$7(config.lineTension, options.elements.line.tension);\r\n\r\n\t\treturn values;\r\n\t},\r\n\r\n\tupdateBezierControlPoints: function() {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getMeta();\r\n\t\tvar area = me.chart.chartArea;\r\n\t\tvar points = meta.data || [];\r\n\t\tvar i, ilen, model, controlPoints;\r\n\r\n\t\t// Only consider points that are drawn in case the spanGaps option is used\r\n\t\tif (meta.dataset._model.spanGaps) {\r\n\t\t\tpoints = points.filter(function(pt) {\r\n\t\t\t\treturn !pt._model.skip;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction capControlPoint(pt, min, max) {\r\n\t\t\treturn Math.max(Math.min(pt, max), min);\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = points.length; i < ilen; ++i) {\r\n\t\t\tmodel = points[i]._model;\r\n\t\t\tcontrolPoints = helpers$1.splineCurve(\r\n\t\t\t\thelpers$1.previousItem(points, i, true)._model,\r\n\t\t\t\tmodel,\r\n\t\t\t\thelpers$1.nextItem(points, i, true)._model,\r\n\t\t\t\tmodel.tension\r\n\t\t\t);\r\n\r\n\t\t\t// Prevent the bezier going outside of the bounds of the graph\r\n\t\t\tmodel.controlPointPreviousX = capControlPoint(controlPoints.previous.x, area.left, area.right);\r\n\t\t\tmodel.controlPointPreviousY = capControlPoint(controlPoints.previous.y, area.top, area.bottom);\r\n\t\t\tmodel.controlPointNextX = capControlPoint(controlPoints.next.x, area.left, area.right);\r\n\t\t\tmodel.controlPointNextY = capControlPoint(controlPoints.next.y, area.top, area.bottom);\r\n\t\t}\r\n\t},\r\n\r\n\tsetHoverStyle: function(point) {\r\n\t\tvar model = point._model;\r\n\t\tvar options = point._options;\r\n\t\tvar getHoverColor = helpers$1.getHoverColor;\r\n\r\n\t\tpoint.$previousStyle = {\r\n\t\t\tbackgroundColor: model.backgroundColor,\r\n\t\t\tborderColor: model.borderColor,\r\n\t\t\tborderWidth: model.borderWidth,\r\n\t\t\tradius: model.radius\r\n\t\t};\r\n\r\n\t\tmodel.backgroundColor = valueOrDefault$7(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\r\n\t\tmodel.borderColor = valueOrDefault$7(options.hoverBorderColor, getHoverColor(options.borderColor));\r\n\t\tmodel.borderWidth = valueOrDefault$7(options.hoverBorderWidth, options.borderWidth);\r\n\t\tmodel.radius = valueOrDefault$7(options.hoverRadius, options.radius);\r\n\t}\r\n});\n\ncore_defaults._set('scatter', {\r\n\thover: {\r\n\t\tmode: 'single'\r\n\t},\r\n\r\n\tscales: {\r\n\t\txAxes: [{\r\n\t\t\tid: 'x-axis-1',    // need an ID so datasets can reference the scale\r\n\t\t\ttype: 'linear',    // scatter should not use a category axis\r\n\t\t\tposition: 'bottom'\r\n\t\t}],\r\n\t\tyAxes: [{\r\n\t\t\tid: 'y-axis-1',\r\n\t\t\ttype: 'linear',\r\n\t\t\tposition: 'left'\r\n\t\t}]\r\n\t},\r\n\r\n\ttooltips: {\r\n\t\tcallbacks: {\r\n\t\t\ttitle: function() {\r\n\t\t\t\treturn '';     // doesn't make sense for scatter since data are formatted as a point\r\n\t\t\t},\r\n\t\t\tlabel: function(item) {\r\n\t\t\t\treturn '(' + item.xLabel + ', ' + item.yLabel + ')';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\ncore_defaults._set('global', {\r\n\tdatasets: {\r\n\t\tscatter: {\r\n\t\t\tshowLine: false\r\n\t\t}\r\n\t}\r\n});\r\n\r\n// Scatter charts use line controllers\r\nvar controller_scatter = controller_line;\n\n// NOTE export a map in which the key represents the controller type, not\r\n// the class, and so must be CamelCase in order to be correctly retrieved\r\n// by the controller in core.controller.js (`controllers[meta.type]`).\r\n\r\nvar controllers = {\r\n\tbar: controller_bar,\r\n\tbubble: controller_bubble,\r\n\tdoughnut: controller_doughnut,\r\n\thorizontalBar: controller_horizontalBar,\r\n\tline: controller_line,\r\n\tpolarArea: controller_polarArea,\r\n\tpie: controller_pie,\r\n\tradar: controller_radar,\r\n\tscatter: controller_scatter\r\n};\n\n/**\r\n * Helper function to get relative position for an event\r\n * @param {Event|IEvent} event - The event to get the position for\r\n * @param {Chart} chart - The chart\r\n * @returns {object} the event position\r\n */\r\nfunction getRelativePosition(e, chart) {\r\n\tif (e.native) {\r\n\t\treturn {\r\n\t\t\tx: e.x,\r\n\t\t\ty: e.y\r\n\t\t};\r\n\t}\r\n\r\n\treturn helpers$1.getRelativePosition(e, chart);\r\n}\r\n\r\n/**\r\n * Helper function to traverse all of the visible elements in the chart\r\n * @param {Chart} chart - the chart\r\n * @param {function} handler - the callback to execute for each visible item\r\n */\r\nfunction parseVisibleItems(chart, handler) {\r\n\tvar metasets = chart._getSortedVisibleDatasetMetas();\r\n\tvar metadata, i, j, ilen, jlen, element;\r\n\r\n\tfor (i = 0, ilen = metasets.length; i < ilen; ++i) {\r\n\t\tmetadata = metasets[i].data;\r\n\t\tfor (j = 0, jlen = metadata.length; j < jlen; ++j) {\r\n\t\t\telement = metadata[j];\r\n\t\t\tif (!element._view.skip) {\r\n\t\t\t\thandler(element);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Helper function to get the items that intersect the event position\r\n * @param {ChartElement[]} items - elements to filter\r\n * @param {object} position - the point to be nearest to\r\n * @return {ChartElement[]} the nearest items\r\n */\r\nfunction getIntersectItems(chart, position) {\r\n\tvar elements = [];\r\n\r\n\tparseVisibleItems(chart, function(element) {\r\n\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\telements.push(element);\r\n\t\t}\r\n\t});\r\n\r\n\treturn elements;\r\n}\r\n\r\n/**\r\n * Helper function to get the items nearest to the event position considering all visible items in teh chart\r\n * @param {Chart} chart - the chart to look at elements from\r\n * @param {object} position - the point to be nearest to\r\n * @param {boolean} intersect - if true, only consider items that intersect the position\r\n * @param {function} distanceMetric - function to provide the distance between points\r\n * @return {ChartElement[]} the nearest items\r\n */\r\nfunction getNearestItems(chart, position, intersect, distanceMetric) {\r\n\tvar minDistance = Number.POSITIVE_INFINITY;\r\n\tvar nearestItems = [];\r\n\r\n\tparseVisibleItems(chart, function(element) {\r\n\t\tif (intersect && !element.inRange(position.x, position.y)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar center = element.getCenterPoint();\r\n\t\tvar distance = distanceMetric(position, center);\r\n\t\tif (distance < minDistance) {\r\n\t\t\tnearestItems = [element];\r\n\t\t\tminDistance = distance;\r\n\t\t} else if (distance === minDistance) {\r\n\t\t\t// Can have multiple items at the same distance in which case we sort by size\r\n\t\t\tnearestItems.push(element);\r\n\t\t}\r\n\t});\r\n\r\n\treturn nearestItems;\r\n}\r\n\r\n/**\r\n * Get a distance metric function for two points based on the\r\n * axis mode setting\r\n * @param {string} axis - the axis mode. x|y|xy\r\n */\r\nfunction getDistanceMetricForAxis(axis) {\r\n\tvar useX = axis.indexOf('x') !== -1;\r\n\tvar useY = axis.indexOf('y') !== -1;\r\n\r\n\treturn function(pt1, pt2) {\r\n\t\tvar deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\r\n\t\tvar deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\r\n\t\treturn Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\r\n\t};\r\n}\r\n\r\nfunction indexMode(chart, e, options) {\r\n\tvar position = getRelativePosition(e, chart);\r\n\t// Default axis for index mode is 'x' to match old behaviour\r\n\toptions.axis = options.axis || 'x';\r\n\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\r\n\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\r\n\tvar elements = [];\r\n\r\n\tif (!items.length) {\r\n\t\treturn [];\r\n\t}\r\n\r\n\tchart._getSortedVisibleDatasetMetas().forEach(function(meta) {\r\n\t\tvar element = meta.data[items[0]._index];\r\n\r\n\t\t// don't count items that are skipped (null data)\r\n\t\tif (element && !element._view.skip) {\r\n\t\t\telements.push(element);\r\n\t\t}\r\n\t});\r\n\r\n\treturn elements;\r\n}\r\n\r\n/**\r\n * @interface IInteractionOptions\r\n */\r\n/**\r\n * If true, only consider items that intersect the point\r\n * @name IInterfaceOptions#boolean\r\n * @type Boolean\r\n */\r\n\r\n/**\r\n * Contains interaction related functions\r\n * @namespace Chart.Interaction\r\n */\r\nvar core_interaction = {\r\n\t// Helper function for different modes\r\n\tmodes: {\r\n\t\tsingle: function(chart, e) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\tvar elements = [];\r\n\r\n\t\t\tparseVisibleItems(chart, function(element) {\r\n\t\t\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\t\t\telements.push(element);\r\n\t\t\t\t\treturn elements;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\treturn elements.slice(0, 1);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * @function Chart.Interaction.modes.label\r\n\t\t * @deprecated since version 2.4.0\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\tlabel: indexMode,\r\n\r\n\t\t/**\r\n\t\t * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\r\n\t\t * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\r\n\t\t * @function Chart.Interaction.modes.index\r\n\t\t * @since v2.4.0\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use during interaction\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tindex: indexMode,\r\n\r\n\t\t/**\r\n\t\t * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\r\n\t\t * If the options.intersect is false, we find the nearest item and return the items in that dataset\r\n\t\t * @function Chart.Interaction.modes.dataset\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use during interaction\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tdataset: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\toptions.axis = options.axis || 'xy';\r\n\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\r\n\t\t\tvar items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\r\n\r\n\t\t\tif (items.length > 0) {\r\n\t\t\t\titems = chart.getDatasetMeta(items[0]._datasetIndex).data;\r\n\t\t\t}\r\n\r\n\t\t\treturn items;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * @function Chart.Interaction.modes.x-axis\r\n\t\t * @deprecated since version 2.4.0. Use index mode and intersect == true\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\t'x-axis': function(chart, e) {\r\n\t\t\treturn indexMode(chart, e, {intersect: false});\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Point mode returns all elements that hit test based on the event position\r\n\t\t * of the event\r\n\t\t * @function Chart.Interaction.modes.intersect\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tpoint: function(chart, e) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\treturn getIntersectItems(chart, position);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * nearest mode returns the element closest to the point\r\n\t\t * @function Chart.Interaction.modes.intersect\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tnearest: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\toptions.axis = options.axis || 'xy';\r\n\t\t\tvar distanceMetric = getDistanceMetricForAxis(options.axis);\r\n\t\t\treturn getNearestItems(chart, position, options.intersect, distanceMetric);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * x mode returns the elements that hit-test at the current x coordinate\r\n\t\t * @function Chart.Interaction.modes.x\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\tx: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\tvar items = [];\r\n\t\t\tvar intersectsItem = false;\r\n\r\n\t\t\tparseVisibleItems(chart, function(element) {\r\n\t\t\t\tif (element.inXRange(position.x)) {\r\n\t\t\t\t\titems.push(element);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\t\t\tintersectsItem = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// If we want to trigger on an intersect and we don't have any items\r\n\t\t\t// that intersect the position, return nothing\r\n\t\t\tif (options.intersect && !intersectsItem) {\r\n\t\t\t\titems = [];\r\n\t\t\t}\r\n\t\t\treturn items;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * y mode returns the elements that hit-test at the current y coordinate\r\n\t\t * @function Chart.Interaction.modes.y\r\n\t\t * @param {Chart} chart - the chart we are returning items from\r\n\t\t * @param {Event} e - the event we are find things at\r\n\t\t * @param {IInteractionOptions} options - options to use\r\n\t\t * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\r\n\t\t */\r\n\t\ty: function(chart, e, options) {\r\n\t\t\tvar position = getRelativePosition(e, chart);\r\n\t\t\tvar items = [];\r\n\t\t\tvar intersectsItem = false;\r\n\r\n\t\t\tparseVisibleItems(chart, function(element) {\r\n\t\t\t\tif (element.inYRange(position.y)) {\r\n\t\t\t\t\titems.push(element);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (element.inRange(position.x, position.y)) {\r\n\t\t\t\t\tintersectsItem = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// If we want to trigger on an intersect and we don't have any items\r\n\t\t\t// that intersect the position, return nothing\r\n\t\t\tif (options.intersect && !intersectsItem) {\r\n\t\t\t\titems = [];\r\n\t\t\t}\r\n\t\t\treturn items;\r\n\t\t}\r\n\t}\r\n};\n\nvar extend = helpers$1.extend;\r\n\r\nfunction filterByPosition(array, position) {\r\n\treturn helpers$1.where(array, function(v) {\r\n\t\treturn v.pos === position;\r\n\t});\r\n}\r\n\r\nfunction sortByWeight(array, reverse) {\r\n\treturn array.sort(function(a, b) {\r\n\t\tvar v0 = reverse ? b : a;\r\n\t\tvar v1 = reverse ? a : b;\r\n\t\treturn v0.weight === v1.weight ?\r\n\t\t\tv0.index - v1.index :\r\n\t\t\tv0.weight - v1.weight;\r\n\t});\r\n}\r\n\r\nfunction wrapBoxes(boxes) {\r\n\tvar layoutBoxes = [];\r\n\tvar i, ilen, box;\r\n\r\n\tfor (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\r\n\t\tbox = boxes[i];\r\n\t\tlayoutBoxes.push({\r\n\t\t\tindex: i,\r\n\t\t\tbox: box,\r\n\t\t\tpos: box.position,\r\n\t\t\thorizontal: box.isHorizontal(),\r\n\t\t\tweight: box.weight\r\n\t\t});\r\n\t}\r\n\treturn layoutBoxes;\r\n}\r\n\r\nfunction setLayoutDims(layouts, params) {\r\n\tvar i, ilen, layout;\r\n\tfor (i = 0, ilen = layouts.length; i < ilen; ++i) {\r\n\t\tlayout = layouts[i];\r\n\t\t// store width used instead of chartArea.w in fitBoxes\r\n\t\tlayout.width = layout.horizontal\r\n\t\t\t? layout.box.fullWidth && params.availableWidth\r\n\t\t\t: params.vBoxMaxWidth;\r\n\t\t// store height used instead of chartArea.h in fitBoxes\r\n\t\tlayout.height = layout.horizontal && params.hBoxMaxHeight;\r\n\t}\r\n}\r\n\r\nfunction buildLayoutBoxes(boxes) {\r\n\tvar layoutBoxes = wrapBoxes(boxes);\r\n\tvar left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\r\n\tvar right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\r\n\tvar top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\r\n\tvar bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\r\n\r\n\treturn {\r\n\t\tleftAndTop: left.concat(top),\r\n\t\trightAndBottom: right.concat(bottom),\r\n\t\tchartArea: filterByPosition(layoutBoxes, 'chartArea'),\r\n\t\tvertical: left.concat(right),\r\n\t\thorizontal: top.concat(bottom)\r\n\t};\r\n}\r\n\r\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\r\n\treturn Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\r\n}\r\n\r\nfunction updateDims(chartArea, params, layout) {\r\n\tvar box = layout.box;\r\n\tvar maxPadding = chartArea.maxPadding;\r\n\tvar newWidth, newHeight;\r\n\r\n\tif (layout.size) {\r\n\t\t// this layout was already counted for, lets first reduce old size\r\n\t\tchartArea[layout.pos] -= layout.size;\r\n\t}\r\n\tlayout.size = layout.horizontal ? box.height : box.width;\r\n\tchartArea[layout.pos] += layout.size;\r\n\r\n\tif (box.getPadding) {\r\n\t\tvar boxPadding = box.getPadding();\r\n\t\tmaxPadding.top = Math.max(maxPadding.top, boxPadding.top);\r\n\t\tmaxPadding.left = Math.max(maxPadding.left, boxPadding.left);\r\n\t\tmaxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\r\n\t\tmaxPadding.right = Math.max(maxPadding.right, boxPadding.right);\r\n\t}\r\n\r\n\tnewWidth = params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right');\r\n\tnewHeight = params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom');\r\n\r\n\tif (newWidth !== chartArea.w || newHeight !== chartArea.h) {\r\n\t\tchartArea.w = newWidth;\r\n\t\tchartArea.h = newHeight;\r\n\r\n\t\t// return true if chart area changed in layout's direction\r\n\t\tvar sizes = layout.horizontal ? [newWidth, chartArea.w] : [newHeight, chartArea.h];\r\n\t\treturn sizes[0] !== sizes[1] && (!isNaN(sizes[0]) || !isNaN(sizes[1]));\r\n\t}\r\n}\r\n\r\nfunction handleMaxPadding(chartArea) {\r\n\tvar maxPadding = chartArea.maxPadding;\r\n\r\n\tfunction updatePos(pos) {\r\n\t\tvar change = Math.max(maxPadding[pos] - chartArea[pos], 0);\r\n\t\tchartArea[pos] += change;\r\n\t\treturn change;\r\n\t}\r\n\tchartArea.y += updatePos('top');\r\n\tchartArea.x += updatePos('left');\r\n\tupdatePos('right');\r\n\tupdatePos('bottom');\r\n}\r\n\r\nfunction getMargins(horizontal, chartArea) {\r\n\tvar maxPadding = chartArea.maxPadding;\r\n\r\n\tfunction marginForPositions(positions) {\r\n\t\tvar margin = {left: 0, top: 0, right: 0, bottom: 0};\r\n\t\tpositions.forEach(function(pos) {\r\n\t\t\tmargin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\r\n\t\t});\r\n\t\treturn margin;\r\n\t}\r\n\r\n\treturn horizontal\r\n\t\t? marginForPositions(['left', 'right'])\r\n\t\t: marginForPositions(['top', 'bottom']);\r\n}\r\n\r\nfunction fitBoxes(boxes, chartArea, params) {\r\n\tvar refitBoxes = [];\r\n\tvar i, ilen, layout, box, refit, changed;\r\n\r\n\tfor (i = 0, ilen = boxes.length; i < ilen; ++i) {\r\n\t\tlayout = boxes[i];\r\n\t\tbox = layout.box;\r\n\r\n\t\tbox.update(\r\n\t\t\tlayout.width || chartArea.w,\r\n\t\t\tlayout.height || chartArea.h,\r\n\t\t\tgetMargins(layout.horizontal, chartArea)\r\n\t\t);\r\n\t\tif (updateDims(chartArea, params, layout)) {\r\n\t\t\tchanged = true;\r\n\t\t\tif (refitBoxes.length) {\r\n\t\t\t\t// Dimensions changed and there were non full width boxes before this\r\n\t\t\t\t// -> we have to refit those\r\n\t\t\t\trefit = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!box.fullWidth) { // fullWidth boxes don't need to be re-fitted in any case\r\n\t\t\trefitBoxes.push(layout);\r\n\t\t}\r\n\t}\r\n\r\n\treturn refit ? fitBoxes(refitBoxes, chartArea, params) || changed : changed;\r\n}\r\n\r\nfunction placeBoxes(boxes, chartArea, params) {\r\n\tvar userPadding = params.padding;\r\n\tvar x = chartArea.x;\r\n\tvar y = chartArea.y;\r\n\tvar i, ilen, layout, box;\r\n\r\n\tfor (i = 0, ilen = boxes.length; i < ilen; ++i) {\r\n\t\tlayout = boxes[i];\r\n\t\tbox = layout.box;\r\n\t\tif (layout.horizontal) {\r\n\t\t\tbox.left = box.fullWidth ? userPadding.left : chartArea.left;\r\n\t\t\tbox.right = box.fullWidth ? params.outerWidth - userPadding.right : chartArea.left + chartArea.w;\r\n\t\t\tbox.top = y;\r\n\t\t\tbox.bottom = y + box.height;\r\n\t\t\tbox.width = box.right - box.left;\r\n\t\t\ty = box.bottom;\r\n\t\t} else {\r\n\t\t\tbox.left = x;\r\n\t\t\tbox.right = x + box.width;\r\n\t\t\tbox.top = chartArea.top;\r\n\t\t\tbox.bottom = chartArea.top + chartArea.h;\r\n\t\t\tbox.height = box.bottom - box.top;\r\n\t\t\tx = box.right;\r\n\t\t}\r\n\t}\r\n\r\n\tchartArea.x = x;\r\n\tchartArea.y = y;\r\n}\r\n\r\ncore_defaults._set('global', {\r\n\tlayout: {\r\n\t\tpadding: {\r\n\t\t\ttop: 0,\r\n\t\t\tright: 0,\r\n\t\t\tbottom: 0,\r\n\t\t\tleft: 0\r\n\t\t}\r\n\t}\r\n});\r\n\r\n/**\r\n * @interface ILayoutItem\r\n * @prop {string} position - The position of the item in the chart layout. Possible values are\r\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\r\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\r\n * @prop {boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down\r\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\r\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\r\n * @prop {function} getPadding -  Returns an object with padding on the edges\r\n * @prop {number} width - Width of item. Must be valid after update()\r\n * @prop {number} height - Height of item. Must be valid after update()\r\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\r\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\r\n */\r\n\r\n// The layout service is very self explanatory.  It's responsible for the layout within a chart.\r\n// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\r\n// It is this service's responsibility of carrying out that layout.\r\nvar core_layouts = {\r\n\tdefaults: {},\r\n\r\n\t/**\r\n\t * Register a box to a chart.\r\n\t * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\r\n\t * @param {Chart} chart - the chart to use\r\n\t * @param {ILayoutItem} item - the item to add to be layed out\r\n\t */\r\n\taddBox: function(chart, item) {\r\n\t\tif (!chart.boxes) {\r\n\t\t\tchart.boxes = [];\r\n\t\t}\r\n\r\n\t\t// initialize item with default values\r\n\t\titem.fullWidth = item.fullWidth || false;\r\n\t\titem.position = item.position || 'top';\r\n\t\titem.weight = item.weight || 0;\r\n\t\titem._layers = item._layers || function() {\r\n\t\t\treturn [{\r\n\t\t\t\tz: 0,\r\n\t\t\t\tdraw: function() {\r\n\t\t\t\t\titem.draw.apply(item, arguments);\r\n\t\t\t\t}\r\n\t\t\t}];\r\n\t\t};\r\n\r\n\t\tchart.boxes.push(item);\r\n\t},\r\n\r\n\t/**\r\n\t * Remove a layoutItem from a chart\r\n\t * @param {Chart} chart - the chart to remove the box from\r\n\t * @param {ILayoutItem} layoutItem - the item to remove from the layout\r\n\t */\r\n\tremoveBox: function(chart, layoutItem) {\r\n\t\tvar index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\r\n\t\tif (index !== -1) {\r\n\t\t\tchart.boxes.splice(index, 1);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Sets (or updates) options on the given `item`.\r\n\t * @param {Chart} chart - the chart in which the item lives (or will be added to)\r\n\t * @param {ILayoutItem} item - the item to configure with the given options\r\n\t * @param {object} options - the new item options.\r\n\t */\r\n\tconfigure: function(chart, item, options) {\r\n\t\tvar props = ['fullWidth', 'position', 'weight'];\r\n\t\tvar ilen = props.length;\r\n\t\tvar i = 0;\r\n\t\tvar prop;\r\n\r\n\t\tfor (; i < ilen; ++i) {\r\n\t\t\tprop = props[i];\r\n\t\t\tif (options.hasOwnProperty(prop)) {\r\n\t\t\t\titem[prop] = options[prop];\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Fits boxes of the given chart into the given size by having each box measure itself\r\n\t * then running a fitting algorithm\r\n\t * @param {Chart} chart - the chart\r\n\t * @param {number} width - the width to fit into\r\n\t * @param {number} height - the height to fit into\r\n\t */\r\n\tupdate: function(chart, width, height) {\r\n\t\tif (!chart) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar layoutOptions = chart.options.layout || {};\r\n\t\tvar padding = helpers$1.options.toPadding(layoutOptions.padding);\r\n\r\n\t\tvar availableWidth = width - padding.width;\r\n\t\tvar availableHeight = height - padding.height;\r\n\t\tvar boxes = buildLayoutBoxes(chart.boxes);\r\n\t\tvar verticalBoxes = boxes.vertical;\r\n\t\tvar horizontalBoxes = boxes.horizontal;\r\n\r\n\t\t// Essentially we now have any number of boxes on each of the 4 sides.\r\n\t\t// Our canvas looks like the following.\r\n\t\t// The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\r\n\t\t// B1 is the bottom axis\r\n\t\t// There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\r\n\t\t// These locations are single-box locations only, when trying to register a chartArea location that is already taken,\r\n\t\t// an error will be thrown.\r\n\t\t//\r\n\t\t// |----------------------------------------------------|\r\n\t\t// |                  T1 (Full Width)                   |\r\n\t\t// |----------------------------------------------------|\r\n\t\t// |    |    |                 T2                  |    |\r\n\t\t// |    |----|-------------------------------------|----|\r\n\t\t// |    |    | C1 |                           | C2 |    |\r\n\t\t// |    |    |----|                           |----|    |\r\n\t\t// |    |    |                                     |    |\r\n\t\t// | L1 | L2 |           ChartArea (C0)            | R1 |\r\n\t\t// |    |    |                                     |    |\r\n\t\t// |    |    |----|                           |----|    |\r\n\t\t// |    |    | C3 |                           | C4 |    |\r\n\t\t// |    |----|-------------------------------------|----|\r\n\t\t// |    |    |                 B1                  |    |\r\n\t\t// |----------------------------------------------------|\r\n\t\t// |                  B2 (Full Width)                   |\r\n\t\t// |----------------------------------------------------|\r\n\t\t//\r\n\r\n\t\tvar params = Object.freeze({\r\n\t\t\touterWidth: width,\r\n\t\t\touterHeight: height,\r\n\t\t\tpadding: padding,\r\n\t\t\tavailableWidth: availableWidth,\r\n\t\t\tvBoxMaxWidth: availableWidth / 2 / verticalBoxes.length,\r\n\t\t\thBoxMaxHeight: availableHeight / 2\r\n\t\t});\r\n\t\tvar chartArea = extend({\r\n\t\t\tmaxPadding: extend({}, padding),\r\n\t\t\tw: availableWidth,\r\n\t\t\th: availableHeight,\r\n\t\t\tx: padding.left,\r\n\t\t\ty: padding.top\r\n\t\t}, padding);\r\n\r\n\t\tsetLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\r\n\r\n\t\t// First fit vertical boxes\r\n\t\tfitBoxes(verticalBoxes, chartArea, params);\r\n\r\n\t\t// Then fit horizontal boxes\r\n\t\tif (fitBoxes(horizontalBoxes, chartArea, params)) {\r\n\t\t\t// if the area changed, re-fit vertical boxes\r\n\t\t\tfitBoxes(verticalBoxes, chartArea, params);\r\n\t\t}\r\n\r\n\t\thandleMaxPadding(chartArea);\r\n\r\n\t\t// Finally place the boxes to correct coordinates\r\n\t\tplaceBoxes(boxes.leftAndTop, chartArea, params);\r\n\r\n\t\t// Move to opposite side of chart\r\n\t\tchartArea.x += chartArea.w;\r\n\t\tchartArea.y += chartArea.h;\r\n\r\n\t\tplaceBoxes(boxes.rightAndBottom, chartArea, params);\r\n\r\n\t\tchart.chartArea = {\r\n\t\t\tleft: chartArea.left,\r\n\t\t\ttop: chartArea.top,\r\n\t\t\tright: chartArea.left + chartArea.w,\r\n\t\t\tbottom: chartArea.top + chartArea.h\r\n\t\t};\r\n\r\n\t\t// Finally update boxes in chartArea (radial scale for example)\r\n\t\thelpers$1.each(boxes.chartArea, function(layout) {\r\n\t\t\tvar box = layout.box;\r\n\t\t\textend(box, chart.chartArea);\r\n\t\t\tbox.update(chartArea.w, chartArea.h);\r\n\t\t});\r\n\t}\r\n};\n\n/**\r\n * Platform fallback implementation (minimal).\r\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\r\n */\r\n\r\nvar platform_basic = {\r\n\tacquireContext: function(item) {\r\n\t\tif (item && item.canvas) {\r\n\t\t\t// Support for any object associated to a canvas (including a context2d)\r\n\t\t\titem = item.canvas;\r\n\t\t}\r\n\r\n\t\treturn item && item.getContext('2d') || null;\r\n\t}\r\n};\n\nvar platform_dom = \"/*\\r\\n * DOM element rendering detection\\r\\n * https://davidwalsh.name/detect-node-insertion\\r\\n */\\r\\n@keyframes chartjs-render-animation {\\r\\n\\tfrom { opacity: 0.99; }\\r\\n\\tto { opacity: 1; }\\r\\n}\\r\\n\\r\\n.chartjs-render-monitor {\\r\\n\\tanimation: chartjs-render-animation 0.001s;\\r\\n}\\r\\n\\r\\n/*\\r\\n * DOM element resizing detection\\r\\n * https://github.com/marcj/css-element-queries\\r\\n */\\r\\n.chartjs-size-monitor,\\r\\n.chartjs-size-monitor-expand,\\r\\n.chartjs-size-monitor-shrink {\\r\\n\\tposition: absolute;\\r\\n\\tdirection: ltr;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n\\tright: 0;\\r\\n\\tbottom: 0;\\r\\n\\toverflow: hidden;\\r\\n\\tpointer-events: none;\\r\\n\\tvisibility: hidden;\\r\\n\\tz-index: -1;\\r\\n}\\r\\n\\r\\n.chartjs-size-monitor-expand > div {\\r\\n\\tposition: absolute;\\r\\n\\twidth: 1000000px;\\r\\n\\theight: 1000000px;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n}\\r\\n\\r\\n.chartjs-size-monitor-shrink > div {\\r\\n\\tposition: absolute;\\r\\n\\twidth: 200%;\\r\\n\\theight: 200%;\\r\\n\\tleft: 0;\\r\\n\\ttop: 0;\\r\\n}\\r\\n\";\n\nvar platform_dom$1 = /*#__PURE__*/Object.freeze({\n__proto__: null,\n'default': platform_dom\n});\n\nvar stylesheet = getCjsExportFromNamespace(platform_dom$1);\n\nvar EXPANDO_KEY = '$chartjs';\r\nvar CSS_PREFIX = 'chartjs-';\r\nvar CSS_SIZE_MONITOR = CSS_PREFIX + 'size-monitor';\r\nvar CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor';\r\nvar CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation';\r\nvar ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart'];\r\n\r\n/**\r\n * DOM event types -> Chart.js event types.\r\n * Note: only events with different types are mapped.\r\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\r\n */\r\nvar EVENT_TYPES = {\r\n\ttouchstart: 'mousedown',\r\n\ttouchmove: 'mousemove',\r\n\ttouchend: 'mouseup',\r\n\tpointerenter: 'mouseenter',\r\n\tpointerdown: 'mousedown',\r\n\tpointermove: 'mousemove',\r\n\tpointerup: 'mouseup',\r\n\tpointerleave: 'mouseout',\r\n\tpointerout: 'mouseout'\r\n};\r\n\r\n/**\r\n * The \"used\" size is the final value of a dimension property after all calculations have\r\n * been performed. This method uses the computed style of `element` but returns undefined\r\n * if the computed style is not expressed in pixels. That can happen in some cases where\r\n * `element` has a size relative to its parent and this last one is not yet displayed,\r\n * for example because of `display: none` on a parent node.\r\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\r\n * @returns {number} Size in pixels or undefined if unknown.\r\n */\r\nfunction readUsedSize(element, property) {\r\n\tvar value = helpers$1.getStyle(element, property);\r\n\tvar matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\r\n\treturn matches ? Number(matches[1]) : undefined;\r\n}\r\n\r\n/**\r\n * Initializes the canvas style and render size without modifying the canvas display size,\r\n * since responsiveness is handled by the controller.resize() method. The config is used\r\n * to determine the aspect ratio to apply in case no explicit height has been specified.\r\n */\r\nfunction initCanvas(canvas, config) {\r\n\tvar style = canvas.style;\r\n\r\n\t// NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\r\n\t// returns null or '' if no explicit value has been set to the canvas attribute.\r\n\tvar renderHeight = canvas.getAttribute('height');\r\n\tvar renderWidth = canvas.getAttribute('width');\r\n\r\n\t// Chart.js modifies some canvas values that we want to restore on destroy\r\n\tcanvas[EXPANDO_KEY] = {\r\n\t\tinitial: {\r\n\t\t\theight: renderHeight,\r\n\t\t\twidth: renderWidth,\r\n\t\t\tstyle: {\r\n\t\t\t\tdisplay: style.display,\r\n\t\t\t\theight: style.height,\r\n\t\t\t\twidth: style.width\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Force canvas to display as block to avoid extra space caused by inline\r\n\t// elements, which would interfere with the responsive resize process.\r\n\t// https://github.com/chartjs/Chart.js/issues/2538\r\n\tstyle.display = style.display || 'block';\r\n\r\n\tif (renderWidth === null || renderWidth === '') {\r\n\t\tvar displayWidth = readUsedSize(canvas, 'width');\r\n\t\tif (displayWidth !== undefined) {\r\n\t\t\tcanvas.width = displayWidth;\r\n\t\t}\r\n\t}\r\n\r\n\tif (renderHeight === null || renderHeight === '') {\r\n\t\tif (canvas.style.height === '') {\r\n\t\t\t// If no explicit render height and style height, let's apply the aspect ratio,\r\n\t\t\t// which one can be specified by the user but also by charts as default option\r\n\t\t\t// (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\r\n\t\t\tcanvas.height = canvas.width / (config.options.aspectRatio || 2);\r\n\t\t} else {\r\n\t\t\tvar displayHeight = readUsedSize(canvas, 'height');\r\n\t\t\tif (displayWidth !== undefined) {\r\n\t\t\t\tcanvas.height = displayHeight;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn canvas;\r\n}\r\n\r\n/**\r\n * Detects support for options object argument in addEventListener.\r\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\r\n * @private\r\n */\r\nvar supportsEventListenerOptions = (function() {\r\n\tvar supports = false;\r\n\ttry {\r\n\t\tvar options = Object.defineProperty({}, 'passive', {\r\n\t\t\t// eslint-disable-next-line getter-return\r\n\t\t\tget: function() {\r\n\t\t\t\tsupports = true;\r\n\t\t\t}\r\n\t\t});\r\n\t\twindow.addEventListener('e', null, options);\r\n\t} catch (e) {\r\n\t\t// continue regardless of error\r\n\t}\r\n\treturn supports;\r\n}());\r\n\r\n// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\r\n// https://github.com/chartjs/Chart.js/issues/4287\r\nvar eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\r\n\r\nfunction addListener(node, type, listener) {\r\n\tnode.addEventListener(type, listener, eventListenerOptions);\r\n}\r\n\r\nfunction removeListener(node, type, listener) {\r\n\tnode.removeEventListener(type, listener, eventListenerOptions);\r\n}\r\n\r\nfunction createEvent(type, chart, x, y, nativeEvent) {\r\n\treturn {\r\n\t\ttype: type,\r\n\t\tchart: chart,\r\n\t\tnative: nativeEvent || null,\r\n\t\tx: x !== undefined ? x : null,\r\n\t\ty: y !== undefined ? y : null,\r\n\t};\r\n}\r\n\r\nfunction fromNativeEvent(event, chart) {\r\n\tvar type = EVENT_TYPES[event.type] || event.type;\r\n\tvar pos = helpers$1.getRelativePosition(event, chart);\r\n\treturn createEvent(type, chart, pos.x, pos.y, event);\r\n}\r\n\r\nfunction throttled(fn, thisArg) {\r\n\tvar ticking = false;\r\n\tvar args = [];\r\n\r\n\treturn function() {\r\n\t\targs = Array.prototype.slice.call(arguments);\r\n\t\tthisArg = thisArg || this;\r\n\r\n\t\tif (!ticking) {\r\n\t\t\tticking = true;\r\n\t\t\thelpers$1.requestAnimFrame.call(window, function() {\r\n\t\t\t\tticking = false;\r\n\t\t\t\tfn.apply(thisArg, args);\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction createDiv(cls) {\r\n\tvar el = document.createElement('div');\r\n\tel.className = cls || '';\r\n\treturn el;\r\n}\r\n\r\n// Implementation based on https://github.com/marcj/css-element-queries\r\nfunction createResizer(handler) {\r\n\tvar maxSize = 1000000;\r\n\r\n\t// NOTE(SB) Don't use innerHTML because it could be considered unsafe.\r\n\t// https://github.com/chartjs/Chart.js/issues/5902\r\n\tvar resizer = createDiv(CSS_SIZE_MONITOR);\r\n\tvar expand = createDiv(CSS_SIZE_MONITOR + '-expand');\r\n\tvar shrink = createDiv(CSS_SIZE_MONITOR + '-shrink');\r\n\r\n\texpand.appendChild(createDiv());\r\n\tshrink.appendChild(createDiv());\r\n\r\n\tresizer.appendChild(expand);\r\n\tresizer.appendChild(shrink);\r\n\tresizer._reset = function() {\r\n\t\texpand.scrollLeft = maxSize;\r\n\t\texpand.scrollTop = maxSize;\r\n\t\tshrink.scrollLeft = maxSize;\r\n\t\tshrink.scrollTop = maxSize;\r\n\t};\r\n\r\n\tvar onScroll = function() {\r\n\t\tresizer._reset();\r\n\t\thandler();\r\n\t};\r\n\r\n\taddListener(expand, 'scroll', onScroll.bind(expand, 'expand'));\r\n\taddListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink'));\r\n\r\n\treturn resizer;\r\n}\r\n\r\n// https://davidwalsh.name/detect-node-insertion\r\nfunction watchForRender(node, handler) {\r\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\r\n\tvar proxy = expando.renderProxy = function(e) {\r\n\t\tif (e.animationName === CSS_RENDER_ANIMATION) {\r\n\t\t\thandler();\r\n\t\t}\r\n\t};\r\n\r\n\thelpers$1.each(ANIMATION_START_EVENTS, function(type) {\r\n\t\taddListener(node, type, proxy);\r\n\t});\r\n\r\n\t// #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class\r\n\t// is removed then added back immediately (same animation frame?). Accessing the\r\n\t// `offsetParent` property will force a reflow and re-evaluate the CSS animation.\r\n\t// https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics\r\n\t// https://github.com/chartjs/Chart.js/issues/4737\r\n\texpando.reflow = !!node.offsetParent;\r\n\r\n\tnode.classList.add(CSS_RENDER_MONITOR);\r\n}\r\n\r\nfunction unwatchForRender(node) {\r\n\tvar expando = node[EXPANDO_KEY] || {};\r\n\tvar proxy = expando.renderProxy;\r\n\r\n\tif (proxy) {\r\n\t\thelpers$1.each(ANIMATION_START_EVENTS, function(type) {\r\n\t\t\tremoveListener(node, type, proxy);\r\n\t\t});\r\n\r\n\t\tdelete expando.renderProxy;\r\n\t}\r\n\r\n\tnode.classList.remove(CSS_RENDER_MONITOR);\r\n}\r\n\r\nfunction addResizeListener(node, listener, chart) {\r\n\tvar expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\r\n\r\n\t// Let's keep track of this added resizer and thus avoid DOM query when removing it.\r\n\tvar resizer = expando.resizer = createResizer(throttled(function() {\r\n\t\tif (expando.resizer) {\r\n\t\t\tvar container = chart.options.maintainAspectRatio && node.parentNode;\r\n\t\t\tvar w = container ? container.clientWidth : 0;\r\n\t\t\tlistener(createEvent('resize', chart));\r\n\t\t\tif (container && container.clientWidth < w && chart.canvas) {\r\n\t\t\t\t// If the container size shrank during chart resize, let's assume\r\n\t\t\t\t// scrollbar appeared. So we resize again with the scrollbar visible -\r\n\t\t\t\t// effectively making chart smaller and the scrollbar hidden again.\r\n\t\t\t\t// Because we are inside `throttled`, and currently `ticking`, scroll\r\n\t\t\t\t// events are ignored during this whole 2 resize process.\r\n\t\t\t\t// If we assumed wrong and something else happened, we are resizing\r\n\t\t\t\t// twice in a frame (potential performance issue)\r\n\t\t\t\tlistener(createEvent('resize', chart));\r\n\t\t\t}\r\n\t\t}\r\n\t}));\r\n\r\n\t// The resizer needs to be attached to the node parent, so we first need to be\r\n\t// sure that `node` is attached to the DOM before injecting the resizer element.\r\n\twatchForRender(node, function() {\r\n\t\tif (expando.resizer) {\r\n\t\t\tvar container = node.parentNode;\r\n\t\t\tif (container && container !== resizer.parentNode) {\r\n\t\t\t\tcontainer.insertBefore(resizer, container.firstChild);\r\n\t\t\t}\r\n\r\n\t\t\t// The container size might have changed, let's reset the resizer state.\r\n\t\t\tresizer._reset();\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction removeResizeListener(node) {\r\n\tvar expando = node[EXPANDO_KEY] || {};\r\n\tvar resizer = expando.resizer;\r\n\r\n\tdelete expando.resizer;\r\n\tunwatchForRender(node);\r\n\r\n\tif (resizer && resizer.parentNode) {\r\n\t\tresizer.parentNode.removeChild(resizer);\r\n\t}\r\n}\r\n\r\n/**\r\n * Injects CSS styles inline if the styles are not already present.\r\n * @param {HTMLDocument|ShadowRoot} rootNode - the node to contain the <style>.\r\n * @param {string} css - the CSS to be injected.\r\n */\r\nfunction injectCSS(rootNode, css) {\r\n\t// https://stackoverflow.com/q/3922139\r\n\tvar expando = rootNode[EXPANDO_KEY] || (rootNode[EXPANDO_KEY] = {});\r\n\tif (!expando.containsStyles) {\r\n\t\texpando.containsStyles = true;\r\n\t\tcss = '/* Chart.js */\\n' + css;\r\n\t\tvar style = document.createElement('style');\r\n\t\tstyle.setAttribute('type', 'text/css');\r\n\t\tstyle.appendChild(document.createTextNode(css));\r\n\t\trootNode.appendChild(style);\r\n\t}\r\n}\r\n\r\nvar platform_dom$2 = {\r\n\t/**\r\n\t * When `true`, prevents the automatic injection of the stylesheet required to\r\n\t * correctly detect when the chart is added to the DOM and then resized. This\r\n\t * switch has been added to allow external stylesheet (`dist/Chart(.min)?.js`)\r\n\t * to be manually imported to make this library compatible with any CSP.\r\n\t * See https://github.com/chartjs/Chart.js/issues/5208\r\n\t */\r\n\tdisableCSSInjection: false,\r\n\r\n\t/**\r\n\t * This property holds whether this platform is enabled for the current environment.\r\n\t * Currently used by platform.js to select the proper implementation.\r\n\t * @private\r\n\t */\r\n\t_enabled: typeof window !== 'undefined' && typeof document !== 'undefined',\r\n\r\n\t/**\r\n\t * Initializes resources that depend on platform options.\r\n\t * @param {HTMLCanvasElement} canvas - The Canvas element.\r\n\t * @private\r\n\t */\r\n\t_ensureLoaded: function(canvas) {\r\n\t\tif (!this.disableCSSInjection) {\r\n\t\t\t// If the canvas is in a shadow DOM, then the styles must also be inserted\r\n\t\t\t// into the same shadow DOM.\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/5763\r\n\t\t\tvar root = canvas.getRootNode ? canvas.getRootNode() : document;\r\n\t\t\tvar targetNode = root.host ? root : document.head;\r\n\t\t\tinjectCSS(targetNode, stylesheet);\r\n\t\t}\r\n\t},\r\n\r\n\tacquireContext: function(item, config) {\r\n\t\tif (typeof item === 'string') {\r\n\t\t\titem = document.getElementById(item);\r\n\t\t} else if (item.length) {\r\n\t\t\t// Support for array based queries (such as jQuery)\r\n\t\t\titem = item[0];\r\n\t\t}\r\n\r\n\t\tif (item && item.canvas) {\r\n\t\t\t// Support for any object associated to a canvas (including a context2d)\r\n\t\t\titem = item.canvas;\r\n\t\t}\r\n\r\n\t\t// To prevent canvas fingerprinting, some add-ons undefine the getContext\r\n\t\t// method, for example: https://github.com/kkapsner/CanvasBlocker\r\n\t\t// https://github.com/chartjs/Chart.js/issues/2807\r\n\t\tvar context = item && item.getContext && item.getContext('2d');\r\n\r\n\t\t// `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the item is\r\n\t\t// inside an iframe or when running in a protected environment. We could guess the\r\n\t\t// types from their toString() value but let's keep things flexible and assume it's\r\n\t\t// a sufficient condition if the item has a context2D which has item as `canvas`.\r\n\t\t// https://github.com/chartjs/Chart.js/issues/3887\r\n\t\t// https://github.com/chartjs/Chart.js/issues/4102\r\n\t\t// https://github.com/chartjs/Chart.js/issues/4152\r\n\t\tif (context && context.canvas === item) {\r\n\t\t\t// Load platform resources on first chart creation, to make it possible to\r\n\t\t\t// import the library before setting platform options.\r\n\t\t\tthis._ensureLoaded(item);\r\n\t\t\tinitCanvas(item, config);\r\n\t\t\treturn context;\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t},\r\n\r\n\treleaseContext: function(context) {\r\n\t\tvar canvas = context.canvas;\r\n\t\tif (!canvas[EXPANDO_KEY]) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar initial = canvas[EXPANDO_KEY].initial;\r\n\t\t['height', 'width'].forEach(function(prop) {\r\n\t\t\tvar value = initial[prop];\r\n\t\t\tif (helpers$1.isNullOrUndef(value)) {\r\n\t\t\t\tcanvas.removeAttribute(prop);\r\n\t\t\t} else {\r\n\t\t\t\tcanvas.setAttribute(prop, value);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\thelpers$1.each(initial.style || {}, function(value, key) {\r\n\t\t\tcanvas.style[key] = value;\r\n\t\t});\r\n\r\n\t\t// The canvas render size might have been changed (and thus the state stack discarded),\r\n\t\t// we can't use save() and restore() to restore the initial state. So make sure that at\r\n\t\t// least the canvas context is reset to the default state by setting the canvas width.\r\n\t\t// https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\r\n\t\t// eslint-disable-next-line no-self-assign\r\n\t\tcanvas.width = canvas.width;\r\n\r\n\t\tdelete canvas[EXPANDO_KEY];\r\n\t},\r\n\r\n\taddEventListener: function(chart, type, listener) {\r\n\t\tvar canvas = chart.canvas;\r\n\t\tif (type === 'resize') {\r\n\t\t\t// Note: the resize event is not supported on all browsers.\r\n\t\t\taddResizeListener(canvas, listener, chart);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar expando = listener[EXPANDO_KEY] || (listener[EXPANDO_KEY] = {});\r\n\t\tvar proxies = expando.proxies || (expando.proxies = {});\r\n\t\tvar proxy = proxies[chart.id + '_' + type] = function(event) {\r\n\t\t\tlistener(fromNativeEvent(event, chart));\r\n\t\t};\r\n\r\n\t\taddListener(canvas, type, proxy);\r\n\t},\r\n\r\n\tremoveEventListener: function(chart, type, listener) {\r\n\t\tvar canvas = chart.canvas;\r\n\t\tif (type === 'resize') {\r\n\t\t\t// Note: the resize event is not supported on all browsers.\r\n\t\t\tremoveResizeListener(canvas);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar expando = listener[EXPANDO_KEY] || {};\r\n\t\tvar proxies = expando.proxies || {};\r\n\t\tvar proxy = proxies[chart.id + '_' + type];\r\n\t\tif (!proxy) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tremoveListener(canvas, type, proxy);\r\n\t}\r\n};\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use EventTarget.addEventListener instead.\r\n * EventTarget.addEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\r\n * @function Chart.helpers.addEvent\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers$1.addEvent = addListener;\r\n\r\n/**\r\n * Provided for backward compatibility, use EventTarget.removeEventListener instead.\r\n * EventTarget.removeEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener\r\n * @function Chart.helpers.removeEvent\r\n * @deprecated since version 2.7.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers$1.removeEvent = removeListener;\n\n// @TODO Make possible to select another platform at build time.\r\nvar implementation = platform_dom$2._enabled ? platform_dom$2 : platform_basic;\r\n\r\n/**\r\n * @namespace Chart.platform\r\n * @see https://chartjs.gitbooks.io/proposals/content/Platform.html\r\n * @since 2.4.0\r\n */\r\nvar platform = helpers$1.extend({\r\n\t/**\r\n\t * @since 2.7.0\r\n\t */\r\n\tinitialize: function() {},\r\n\r\n\t/**\r\n\t * Called at chart construction time, returns a context2d instance implementing\r\n\t * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\r\n\t * @param {*} item - The native item from which to acquire context (platform specific)\r\n\t * @param {object} options - The chart options\r\n\t * @returns {CanvasRenderingContext2D} context2d instance\r\n\t */\r\n\tacquireContext: function() {},\r\n\r\n\t/**\r\n\t * Called at chart destruction time, releases any resources associated to the context\r\n\t * previously returned by the acquireContext() method.\r\n\t * @param {CanvasRenderingContext2D} context - The context2d instance\r\n\t * @returns {boolean} true if the method succeeded, else false\r\n\t */\r\n\treleaseContext: function() {},\r\n\r\n\t/**\r\n\t * Registers the specified listener on the given chart.\r\n\t * @param {Chart} chart - Chart from which to listen for event\r\n\t * @param {string} type - The ({@link IEvent}) type to listen for\r\n\t * @param {function} listener - Receives a notification (an object that implements\r\n\t * the {@link IEvent} interface) when an event of the specified type occurs.\r\n\t */\r\n\taddEventListener: function() {},\r\n\r\n\t/**\r\n\t * Removes the specified listener previously registered with addEventListener.\r\n\t * @param {Chart} chart - Chart from which to remove the listener\r\n\t * @param {string} type - The ({@link IEvent}) type to remove\r\n\t * @param {function} listener - The listener function to remove from the event target.\r\n\t */\r\n\tremoveEventListener: function() {}\r\n\r\n}, implementation);\n\ncore_defaults._set('global', {\r\n\tplugins: {}\r\n});\r\n\r\n/**\r\n * The plugin service singleton\r\n * @namespace Chart.plugins\r\n * @since 2.1.0\r\n */\r\nvar core_plugins = {\r\n\t/**\r\n\t * Globally registered plugins.\r\n\t * @private\r\n\t */\r\n\t_plugins: [],\r\n\r\n\t/**\r\n\t * This identifier is used to invalidate the descriptors cache attached to each chart\r\n\t * when a global plugin is registered or unregistered. In this case, the cache ID is\r\n\t * incremented and descriptors are regenerated during following API calls.\r\n\t * @private\r\n\t */\r\n\t_cacheId: 0,\r\n\r\n\t/**\r\n\t * Registers the given plugin(s) if not already registered.\r\n\t * @param {IPlugin[]|IPlugin} plugins plugin instance(s).\r\n\t */\r\n\tregister: function(plugins) {\r\n\t\tvar p = this._plugins;\r\n\t\t([]).concat(plugins).forEach(function(plugin) {\r\n\t\t\tif (p.indexOf(plugin) === -1) {\r\n\t\t\t\tp.push(plugin);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._cacheId++;\r\n\t},\r\n\r\n\t/**\r\n\t * Unregisters the given plugin(s) only if registered.\r\n\t * @param {IPlugin[]|IPlugin} plugins plugin instance(s).\r\n\t */\r\n\tunregister: function(plugins) {\r\n\t\tvar p = this._plugins;\r\n\t\t([]).concat(plugins).forEach(function(plugin) {\r\n\t\t\tvar idx = p.indexOf(plugin);\r\n\t\t\tif (idx !== -1) {\r\n\t\t\t\tp.splice(idx, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._cacheId++;\r\n\t},\r\n\r\n\t/**\r\n\t * Remove all registered plugins.\r\n\t * @since 2.1.5\r\n\t */\r\n\tclear: function() {\r\n\t\tthis._plugins = [];\r\n\t\tthis._cacheId++;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the number of registered plugins?\r\n\t * @returns {number}\r\n\t * @since 2.1.5\r\n\t */\r\n\tcount: function() {\r\n\t\treturn this._plugins.length;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns all registered plugin instances.\r\n\t * @returns {IPlugin[]} array of plugin objects.\r\n\t * @since 2.1.5\r\n\t */\r\n\tgetAll: function() {\r\n\t\treturn this._plugins;\r\n\t},\r\n\r\n\t/**\r\n\t * Calls enabled plugins for `chart` on the specified hook and with the given args.\r\n\t * This method immediately returns as soon as a plugin explicitly returns false. The\r\n\t * returned value can be used, for instance, to interrupt the current action.\r\n\t * @param {Chart} chart - The chart instance for which plugins should be called.\r\n\t * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\r\n\t * @param {Array} [args] - Extra arguments to apply to the hook call.\r\n\t * @returns {boolean} false if any of the plugins return false, else returns true.\r\n\t */\r\n\tnotify: function(chart, hook, args) {\r\n\t\tvar descriptors = this.descriptors(chart);\r\n\t\tvar ilen = descriptors.length;\r\n\t\tvar i, descriptor, plugin, params, method;\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tdescriptor = descriptors[i];\r\n\t\t\tplugin = descriptor.plugin;\r\n\t\t\tmethod = plugin[hook];\r\n\t\t\tif (typeof method === 'function') {\r\n\t\t\t\tparams = [chart].concat(args || []);\r\n\t\t\t\tparams.push(descriptor.options);\r\n\t\t\t\tif (method.apply(plugin, params) === false) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns descriptors of enabled plugins for the given chart.\r\n\t * @returns {object[]} [{ plugin, options }]\r\n\t * @private\r\n\t */\r\n\tdescriptors: function(chart) {\r\n\t\tvar cache = chart.$plugins || (chart.$plugins = {});\r\n\t\tif (cache.id === this._cacheId) {\r\n\t\t\treturn cache.descriptors;\r\n\t\t}\r\n\r\n\t\tvar plugins = [];\r\n\t\tvar descriptors = [];\r\n\t\tvar config = (chart && chart.config) || {};\r\n\t\tvar options = (config.options && config.options.plugins) || {};\r\n\r\n\t\tthis._plugins.concat(config.plugins || []).forEach(function(plugin) {\r\n\t\t\tvar idx = plugins.indexOf(plugin);\r\n\t\t\tif (idx !== -1) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar id = plugin.id;\r\n\t\t\tvar opts = options[id];\r\n\t\t\tif (opts === false) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (opts === true) {\r\n\t\t\t\topts = helpers$1.clone(core_defaults.global.plugins[id]);\r\n\t\t\t}\r\n\r\n\t\t\tplugins.push(plugin);\r\n\t\t\tdescriptors.push({\r\n\t\t\t\tplugin: plugin,\r\n\t\t\t\toptions: opts || {}\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tcache.descriptors = descriptors;\r\n\t\tcache.id = this._cacheId;\r\n\t\treturn descriptors;\r\n\t},\r\n\r\n\t/**\r\n\t * Invalidates cache for the given chart: descriptors hold a reference on plugin option,\r\n\t * but in some cases, this reference can be changed by the user when updating options.\r\n\t * https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\r\n\t * @private\r\n\t */\r\n\t_invalidate: function(chart) {\r\n\t\tdelete chart.$plugins;\r\n\t}\r\n};\n\nvar core_scaleService = {\r\n\t// Scale registration object. Extensions can register new scale types (such as log or DB scales) and then\r\n\t// use the new chart options to grab the correct scale\r\n\tconstructors: {},\r\n\t// Use a registration function so that we can move to an ES6 map when we no longer need to support\r\n\t// old browsers\r\n\r\n\t// Scale config defaults\r\n\tdefaults: {},\r\n\tregisterScaleType: function(type, scaleConstructor, scaleDefaults) {\r\n\t\tthis.constructors[type] = scaleConstructor;\r\n\t\tthis.defaults[type] = helpers$1.clone(scaleDefaults);\r\n\t},\r\n\tgetScaleConstructor: function(type) {\r\n\t\treturn this.constructors.hasOwnProperty(type) ? this.constructors[type] : undefined;\r\n\t},\r\n\tgetScaleDefaults: function(type) {\r\n\t\t// Return the scale defaults merged with the global settings so that we always use the latest ones\r\n\t\treturn this.defaults.hasOwnProperty(type) ? helpers$1.merge(Object.create(null), [core_defaults.scale, this.defaults[type]]) : {};\r\n\t},\r\n\tupdateScaleDefaults: function(type, additions) {\r\n\t\tvar me = this;\r\n\t\tif (me.defaults.hasOwnProperty(type)) {\r\n\t\t\tme.defaults[type] = helpers$1.extend(me.defaults[type], additions);\r\n\t\t}\r\n\t},\r\n\taddScalesToLayout: function(chart) {\r\n\t\t// Adds each scale to the chart.boxes array to be sized accordingly\r\n\t\thelpers$1.each(chart.scales, function(scale) {\r\n\t\t\t// Set ILayoutItem parameters for backwards compatibility\r\n\t\t\tscale.fullWidth = scale.options.fullWidth;\r\n\t\t\tscale.position = scale.options.position;\r\n\t\t\tscale.weight = scale.options.weight;\r\n\t\t\tcore_layouts.addBox(chart, scale);\r\n\t\t});\r\n\t}\r\n};\n\nvar valueOrDefault$8 = helpers$1.valueOrDefault;\r\nvar getRtlHelper = helpers$1.rtl.getRtlAdapter;\r\n\r\ncore_defaults._set('global', {\r\n\ttooltips: {\r\n\t\tenabled: true,\r\n\t\tcustom: null,\r\n\t\tmode: 'nearest',\r\n\t\tposition: 'average',\r\n\t\tintersect: true,\r\n\t\tbackgroundColor: 'rgba(0,0,0,0.8)',\r\n\t\ttitleFontStyle: 'bold',\r\n\t\ttitleSpacing: 2,\r\n\t\ttitleMarginBottom: 6,\r\n\t\ttitleFontColor: '#fff',\r\n\t\ttitleAlign: 'left',\r\n\t\tbodySpacing: 2,\r\n\t\tbodyFontColor: '#fff',\r\n\t\tbodyAlign: 'left',\r\n\t\tfooterFontStyle: 'bold',\r\n\t\tfooterSpacing: 2,\r\n\t\tfooterMarginTop: 6,\r\n\t\tfooterFontColor: '#fff',\r\n\t\tfooterAlign: 'left',\r\n\t\tyPadding: 6,\r\n\t\txPadding: 6,\r\n\t\tcaretPadding: 2,\r\n\t\tcaretSize: 5,\r\n\t\tcornerRadius: 6,\r\n\t\tmultiKeyBackground: '#fff',\r\n\t\tdisplayColors: true,\r\n\t\tborderColor: 'rgba(0,0,0,0)',\r\n\t\tborderWidth: 0,\r\n\t\tcallbacks: {\r\n\t\t\t// Args are: (tooltipItems, data)\r\n\t\t\tbeforeTitle: helpers$1.noop,\r\n\t\t\ttitle: function(tooltipItems, data) {\r\n\t\t\t\tvar title = '';\r\n\t\t\t\tvar labels = data.labels;\r\n\t\t\t\tvar labelCount = labels ? labels.length : 0;\r\n\r\n\t\t\t\tif (tooltipItems.length > 0) {\r\n\t\t\t\t\tvar item = tooltipItems[0];\r\n\t\t\t\t\tif (item.label) {\r\n\t\t\t\t\t\ttitle = item.label;\r\n\t\t\t\t\t} else if (item.xLabel) {\r\n\t\t\t\t\t\ttitle = item.xLabel;\r\n\t\t\t\t\t} else if (labelCount > 0 && item.index < labelCount) {\r\n\t\t\t\t\t\ttitle = labels[item.index];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn title;\r\n\t\t\t},\r\n\t\t\tafterTitle: helpers$1.noop,\r\n\r\n\t\t\t// Args are: (tooltipItems, data)\r\n\t\t\tbeforeBody: helpers$1.noop,\r\n\r\n\t\t\t// Args are: (tooltipItem, data)\r\n\t\t\tbeforeLabel: helpers$1.noop,\r\n\t\t\tlabel: function(tooltipItem, data) {\r\n\t\t\t\tvar label = data.datasets[tooltipItem.datasetIndex].label || '';\r\n\r\n\t\t\t\tif (label) {\r\n\t\t\t\t\tlabel += ': ';\r\n\t\t\t\t}\r\n\t\t\t\tif (!helpers$1.isNullOrUndef(tooltipItem.value)) {\r\n\t\t\t\t\tlabel += tooltipItem.value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tlabel += tooltipItem.yLabel;\r\n\t\t\t\t}\r\n\t\t\t\treturn label;\r\n\t\t\t},\r\n\t\t\tlabelColor: function(tooltipItem, chart) {\r\n\t\t\t\tvar meta = chart.getDatasetMeta(tooltipItem.datasetIndex);\r\n\t\t\t\tvar activeElement = meta.data[tooltipItem.index];\r\n\t\t\t\tvar view = activeElement._view;\r\n\t\t\t\treturn {\r\n\t\t\t\t\tborderColor: view.borderColor,\r\n\t\t\t\t\tbackgroundColor: view.backgroundColor\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t\tlabelTextColor: function() {\r\n\t\t\t\treturn this._options.bodyFontColor;\r\n\t\t\t},\r\n\t\t\tafterLabel: helpers$1.noop,\r\n\r\n\t\t\t// Args are: (tooltipItems, data)\r\n\t\t\tafterBody: helpers$1.noop,\r\n\r\n\t\t\t// Args are: (tooltipItems, data)\r\n\t\t\tbeforeFooter: helpers$1.noop,\r\n\t\t\tfooter: helpers$1.noop,\r\n\t\t\tafterFooter: helpers$1.noop\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar positioners = {\r\n\t/**\r\n\t * Average mode places the tooltip at the average position of the elements shown\r\n\t * @function Chart.Tooltip.positioners.average\r\n\t * @param elements {ChartElement[]} the elements being displayed in the tooltip\r\n\t * @returns {object} tooltip position\r\n\t */\r\n\taverage: function(elements) {\r\n\t\tif (!elements.length) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tvar i, len;\r\n\t\tvar x = 0;\r\n\t\tvar y = 0;\r\n\t\tvar count = 0;\r\n\r\n\t\tfor (i = 0, len = elements.length; i < len; ++i) {\r\n\t\t\tvar el = elements[i];\r\n\t\t\tif (el && el.hasValue()) {\r\n\t\t\t\tvar pos = el.tooltipPosition();\r\n\t\t\t\tx += pos.x;\r\n\t\t\t\ty += pos.y;\r\n\t\t\t\t++count;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tx: x / count,\r\n\t\t\ty: y / count\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Gets the tooltip position nearest of the item nearest to the event position\r\n\t * @function Chart.Tooltip.positioners.nearest\r\n\t * @param elements {Chart.Element[]} the tooltip elements\r\n\t * @param eventPosition {object} the position of the event in canvas coordinates\r\n\t * @returns {object} the tooltip position\r\n\t */\r\n\tnearest: function(elements, eventPosition) {\r\n\t\tvar x = eventPosition.x;\r\n\t\tvar y = eventPosition.y;\r\n\t\tvar minDistance = Number.POSITIVE_INFINITY;\r\n\t\tvar i, len, nearestElement;\r\n\r\n\t\tfor (i = 0, len = elements.length; i < len; ++i) {\r\n\t\t\tvar el = elements[i];\r\n\t\t\tif (el && el.hasValue()) {\r\n\t\t\t\tvar center = el.getCenterPoint();\r\n\t\t\t\tvar d = helpers$1.distanceBetweenPoints(eventPosition, center);\r\n\r\n\t\t\t\tif (d < minDistance) {\r\n\t\t\t\t\tminDistance = d;\r\n\t\t\t\t\tnearestElement = el;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (nearestElement) {\r\n\t\t\tvar tp = nearestElement.tooltipPosition();\r\n\t\t\tx = tp.x;\r\n\t\t\ty = tp.y;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tx: x,\r\n\t\t\ty: y\r\n\t\t};\r\n\t}\r\n};\r\n\r\n// Helper to push or concat based on if the 2nd parameter is an array or not\r\nfunction pushOrConcat(base, toPush) {\r\n\tif (toPush) {\r\n\t\tif (helpers$1.isArray(toPush)) {\r\n\t\t\t// base = base.concat(toPush);\r\n\t\t\tArray.prototype.push.apply(base, toPush);\r\n\t\t} else {\r\n\t\t\tbase.push(toPush);\r\n\t\t}\r\n\t}\r\n\r\n\treturn base;\r\n}\r\n\r\n/**\r\n * Returns array of strings split by newline\r\n * @param {string} value - The value to split by newline.\r\n * @returns {string[]} value if newline present - Returned from String split() method\r\n * @function\r\n */\r\nfunction splitNewlines(str) {\r\n\tif ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\r\n\t\treturn str.split('\\n');\r\n\t}\r\n\treturn str;\r\n}\r\n\r\n\r\n/**\r\n * Private helper to create a tooltip item model\r\n * @param element - the chart element (point, arc, bar) to create the tooltip item for\r\n * @return new tooltip item\r\n */\r\nfunction createTooltipItem(element) {\r\n\tvar xScale = element._xScale;\r\n\tvar yScale = element._yScale || element._scale; // handle radar || polarArea charts\r\n\tvar index = element._index;\r\n\tvar datasetIndex = element._datasetIndex;\r\n\tvar controller = element._chart.getDatasetMeta(datasetIndex).controller;\r\n\tvar indexScale = controller._getIndexScale();\r\n\tvar valueScale = controller._getValueScale();\r\n\r\n\treturn {\r\n\t\txLabel: xScale ? xScale.getLabelForIndex(index, datasetIndex) : '',\r\n\t\tyLabel: yScale ? yScale.getLabelForIndex(index, datasetIndex) : '',\r\n\t\tlabel: indexScale ? '' + indexScale.getLabelForIndex(index, datasetIndex) : '',\r\n\t\tvalue: valueScale ? '' + valueScale.getLabelForIndex(index, datasetIndex) : '',\r\n\t\tindex: index,\r\n\t\tdatasetIndex: datasetIndex,\r\n\t\tx: element._model.x,\r\n\t\ty: element._model.y\r\n\t};\r\n}\r\n\r\n/**\r\n * Helper to get the reset model for the tooltip\r\n * @param tooltipOpts {object} the tooltip options\r\n */\r\nfunction getBaseModel(tooltipOpts) {\r\n\tvar globalDefaults = core_defaults.global;\r\n\r\n\treturn {\r\n\t\t// Positioning\r\n\t\txPadding: tooltipOpts.xPadding,\r\n\t\tyPadding: tooltipOpts.yPadding,\r\n\t\txAlign: tooltipOpts.xAlign,\r\n\t\tyAlign: tooltipOpts.yAlign,\r\n\r\n\t\t// Drawing direction and text direction\r\n\t\trtl: tooltipOpts.rtl,\r\n\t\ttextDirection: tooltipOpts.textDirection,\r\n\r\n\t\t// Body\r\n\t\tbodyFontColor: tooltipOpts.bodyFontColor,\r\n\t\t_bodyFontFamily: valueOrDefault$8(tooltipOpts.bodyFontFamily, globalDefaults.defaultFontFamily),\r\n\t\t_bodyFontStyle: valueOrDefault$8(tooltipOpts.bodyFontStyle, globalDefaults.defaultFontStyle),\r\n\t\t_bodyAlign: tooltipOpts.bodyAlign,\r\n\t\tbodyFontSize: valueOrDefault$8(tooltipOpts.bodyFontSize, globalDefaults.defaultFontSize),\r\n\t\tbodySpacing: tooltipOpts.bodySpacing,\r\n\r\n\t\t// Title\r\n\t\ttitleFontColor: tooltipOpts.titleFontColor,\r\n\t\t_titleFontFamily: valueOrDefault$8(tooltipOpts.titleFontFamily, globalDefaults.defaultFontFamily),\r\n\t\t_titleFontStyle: valueOrDefault$8(tooltipOpts.titleFontStyle, globalDefaults.defaultFontStyle),\r\n\t\ttitleFontSize: valueOrDefault$8(tooltipOpts.titleFontSize, globalDefaults.defaultFontSize),\r\n\t\t_titleAlign: tooltipOpts.titleAlign,\r\n\t\ttitleSpacing: tooltipOpts.titleSpacing,\r\n\t\ttitleMarginBottom: tooltipOpts.titleMarginBottom,\r\n\r\n\t\t// Footer\r\n\t\tfooterFontColor: tooltipOpts.footerFontColor,\r\n\t\t_footerFontFamily: valueOrDefault$8(tooltipOpts.footerFontFamily, globalDefaults.defaultFontFamily),\r\n\t\t_footerFontStyle: valueOrDefault$8(tooltipOpts.footerFontStyle, globalDefaults.defaultFontStyle),\r\n\t\tfooterFontSize: valueOrDefault$8(tooltipOpts.footerFontSize, globalDefaults.defaultFontSize),\r\n\t\t_footerAlign: tooltipOpts.footerAlign,\r\n\t\tfooterSpacing: tooltipOpts.footerSpacing,\r\n\t\tfooterMarginTop: tooltipOpts.footerMarginTop,\r\n\r\n\t\t// Appearance\r\n\t\tcaretSize: tooltipOpts.caretSize,\r\n\t\tcornerRadius: tooltipOpts.cornerRadius,\r\n\t\tbackgroundColor: tooltipOpts.backgroundColor,\r\n\t\topacity: 0,\r\n\t\tlegendColorBackground: tooltipOpts.multiKeyBackground,\r\n\t\tdisplayColors: tooltipOpts.displayColors,\r\n\t\tborderColor: tooltipOpts.borderColor,\r\n\t\tborderWidth: tooltipOpts.borderWidth\r\n\t};\r\n}\r\n\r\n/**\r\n * Get the size of the tooltip\r\n */\r\nfunction getTooltipSize(tooltip, model) {\r\n\tvar ctx = tooltip._chart.ctx;\r\n\r\n\tvar height = model.yPadding * 2; // Tooltip Padding\r\n\tvar width = 0;\r\n\r\n\t// Count of all lines in the body\r\n\tvar body = model.body;\r\n\tvar combinedBodyLength = body.reduce(function(count, bodyItem) {\r\n\t\treturn count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;\r\n\t}, 0);\r\n\tcombinedBodyLength += model.beforeBody.length + model.afterBody.length;\r\n\r\n\tvar titleLineCount = model.title.length;\r\n\tvar footerLineCount = model.footer.length;\r\n\tvar titleFontSize = model.titleFontSize;\r\n\tvar bodyFontSize = model.bodyFontSize;\r\n\tvar footerFontSize = model.footerFontSize;\r\n\r\n\theight += titleLineCount * titleFontSize; // Title Lines\r\n\theight += titleLineCount ? (titleLineCount - 1) * model.titleSpacing : 0; // Title Line Spacing\r\n\theight += titleLineCount ? model.titleMarginBottom : 0; // Title's bottom Margin\r\n\theight += combinedBodyLength * bodyFontSize; // Body Lines\r\n\theight += combinedBodyLength ? (combinedBodyLength - 1) * model.bodySpacing : 0; // Body Line Spacing\r\n\theight += footerLineCount ? model.footerMarginTop : 0; // Footer Margin\r\n\theight += footerLineCount * (footerFontSize); // Footer Lines\r\n\theight += footerLineCount ? (footerLineCount - 1) * model.footerSpacing : 0; // Footer Line Spacing\r\n\r\n\t// Title width\r\n\tvar widthPadding = 0;\r\n\tvar maxLineWidth = function(line) {\r\n\t\twidth = Math.max(width, ctx.measureText(line).width + widthPadding);\r\n\t};\r\n\r\n\tctx.font = helpers$1.fontString(titleFontSize, model._titleFontStyle, model._titleFontFamily);\r\n\thelpers$1.each(model.title, maxLineWidth);\r\n\r\n\t// Body width\r\n\tctx.font = helpers$1.fontString(bodyFontSize, model._bodyFontStyle, model._bodyFontFamily);\r\n\thelpers$1.each(model.beforeBody.concat(model.afterBody), maxLineWidth);\r\n\r\n\t// Body lines may include some extra width due to the color box\r\n\twidthPadding = model.displayColors ? (bodyFontSize + 2) : 0;\r\n\thelpers$1.each(body, function(bodyItem) {\r\n\t\thelpers$1.each(bodyItem.before, maxLineWidth);\r\n\t\thelpers$1.each(bodyItem.lines, maxLineWidth);\r\n\t\thelpers$1.each(bodyItem.after, maxLineWidth);\r\n\t});\r\n\r\n\t// Reset back to 0\r\n\twidthPadding = 0;\r\n\r\n\t// Footer width\r\n\tctx.font = helpers$1.fontString(footerFontSize, model._footerFontStyle, model._footerFontFamily);\r\n\thelpers$1.each(model.footer, maxLineWidth);\r\n\r\n\t// Add padding\r\n\twidth += 2 * model.xPadding;\r\n\r\n\treturn {\r\n\t\twidth: width,\r\n\t\theight: height\r\n\t};\r\n}\r\n\r\n/**\r\n * Helper to get the alignment of a tooltip given the size\r\n */\r\nfunction determineAlignment(tooltip, size) {\r\n\tvar model = tooltip._model;\r\n\tvar chart = tooltip._chart;\r\n\tvar chartArea = tooltip._chart.chartArea;\r\n\tvar xAlign = 'center';\r\n\tvar yAlign = 'center';\r\n\r\n\tif (model.y < size.height) {\r\n\t\tyAlign = 'top';\r\n\t} else if (model.y > (chart.height - size.height)) {\r\n\t\tyAlign = 'bottom';\r\n\t}\r\n\r\n\tvar lf, rf; // functions to determine left, right alignment\r\n\tvar olf, orf; // functions to determine if left/right alignment causes tooltip to go outside chart\r\n\tvar yf; // function to get the y alignment if the tooltip goes outside of the left or right edges\r\n\tvar midX = (chartArea.left + chartArea.right) / 2;\r\n\tvar midY = (chartArea.top + chartArea.bottom) / 2;\r\n\r\n\tif (yAlign === 'center') {\r\n\t\tlf = function(x) {\r\n\t\t\treturn x <= midX;\r\n\t\t};\r\n\t\trf = function(x) {\r\n\t\t\treturn x > midX;\r\n\t\t};\r\n\t} else {\r\n\t\tlf = function(x) {\r\n\t\t\treturn x <= (size.width / 2);\r\n\t\t};\r\n\t\trf = function(x) {\r\n\t\t\treturn x >= (chart.width - (size.width / 2));\r\n\t\t};\r\n\t}\r\n\r\n\tolf = function(x) {\r\n\t\treturn x + size.width + model.caretSize + model.caretPadding > chart.width;\r\n\t};\r\n\torf = function(x) {\r\n\t\treturn x - size.width - model.caretSize - model.caretPadding < 0;\r\n\t};\r\n\tyf = function(y) {\r\n\t\treturn y <= midY ? 'top' : 'bottom';\r\n\t};\r\n\r\n\tif (lf(model.x)) {\r\n\t\txAlign = 'left';\r\n\r\n\t\t// Is tooltip too wide and goes over the right side of the chart.?\r\n\t\tif (olf(model.x)) {\r\n\t\t\txAlign = 'center';\r\n\t\t\tyAlign = yf(model.y);\r\n\t\t}\r\n\t} else if (rf(model.x)) {\r\n\t\txAlign = 'right';\r\n\r\n\t\t// Is tooltip too wide and goes outside left edge of canvas?\r\n\t\tif (orf(model.x)) {\r\n\t\t\txAlign = 'center';\r\n\t\t\tyAlign = yf(model.y);\r\n\t\t}\r\n\t}\r\n\r\n\tvar opts = tooltip._options;\r\n\treturn {\r\n\t\txAlign: opts.xAlign ? opts.xAlign : xAlign,\r\n\t\tyAlign: opts.yAlign ? opts.yAlign : yAlign\r\n\t};\r\n}\r\n\r\n/**\r\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\r\n */\r\nfunction getBackgroundPoint(vm, size, alignment, chart) {\r\n\t// Background Position\r\n\tvar x = vm.x;\r\n\tvar y = vm.y;\r\n\r\n\tvar caretSize = vm.caretSize;\r\n\tvar caretPadding = vm.caretPadding;\r\n\tvar cornerRadius = vm.cornerRadius;\r\n\tvar xAlign = alignment.xAlign;\r\n\tvar yAlign = alignment.yAlign;\r\n\tvar paddingAndSize = caretSize + caretPadding;\r\n\tvar radiusAndPadding = cornerRadius + caretPadding;\r\n\r\n\tif (xAlign === 'right') {\r\n\t\tx -= size.width;\r\n\t} else if (xAlign === 'center') {\r\n\t\tx -= (size.width / 2);\r\n\t\tif (x + size.width > chart.width) {\r\n\t\t\tx = chart.width - size.width;\r\n\t\t}\r\n\t\tif (x < 0) {\r\n\t\t\tx = 0;\r\n\t\t}\r\n\t}\r\n\r\n\tif (yAlign === 'top') {\r\n\t\ty += paddingAndSize;\r\n\t} else if (yAlign === 'bottom') {\r\n\t\ty -= size.height + paddingAndSize;\r\n\t} else {\r\n\t\ty -= (size.height / 2);\r\n\t}\r\n\r\n\tif (yAlign === 'center') {\r\n\t\tif (xAlign === 'left') {\r\n\t\t\tx += paddingAndSize;\r\n\t\t} else if (xAlign === 'right') {\r\n\t\t\tx -= paddingAndSize;\r\n\t\t}\r\n\t} else if (xAlign === 'left') {\r\n\t\tx -= radiusAndPadding;\r\n\t} else if (xAlign === 'right') {\r\n\t\tx += radiusAndPadding;\r\n\t}\r\n\r\n\treturn {\r\n\t\tx: x,\r\n\t\ty: y\r\n\t};\r\n}\r\n\r\nfunction getAlignedX(vm, align) {\r\n\treturn align === 'center'\r\n\t\t? vm.x + vm.width / 2\r\n\t\t: align === 'right'\r\n\t\t\t? vm.x + vm.width - vm.xPadding\r\n\t\t\t: vm.x + vm.xPadding;\r\n}\r\n\r\n/**\r\n * Helper to build before and after body lines\r\n */\r\nfunction getBeforeAfterBodyLines(callback) {\r\n\treturn pushOrConcat([], splitNewlines(callback));\r\n}\r\n\r\nvar exports$4 = core_element.extend({\r\n\tinitialize: function() {\r\n\t\tthis._model = getBaseModel(this._options);\r\n\t\tthis._lastActive = [];\r\n\t},\r\n\r\n\t// Get the title\r\n\t// Args are: (tooltipItem, data)\r\n\tgetTitle: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me._options;\r\n\t\tvar callbacks = opts.callbacks;\r\n\r\n\t\tvar beforeTitle = callbacks.beforeTitle.apply(me, arguments);\r\n\t\tvar title = callbacks.title.apply(me, arguments);\r\n\t\tvar afterTitle = callbacks.afterTitle.apply(me, arguments);\r\n\r\n\t\tvar lines = [];\r\n\t\tlines = pushOrConcat(lines, splitNewlines(beforeTitle));\r\n\t\tlines = pushOrConcat(lines, splitNewlines(title));\r\n\t\tlines = pushOrConcat(lines, splitNewlines(afterTitle));\r\n\r\n\t\treturn lines;\r\n\t},\r\n\r\n\t// Args are: (tooltipItem, data)\r\n\tgetBeforeBody: function() {\r\n\t\treturn getBeforeAfterBodyLines(this._options.callbacks.beforeBody.apply(this, arguments));\r\n\t},\r\n\r\n\t// Args are: (tooltipItem, data)\r\n\tgetBody: function(tooltipItems, data) {\r\n\t\tvar me = this;\r\n\t\tvar callbacks = me._options.callbacks;\r\n\t\tvar bodyItems = [];\r\n\r\n\t\thelpers$1.each(tooltipItems, function(tooltipItem) {\r\n\t\t\tvar bodyItem = {\r\n\t\t\t\tbefore: [],\r\n\t\t\t\tlines: [],\r\n\t\t\t\tafter: []\r\n\t\t\t};\r\n\t\t\tpushOrConcat(bodyItem.before, splitNewlines(callbacks.beforeLabel.call(me, tooltipItem, data)));\r\n\t\t\tpushOrConcat(bodyItem.lines, callbacks.label.call(me, tooltipItem, data));\r\n\t\t\tpushOrConcat(bodyItem.after, splitNewlines(callbacks.afterLabel.call(me, tooltipItem, data)));\r\n\r\n\t\t\tbodyItems.push(bodyItem);\r\n\t\t});\r\n\r\n\t\treturn bodyItems;\r\n\t},\r\n\r\n\t// Args are: (tooltipItem, data)\r\n\tgetAfterBody: function() {\r\n\t\treturn getBeforeAfterBodyLines(this._options.callbacks.afterBody.apply(this, arguments));\r\n\t},\r\n\r\n\t// Get the footer and beforeFooter and afterFooter lines\r\n\t// Args are: (tooltipItem, data)\r\n\tgetFooter: function() {\r\n\t\tvar me = this;\r\n\t\tvar callbacks = me._options.callbacks;\r\n\r\n\t\tvar beforeFooter = callbacks.beforeFooter.apply(me, arguments);\r\n\t\tvar footer = callbacks.footer.apply(me, arguments);\r\n\t\tvar afterFooter = callbacks.afterFooter.apply(me, arguments);\r\n\r\n\t\tvar lines = [];\r\n\t\tlines = pushOrConcat(lines, splitNewlines(beforeFooter));\r\n\t\tlines = pushOrConcat(lines, splitNewlines(footer));\r\n\t\tlines = pushOrConcat(lines, splitNewlines(afterFooter));\r\n\r\n\t\treturn lines;\r\n\t},\r\n\r\n\tupdate: function(changed) {\r\n\t\tvar me = this;\r\n\t\tvar opts = me._options;\r\n\r\n\t\t// Need to regenerate the model because its faster than using extend and it is necessary due to the optimization in Chart.Element.transition\r\n\t\t// that does _view = _model if ease === 1. This causes the 2nd tooltip update to set properties in both the view and model at the same time\r\n\t\t// which breaks any animations.\r\n\t\tvar existingModel = me._model;\r\n\t\tvar model = me._model = getBaseModel(opts);\r\n\t\tvar active = me._active;\r\n\r\n\t\tvar data = me._data;\r\n\r\n\t\t// In the case where active.length === 0 we need to keep these at existing values for good animations\r\n\t\tvar alignment = {\r\n\t\t\txAlign: existingModel.xAlign,\r\n\t\t\tyAlign: existingModel.yAlign\r\n\t\t};\r\n\t\tvar backgroundPoint = {\r\n\t\t\tx: existingModel.x,\r\n\t\t\ty: existingModel.y\r\n\t\t};\r\n\t\tvar tooltipSize = {\r\n\t\t\twidth: existingModel.width,\r\n\t\t\theight: existingModel.height\r\n\t\t};\r\n\t\tvar tooltipPosition = {\r\n\t\t\tx: existingModel.caretX,\r\n\t\t\ty: existingModel.caretY\r\n\t\t};\r\n\r\n\t\tvar i, len;\r\n\r\n\t\tif (active.length) {\r\n\t\t\tmodel.opacity = 1;\r\n\r\n\t\t\tvar labelColors = [];\r\n\t\t\tvar labelTextColors = [];\r\n\t\t\ttooltipPosition = positioners[opts.position].call(me, active, me._eventPosition);\r\n\r\n\t\t\tvar tooltipItems = [];\r\n\t\t\tfor (i = 0, len = active.length; i < len; ++i) {\r\n\t\t\t\ttooltipItems.push(createTooltipItem(active[i]));\r\n\t\t\t}\r\n\r\n\t\t\t// If the user provided a filter function, use it to modify the tooltip items\r\n\t\t\tif (opts.filter) {\r\n\t\t\t\ttooltipItems = tooltipItems.filter(function(a) {\r\n\t\t\t\t\treturn opts.filter(a, data);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// If the user provided a sorting function, use it to modify the tooltip items\r\n\t\t\tif (opts.itemSort) {\r\n\t\t\t\ttooltipItems = tooltipItems.sort(function(a, b) {\r\n\t\t\t\t\treturn opts.itemSort(a, b, data);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// Determine colors for boxes\r\n\t\t\thelpers$1.each(tooltipItems, function(tooltipItem) {\r\n\t\t\t\tlabelColors.push(opts.callbacks.labelColor.call(me, tooltipItem, me._chart));\r\n\t\t\t\tlabelTextColors.push(opts.callbacks.labelTextColor.call(me, tooltipItem, me._chart));\r\n\t\t\t});\r\n\r\n\r\n\t\t\t// Build the Text Lines\r\n\t\t\tmodel.title = me.getTitle(tooltipItems, data);\r\n\t\t\tmodel.beforeBody = me.getBeforeBody(tooltipItems, data);\r\n\t\t\tmodel.body = me.getBody(tooltipItems, data);\r\n\t\t\tmodel.afterBody = me.getAfterBody(tooltipItems, data);\r\n\t\t\tmodel.footer = me.getFooter(tooltipItems, data);\r\n\r\n\t\t\t// Initial positioning and colors\r\n\t\t\tmodel.x = tooltipPosition.x;\r\n\t\t\tmodel.y = tooltipPosition.y;\r\n\t\t\tmodel.caretPadding = opts.caretPadding;\r\n\t\t\tmodel.labelColors = labelColors;\r\n\t\t\tmodel.labelTextColors = labelTextColors;\r\n\r\n\t\t\t// data points\r\n\t\t\tmodel.dataPoints = tooltipItems;\r\n\r\n\t\t\t// We need to determine alignment of the tooltip\r\n\t\t\ttooltipSize = getTooltipSize(this, model);\r\n\t\t\talignment = determineAlignment(this, tooltipSize);\r\n\t\t\t// Final Size and Position\r\n\t\t\tbackgroundPoint = getBackgroundPoint(model, tooltipSize, alignment, me._chart);\r\n\t\t} else {\r\n\t\t\tmodel.opacity = 0;\r\n\t\t}\r\n\r\n\t\tmodel.xAlign = alignment.xAlign;\r\n\t\tmodel.yAlign = alignment.yAlign;\r\n\t\tmodel.x = backgroundPoint.x;\r\n\t\tmodel.y = backgroundPoint.y;\r\n\t\tmodel.width = tooltipSize.width;\r\n\t\tmodel.height = tooltipSize.height;\r\n\r\n\t\t// Point where the caret on the tooltip points to\r\n\t\tmodel.caretX = tooltipPosition.x;\r\n\t\tmodel.caretY = tooltipPosition.y;\r\n\r\n\t\tme._model = model;\r\n\r\n\t\tif (changed && opts.custom) {\r\n\t\t\topts.custom.call(me, model);\r\n\t\t}\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\tdrawCaret: function(tooltipPoint, size) {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\t\tvar caretPosition = this.getCaretPosition(tooltipPoint, size, vm);\r\n\r\n\t\tctx.lineTo(caretPosition.x1, caretPosition.y1);\r\n\t\tctx.lineTo(caretPosition.x2, caretPosition.y2);\r\n\t\tctx.lineTo(caretPosition.x3, caretPosition.y3);\r\n\t},\r\n\tgetCaretPosition: function(tooltipPoint, size, vm) {\r\n\t\tvar x1, x2, x3, y1, y2, y3;\r\n\t\tvar caretSize = vm.caretSize;\r\n\t\tvar cornerRadius = vm.cornerRadius;\r\n\t\tvar xAlign = vm.xAlign;\r\n\t\tvar yAlign = vm.yAlign;\r\n\t\tvar ptX = tooltipPoint.x;\r\n\t\tvar ptY = tooltipPoint.y;\r\n\t\tvar width = size.width;\r\n\t\tvar height = size.height;\r\n\r\n\t\tif (yAlign === 'center') {\r\n\t\t\ty2 = ptY + (height / 2);\r\n\r\n\t\t\tif (xAlign === 'left') {\r\n\t\t\t\tx1 = ptX;\r\n\t\t\t\tx2 = x1 - caretSize;\r\n\t\t\t\tx3 = x1;\r\n\r\n\t\t\t\ty1 = y2 + caretSize;\r\n\t\t\t\ty3 = y2 - caretSize;\r\n\t\t\t} else {\r\n\t\t\t\tx1 = ptX + width;\r\n\t\t\t\tx2 = x1 + caretSize;\r\n\t\t\t\tx3 = x1;\r\n\r\n\t\t\t\ty1 = y2 - caretSize;\r\n\t\t\t\ty3 = y2 + caretSize;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (xAlign === 'left') {\r\n\t\t\t\tx2 = ptX + cornerRadius + (caretSize);\r\n\t\t\t\tx1 = x2 - caretSize;\r\n\t\t\t\tx3 = x2 + caretSize;\r\n\t\t\t} else if (xAlign === 'right') {\r\n\t\t\t\tx2 = ptX + width - cornerRadius - caretSize;\r\n\t\t\t\tx1 = x2 - caretSize;\r\n\t\t\t\tx3 = x2 + caretSize;\r\n\t\t\t} else {\r\n\t\t\t\tx2 = vm.caretX;\r\n\t\t\t\tx1 = x2 - caretSize;\r\n\t\t\t\tx3 = x2 + caretSize;\r\n\t\t\t}\r\n\t\t\tif (yAlign === 'top') {\r\n\t\t\t\ty1 = ptY;\r\n\t\t\t\ty2 = y1 - caretSize;\r\n\t\t\t\ty3 = y1;\r\n\t\t\t} else {\r\n\t\t\t\ty1 = ptY + height;\r\n\t\t\t\ty2 = y1 + caretSize;\r\n\t\t\t\ty3 = y1;\r\n\t\t\t\t// invert drawing order\r\n\t\t\t\tvar tmp = x3;\r\n\t\t\t\tx3 = x1;\r\n\t\t\t\tx1 = tmp;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn {x1: x1, x2: x2, x3: x3, y1: y1, y2: y2, y3: y3};\r\n\t},\r\n\r\n\tdrawTitle: function(pt, vm, ctx) {\r\n\t\tvar title = vm.title;\r\n\t\tvar length = title.length;\r\n\t\tvar titleFontSize, titleSpacing, i;\r\n\r\n\t\tif (length) {\r\n\t\t\tvar rtlHelper = getRtlHelper(vm.rtl, vm.x, vm.width);\r\n\r\n\t\t\tpt.x = getAlignedX(vm, vm._titleAlign);\r\n\r\n\t\t\tctx.textAlign = rtlHelper.textAlign(vm._titleAlign);\r\n\t\t\tctx.textBaseline = 'middle';\r\n\r\n\t\t\ttitleFontSize = vm.titleFontSize;\r\n\t\t\ttitleSpacing = vm.titleSpacing;\r\n\r\n\t\t\tctx.fillStyle = vm.titleFontColor;\r\n\t\t\tctx.font = helpers$1.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily);\r\n\r\n\t\t\tfor (i = 0; i < length; ++i) {\r\n\t\t\t\tctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFontSize / 2);\r\n\t\t\t\tpt.y += titleFontSize + titleSpacing; // Line Height and spacing\r\n\r\n\t\t\t\tif (i + 1 === length) {\r\n\t\t\t\t\tpt.y += vm.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tdrawBody: function(pt, vm, ctx) {\r\n\t\tvar bodyFontSize = vm.bodyFontSize;\r\n\t\tvar bodySpacing = vm.bodySpacing;\r\n\t\tvar bodyAlign = vm._bodyAlign;\r\n\t\tvar body = vm.body;\r\n\t\tvar drawColorBoxes = vm.displayColors;\r\n\t\tvar xLinePadding = 0;\r\n\t\tvar colorX = drawColorBoxes ? getAlignedX(vm, 'left') : 0;\r\n\r\n\t\tvar rtlHelper = getRtlHelper(vm.rtl, vm.x, vm.width);\r\n\r\n\t\tvar fillLineOfText = function(line) {\r\n\t\t\tctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyFontSize / 2);\r\n\t\t\tpt.y += bodyFontSize + bodySpacing;\r\n\t\t};\r\n\r\n\t\tvar bodyItem, textColor, labelColors, lines, i, j, ilen, jlen;\r\n\t\tvar bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\r\n\r\n\t\tctx.textAlign = bodyAlign;\r\n\t\tctx.textBaseline = 'middle';\r\n\t\tctx.font = helpers$1.fontString(bodyFontSize, vm._bodyFontStyle, vm._bodyFontFamily);\r\n\r\n\t\tpt.x = getAlignedX(vm, bodyAlignForCalculation);\r\n\r\n\t\t// Before body lines\r\n\t\tctx.fillStyle = vm.bodyFontColor;\r\n\t\thelpers$1.each(vm.beforeBody, fillLineOfText);\r\n\r\n\t\txLinePadding = drawColorBoxes && bodyAlignForCalculation !== 'right'\r\n\t\t\t? bodyAlign === 'center' ? (bodyFontSize / 2 + 1) : (bodyFontSize + 2)\r\n\t\t\t: 0;\r\n\r\n\t\t// Draw body lines now\r\n\t\tfor (i = 0, ilen = body.length; i < ilen; ++i) {\r\n\t\t\tbodyItem = body[i];\r\n\t\t\ttextColor = vm.labelTextColors[i];\r\n\t\t\tlabelColors = vm.labelColors[i];\r\n\r\n\t\t\tctx.fillStyle = textColor;\r\n\t\t\thelpers$1.each(bodyItem.before, fillLineOfText);\r\n\r\n\t\t\tlines = bodyItem.lines;\r\n\t\t\tfor (j = 0, jlen = lines.length; j < jlen; ++j) {\r\n\t\t\t\t// Draw Legend-like boxes if needed\r\n\t\t\t\tif (drawColorBoxes) {\r\n\t\t\t\t\tvar rtlColorX = rtlHelper.x(colorX);\r\n\r\n\t\t\t\t\t// Fill a white rect so that colours merge nicely if the opacity is < 1\r\n\t\t\t\t\tctx.fillStyle = vm.legendColorBackground;\r\n\t\t\t\t\tctx.fillRect(rtlHelper.leftForLtr(rtlColorX, bodyFontSize), pt.y, bodyFontSize, bodyFontSize);\r\n\r\n\t\t\t\t\t// Border\r\n\t\t\t\t\tctx.lineWidth = 1;\r\n\t\t\t\t\tctx.strokeStyle = labelColors.borderColor;\r\n\t\t\t\t\tctx.strokeRect(rtlHelper.leftForLtr(rtlColorX, bodyFontSize), pt.y, bodyFontSize, bodyFontSize);\r\n\r\n\t\t\t\t\t// Inner square\r\n\t\t\t\t\tctx.fillStyle = labelColors.backgroundColor;\r\n\t\t\t\t\tctx.fillRect(rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), bodyFontSize - 2), pt.y + 1, bodyFontSize - 2, bodyFontSize - 2);\r\n\t\t\t\t\tctx.fillStyle = textColor;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfillLineOfText(lines[j]);\r\n\t\t\t}\r\n\r\n\t\t\thelpers$1.each(bodyItem.after, fillLineOfText);\r\n\t\t}\r\n\r\n\t\t// Reset back to 0 for after body\r\n\t\txLinePadding = 0;\r\n\r\n\t\t// After body lines\r\n\t\thelpers$1.each(vm.afterBody, fillLineOfText);\r\n\t\tpt.y -= bodySpacing; // Remove last body spacing\r\n\t},\r\n\r\n\tdrawFooter: function(pt, vm, ctx) {\r\n\t\tvar footer = vm.footer;\r\n\t\tvar length = footer.length;\r\n\t\tvar footerFontSize, i;\r\n\r\n\t\tif (length) {\r\n\t\t\tvar rtlHelper = getRtlHelper(vm.rtl, vm.x, vm.width);\r\n\r\n\t\t\tpt.x = getAlignedX(vm, vm._footerAlign);\r\n\t\t\tpt.y += vm.footerMarginTop;\r\n\r\n\t\t\tctx.textAlign = rtlHelper.textAlign(vm._footerAlign);\r\n\t\t\tctx.textBaseline = 'middle';\r\n\r\n\t\t\tfooterFontSize = vm.footerFontSize;\r\n\r\n\t\t\tctx.fillStyle = vm.footerFontColor;\r\n\t\t\tctx.font = helpers$1.fontString(footerFontSize, vm._footerFontStyle, vm._footerFontFamily);\r\n\r\n\t\t\tfor (i = 0; i < length; ++i) {\r\n\t\t\t\tctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFontSize / 2);\r\n\t\t\t\tpt.y += footerFontSize + vm.footerSpacing;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tdrawBackground: function(pt, vm, ctx, tooltipSize) {\r\n\t\tctx.fillStyle = vm.backgroundColor;\r\n\t\tctx.strokeStyle = vm.borderColor;\r\n\t\tctx.lineWidth = vm.borderWidth;\r\n\t\tvar xAlign = vm.xAlign;\r\n\t\tvar yAlign = vm.yAlign;\r\n\t\tvar x = pt.x;\r\n\t\tvar y = pt.y;\r\n\t\tvar width = tooltipSize.width;\r\n\t\tvar height = tooltipSize.height;\r\n\t\tvar radius = vm.cornerRadius;\r\n\r\n\t\tctx.beginPath();\r\n\t\tctx.moveTo(x + radius, y);\r\n\t\tif (yAlign === 'top') {\r\n\t\t\tthis.drawCaret(pt, tooltipSize);\r\n\t\t}\r\n\t\tctx.lineTo(x + width - radius, y);\r\n\t\tctx.quadraticCurveTo(x + width, y, x + width, y + radius);\r\n\t\tif (yAlign === 'center' && xAlign === 'right') {\r\n\t\t\tthis.drawCaret(pt, tooltipSize);\r\n\t\t}\r\n\t\tctx.lineTo(x + width, y + height - radius);\r\n\t\tctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\r\n\t\tif (yAlign === 'bottom') {\r\n\t\t\tthis.drawCaret(pt, tooltipSize);\r\n\t\t}\r\n\t\tctx.lineTo(x + radius, y + height);\r\n\t\tctx.quadraticCurveTo(x, y + height, x, y + height - radius);\r\n\t\tif (yAlign === 'center' && xAlign === 'left') {\r\n\t\t\tthis.drawCaret(pt, tooltipSize);\r\n\t\t}\r\n\t\tctx.lineTo(x, y + radius);\r\n\t\tctx.quadraticCurveTo(x, y, x + radius, y);\r\n\t\tctx.closePath();\r\n\r\n\t\tctx.fill();\r\n\r\n\t\tif (vm.borderWidth > 0) {\r\n\t\t\tctx.stroke();\r\n\t\t}\r\n\t},\r\n\r\n\tdraw: function() {\r\n\t\tvar ctx = this._chart.ctx;\r\n\t\tvar vm = this._view;\r\n\r\n\t\tif (vm.opacity === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar tooltipSize = {\r\n\t\t\twidth: vm.width,\r\n\t\t\theight: vm.height\r\n\t\t};\r\n\t\tvar pt = {\r\n\t\t\tx: vm.x,\r\n\t\t\ty: vm.y\r\n\t\t};\r\n\r\n\t\t// IE11/Edge does not like very small opacities, so snap to 0\r\n\t\tvar opacity = Math.abs(vm.opacity < 1e-3) ? 0 : vm.opacity;\r\n\r\n\t\t// Truthy/falsey value for empty tooltip\r\n\t\tvar hasTooltipContent = vm.title.length || vm.beforeBody.length || vm.body.length || vm.afterBody.length || vm.footer.length;\r\n\r\n\t\tif (this._options.enabled && hasTooltipContent) {\r\n\t\t\tctx.save();\r\n\t\t\tctx.globalAlpha = opacity;\r\n\r\n\t\t\t// Draw Background\r\n\t\t\tthis.drawBackground(pt, vm, ctx, tooltipSize);\r\n\r\n\t\t\t// Draw Title, Body, and Footer\r\n\t\t\tpt.y += vm.yPadding;\r\n\r\n\t\t\thelpers$1.rtl.overrideTextDirection(ctx, vm.textDirection);\r\n\r\n\t\t\t// Titles\r\n\t\t\tthis.drawTitle(pt, vm, ctx);\r\n\r\n\t\t\t// Body\r\n\t\t\tthis.drawBody(pt, vm, ctx);\r\n\r\n\t\t\t// Footer\r\n\t\t\tthis.drawFooter(pt, vm, ctx);\r\n\r\n\t\t\thelpers$1.rtl.restoreTextDirection(ctx, vm.textDirection);\r\n\r\n\t\t\tctx.restore();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Handle an event\r\n\t * @private\r\n\t * @param {IEvent} event - The event to handle\r\n\t * @returns {boolean} true if the tooltip changed\r\n\t */\r\n\thandleEvent: function(e) {\r\n\t\tvar me = this;\r\n\t\tvar options = me._options;\r\n\t\tvar changed = false;\r\n\r\n\t\tme._lastActive = me._lastActive || [];\r\n\r\n\t\t// Find Active Elements for tooltips\r\n\t\tif (e.type === 'mouseout') {\r\n\t\t\tme._active = [];\r\n\t\t} else {\r\n\t\t\tme._active = me._chart.getElementsAtEventForMode(e, options.mode, options);\r\n\t\t\tif (options.reverse) {\r\n\t\t\t\tme._active.reverse();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Remember Last Actives\r\n\t\tchanged = !helpers$1.arrayEquals(me._active, me._lastActive);\r\n\r\n\t\t// Only handle target event on tooltip change\r\n\t\tif (changed) {\r\n\t\t\tme._lastActive = me._active;\r\n\r\n\t\t\tif (options.enabled || options.custom) {\r\n\t\t\t\tme._eventPosition = {\r\n\t\t\t\t\tx: e.x,\r\n\t\t\t\t\ty: e.y\r\n\t\t\t\t};\r\n\r\n\t\t\t\tme.update(true);\r\n\t\t\t\tme.pivot();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn changed;\r\n\t}\r\n});\r\n\r\n/**\r\n * @namespace Chart.Tooltip.positioners\r\n */\r\nvar positioners_1 = positioners;\r\n\r\nvar core_tooltip = exports$4;\ncore_tooltip.positioners = positioners_1;\n\nvar valueOrDefault$9 = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('global', {\r\n\telements: {},\r\n\tevents: [\r\n\t\t'mousemove',\r\n\t\t'mouseout',\r\n\t\t'click',\r\n\t\t'touchstart',\r\n\t\t'touchmove'\r\n\t],\r\n\thover: {\r\n\t\tonHover: null,\r\n\t\tmode: 'nearest',\r\n\t\tintersect: true,\r\n\t\tanimationDuration: 400\r\n\t},\r\n\tonClick: null,\r\n\tmaintainAspectRatio: true,\r\n\tresponsive: true,\r\n\tresponsiveAnimationDuration: 0\r\n});\r\n\r\n/**\r\n * Recursively merge the given config objects representing the `scales` option\r\n * by incorporating scale defaults in `xAxes` and `yAxes` array items, then\r\n * returns a deep copy of the result, thus doesn't alter inputs.\r\n */\r\nfunction mergeScaleConfig(/* config objects ... */) {\r\n\treturn helpers$1.merge(Object.create(null), [].slice.call(arguments), {\r\n\t\tmerger: function(key, target, source, options) {\r\n\t\t\tif (key === 'xAxes' || key === 'yAxes') {\r\n\t\t\t\tvar slen = source[key].length;\r\n\t\t\t\tvar i, type, scale;\r\n\r\n\t\t\t\tif (!target[key]) {\r\n\t\t\t\t\ttarget[key] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfor (i = 0; i < slen; ++i) {\r\n\t\t\t\t\tscale = source[key][i];\r\n\t\t\t\t\ttype = valueOrDefault$9(scale.type, key === 'xAxes' ? 'category' : 'linear');\r\n\r\n\t\t\t\t\tif (i >= target[key].length) {\r\n\t\t\t\t\t\ttarget[key].push({});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!target[key][i].type || (scale.type && scale.type !== target[key][i].type)) {\r\n\t\t\t\t\t\t// new/untyped scale or type changed: let's apply the new defaults\r\n\t\t\t\t\t\t// then merge source scale to correctly overwrite the defaults.\r\n\t\t\t\t\t\thelpers$1.merge(target[key][i], [core_scaleService.getScaleDefaults(type), scale]);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// scales type are the same\r\n\t\t\t\t\t\thelpers$1.merge(target[key][i], scale);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\thelpers$1._merger(key, target, source, options);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n\r\n/**\r\n * Recursively merge the given config objects as the root options by handling\r\n * default scale options for the `scales` and `scale` properties, then returns\r\n * a deep copy of the result, thus doesn't alter inputs.\r\n */\r\nfunction mergeConfig(/* config objects ... */) {\r\n\treturn helpers$1.merge(Object.create(null), [].slice.call(arguments), {\r\n\t\tmerger: function(key, target, source, options) {\r\n\t\t\tvar tval = target[key] || Object.create(null);\r\n\t\t\tvar sval = source[key];\r\n\r\n\t\t\tif (key === 'scales') {\r\n\t\t\t\t// scale config merging is complex. Add our own function here for that\r\n\t\t\t\ttarget[key] = mergeScaleConfig(tval, sval);\r\n\t\t\t} else if (key === 'scale') {\r\n\t\t\t\t// used in polar area & radar charts since there is only one scale\r\n\t\t\t\ttarget[key] = helpers$1.merge(tval, [core_scaleService.getScaleDefaults(sval.type), sval]);\r\n\t\t\t} else {\r\n\t\t\t\thelpers$1._merger(key, target, source, options);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction initConfig(config) {\r\n\tconfig = config || Object.create(null);\r\n\r\n\t// Do NOT use mergeConfig for the data object because this method merges arrays\r\n\t// and so would change references to labels and datasets, preventing data updates.\r\n\tvar data = config.data = config.data || {};\r\n\tdata.datasets = data.datasets || [];\r\n\tdata.labels = data.labels || [];\r\n\r\n\tconfig.options = mergeConfig(\r\n\t\tcore_defaults.global,\r\n\t\tcore_defaults[config.type],\r\n\t\tconfig.options || {});\r\n\r\n\treturn config;\r\n}\r\n\r\nfunction updateConfig(chart) {\r\n\tvar newOptions = chart.options;\r\n\r\n\thelpers$1.each(chart.scales, function(scale) {\r\n\t\tcore_layouts.removeBox(chart, scale);\r\n\t});\r\n\r\n\tnewOptions = mergeConfig(\r\n\t\tcore_defaults.global,\r\n\t\tcore_defaults[chart.config.type],\r\n\t\tnewOptions);\r\n\r\n\tchart.options = chart.config.options = newOptions;\r\n\tchart.ensureScalesHaveIDs();\r\n\tchart.buildOrUpdateScales();\r\n\r\n\t// Tooltip\r\n\tchart.tooltip._options = newOptions.tooltips;\r\n\tchart.tooltip.initialize();\r\n}\r\n\r\nfunction nextAvailableScaleId(axesOpts, prefix, index) {\r\n\tvar id;\r\n\tvar hasId = function(obj) {\r\n\t\treturn obj.id === id;\r\n\t};\r\n\r\n\tdo {\r\n\t\tid = prefix + index++;\r\n\t} while (helpers$1.findIndex(axesOpts, hasId) >= 0);\r\n\r\n\treturn id;\r\n}\r\n\r\nfunction positionIsHorizontal(position) {\r\n\treturn position === 'top' || position === 'bottom';\r\n}\r\n\r\nfunction compare2Level(l1, l2) {\r\n\treturn function(a, b) {\r\n\t\treturn a[l1] === b[l1]\r\n\t\t\t? a[l2] - b[l2]\r\n\t\t\t: a[l1] - b[l1];\r\n\t};\r\n}\r\n\r\nvar Chart = function(item, config) {\r\n\tthis.construct(item, config);\r\n\treturn this;\r\n};\r\n\r\nhelpers$1.extend(Chart.prototype, /** @lends Chart */ {\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tconstruct: function(item, config) {\r\n\t\tvar me = this;\r\n\r\n\t\tconfig = initConfig(config);\r\n\r\n\t\tvar context = platform.acquireContext(item, config);\r\n\t\tvar canvas = context && context.canvas;\r\n\t\tvar height = canvas && canvas.height;\r\n\t\tvar width = canvas && canvas.width;\r\n\r\n\t\tme.id = helpers$1.uid();\r\n\t\tme.ctx = context;\r\n\t\tme.canvas = canvas;\r\n\t\tme.config = config;\r\n\t\tme.width = width;\r\n\t\tme.height = height;\r\n\t\tme.aspectRatio = height ? width / height : null;\r\n\t\tme.options = config.options;\r\n\t\tme._bufferedRender = false;\r\n\t\tme._layers = [];\r\n\r\n\t\t/**\r\n\t\t * Provided for backward compatibility, Chart and Chart.Controller have been merged,\r\n\t\t * the \"instance\" still need to be defined since it might be called from plugins.\r\n\t\t * @prop Chart#chart\r\n\t\t * @deprecated since version 2.6.0\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\tme.chart = me;\r\n\t\tme.controller = me; // chart.chart.controller #inception\r\n\r\n\t\t// Add the chart instance to the global namespace\r\n\t\tChart.instances[me.id] = me;\r\n\r\n\t\t// Define alias to the config data: `chart.data === chart.config.data`\r\n\t\tObject.defineProperty(me, 'data', {\r\n\t\t\tget: function() {\r\n\t\t\t\treturn me.config.data;\r\n\t\t\t},\r\n\t\t\tset: function(value) {\r\n\t\t\t\tme.config.data = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (!context || !canvas) {\r\n\t\t\t// The given item is not a compatible context2d element, let's return before finalizing\r\n\t\t\t// the chart initialization but after setting basic chart / controller properties that\r\n\t\t\t// can help to figure out that the chart is not valid (e.g chart.canvas !== null);\r\n\t\t\t// https://github.com/chartjs/Chart.js/issues/2807\r\n\t\t\tconsole.error(\"Failed to create chart: can't acquire context from the given item\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tme.initialize();\r\n\t\tme.update();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tinitialize: function() {\r\n\t\tvar me = this;\r\n\r\n\t\t// Before init plugin notification\r\n\t\tcore_plugins.notify(me, 'beforeInit');\r\n\r\n\t\thelpers$1.retinaScale(me, me.options.devicePixelRatio);\r\n\r\n\t\tme.bindEvents();\r\n\r\n\t\tif (me.options.responsive) {\r\n\t\t\t// Initial resize before chart draws (must be silent to preserve initial animations).\r\n\t\t\tme.resize(true);\r\n\t\t}\r\n\r\n\t\tme.initToolTip();\r\n\r\n\t\t// After init plugin notification\r\n\t\tcore_plugins.notify(me, 'afterInit');\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\tclear: function() {\r\n\t\thelpers$1.canvas.clear(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\tstop: function() {\r\n\t\t// Stops any current animation loop occurring\r\n\t\tcore_animations.cancelAnimation(this);\r\n\t\treturn this;\r\n\t},\r\n\r\n\tresize: function(silent) {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar canvas = me.canvas;\r\n\t\tvar aspectRatio = (options.maintainAspectRatio && me.aspectRatio) || null;\r\n\r\n\t\t// the canvas render width and height will be casted to integers so make sure that\r\n\t\t// the canvas display style uses the same integer values to avoid blurring effect.\r\n\r\n\t\t// Set to 0 instead of canvas.size because the size defaults to 300x150 if the element is collapsed\r\n\t\tvar newWidth = Math.max(0, Math.floor(helpers$1.getMaximumWidth(canvas)));\r\n\t\tvar newHeight = Math.max(0, Math.floor(aspectRatio ? newWidth / aspectRatio : helpers$1.getMaximumHeight(canvas)));\r\n\r\n\t\tif (me.width === newWidth && me.height === newHeight) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tcanvas.width = me.width = newWidth;\r\n\t\tcanvas.height = me.height = newHeight;\r\n\t\tcanvas.style.width = newWidth + 'px';\r\n\t\tcanvas.style.height = newHeight + 'px';\r\n\r\n\t\thelpers$1.retinaScale(me, options.devicePixelRatio);\r\n\r\n\t\tif (!silent) {\r\n\t\t\t// Notify any plugins about the resize\r\n\t\t\tvar newSize = {width: newWidth, height: newHeight};\r\n\t\t\tcore_plugins.notify(me, 'resize', [newSize]);\r\n\r\n\t\t\t// Notify of resize\r\n\t\t\tif (options.onResize) {\r\n\t\t\t\toptions.onResize(me, newSize);\r\n\t\t\t}\r\n\r\n\t\t\tme.stop();\r\n\t\t\tme.update({\r\n\t\t\t\tduration: options.responsiveAnimationDuration\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\tensureScalesHaveIDs: function() {\r\n\t\tvar options = this.options;\r\n\t\tvar scalesOptions = options.scales || {};\r\n\t\tvar scaleOptions = options.scale;\r\n\r\n\t\thelpers$1.each(scalesOptions.xAxes, function(xAxisOptions, index) {\r\n\t\t\tif (!xAxisOptions.id) {\r\n\t\t\t\txAxisOptions.id = nextAvailableScaleId(scalesOptions.xAxes, 'x-axis-', index);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\thelpers$1.each(scalesOptions.yAxes, function(yAxisOptions, index) {\r\n\t\t\tif (!yAxisOptions.id) {\r\n\t\t\t\tyAxisOptions.id = nextAvailableScaleId(scalesOptions.yAxes, 'y-axis-', index);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (scaleOptions) {\r\n\t\t\tscaleOptions.id = scaleOptions.id || 'scale';\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Builds a map of scale ID to scale object for future lookup.\r\n\t */\r\n\tbuildOrUpdateScales: function() {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar scales = me.scales || {};\r\n\t\tvar items = [];\r\n\t\tvar updated = Object.keys(scales).reduce(function(obj, id) {\r\n\t\t\tobj[id] = false;\r\n\t\t\treturn obj;\r\n\t\t}, {});\r\n\r\n\t\tif (options.scales) {\r\n\t\t\titems = items.concat(\r\n\t\t\t\t(options.scales.xAxes || []).map(function(xAxisOptions) {\r\n\t\t\t\t\treturn {options: xAxisOptions, dtype: 'category', dposition: 'bottom'};\r\n\t\t\t\t}),\r\n\t\t\t\t(options.scales.yAxes || []).map(function(yAxisOptions) {\r\n\t\t\t\t\treturn {options: yAxisOptions, dtype: 'linear', dposition: 'left'};\r\n\t\t\t\t})\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tif (options.scale) {\r\n\t\t\titems.push({\r\n\t\t\t\toptions: options.scale,\r\n\t\t\t\tdtype: 'radialLinear',\r\n\t\t\t\tisDefault: true,\r\n\t\t\t\tdposition: 'chartArea'\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\thelpers$1.each(items, function(item) {\r\n\t\t\tvar scaleOptions = item.options;\r\n\t\t\tvar id = scaleOptions.id;\r\n\t\t\tvar scaleType = valueOrDefault$9(scaleOptions.type, item.dtype);\r\n\r\n\t\t\tif (positionIsHorizontal(scaleOptions.position) !== positionIsHorizontal(item.dposition)) {\r\n\t\t\t\tscaleOptions.position = item.dposition;\r\n\t\t\t}\r\n\r\n\t\t\tupdated[id] = true;\r\n\t\t\tvar scale = null;\r\n\t\t\tif (id in scales && scales[id].type === scaleType) {\r\n\t\t\t\tscale = scales[id];\r\n\t\t\t\tscale.options = scaleOptions;\r\n\t\t\t\tscale.ctx = me.ctx;\r\n\t\t\t\tscale.chart = me;\r\n\t\t\t} else {\r\n\t\t\t\tvar scaleClass = core_scaleService.getScaleConstructor(scaleType);\r\n\t\t\t\tif (!scaleClass) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tscale = new scaleClass({\r\n\t\t\t\t\tid: id,\r\n\t\t\t\t\ttype: scaleType,\r\n\t\t\t\t\toptions: scaleOptions,\r\n\t\t\t\t\tctx: me.ctx,\r\n\t\t\t\t\tchart: me\r\n\t\t\t\t});\r\n\t\t\t\tscales[scale.id] = scale;\r\n\t\t\t}\r\n\r\n\t\t\tscale.mergeTicksOptions();\r\n\r\n\t\t\t// TODO(SB): I think we should be able to remove this custom case (options.scale)\r\n\t\t\t// and consider it as a regular scale part of the \"scales\"\" map only! This would\r\n\t\t\t// make the logic easier and remove some useless? custom code.\r\n\t\t\tif (item.isDefault) {\r\n\t\t\t\tme.scale = scale;\r\n\t\t\t}\r\n\t\t});\r\n\t\t// clear up discarded scales\r\n\t\thelpers$1.each(updated, function(hasUpdated, id) {\r\n\t\t\tif (!hasUpdated) {\r\n\t\t\t\tdelete scales[id];\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tme.scales = scales;\r\n\r\n\t\tcore_scaleService.addScalesToLayout(this);\r\n\t},\r\n\r\n\tbuildOrUpdateControllers: function() {\r\n\t\tvar me = this;\r\n\t\tvar newControllers = [];\r\n\t\tvar datasets = me.data.datasets;\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = datasets.length; i < ilen; i++) {\r\n\t\t\tvar dataset = datasets[i];\r\n\t\t\tvar meta = me.getDatasetMeta(i);\r\n\t\t\tvar type = dataset.type || me.config.type;\r\n\r\n\t\t\tif (meta.type && meta.type !== type) {\r\n\t\t\t\tme.destroyDatasetMeta(i);\r\n\t\t\t\tmeta = me.getDatasetMeta(i);\r\n\t\t\t}\r\n\t\t\tmeta.type = type;\r\n\t\t\tmeta.order = dataset.order || 0;\r\n\t\t\tmeta.index = i;\r\n\r\n\t\t\tif (meta.controller) {\r\n\t\t\t\tmeta.controller.updateIndex(i);\r\n\t\t\t\tmeta.controller.linkScales();\r\n\t\t\t} else {\r\n\t\t\t\tvar ControllerClass = controllers[meta.type];\r\n\t\t\t\tif (ControllerClass === undefined) {\r\n\t\t\t\t\tthrow new Error('\"' + meta.type + '\" is not a chart type.');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tmeta.controller = new ControllerClass(me, i);\r\n\t\t\t\tnewControllers.push(meta.controller);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn newControllers;\r\n\t},\r\n\r\n\t/**\r\n\t * Reset the elements of all datasets\r\n\t * @private\r\n\t */\r\n\tresetElements: function() {\r\n\t\tvar me = this;\r\n\t\thelpers$1.each(me.data.datasets, function(dataset, datasetIndex) {\r\n\t\t\tme.getDatasetMeta(datasetIndex).controller.reset();\r\n\t\t}, me);\r\n\t},\r\n\r\n\t/**\r\n\t* Resets the chart back to it's state before the initial animation\r\n\t*/\r\n\treset: function() {\r\n\t\tthis.resetElements();\r\n\t\tthis.tooltip.initialize();\r\n\t},\r\n\r\n\tupdate: function(config) {\r\n\t\tvar me = this;\r\n\t\tvar i, ilen;\r\n\r\n\t\tif (!config || typeof config !== 'object') {\r\n\t\t\t// backwards compatibility\r\n\t\t\tconfig = {\r\n\t\t\t\tduration: config,\r\n\t\t\t\tlazy: arguments[1]\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tupdateConfig(me);\r\n\r\n\t\t// plugins options references might have change, let's invalidate the cache\r\n\t\t// https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\r\n\t\tcore_plugins._invalidate(me);\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeUpdate') === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// In case the entire data object changed\r\n\t\tme.tooltip._data = me.data;\r\n\r\n\t\t// Make sure dataset controllers are updated and new controllers are reset\r\n\t\tvar newControllers = me.buildOrUpdateControllers();\r\n\r\n\t\t// Make sure all dataset controllers have correct meta data counts\r\n\t\tfor (i = 0, ilen = me.data.datasets.length; i < ilen; i++) {\r\n\t\t\tme.getDatasetMeta(i).controller.buildOrUpdateElements();\r\n\t\t}\r\n\r\n\t\tme.updateLayout();\r\n\r\n\t\t// Can only reset the new controllers after the scales have been updated\r\n\t\tif (me.options.animation && me.options.animation.duration) {\r\n\t\t\thelpers$1.each(newControllers, function(controller) {\r\n\t\t\t\tcontroller.reset();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tme.updateDatasets();\r\n\r\n\t\t// Need to reset tooltip in case it is displayed with elements that are removed\r\n\t\t// after update.\r\n\t\tme.tooltip.initialize();\r\n\r\n\t\t// Last active contains items that were previously in the tooltip.\r\n\t\t// When we reset the tooltip, we need to clear it\r\n\t\tme.lastActive = [];\r\n\r\n\t\t// Do this before render so that any plugins that need final scale updates can use it\r\n\t\tcore_plugins.notify(me, 'afterUpdate');\r\n\r\n\t\tme._layers.sort(compare2Level('z', '_idx'));\r\n\r\n\t\tif (me._bufferedRender) {\r\n\t\t\tme._bufferedRequest = {\r\n\t\t\t\tduration: config.duration,\r\n\t\t\t\teasing: config.easing,\r\n\t\t\t\tlazy: config.lazy\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tme.render(config);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\r\n\t * hook, in which case, plugins will not be called on `afterLayout`.\r\n\t * @private\r\n\t */\r\n\tupdateLayout: function() {\r\n\t\tvar me = this;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeLayout') === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tcore_layouts.update(this, this.width, this.height);\r\n\r\n\t\tme._layers = [];\r\n\t\thelpers$1.each(me.boxes, function(box) {\r\n\t\t\t// _configure is called twice, once in core.scale.update and once here.\r\n\t\t\t// Here the boxes are fully updated and at their final positions.\r\n\t\t\tif (box._configure) {\r\n\t\t\t\tbox._configure();\r\n\t\t\t}\r\n\t\t\tme._layers.push.apply(me._layers, box._layers());\r\n\t\t}, me);\r\n\r\n\t\tme._layers.forEach(function(item, index) {\r\n\t\t\titem._idx = index;\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * Provided for backward compatibility, use `afterLayout` instead.\r\n\t\t * @method IPlugin#afterScaleUpdate\r\n\t\t * @deprecated since version 2.5.0\r\n\t\t * @todo remove at version 3\r\n\t\t * @private\r\n\t\t */\r\n\t\tcore_plugins.notify(me, 'afterScaleUpdate');\r\n\t\tcore_plugins.notify(me, 'afterLayout');\r\n\t},\r\n\r\n\t/**\r\n\t * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\r\n\t * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\r\n\t * @private\r\n\t */\r\n\tupdateDatasets: function() {\r\n\t\tvar me = this;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDatasetsUpdate') === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tfor (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\r\n\t\t\tme.updateDataset(i);\r\n\t\t}\r\n\r\n\t\tcore_plugins.notify(me, 'afterDatasetsUpdate');\r\n\t},\r\n\r\n\t/**\r\n\t * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\r\n\t * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\r\n\t * @private\r\n\t */\r\n\tupdateDataset: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar meta = me.getDatasetMeta(index);\r\n\t\tvar args = {\r\n\t\t\tmeta: meta,\r\n\t\t\tindex: index\r\n\t\t};\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDatasetUpdate', [args]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmeta.controller._update();\r\n\r\n\t\tcore_plugins.notify(me, 'afterDatasetUpdate', [args]);\r\n\t},\r\n\r\n\trender: function(config) {\r\n\t\tvar me = this;\r\n\r\n\t\tif (!config || typeof config !== 'object') {\r\n\t\t\t// backwards compatibility\r\n\t\t\tconfig = {\r\n\t\t\t\tduration: config,\r\n\t\t\t\tlazy: arguments[1]\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tvar animationOptions = me.options.animation;\r\n\t\tvar duration = valueOrDefault$9(config.duration, animationOptions && animationOptions.duration);\r\n\t\tvar lazy = config.lazy;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeRender') === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar onComplete = function(animation) {\r\n\t\t\tcore_plugins.notify(me, 'afterRender');\r\n\t\t\thelpers$1.callback(animationOptions && animationOptions.onComplete, [animation], me);\r\n\t\t};\r\n\r\n\t\tif (animationOptions && duration) {\r\n\t\t\tvar animation = new core_animation({\r\n\t\t\t\tnumSteps: duration / 16.66, // 60 fps\r\n\t\t\t\teasing: config.easing || animationOptions.easing,\r\n\r\n\t\t\t\trender: function(chart, animationObject) {\r\n\t\t\t\t\tvar easingFunction = helpers$1.easing.effects[animationObject.easing];\r\n\t\t\t\t\tvar currentStep = animationObject.currentStep;\r\n\t\t\t\t\tvar stepDecimal = currentStep / animationObject.numSteps;\r\n\r\n\t\t\t\t\tchart.draw(easingFunction(stepDecimal), stepDecimal, currentStep);\r\n\t\t\t\t},\r\n\r\n\t\t\t\tonAnimationProgress: animationOptions.onProgress,\r\n\t\t\t\tonAnimationComplete: onComplete\r\n\t\t\t});\r\n\r\n\t\t\tcore_animations.addAnimation(me, animation, duration, lazy);\r\n\t\t} else {\r\n\t\t\tme.draw();\r\n\r\n\t\t\t// See https://github.com/chartjs/Chart.js/issues/3781\r\n\t\t\tonComplete(new core_animation({numSteps: 0, chart: me}));\r\n\t\t}\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\tdraw: function(easingValue) {\r\n\t\tvar me = this;\r\n\t\tvar i, layers;\r\n\r\n\t\tme.clear();\r\n\r\n\t\tif (helpers$1.isNullOrUndef(easingValue)) {\r\n\t\t\teasingValue = 1;\r\n\t\t}\r\n\r\n\t\tme.transition(easingValue);\r\n\r\n\t\tif (me.width <= 0 || me.height <= 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDraw', [easingValue]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Because of plugin hooks (before/afterDatasetsDraw), datasets can't\r\n\t\t// currently be part of layers. Instead, we draw\r\n\t\t// layers <= 0 before(default, backward compat), and the rest after\r\n\t\tlayers = me._layers;\r\n\t\tfor (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\r\n\t\t\tlayers[i].draw(me.chartArea);\r\n\t\t}\r\n\r\n\t\tme.drawDatasets(easingValue);\r\n\r\n\t\t// Rest of layers\r\n\t\tfor (; i < layers.length; ++i) {\r\n\t\t\tlayers[i].draw(me.chartArea);\r\n\t\t}\r\n\r\n\t\tme._drawTooltip(easingValue);\r\n\r\n\t\tcore_plugins.notify(me, 'afterDraw', [easingValue]);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\ttransition: function(easingValue) {\r\n\t\tvar me = this;\r\n\r\n\t\tfor (var i = 0, ilen = (me.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\tif (me.isDatasetVisible(i)) {\r\n\t\t\t\tme.getDatasetMeta(i).controller.transition(easingValue);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.tooltip.transition(easingValue);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getSortedDatasetMetas: function(filterVisible) {\r\n\t\tvar me = this;\r\n\t\tvar datasets = me.data.datasets || [];\r\n\t\tvar result = [];\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = datasets.length; i < ilen; ++i) {\r\n\t\t\tif (!filterVisible || me.isDatasetVisible(i)) {\r\n\t\t\t\tresult.push(me.getDatasetMeta(i));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tresult.sort(compare2Level('order', 'index'));\r\n\r\n\t\treturn result;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getSortedVisibleDatasetMetas: function() {\r\n\t\treturn this._getSortedDatasetMetas(true);\r\n\t},\r\n\r\n\t/**\r\n\t * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\r\n\t * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\r\n\t * @private\r\n\t */\r\n\tdrawDatasets: function(easingValue) {\r\n\t\tvar me = this;\r\n\t\tvar metasets, i;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDatasetsDraw', [easingValue]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmetasets = me._getSortedVisibleDatasetMetas();\r\n\t\tfor (i = metasets.length - 1; i >= 0; --i) {\r\n\t\t\tme.drawDataset(metasets[i], easingValue);\r\n\t\t}\r\n\r\n\t\tcore_plugins.notify(me, 'afterDatasetsDraw', [easingValue]);\r\n\t},\r\n\r\n\t/**\r\n\t * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\r\n\t * hook, in which case, plugins will not be called on `afterDatasetDraw`.\r\n\t * @private\r\n\t */\r\n\tdrawDataset: function(meta, easingValue) {\r\n\t\tvar me = this;\r\n\t\tvar args = {\r\n\t\t\tmeta: meta,\r\n\t\t\tindex: meta.index,\r\n\t\t\teasingValue: easingValue\r\n\t\t};\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeDatasetDraw', [args]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmeta.controller.draw(easingValue);\r\n\r\n\t\tcore_plugins.notify(me, 'afterDatasetDraw', [args]);\r\n\t},\r\n\r\n\t/**\r\n\t * Draws tooltip unless a plugin returns `false` to the `beforeTooltipDraw`\r\n\t * hook, in which case, plugins will not be called on `afterTooltipDraw`.\r\n\t * @private\r\n\t */\r\n\t_drawTooltip: function(easingValue) {\r\n\t\tvar me = this;\r\n\t\tvar tooltip = me.tooltip;\r\n\t\tvar args = {\r\n\t\t\ttooltip: tooltip,\r\n\t\t\teasingValue: easingValue\r\n\t\t};\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeTooltipDraw', [args]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\ttooltip.draw();\r\n\r\n\t\tcore_plugins.notify(me, 'afterTooltipDraw', [args]);\r\n\t},\r\n\r\n\t/**\r\n\t * Get the single element that was clicked on\r\n\t * @return An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw\r\n\t */\r\n\tgetElementAtEvent: function(e) {\r\n\t\treturn core_interaction.modes.single(this, e);\r\n\t},\r\n\r\n\tgetElementsAtEvent: function(e) {\r\n\t\treturn core_interaction.modes.label(this, e, {intersect: true});\r\n\t},\r\n\r\n\tgetElementsAtXAxis: function(e) {\r\n\t\treturn core_interaction.modes['x-axis'](this, e, {intersect: true});\r\n\t},\r\n\r\n\tgetElementsAtEventForMode: function(e, mode, options) {\r\n\t\tvar method = core_interaction.modes[mode];\r\n\t\tif (typeof method === 'function') {\r\n\t\t\treturn method(this, e, options);\r\n\t\t}\r\n\r\n\t\treturn [];\r\n\t},\r\n\r\n\tgetDatasetAtEvent: function(e) {\r\n\t\treturn core_interaction.modes.dataset(this, e, {intersect: true});\r\n\t},\r\n\r\n\tgetDatasetMeta: function(datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar dataset = me.data.datasets[datasetIndex];\r\n\t\tif (!dataset._meta) {\r\n\t\t\tdataset._meta = {};\r\n\t\t}\r\n\r\n\t\tvar meta = dataset._meta[me.id];\r\n\t\tif (!meta) {\r\n\t\t\tmeta = dataset._meta[me.id] = {\r\n\t\t\t\ttype: null,\r\n\t\t\t\tdata: [],\r\n\t\t\t\tdataset: null,\r\n\t\t\t\tcontroller: null,\r\n\t\t\t\thidden: null,\t\t\t// See isDatasetVisible() comment\r\n\t\t\t\txAxisID: null,\r\n\t\t\t\tyAxisID: null,\r\n\t\t\t\torder: dataset.order || 0,\r\n\t\t\t\tindex: datasetIndex\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn meta;\r\n\t},\r\n\r\n\tgetVisibleDatasetCount: function() {\r\n\t\tvar count = 0;\r\n\t\tfor (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\r\n\t\t\tif (this.isDatasetVisible(i)) {\r\n\t\t\t\tcount++;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn count;\r\n\t},\r\n\r\n\tisDatasetVisible: function(datasetIndex) {\r\n\t\tvar meta = this.getDatasetMeta(datasetIndex);\r\n\r\n\t\t// meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\r\n\t\t// the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\r\n\t\treturn typeof meta.hidden === 'boolean' ? !meta.hidden : !this.data.datasets[datasetIndex].hidden;\r\n\t},\r\n\r\n\tgenerateLegend: function() {\r\n\t\treturn this.options.legendCallback(this);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tdestroyDatasetMeta: function(datasetIndex) {\r\n\t\tvar id = this.id;\r\n\t\tvar dataset = this.data.datasets[datasetIndex];\r\n\t\tvar meta = dataset._meta && dataset._meta[id];\r\n\r\n\t\tif (meta) {\r\n\t\t\tmeta.controller.destroy();\r\n\t\t\tdelete dataset._meta[id];\r\n\t\t}\r\n\t},\r\n\r\n\tdestroy: function() {\r\n\t\tvar me = this;\r\n\t\tvar canvas = me.canvas;\r\n\t\tvar i, ilen;\r\n\r\n\t\tme.stop();\r\n\r\n\t\t// dataset controllers need to cleanup associated data\r\n\t\tfor (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\r\n\t\t\tme.destroyDatasetMeta(i);\r\n\t\t}\r\n\r\n\t\tif (canvas) {\r\n\t\t\tme.unbindEvents();\r\n\t\t\thelpers$1.canvas.clear(me);\r\n\t\t\tplatform.releaseContext(me.ctx);\r\n\t\t\tme.canvas = null;\r\n\t\t\tme.ctx = null;\r\n\t\t}\r\n\r\n\t\tcore_plugins.notify(me, 'destroy');\r\n\r\n\t\tdelete Chart.instances[me.id];\r\n\t},\r\n\r\n\ttoBase64Image: function() {\r\n\t\treturn this.canvas.toDataURL.apply(this.canvas, arguments);\r\n\t},\r\n\r\n\tinitToolTip: function() {\r\n\t\tvar me = this;\r\n\t\tme.tooltip = new core_tooltip({\r\n\t\t\t_chart: me,\r\n\t\t\t_chartInstance: me, // deprecated, backward compatibility\r\n\t\t\t_data: me.data,\r\n\t\t\t_options: me.options.tooltips\r\n\t\t}, me);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tbindEvents: function() {\r\n\t\tvar me = this;\r\n\t\tvar listeners = me._listeners = {};\r\n\t\tvar listener = function() {\r\n\t\t\tme.eventHandler.apply(me, arguments);\r\n\t\t};\r\n\r\n\t\thelpers$1.each(me.options.events, function(type) {\r\n\t\t\tplatform.addEventListener(me, type, listener);\r\n\t\t\tlisteners[type] = listener;\r\n\t\t});\r\n\r\n\t\t// Elements used to detect size change should not be injected for non responsive charts.\r\n\t\t// See https://github.com/chartjs/Chart.js/issues/2210\r\n\t\tif (me.options.responsive) {\r\n\t\t\tlistener = function() {\r\n\t\t\t\tme.resize();\r\n\t\t\t};\r\n\r\n\t\t\tplatform.addEventListener(me, 'resize', listener);\r\n\t\t\tlisteners.resize = listener;\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tunbindEvents: function() {\r\n\t\tvar me = this;\r\n\t\tvar listeners = me._listeners;\r\n\t\tif (!listeners) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tdelete me._listeners;\r\n\t\thelpers$1.each(listeners, function(listener, type) {\r\n\t\t\tplatform.removeEventListener(me, type, listener);\r\n\t\t});\r\n\t},\r\n\r\n\tupdateHoverStyle: function(elements, mode, enabled) {\r\n\t\tvar prefix = enabled ? 'set' : 'remove';\r\n\t\tvar element, i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = elements.length; i < ilen; ++i) {\r\n\t\t\telement = elements[i];\r\n\t\t\tif (element) {\r\n\t\t\t\tthis.getDatasetMeta(element._datasetIndex).controller[prefix + 'HoverStyle'](element);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (mode === 'dataset') {\r\n\t\t\tthis.getDatasetMeta(elements[0]._datasetIndex).controller['_' + prefix + 'DatasetHoverStyle']();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\teventHandler: function(e) {\r\n\t\tvar me = this;\r\n\t\tvar tooltip = me.tooltip;\r\n\r\n\t\tif (core_plugins.notify(me, 'beforeEvent', [e]) === false) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Buffer any update calls so that renders do not occur\r\n\t\tme._bufferedRender = true;\r\n\t\tme._bufferedRequest = null;\r\n\r\n\t\tvar changed = me.handleEvent(e);\r\n\t\t// for smooth tooltip animations issue #4989\r\n\t\t// the tooltip should be the source of change\r\n\t\t// Animation check workaround:\r\n\t\t// tooltip._start will be null when tooltip isn't animating\r\n\t\tif (tooltip) {\r\n\t\t\tchanged = tooltip._start\r\n\t\t\t\t? tooltip.handleEvent(e)\r\n\t\t\t\t: changed | tooltip.handleEvent(e);\r\n\t\t}\r\n\r\n\t\tcore_plugins.notify(me, 'afterEvent', [e]);\r\n\r\n\t\tvar bufferedRequest = me._bufferedRequest;\r\n\t\tif (bufferedRequest) {\r\n\t\t\t// If we have an update that was triggered, we need to do a normal render\r\n\t\t\tme.render(bufferedRequest);\r\n\t\t} else if (changed && !me.animating) {\r\n\t\t\t// If entering, leaving, or changing elements, animate the change via pivot\r\n\t\t\tme.stop();\r\n\r\n\t\t\t// We only need to render at this point. Updating will cause scales to be\r\n\t\t\t// recomputed generating flicker & using more memory than necessary.\r\n\t\t\tme.render({\r\n\t\t\t\tduration: me.options.hover.animationDuration,\r\n\t\t\t\tlazy: true\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tme._bufferedRender = false;\r\n\t\tme._bufferedRequest = null;\r\n\r\n\t\treturn me;\r\n\t},\r\n\r\n\t/**\r\n\t * Handle an event\r\n\t * @private\r\n\t * @param {IEvent} event the event to handle\r\n\t * @return {boolean} true if the chart needs to re-render\r\n\t */\r\n\thandleEvent: function(e) {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options || {};\r\n\t\tvar hoverOptions = options.hover;\r\n\t\tvar changed = false;\r\n\r\n\t\tme.lastActive = me.lastActive || [];\r\n\r\n\t\t// Find Active Elements for hover and tooltips\r\n\t\tif (e.type === 'mouseout') {\r\n\t\t\tme.active = [];\r\n\t\t} else {\r\n\t\t\tme.active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions);\r\n\t\t}\r\n\r\n\t\t// Invoke onHover hook\r\n\t\t// Need to call with native event here to not break backwards compatibility\r\n\t\thelpers$1.callback(options.onHover || options.hover.onHover, [e.native, me.active], me);\r\n\r\n\t\tif (e.type === 'mouseup' || e.type === 'click') {\r\n\t\t\tif (options.onClick) {\r\n\t\t\t\t// Use e.native here for backwards compatibility\r\n\t\t\t\toptions.onClick.call(me, e.native, me.active);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Remove styling for last active (even if it may still be active)\r\n\t\tif (me.lastActive.length) {\r\n\t\t\tme.updateHoverStyle(me.lastActive, hoverOptions.mode, false);\r\n\t\t}\r\n\r\n\t\t// Built in hover styling\r\n\t\tif (me.active.length && hoverOptions.mode) {\r\n\t\t\tme.updateHoverStyle(me.active, hoverOptions.mode, true);\r\n\t\t}\r\n\r\n\t\tchanged = !helpers$1.arrayEquals(me.active, me.lastActive);\r\n\r\n\t\t// Remember Last Actives\r\n\t\tme.lastActive = me.active;\r\n\r\n\t\treturn changed;\r\n\t}\r\n});\r\n\r\n/**\r\n * NOTE(SB) We actually don't use this container anymore but we need to keep it\r\n * for backward compatibility. Though, it can still be useful for plugins that\r\n * would need to work on multiple charts?!\r\n */\r\nChart.instances = {};\r\n\r\nvar core_controller = Chart;\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart instead.\r\n * @class Chart.Controller\r\n * @deprecated since version 2.6\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nChart.Controller = Chart;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore.\r\n * @namespace Chart\r\n * @deprecated since version 2.8\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nChart.types = {};\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore.\r\n * @namespace Chart.helpers.configMerge\r\n * @deprecated since version 2.8.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers$1.configMerge = mergeConfig;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore.\r\n * @namespace Chart.helpers.scaleMerge\r\n * @deprecated since version 2.8.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\nhelpers$1.scaleMerge = mergeScaleConfig;\n\nvar core_helpers = function() {\r\n\r\n\t// -- Basic js utility methods\r\n\r\n\thelpers$1.where = function(collection, filterCallback) {\r\n\t\tif (helpers$1.isArray(collection) && Array.prototype.filter) {\r\n\t\t\treturn collection.filter(filterCallback);\r\n\t\t}\r\n\t\tvar filtered = [];\r\n\r\n\t\thelpers$1.each(collection, function(item) {\r\n\t\t\tif (filterCallback(item)) {\r\n\t\t\t\tfiltered.push(item);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn filtered;\r\n\t};\r\n\thelpers$1.findIndex = Array.prototype.findIndex ?\r\n\t\tfunction(array, callback, scope) {\r\n\t\t\treturn array.findIndex(callback, scope);\r\n\t\t} :\r\n\t\tfunction(array, callback, scope) {\r\n\t\t\tscope = scope === undefined ? array : scope;\r\n\t\t\tfor (var i = 0, ilen = array.length; i < ilen; ++i) {\r\n\t\t\t\tif (callback.call(scope, array[i], i, array)) {\r\n\t\t\t\t\treturn i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn -1;\r\n\t\t};\r\n\thelpers$1.findNextWhere = function(arrayToSearch, filterCallback, startIndex) {\r\n\t\t// Default to start of the array\r\n\t\tif (helpers$1.isNullOrUndef(startIndex)) {\r\n\t\t\tstartIndex = -1;\r\n\t\t}\r\n\t\tfor (var i = startIndex + 1; i < arrayToSearch.length; i++) {\r\n\t\t\tvar currentItem = arrayToSearch[i];\r\n\t\t\tif (filterCallback(currentItem)) {\r\n\t\t\t\treturn currentItem;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\thelpers$1.findPreviousWhere = function(arrayToSearch, filterCallback, startIndex) {\r\n\t\t// Default to end of the array\r\n\t\tif (helpers$1.isNullOrUndef(startIndex)) {\r\n\t\t\tstartIndex = arrayToSearch.length;\r\n\t\t}\r\n\t\tfor (var i = startIndex - 1; i >= 0; i--) {\r\n\t\t\tvar currentItem = arrayToSearch[i];\r\n\t\t\tif (filterCallback(currentItem)) {\r\n\t\t\t\treturn currentItem;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// -- Math methods\r\n\thelpers$1.isNumber = function(n) {\r\n\t\treturn !isNaN(parseFloat(n)) && isFinite(n);\r\n\t};\r\n\thelpers$1.almostEquals = function(x, y, epsilon) {\r\n\t\treturn Math.abs(x - y) < epsilon;\r\n\t};\r\n\thelpers$1.almostWhole = function(x, epsilon) {\r\n\t\tvar rounded = Math.round(x);\r\n\t\treturn ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\r\n\t};\r\n\thelpers$1.max = function(array) {\r\n\t\treturn array.reduce(function(max, value) {\r\n\t\t\tif (!isNaN(value)) {\r\n\t\t\t\treturn Math.max(max, value);\r\n\t\t\t}\r\n\t\t\treturn max;\r\n\t\t}, Number.NEGATIVE_INFINITY);\r\n\t};\r\n\thelpers$1.min = function(array) {\r\n\t\treturn array.reduce(function(min, value) {\r\n\t\t\tif (!isNaN(value)) {\r\n\t\t\t\treturn Math.min(min, value);\r\n\t\t\t}\r\n\t\t\treturn min;\r\n\t\t}, Number.POSITIVE_INFINITY);\r\n\t};\r\n\thelpers$1.sign = Math.sign ?\r\n\t\tfunction(x) {\r\n\t\t\treturn Math.sign(x);\r\n\t\t} :\r\n\t\tfunction(x) {\r\n\t\t\tx = +x; // convert to a number\r\n\t\t\tif (x === 0 || isNaN(x)) {\r\n\t\t\t\treturn x;\r\n\t\t\t}\r\n\t\t\treturn x > 0 ? 1 : -1;\r\n\t\t};\r\n\thelpers$1.toRadians = function(degrees) {\r\n\t\treturn degrees * (Math.PI / 180);\r\n\t};\r\n\thelpers$1.toDegrees = function(radians) {\r\n\t\treturn radians * (180 / Math.PI);\r\n\t};\r\n\r\n\t/**\r\n\t * Returns the number of decimal places\r\n\t * i.e. the number of digits after the decimal point, of the value of this Number.\r\n\t * @param {number} x - A number.\r\n\t * @returns {number} The number of decimal places.\r\n\t * @private\r\n\t */\r\n\thelpers$1._decimalPlaces = function(x) {\r\n\t\tif (!helpers$1.isFinite(x)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar e = 1;\r\n\t\tvar p = 0;\r\n\t\twhile (Math.round(x * e) / e !== x) {\r\n\t\t\te *= 10;\r\n\t\t\tp++;\r\n\t\t}\r\n\t\treturn p;\r\n\t};\r\n\r\n\t// Gets the angle from vertical upright to the point about a centre.\r\n\thelpers$1.getAngleFromPoint = function(centrePoint, anglePoint) {\r\n\t\tvar distanceFromXCenter = anglePoint.x - centrePoint.x;\r\n\t\tvar distanceFromYCenter = anglePoint.y - centrePoint.y;\r\n\t\tvar radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\r\n\r\n\t\tvar angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\r\n\r\n\t\tif (angle < (-0.5 * Math.PI)) {\r\n\t\t\tangle += 2.0 * Math.PI; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tangle: angle,\r\n\t\t\tdistance: radialDistanceFromCenter\r\n\t\t};\r\n\t};\r\n\thelpers$1.distanceBetweenPoints = function(pt1, pt2) {\r\n\t\treturn Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\r\n\t};\r\n\r\n\t/**\r\n\t * Provided for backward compatibility, not available anymore\r\n\t * @function Chart.helpers.aliasPixel\r\n\t * @deprecated since version 2.8.0\r\n\t * @todo remove at version 3\r\n\t */\r\n\thelpers$1.aliasPixel = function(pixelWidth) {\r\n\t\treturn (pixelWidth % 2 === 0) ? 0 : 0.5;\r\n\t};\r\n\r\n\t/**\r\n\t * Returns the aligned pixel value to avoid anti-aliasing blur\r\n\t * @param {Chart} chart - The chart instance.\r\n\t * @param {number} pixel - A pixel value.\r\n\t * @param {number} width - The width of the element.\r\n\t * @returns {number} The aligned pixel value.\r\n\t * @private\r\n\t */\r\n\thelpers$1._alignPixel = function(chart, pixel, width) {\r\n\t\tvar devicePixelRatio = chart.currentDevicePixelRatio;\r\n\t\tvar halfWidth = width / 2;\r\n\t\treturn Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\r\n\t};\r\n\r\n\thelpers$1.splineCurve = function(firstPoint, middlePoint, afterPoint, t) {\r\n\t\t// Props to Rob Spencer at scaled innovation for his post on splining between points\r\n\t\t// http://scaledinnovation.com/analytics/splines/aboutSplines.html\r\n\r\n\t\t// This function must also respect \"skipped\" points\r\n\r\n\t\tvar previous = firstPoint.skip ? middlePoint : firstPoint;\r\n\t\tvar current = middlePoint;\r\n\t\tvar next = afterPoint.skip ? middlePoint : afterPoint;\r\n\r\n\t\tvar d01 = Math.sqrt(Math.pow(current.x - previous.x, 2) + Math.pow(current.y - previous.y, 2));\r\n\t\tvar d12 = Math.sqrt(Math.pow(next.x - current.x, 2) + Math.pow(next.y - current.y, 2));\r\n\r\n\t\tvar s01 = d01 / (d01 + d12);\r\n\t\tvar s12 = d12 / (d01 + d12);\r\n\r\n\t\t// If all points are the same, s01 & s02 will be inf\r\n\t\ts01 = isNaN(s01) ? 0 : s01;\r\n\t\ts12 = isNaN(s12) ? 0 : s12;\r\n\r\n\t\tvar fa = t * s01; // scaling factor for triangle Ta\r\n\t\tvar fb = t * s12;\r\n\r\n\t\treturn {\r\n\t\t\tprevious: {\r\n\t\t\t\tx: current.x - fa * (next.x - previous.x),\r\n\t\t\t\ty: current.y - fa * (next.y - previous.y)\r\n\t\t\t},\r\n\t\t\tnext: {\r\n\t\t\t\tx: current.x + fb * (next.x - previous.x),\r\n\t\t\t\ty: current.y + fb * (next.y - previous.y)\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\thelpers$1.EPSILON = Number.EPSILON || 1e-14;\r\n\thelpers$1.splineCurveMonotone = function(points) {\r\n\t\t// This function calculates Bézier control points in a similar way than |splineCurve|,\r\n\t\t// but preserves monotonicity of the provided data and ensures no local extremums are added\r\n\t\t// between the dataset discrete points due to the interpolation.\r\n\t\t// See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\r\n\r\n\t\tvar pointsWithTangents = (points || []).map(function(point) {\r\n\t\t\treturn {\r\n\t\t\t\tmodel: point._model,\r\n\t\t\t\tdeltaK: 0,\r\n\t\t\t\tmK: 0\r\n\t\t\t};\r\n\t\t});\r\n\r\n\t\t// Calculate slopes (deltaK) and initialize tangents (mK)\r\n\t\tvar pointsLen = pointsWithTangents.length;\r\n\t\tvar i, pointBefore, pointCurrent, pointAfter;\r\n\t\tfor (i = 0; i < pointsLen; ++i) {\r\n\t\t\tpointCurrent = pointsWithTangents[i];\r\n\t\t\tif (pointCurrent.model.skip) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tpointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\r\n\t\t\tpointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\r\n\t\t\tif (pointAfter && !pointAfter.model.skip) {\r\n\t\t\t\tvar slopeDeltaX = (pointAfter.model.x - pointCurrent.model.x);\r\n\r\n\t\t\t\t// In the case of two points that appear at the same x pixel, slopeDeltaX is 0\r\n\t\t\t\tpointCurrent.deltaK = slopeDeltaX !== 0 ? (pointAfter.model.y - pointCurrent.model.y) / slopeDeltaX : 0;\r\n\t\t\t}\r\n\r\n\t\t\tif (!pointBefore || pointBefore.model.skip) {\r\n\t\t\t\tpointCurrent.mK = pointCurrent.deltaK;\r\n\t\t\t} else if (!pointAfter || pointAfter.model.skip) {\r\n\t\t\t\tpointCurrent.mK = pointBefore.deltaK;\r\n\t\t\t} else if (this.sign(pointBefore.deltaK) !== this.sign(pointCurrent.deltaK)) {\r\n\t\t\t\tpointCurrent.mK = 0;\r\n\t\t\t} else {\r\n\t\t\t\tpointCurrent.mK = (pointBefore.deltaK + pointCurrent.deltaK) / 2;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Adjust tangents to ensure monotonic properties\r\n\t\tvar alphaK, betaK, tauK, squaredMagnitude;\r\n\t\tfor (i = 0; i < pointsLen - 1; ++i) {\r\n\t\t\tpointCurrent = pointsWithTangents[i];\r\n\t\t\tpointAfter = pointsWithTangents[i + 1];\r\n\t\t\tif (pointCurrent.model.skip || pointAfter.model.skip) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (helpers$1.almostEquals(pointCurrent.deltaK, 0, this.EPSILON)) {\r\n\t\t\t\tpointCurrent.mK = pointAfter.mK = 0;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\talphaK = pointCurrent.mK / pointCurrent.deltaK;\r\n\t\t\tbetaK = pointAfter.mK / pointCurrent.deltaK;\r\n\t\t\tsquaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\r\n\t\t\tif (squaredMagnitude <= 9) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\ttauK = 3 / Math.sqrt(squaredMagnitude);\r\n\t\t\tpointCurrent.mK = alphaK * tauK * pointCurrent.deltaK;\r\n\t\t\tpointAfter.mK = betaK * tauK * pointCurrent.deltaK;\r\n\t\t}\r\n\r\n\t\t// Compute control points\r\n\t\tvar deltaX;\r\n\t\tfor (i = 0; i < pointsLen; ++i) {\r\n\t\t\tpointCurrent = pointsWithTangents[i];\r\n\t\t\tif (pointCurrent.model.skip) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tpointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\r\n\t\t\tpointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\r\n\t\t\tif (pointBefore && !pointBefore.model.skip) {\r\n\t\t\t\tdeltaX = (pointCurrent.model.x - pointBefore.model.x) / 3;\r\n\t\t\t\tpointCurrent.model.controlPointPreviousX = pointCurrent.model.x - deltaX;\r\n\t\t\t\tpointCurrent.model.controlPointPreviousY = pointCurrent.model.y - deltaX * pointCurrent.mK;\r\n\t\t\t}\r\n\t\t\tif (pointAfter && !pointAfter.model.skip) {\r\n\t\t\t\tdeltaX = (pointAfter.model.x - pointCurrent.model.x) / 3;\r\n\t\t\t\tpointCurrent.model.controlPointNextX = pointCurrent.model.x + deltaX;\r\n\t\t\t\tpointCurrent.model.controlPointNextY = pointCurrent.model.y + deltaX * pointCurrent.mK;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\thelpers$1.nextItem = function(collection, index, loop) {\r\n\t\tif (loop) {\r\n\t\t\treturn index >= collection.length - 1 ? collection[0] : collection[index + 1];\r\n\t\t}\r\n\t\treturn index >= collection.length - 1 ? collection[collection.length - 1] : collection[index + 1];\r\n\t};\r\n\thelpers$1.previousItem = function(collection, index, loop) {\r\n\t\tif (loop) {\r\n\t\t\treturn index <= 0 ? collection[collection.length - 1] : collection[index - 1];\r\n\t\t}\r\n\t\treturn index <= 0 ? collection[0] : collection[index - 1];\r\n\t};\r\n\t// Implementation of the nice number algorithm used in determining where axis labels will go\r\n\thelpers$1.niceNum = function(range, round) {\r\n\t\tvar exponent = Math.floor(helpers$1.log10(range));\r\n\t\tvar fraction = range / Math.pow(10, exponent);\r\n\t\tvar niceFraction;\r\n\r\n\t\tif (round) {\r\n\t\t\tif (fraction < 1.5) {\r\n\t\t\t\tniceFraction = 1;\r\n\t\t\t} else if (fraction < 3) {\r\n\t\t\t\tniceFraction = 2;\r\n\t\t\t} else if (fraction < 7) {\r\n\t\t\t\tniceFraction = 5;\r\n\t\t\t} else {\r\n\t\t\t\tniceFraction = 10;\r\n\t\t\t}\r\n\t\t} else if (fraction <= 1.0) {\r\n\t\t\tniceFraction = 1;\r\n\t\t} else if (fraction <= 2) {\r\n\t\t\tniceFraction = 2;\r\n\t\t} else if (fraction <= 5) {\r\n\t\t\tniceFraction = 5;\r\n\t\t} else {\r\n\t\t\tniceFraction = 10;\r\n\t\t}\r\n\r\n\t\treturn niceFraction * Math.pow(10, exponent);\r\n\t};\r\n\t// Request animation polyfill - https://www.paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n\thelpers$1.requestAnimFrame = (function() {\r\n\t\tif (typeof window === 'undefined') {\r\n\t\t\treturn function(callback) {\r\n\t\t\t\tcallback();\r\n\t\t\t};\r\n\t\t}\r\n\t\treturn window.requestAnimationFrame ||\r\n\t\t\twindow.webkitRequestAnimationFrame ||\r\n\t\t\twindow.mozRequestAnimationFrame ||\r\n\t\t\twindow.oRequestAnimationFrame ||\r\n\t\t\twindow.msRequestAnimationFrame ||\r\n\t\t\tfunction(callback) {\r\n\t\t\t\treturn window.setTimeout(callback, 1000 / 60);\r\n\t\t\t};\r\n\t}());\r\n\t// -- DOM methods\r\n\thelpers$1.getRelativePosition = function(evt, chart) {\r\n\t\tvar mouseX, mouseY;\r\n\t\tvar e = evt.originalEvent || evt;\r\n\t\tvar canvas = evt.target || evt.srcElement;\r\n\t\tvar boundingRect = canvas.getBoundingClientRect();\r\n\r\n\t\tvar touches = e.touches;\r\n\t\tif (touches && touches.length > 0) {\r\n\t\t\tmouseX = touches[0].clientX;\r\n\t\t\tmouseY = touches[0].clientY;\r\n\r\n\t\t} else {\r\n\t\t\tmouseX = e.clientX;\r\n\t\t\tmouseY = e.clientY;\r\n\t\t}\r\n\r\n\t\t// Scale mouse coordinates into canvas coordinates\r\n\t\t// by following the pattern laid out by 'jerryj' in the comments of\r\n\t\t// https://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/\r\n\t\tvar paddingLeft = parseFloat(helpers$1.getStyle(canvas, 'padding-left'));\r\n\t\tvar paddingTop = parseFloat(helpers$1.getStyle(canvas, 'padding-top'));\r\n\t\tvar paddingRight = parseFloat(helpers$1.getStyle(canvas, 'padding-right'));\r\n\t\tvar paddingBottom = parseFloat(helpers$1.getStyle(canvas, 'padding-bottom'));\r\n\t\tvar width = boundingRect.right - boundingRect.left - paddingLeft - paddingRight;\r\n\t\tvar height = boundingRect.bottom - boundingRect.top - paddingTop - paddingBottom;\r\n\r\n\t\t// We divide by the current device pixel ratio, because the canvas is scaled up by that amount in each direction. However\r\n\t\t// the backend model is in unscaled coordinates. Since we are going to deal with our model coordinates, we go back here\r\n\t\tmouseX = Math.round((mouseX - boundingRect.left - paddingLeft) / (width) * canvas.width / chart.currentDevicePixelRatio);\r\n\t\tmouseY = Math.round((mouseY - boundingRect.top - paddingTop) / (height) * canvas.height / chart.currentDevicePixelRatio);\r\n\r\n\t\treturn {\r\n\t\t\tx: mouseX,\r\n\t\t\ty: mouseY\r\n\t\t};\r\n\r\n\t};\r\n\r\n\t// Private helper function to convert max-width/max-height values that may be percentages into a number\r\n\tfunction parseMaxStyle(styleValue, node, parentProperty) {\r\n\t\tvar valueInPixels;\r\n\t\tif (typeof styleValue === 'string') {\r\n\t\t\tvalueInPixels = parseInt(styleValue, 10);\r\n\r\n\t\t\tif (styleValue.indexOf('%') !== -1) {\r\n\t\t\t\t// percentage * size in dimension\r\n\t\t\t\tvalueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tvalueInPixels = styleValue;\r\n\t\t}\r\n\r\n\t\treturn valueInPixels;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns if the given value contains an effective constraint.\r\n\t * @private\r\n\t */\r\n\tfunction isConstrainedValue(value) {\r\n\t\treturn value !== undefined && value !== null && value !== 'none';\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the max width or height of the given DOM node in a cross-browser compatible fashion\r\n\t * @param {HTMLElement} domNode - the node to check the constraint on\r\n\t * @param {string} maxStyle - the style that defines the maximum for the direction we are using ('max-width' / 'max-height')\r\n\t * @param {string} percentageProperty - property of parent to use when calculating width as a percentage\r\n\t * @see {@link https://www.nathanaeljones.com/blog/2013/reading-max-width-cross-browser}\r\n\t */\r\n\tfunction getConstraintDimension(domNode, maxStyle, percentageProperty) {\r\n\t\tvar view = document.defaultView;\r\n\t\tvar parentNode = helpers$1._getParentNode(domNode);\r\n\t\tvar constrainedNode = view.getComputedStyle(domNode)[maxStyle];\r\n\t\tvar constrainedContainer = view.getComputedStyle(parentNode)[maxStyle];\r\n\t\tvar hasCNode = isConstrainedValue(constrainedNode);\r\n\t\tvar hasCContainer = isConstrainedValue(constrainedContainer);\r\n\t\tvar infinity = Number.POSITIVE_INFINITY;\r\n\r\n\t\tif (hasCNode || hasCContainer) {\r\n\t\t\treturn Math.min(\r\n\t\t\t\thasCNode ? parseMaxStyle(constrainedNode, domNode, percentageProperty) : infinity,\r\n\t\t\t\thasCContainer ? parseMaxStyle(constrainedContainer, parentNode, percentageProperty) : infinity);\r\n\t\t}\r\n\r\n\t\treturn 'none';\r\n\t}\r\n\t// returns Number or undefined if no constraint\r\n\thelpers$1.getConstraintWidth = function(domNode) {\r\n\t\treturn getConstraintDimension(domNode, 'max-width', 'clientWidth');\r\n\t};\r\n\t// returns Number or undefined if no constraint\r\n\thelpers$1.getConstraintHeight = function(domNode) {\r\n\t\treturn getConstraintDimension(domNode, 'max-height', 'clientHeight');\r\n\t};\r\n\t/**\r\n\t * @private\r\n \t */\r\n\thelpers$1._calculatePadding = function(container, padding, parentDimension) {\r\n\t\tpadding = helpers$1.getStyle(container, padding);\r\n\r\n\t\treturn padding.indexOf('%') > -1 ? parentDimension * parseInt(padding, 10) / 100 : parseInt(padding, 10);\r\n\t};\r\n\t/**\r\n\t * @private\r\n\t */\r\n\thelpers$1._getParentNode = function(domNode) {\r\n\t\tvar parent = domNode.parentNode;\r\n\t\tif (parent && parent.toString() === '[object ShadowRoot]') {\r\n\t\t\tparent = parent.host;\r\n\t\t}\r\n\t\treturn parent;\r\n\t};\r\n\thelpers$1.getMaximumWidth = function(domNode) {\r\n\t\tvar container = helpers$1._getParentNode(domNode);\r\n\t\tif (!container) {\r\n\t\t\treturn domNode.clientWidth;\r\n\t\t}\r\n\r\n\t\tvar clientWidth = container.clientWidth;\r\n\t\tvar paddingLeft = helpers$1._calculatePadding(container, 'padding-left', clientWidth);\r\n\t\tvar paddingRight = helpers$1._calculatePadding(container, 'padding-right', clientWidth);\r\n\r\n\t\tvar w = clientWidth - paddingLeft - paddingRight;\r\n\t\tvar cw = helpers$1.getConstraintWidth(domNode);\r\n\t\treturn isNaN(cw) ? w : Math.min(w, cw);\r\n\t};\r\n\thelpers$1.getMaximumHeight = function(domNode) {\r\n\t\tvar container = helpers$1._getParentNode(domNode);\r\n\t\tif (!container) {\r\n\t\t\treturn domNode.clientHeight;\r\n\t\t}\r\n\r\n\t\tvar clientHeight = container.clientHeight;\r\n\t\tvar paddingTop = helpers$1._calculatePadding(container, 'padding-top', clientHeight);\r\n\t\tvar paddingBottom = helpers$1._calculatePadding(container, 'padding-bottom', clientHeight);\r\n\r\n\t\tvar h = clientHeight - paddingTop - paddingBottom;\r\n\t\tvar ch = helpers$1.getConstraintHeight(domNode);\r\n\t\treturn isNaN(ch) ? h : Math.min(h, ch);\r\n\t};\r\n\thelpers$1.getStyle = function(el, property) {\r\n\t\treturn el.currentStyle ?\r\n\t\t\tel.currentStyle[property] :\r\n\t\t\tdocument.defaultView.getComputedStyle(el, null).getPropertyValue(property);\r\n\t};\r\n\thelpers$1.retinaScale = function(chart, forceRatio) {\r\n\t\tvar pixelRatio = chart.currentDevicePixelRatio = forceRatio || (typeof window !== 'undefined' && window.devicePixelRatio) || 1;\r\n\t\tif (pixelRatio === 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar canvas = chart.canvas;\r\n\t\tvar height = chart.height;\r\n\t\tvar width = chart.width;\r\n\r\n\t\tcanvas.height = height * pixelRatio;\r\n\t\tcanvas.width = width * pixelRatio;\r\n\t\tchart.ctx.scale(pixelRatio, pixelRatio);\r\n\r\n\t\t// If no style has been set on the canvas, the render size is used as display size,\r\n\t\t// making the chart visually bigger, so let's enforce it to the \"correct\" values.\r\n\t\t// See https://github.com/chartjs/Chart.js/issues/3575\r\n\t\tif (!canvas.style.height && !canvas.style.width) {\r\n\t\t\tcanvas.style.height = height + 'px';\r\n\t\t\tcanvas.style.width = width + 'px';\r\n\t\t}\r\n\t};\r\n\t// -- Canvas methods\r\n\thelpers$1.fontString = function(pixelSize, fontStyle, fontFamily) {\r\n\t\treturn fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\r\n\t};\r\n\thelpers$1.longestText = function(ctx, font, arrayOfThings, cache) {\r\n\t\tcache = cache || {};\r\n\t\tvar data = cache.data = cache.data || {};\r\n\t\tvar gc = cache.garbageCollect = cache.garbageCollect || [];\r\n\r\n\t\tif (cache.font !== font) {\r\n\t\t\tdata = cache.data = {};\r\n\t\t\tgc = cache.garbageCollect = [];\r\n\t\t\tcache.font = font;\r\n\t\t}\r\n\r\n\t\tctx.font = font;\r\n\t\tvar longest = 0;\r\n\t\tvar ilen = arrayOfThings.length;\r\n\t\tvar i, j, jlen, thing, nestedThing;\r\n\t\tfor (i = 0; i < ilen; i++) {\r\n\t\t\tthing = arrayOfThings[i];\r\n\r\n\t\t\t// Undefined strings and arrays should not be measured\r\n\t\t\tif (thing !== undefined && thing !== null && helpers$1.isArray(thing) !== true) {\r\n\t\t\t\tlongest = helpers$1.measureText(ctx, data, gc, longest, thing);\r\n\t\t\t} else if (helpers$1.isArray(thing)) {\r\n\t\t\t\t// if it is an array lets measure each element\r\n\t\t\t\t// to do maybe simplify this function a bit so we can do this more recursively?\r\n\t\t\t\tfor (j = 0, jlen = thing.length; j < jlen; j++) {\r\n\t\t\t\t\tnestedThing = thing[j];\r\n\t\t\t\t\t// Undefined strings and arrays should not be measured\r\n\t\t\t\t\tif (nestedThing !== undefined && nestedThing !== null && !helpers$1.isArray(nestedThing)) {\r\n\t\t\t\t\t\tlongest = helpers$1.measureText(ctx, data, gc, longest, nestedThing);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar gcLen = gc.length / 2;\r\n\t\tif (gcLen > arrayOfThings.length) {\r\n\t\t\tfor (i = 0; i < gcLen; i++) {\r\n\t\t\t\tdelete data[gc[i]];\r\n\t\t\t}\r\n\t\t\tgc.splice(0, gcLen);\r\n\t\t}\r\n\t\treturn longest;\r\n\t};\r\n\thelpers$1.measureText = function(ctx, data, gc, longest, string) {\r\n\t\tvar textWidth = data[string];\r\n\t\tif (!textWidth) {\r\n\t\t\ttextWidth = data[string] = ctx.measureText(string).width;\r\n\t\t\tgc.push(string);\r\n\t\t}\r\n\t\tif (textWidth > longest) {\r\n\t\t\tlongest = textWidth;\r\n\t\t}\r\n\t\treturn longest;\r\n\t};\r\n\r\n\t/**\r\n\t * @deprecated\r\n\t */\r\n\thelpers$1.numberOfLabelLines = function(arrayOfThings) {\r\n\t\tvar numberOfLines = 1;\r\n\t\thelpers$1.each(arrayOfThings, function(thing) {\r\n\t\t\tif (helpers$1.isArray(thing)) {\r\n\t\t\t\tif (thing.length > numberOfLines) {\r\n\t\t\t\t\tnumberOfLines = thing.length;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn numberOfLines;\r\n\t};\r\n\r\n\thelpers$1.color = !chartjsColor ?\r\n\t\tfunction(value) {\r\n\t\t\tconsole.error('Color.js not found!');\r\n\t\t\treturn value;\r\n\t\t} :\r\n\t\tfunction(value) {\r\n\t\t\t/* global CanvasGradient */\r\n\t\t\tif (value instanceof CanvasGradient) {\r\n\t\t\t\tvalue = core_defaults.global.defaultColor;\r\n\t\t\t}\r\n\r\n\t\t\treturn chartjsColor(value);\r\n\t\t};\r\n\r\n\thelpers$1.getHoverColor = function(colorValue) {\r\n\t\t/* global CanvasPattern */\r\n\t\treturn (colorValue instanceof CanvasPattern || colorValue instanceof CanvasGradient) ?\r\n\t\t\tcolorValue :\r\n\t\t\thelpers$1.color(colorValue).saturate(0.5).darken(0.1).rgbString();\r\n\t};\r\n};\n\nfunction abstract() {\r\n\tthrow new Error(\r\n\t\t'This method is not implemented: either no adapter can ' +\r\n\t\t'be found or an incomplete integration was provided.'\r\n\t);\r\n}\r\n\r\n/**\r\n * Date adapter (current used by the time scale)\r\n * @namespace Chart._adapters._date\r\n * @memberof Chart._adapters\r\n * @private\r\n */\r\n\r\n/**\r\n * Currently supported unit string values.\r\n * @typedef {('millisecond'|'second'|'minute'|'hour'|'day'|'week'|'month'|'quarter'|'year')}\r\n * @memberof Chart._adapters._date\r\n * @name Unit\r\n */\r\n\r\n/**\r\n * @class\r\n */\r\nfunction DateAdapter(options) {\r\n\tthis.options = options || {};\r\n}\r\n\r\nhelpers$1.extend(DateAdapter.prototype, /** @lends DateAdapter */ {\r\n\t/**\r\n\t * Returns a map of time formats for the supported formatting units defined\r\n\t * in Unit as well as 'datetime' representing a detailed date/time string.\r\n\t * @returns {{string: string}}\r\n\t */\r\n\tformats: abstract,\r\n\r\n\t/**\r\n\t * Parses the given `value` and return the associated timestamp.\r\n\t * @param {any} value - the value to parse (usually comes from the data)\r\n\t * @param {string} [format] - the expected data format\r\n\t * @returns {(number|null)}\r\n\t * @function\r\n\t */\r\n\tparse: abstract,\r\n\r\n\t/**\r\n\t * Returns the formatted date in the specified `format` for a given `timestamp`.\r\n\t * @param {number} timestamp - the timestamp to format\r\n\t * @param {string} format - the date/time token\r\n\t * @return {string}\r\n\t * @function\r\n\t */\r\n\tformat: abstract,\r\n\r\n\t/**\r\n\t * Adds the specified `amount` of `unit` to the given `timestamp`.\r\n\t * @param {number} timestamp - the input timestamp\r\n\t * @param {number} amount - the amount to add\r\n\t * @param {Unit} unit - the unit as string\r\n\t * @return {number}\r\n\t * @function\r\n\t */\r\n\tadd: abstract,\r\n\r\n\t/**\r\n\t * Returns the number of `unit` between the given timestamps.\r\n\t * @param {number} max - the input timestamp (reference)\r\n\t * @param {number} min - the timestamp to substract\r\n\t * @param {Unit} unit - the unit as string\r\n\t * @return {number}\r\n\t * @function\r\n\t */\r\n\tdiff: abstract,\r\n\r\n\t/**\r\n\t * Returns start of `unit` for the given `timestamp`.\r\n\t * @param {number} timestamp - the input timestamp\r\n\t * @param {Unit} unit - the unit as string\r\n\t * @param {number} [weekday] - the ISO day of the week with 1 being Monday\r\n\t * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\r\n\t * @function\r\n\t */\r\n\tstartOf: abstract,\r\n\r\n\t/**\r\n\t * Returns end of `unit` for the given `timestamp`.\r\n\t * @param {number} timestamp - the input timestamp\r\n\t * @param {Unit} unit - the unit as string\r\n\t * @function\r\n\t */\r\n\tendOf: abstract,\r\n\r\n\t// DEPRECATIONS\r\n\r\n\t/**\r\n\t * Provided for backward compatibility for scale.getValueForPixel(),\r\n\t * this method should be overridden only by the moment adapter.\r\n\t * @deprecated since version 2.8.0\r\n\t * @todo remove at version 3\r\n\t * @private\r\n\t */\r\n\t_create: function(value) {\r\n\t\treturn value;\r\n\t}\r\n});\r\n\r\nDateAdapter.override = function(members) {\r\n\thelpers$1.extend(DateAdapter.prototype, members);\r\n};\r\n\r\nvar _date = DateAdapter;\n\nvar core_adapters = {\n\t_date: _date\n};\n\n/**\r\n * Namespace to hold static tick generation functions\r\n * @namespace Chart.Ticks\r\n */\r\nvar core_ticks = {\r\n\t/**\r\n\t * Namespace to hold formatters for different types of ticks\r\n\t * @namespace Chart.Ticks.formatters\r\n\t */\r\n\tformatters: {\r\n\t\t/**\r\n\t\t * Formatter for value labels\r\n\t\t * @method Chart.Ticks.formatters.values\r\n\t\t * @param value the value to display\r\n\t\t * @return {string|string[]} the label to display\r\n\t\t */\r\n\t\tvalues: function(value) {\r\n\t\t\treturn helpers$1.isArray(value) ? value : '' + value;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Formatter for linear numeric ticks\r\n\t\t * @method Chart.Ticks.formatters.linear\r\n\t\t * @param tickValue {number} the value to be formatted\r\n\t\t * @param index {number} the position of the tickValue parameter in the ticks array\r\n\t\t * @param ticks {number[]} the list of ticks being converted\r\n\t\t * @return {string} string representation of the tickValue parameter\r\n\t\t */\r\n\t\tlinear: function(tickValue, index, ticks) {\r\n\t\t\t// If we have lots of ticks, don't use the ones\r\n\t\t\tvar delta = ticks.length > 3 ? ticks[2] - ticks[1] : ticks[1] - ticks[0];\r\n\r\n\t\t\t// If we have a number like 2.5 as the delta, figure out how many decimal places we need\r\n\t\t\tif (Math.abs(delta) > 1) {\r\n\t\t\t\tif (tickValue !== Math.floor(tickValue)) {\r\n\t\t\t\t\t// not an integer\r\n\t\t\t\t\tdelta = tickValue - Math.floor(tickValue);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar logDelta = helpers$1.log10(Math.abs(delta));\r\n\t\t\tvar tickString = '';\r\n\r\n\t\t\tif (tickValue !== 0) {\r\n\t\t\t\tvar maxTick = Math.max(Math.abs(ticks[0]), Math.abs(ticks[ticks.length - 1]));\r\n\t\t\t\tif (maxTick < 1e-4) { // all ticks are small numbers; use scientific notation\r\n\t\t\t\t\tvar logTick = helpers$1.log10(Math.abs(tickValue));\r\n\t\t\t\t\tvar numExponential = Math.floor(logTick) - Math.floor(logDelta);\r\n\t\t\t\t\tnumExponential = Math.max(Math.min(numExponential, 20), 0);\r\n\t\t\t\t\ttickString = tickValue.toExponential(numExponential);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar numDecimal = -1 * Math.floor(logDelta);\r\n\t\t\t\t\tnumDecimal = Math.max(Math.min(numDecimal, 20), 0); // toFixed has a max of 20 decimal places\r\n\t\t\t\t\ttickString = tickValue.toFixed(numDecimal);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\ttickString = '0'; // never show decimal places for 0\r\n\t\t\t}\r\n\r\n\t\t\treturn tickString;\r\n\t\t},\r\n\r\n\t\tlogarithmic: function(tickValue, index, ticks) {\r\n\t\t\tvar remain = tickValue / (Math.pow(10, Math.floor(helpers$1.log10(tickValue))));\r\n\r\n\t\t\tif (tickValue === 0) {\r\n\t\t\t\treturn '0';\r\n\t\t\t} else if (remain === 1 || remain === 2 || remain === 5 || index === 0 || index === ticks.length - 1) {\r\n\t\t\t\treturn tickValue.toExponential();\r\n\t\t\t}\r\n\t\t\treturn '';\r\n\t\t}\r\n\t}\r\n};\n\nvar isArray = helpers$1.isArray;\r\nvar isNullOrUndef = helpers$1.isNullOrUndef;\r\nvar valueOrDefault$a = helpers$1.valueOrDefault;\r\nvar valueAtIndexOrDefault = helpers$1.valueAtIndexOrDefault;\r\n\r\ncore_defaults._set('scale', {\r\n\tdisplay: true,\r\n\tposition: 'left',\r\n\toffset: false,\r\n\r\n\t// grid line settings\r\n\tgridLines: {\r\n\t\tdisplay: true,\r\n\t\tcolor: 'rgba(0,0,0,0.1)',\r\n\t\tlineWidth: 1,\r\n\t\tdrawBorder: true,\r\n\t\tdrawOnChartArea: true,\r\n\t\tdrawTicks: true,\r\n\t\ttickMarkLength: 10,\r\n\t\tzeroLineWidth: 1,\r\n\t\tzeroLineColor: 'rgba(0,0,0,0.25)',\r\n\t\tzeroLineBorderDash: [],\r\n\t\tzeroLineBorderDashOffset: 0.0,\r\n\t\toffsetGridLines: false,\r\n\t\tborderDash: [],\r\n\t\tborderDashOffset: 0.0\r\n\t},\r\n\r\n\t// scale label\r\n\tscaleLabel: {\r\n\t\t// display property\r\n\t\tdisplay: false,\r\n\r\n\t\t// actual label\r\n\t\tlabelString: '',\r\n\r\n\t\t// top/bottom padding\r\n\t\tpadding: {\r\n\t\t\ttop: 4,\r\n\t\t\tbottom: 4\r\n\t\t}\r\n\t},\r\n\r\n\t// label settings\r\n\tticks: {\r\n\t\tbeginAtZero: false,\r\n\t\tminRotation: 0,\r\n\t\tmaxRotation: 50,\r\n\t\tmirror: false,\r\n\t\tpadding: 0,\r\n\t\treverse: false,\r\n\t\tdisplay: true,\r\n\t\tautoSkip: true,\r\n\t\tautoSkipPadding: 0,\r\n\t\tlabelOffset: 0,\r\n\t\t// We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\r\n\t\tcallback: core_ticks.formatters.values,\r\n\t\tminor: {},\r\n\t\tmajor: {}\r\n\t}\r\n});\r\n\r\n/** Returns a new array containing numItems from arr */\r\nfunction sample(arr, numItems) {\r\n\tvar result = [];\r\n\tvar increment = arr.length / numItems;\r\n\tvar i = 0;\r\n\tvar len = arr.length;\r\n\r\n\tfor (; i < len; i += increment) {\r\n\t\tresult.push(arr[Math.floor(i)]);\r\n\t}\r\n\treturn result;\r\n}\r\n\r\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\r\n\tvar length = scale.getTicks().length;\r\n\tvar validIndex = Math.min(index, length - 1);\r\n\tvar lineValue = scale.getPixelForTick(validIndex);\r\n\tvar start = scale._startPixel;\r\n\tvar end = scale._endPixel;\r\n\tvar epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\r\n\tvar offset;\r\n\r\n\tif (offsetGridLines) {\r\n\t\tif (length === 1) {\r\n\t\t\toffset = Math.max(lineValue - start, end - lineValue);\r\n\t\t} else if (index === 0) {\r\n\t\t\toffset = (scale.getPixelForTick(1) - lineValue) / 2;\r\n\t\t} else {\r\n\t\t\toffset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\r\n\t\t}\r\n\t\tlineValue += validIndex < index ? offset : -offset;\r\n\r\n\t\t// Return undefined if the pixel is out of the range\r\n\t\tif (lineValue < start - epsilon || lineValue > end + epsilon) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\treturn lineValue;\r\n}\r\n\r\nfunction garbageCollect(caches, length) {\r\n\thelpers$1.each(caches, function(cache) {\r\n\t\tvar gc = cache.gc;\r\n\t\tvar gcLen = gc.length / 2;\r\n\t\tvar i;\r\n\t\tif (gcLen > length) {\r\n\t\t\tfor (i = 0; i < gcLen; ++i) {\r\n\t\t\t\tdelete cache.data[gc[i]];\r\n\t\t\t}\r\n\t\t\tgc.splice(0, gcLen);\r\n\t\t}\r\n\t});\r\n}\r\n\r\n/**\r\n * Returns {width, height, offset} objects for the first, last, widest, highest tick\r\n * labels where offset indicates the anchor point offset from the top in pixels.\r\n */\r\nfunction computeLabelSizes(ctx, tickFonts, ticks, caches) {\r\n\tvar length = ticks.length;\r\n\tvar widths = [];\r\n\tvar heights = [];\r\n\tvar offsets = [];\r\n\tvar widestLabelSize = 0;\r\n\tvar highestLabelSize = 0;\r\n\tvar i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel, widest, highest;\r\n\r\n\tfor (i = 0; i < length; ++i) {\r\n\t\tlabel = ticks[i].label;\r\n\t\ttickFont = ticks[i].major ? tickFonts.major : tickFonts.minor;\r\n\t\tctx.font = fontString = tickFont.string;\r\n\t\tcache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\r\n\t\tlineHeight = tickFont.lineHeight;\r\n\t\twidth = height = 0;\r\n\t\t// Undefined labels and arrays should not be measured\r\n\t\tif (!isNullOrUndef(label) && !isArray(label)) {\r\n\t\t\twidth = helpers$1.measureText(ctx, cache.data, cache.gc, width, label);\r\n\t\t\theight = lineHeight;\r\n\t\t} else if (isArray(label)) {\r\n\t\t\t// if it is an array let's measure each element\r\n\t\t\tfor (j = 0, jlen = label.length; j < jlen; ++j) {\r\n\t\t\t\tnestedLabel = label[j];\r\n\t\t\t\t// Undefined labels and arrays should not be measured\r\n\t\t\t\tif (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\r\n\t\t\t\t\twidth = helpers$1.measureText(ctx, cache.data, cache.gc, width, nestedLabel);\r\n\t\t\t\t\theight += lineHeight;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\twidths.push(width);\r\n\t\theights.push(height);\r\n\t\toffsets.push(lineHeight / 2);\r\n\t\twidestLabelSize = Math.max(width, widestLabelSize);\r\n\t\thighestLabelSize = Math.max(height, highestLabelSize);\r\n\t}\r\n\tgarbageCollect(caches, length);\r\n\r\n\twidest = widths.indexOf(widestLabelSize);\r\n\thighest = heights.indexOf(highestLabelSize);\r\n\r\n\tfunction valueAt(idx) {\r\n\t\treturn {\r\n\t\t\twidth: widths[idx] || 0,\r\n\t\t\theight: heights[idx] || 0,\r\n\t\t\toffset: offsets[idx] || 0\r\n\t\t};\r\n\t}\r\n\r\n\treturn {\r\n\t\tfirst: valueAt(0),\r\n\t\tlast: valueAt(length - 1),\r\n\t\twidest: valueAt(widest),\r\n\t\thighest: valueAt(highest)\r\n\t};\r\n}\r\n\r\nfunction getTickMarkLength(options) {\r\n\treturn options.drawTicks ? options.tickMarkLength : 0;\r\n}\r\n\r\nfunction getScaleLabelHeight(options) {\r\n\tvar font, padding;\r\n\r\n\tif (!options.display) {\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tfont = helpers$1.options._parseFont(options);\r\n\tpadding = helpers$1.options.toPadding(options.padding);\r\n\r\n\treturn font.lineHeight + padding.height;\r\n}\r\n\r\nfunction parseFontOptions(options, nestedOpts) {\r\n\treturn helpers$1.extend(helpers$1.options._parseFont({\r\n\t\tfontFamily: valueOrDefault$a(nestedOpts.fontFamily, options.fontFamily),\r\n\t\tfontSize: valueOrDefault$a(nestedOpts.fontSize, options.fontSize),\r\n\t\tfontStyle: valueOrDefault$a(nestedOpts.fontStyle, options.fontStyle),\r\n\t\tlineHeight: valueOrDefault$a(nestedOpts.lineHeight, options.lineHeight)\r\n\t}), {\r\n\t\tcolor: helpers$1.options.resolve([nestedOpts.fontColor, options.fontColor, core_defaults.global.defaultFontColor])\r\n\t});\r\n}\r\n\r\nfunction parseTickFontOptions(options) {\r\n\tvar minor = parseFontOptions(options, options.minor);\r\n\tvar major = options.major.enabled ? parseFontOptions(options, options.major) : minor;\r\n\r\n\treturn {minor: minor, major: major};\r\n}\r\n\r\nfunction nonSkipped(ticksToFilter) {\r\n\tvar filtered = [];\r\n\tvar item, index, len;\r\n\tfor (index = 0, len = ticksToFilter.length; index < len; ++index) {\r\n\t\titem = ticksToFilter[index];\r\n\t\tif (typeof item._index !== 'undefined') {\r\n\t\t\tfiltered.push(item);\r\n\t\t}\r\n\t}\r\n\treturn filtered;\r\n}\r\n\r\nfunction getEvenSpacing(arr) {\r\n\tvar len = arr.length;\r\n\tvar i, diff;\r\n\r\n\tif (len < 2) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfor (diff = arr[0], i = 1; i < len; ++i) {\r\n\t\tif (arr[i] - arr[i - 1] !== diff) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\treturn diff;\r\n}\r\n\r\nfunction calculateSpacing(majorIndices, ticks, axisLength, ticksLimit) {\r\n\tvar evenMajorSpacing = getEvenSpacing(majorIndices);\r\n\tvar spacing = (ticks.length - 1) / ticksLimit;\r\n\tvar factors, factor, i, ilen;\r\n\r\n\t// If the major ticks are evenly spaced apart, place the minor ticks\r\n\t// so that they divide the major ticks into even chunks\r\n\tif (!evenMajorSpacing) {\r\n\t\treturn Math.max(spacing, 1);\r\n\t}\r\n\r\n\tfactors = helpers$1.math._factorize(evenMajorSpacing);\r\n\tfor (i = 0, ilen = factors.length - 1; i < ilen; i++) {\r\n\t\tfactor = factors[i];\r\n\t\tif (factor > spacing) {\r\n\t\t\treturn factor;\r\n\t\t}\r\n\t}\r\n\treturn Math.max(spacing, 1);\r\n}\r\n\r\nfunction getMajorIndices(ticks) {\r\n\tvar result = [];\r\n\tvar i, ilen;\r\n\tfor (i = 0, ilen = ticks.length; i < ilen; i++) {\r\n\t\tif (ticks[i].major) {\r\n\t\t\tresult.push(i);\r\n\t\t}\r\n\t}\r\n\treturn result;\r\n}\r\n\r\nfunction skipMajors(ticks, majorIndices, spacing) {\r\n\tvar count = 0;\r\n\tvar next = majorIndices[0];\r\n\tvar i, tick;\r\n\r\n\tspacing = Math.ceil(spacing);\r\n\tfor (i = 0; i < ticks.length; i++) {\r\n\t\ttick = ticks[i];\r\n\t\tif (i === next) {\r\n\t\t\ttick._index = i;\r\n\t\t\tcount++;\r\n\t\t\tnext = majorIndices[count * spacing];\r\n\t\t} else {\r\n\t\t\tdelete tick.label;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction skip(ticks, spacing, majorStart, majorEnd) {\r\n\tvar start = valueOrDefault$a(majorStart, 0);\r\n\tvar end = Math.min(valueOrDefault$a(majorEnd, ticks.length), ticks.length);\r\n\tvar count = 0;\r\n\tvar length, i, tick, next;\r\n\r\n\tspacing = Math.ceil(spacing);\r\n\tif (majorEnd) {\r\n\t\tlength = majorEnd - majorStart;\r\n\t\tspacing = length / Math.floor(length / spacing);\r\n\t}\r\n\r\n\tnext = start;\r\n\r\n\twhile (next < 0) {\r\n\t\tcount++;\r\n\t\tnext = Math.round(start + count * spacing);\r\n\t}\r\n\r\n\tfor (i = Math.max(start, 0); i < end; i++) {\r\n\t\ttick = ticks[i];\r\n\t\tif (i === next) {\r\n\t\t\ttick._index = i;\r\n\t\t\tcount++;\r\n\t\t\tnext = Math.round(start + count * spacing);\r\n\t\t} else {\r\n\t\t\tdelete tick.label;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nvar Scale = core_element.extend({\r\n\r\n\tzeroLineIndex: 0,\r\n\r\n\t/**\r\n\t * Get the padding needed for the scale\r\n\t * @method getPadding\r\n\t * @private\r\n\t * @returns {Padding} the necessary padding\r\n\t */\r\n\tgetPadding: function() {\r\n\t\tvar me = this;\r\n\t\treturn {\r\n\t\t\tleft: me.paddingLeft || 0,\r\n\t\t\ttop: me.paddingTop || 0,\r\n\t\t\tright: me.paddingRight || 0,\r\n\t\t\tbottom: me.paddingBottom || 0\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the scale tick objects ({label, major})\r\n\t * @since 2.7\r\n\t */\r\n\tgetTicks: function() {\r\n\t\treturn this._ticks;\r\n\t},\r\n\r\n\t/**\r\n\t* @private\r\n\t*/\r\n\t_getLabels: function() {\r\n\t\tvar data = this.chart.data;\r\n\t\treturn this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\r\n\t},\r\n\r\n\t// These methods are ordered by lifecyle. Utilities then follow.\r\n\t// Any function defined here is inherited by all scale types.\r\n\t// Any function can be extended by the scale type\r\n\r\n\t/**\r\n\t * Provided for backward compatibility, not available anymore\r\n\t * @function Chart.Scale.mergeTicksOptions\r\n\t * @deprecated since version 2.8.0\r\n\t * @todo remove at version 3\r\n\t */\r\n\tmergeTicksOptions: function() {\r\n\t\t// noop\r\n\t},\r\n\r\n\tbeforeUpdate: function() {\r\n\t\thelpers$1.callback(this.options.beforeUpdate, [this]);\r\n\t},\r\n\r\n\t/**\r\n\t * @param {number} maxWidth - the max width in pixels\r\n\t * @param {number} maxHeight - the max height in pixels\r\n\t * @param {object} margins - the space between the edge of the other scales and edge of the chart\r\n\t *   This space comes from two sources:\r\n\t *     - padding - space that's required to show the labels at the edges of the scale\r\n\t *     - thickness of scales or legends in another orientation\r\n\t */\r\n\tupdate: function(maxWidth, maxHeight, margins) {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar sampleSize = tickOpts.sampleSize;\r\n\t\tvar i, ilen, labels, ticks, samplingEnabled;\r\n\r\n\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\r\n\t\tme.beforeUpdate();\r\n\r\n\t\t// Absorb the master measurements\r\n\t\tme.maxWidth = maxWidth;\r\n\t\tme.maxHeight = maxHeight;\r\n\t\tme.margins = helpers$1.extend({\r\n\t\t\tleft: 0,\r\n\t\t\tright: 0,\r\n\t\t\ttop: 0,\r\n\t\t\tbottom: 0\r\n\t\t}, margins);\r\n\r\n\t\tme._ticks = null;\r\n\t\tme.ticks = null;\r\n\t\tme._labelSizes = null;\r\n\t\tme._maxLabelLines = 0;\r\n\t\tme.longestLabelWidth = 0;\r\n\t\tme.longestTextCache = me.longestTextCache || {};\r\n\t\tme._gridLineItems = null;\r\n\t\tme._labelItems = null;\r\n\r\n\t\t// Dimensions\r\n\t\tme.beforeSetDimensions();\r\n\t\tme.setDimensions();\r\n\t\tme.afterSetDimensions();\r\n\r\n\t\t// Data min/max\r\n\t\tme.beforeDataLimits();\r\n\t\tme.determineDataLimits();\r\n\t\tme.afterDataLimits();\r\n\r\n\t\t// Ticks - `this.ticks` is now DEPRECATED!\r\n\t\t// Internal ticks are now stored as objects in the PRIVATE `this._ticks` member\r\n\t\t// and must not be accessed directly from outside this class. `this.ticks` being\r\n\t\t// around for long time and not marked as private, we can't change its structure\r\n\t\t// without unexpected breaking changes. If you need to access the scale ticks,\r\n\t\t// use scale.getTicks() instead.\r\n\r\n\t\tme.beforeBuildTicks();\r\n\r\n\t\t// New implementations should return an array of objects but for BACKWARD COMPAT,\r\n\t\t// we still support no return (`this.ticks` internally set by calling this method).\r\n\t\tticks = me.buildTicks() || [];\r\n\r\n\t\t// Allow modification of ticks in callback.\r\n\t\tticks = me.afterBuildTicks(ticks) || ticks;\r\n\r\n\t\t// Ensure ticks contains ticks in new tick format\r\n\t\tif ((!ticks || !ticks.length) && me.ticks) {\r\n\t\t\tticks = [];\r\n\t\t\tfor (i = 0, ilen = me.ticks.length; i < ilen; ++i) {\r\n\t\t\t\tticks.push({\r\n\t\t\t\t\tvalue: me.ticks[i],\r\n\t\t\t\t\tmajor: false\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme._ticks = ticks;\r\n\r\n\t\t// Compute tick rotation and fit using a sampled subset of labels\r\n\t\t// We generally don't need to compute the size of every single label for determining scale size\r\n\t\tsamplingEnabled = sampleSize < ticks.length;\r\n\t\tlabels = me._convertTicksToLabels(samplingEnabled ? sample(ticks, sampleSize) : ticks);\r\n\r\n\t\t// _configure is called twice, once here, once from core.controller.updateLayout.\r\n\t\t// Here we haven't been positioned yet, but dimensions are correct.\r\n\t\t// Variables set in _configure are needed for calculateTickRotation, and\r\n\t\t// it's ok that coordinates are not correct there, only dimensions matter.\r\n\t\tme._configure();\r\n\r\n\t\t// Tick Rotation\r\n\t\tme.beforeCalculateTickRotation();\r\n\t\tme.calculateTickRotation();\r\n\t\tme.afterCalculateTickRotation();\r\n\r\n\t\tme.beforeFit();\r\n\t\tme.fit();\r\n\t\tme.afterFit();\r\n\r\n\t\t// Auto-skip\r\n\t\tme._ticksToDraw = tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto') ? me._autoSkip(ticks) : ticks;\r\n\r\n\t\tif (samplingEnabled) {\r\n\t\t\t// Generate labels using all non-skipped ticks\r\n\t\t\tlabels = me._convertTicksToLabels(me._ticksToDraw);\r\n\t\t}\r\n\r\n\t\tme.ticks = labels;   // BACKWARD COMPATIBILITY\r\n\r\n\t\t// IMPORTANT: after this point, we consider that `this.ticks` will NEVER change!\r\n\r\n\t\tme.afterUpdate();\r\n\r\n\t\t// TODO(v3): remove minSize as a public property and return value from all layout boxes. It is unused\r\n\t\t// make maxWidth and maxHeight private\r\n\t\treturn me.minSize;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tvar reversePixels = me.options.ticks.reverse;\r\n\t\tvar startPixel, endPixel;\r\n\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\tstartPixel = me.left;\r\n\t\t\tendPixel = me.right;\r\n\t\t} else {\r\n\t\t\tstartPixel = me.top;\r\n\t\t\tendPixel = me.bottom;\r\n\t\t\t// by default vertical scales are from bottom to top, so pixels are reversed\r\n\t\t\treversePixels = !reversePixels;\r\n\t\t}\r\n\t\tme._startPixel = startPixel;\r\n\t\tme._endPixel = endPixel;\r\n\t\tme._reversePixels = reversePixels;\r\n\t\tme._length = endPixel - startPixel;\r\n\t},\r\n\r\n\tafterUpdate: function() {\r\n\t\thelpers$1.callback(this.options.afterUpdate, [this]);\r\n\t},\r\n\r\n\t//\r\n\r\n\tbeforeSetDimensions: function() {\r\n\t\thelpers$1.callback(this.options.beforeSetDimensions, [this]);\r\n\t},\r\n\tsetDimensions: function() {\r\n\t\tvar me = this;\r\n\t\t// Set the unconstrained dimension before label rotation\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.width = me.maxWidth;\r\n\t\t\tme.left = 0;\r\n\t\t\tme.right = me.width;\r\n\t\t} else {\r\n\t\t\tme.height = me.maxHeight;\r\n\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.top = 0;\r\n\t\t\tme.bottom = me.height;\r\n\t\t}\r\n\r\n\t\t// Reset padding\r\n\t\tme.paddingLeft = 0;\r\n\t\tme.paddingTop = 0;\r\n\t\tme.paddingRight = 0;\r\n\t\tme.paddingBottom = 0;\r\n\t},\r\n\tafterSetDimensions: function() {\r\n\t\thelpers$1.callback(this.options.afterSetDimensions, [this]);\r\n\t},\r\n\r\n\t// Data limits\r\n\tbeforeDataLimits: function() {\r\n\t\thelpers$1.callback(this.options.beforeDataLimits, [this]);\r\n\t},\r\n\tdetermineDataLimits: helpers$1.noop,\r\n\tafterDataLimits: function() {\r\n\t\thelpers$1.callback(this.options.afterDataLimits, [this]);\r\n\t},\r\n\r\n\t//\r\n\tbeforeBuildTicks: function() {\r\n\t\thelpers$1.callback(this.options.beforeBuildTicks, [this]);\r\n\t},\r\n\tbuildTicks: helpers$1.noop,\r\n\tafterBuildTicks: function(ticks) {\r\n\t\tvar me = this;\r\n\t\t// ticks is empty for old axis implementations here\r\n\t\tif (isArray(ticks) && ticks.length) {\r\n\t\t\treturn helpers$1.callback(me.options.afterBuildTicks, [me, ticks]);\r\n\t\t}\r\n\t\t// Support old implementations (that modified `this.ticks` directly in buildTicks)\r\n\t\tme.ticks = helpers$1.callback(me.options.afterBuildTicks, [me, me.ticks]) || me.ticks;\r\n\t\treturn ticks;\r\n\t},\r\n\r\n\tbeforeTickToLabelConversion: function() {\r\n\t\thelpers$1.callback(this.options.beforeTickToLabelConversion, [this]);\r\n\t},\r\n\tconvertTicksToLabels: function() {\r\n\t\tvar me = this;\r\n\t\t// Convert ticks to strings\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tme.ticks = me.ticks.map(tickOpts.userCallback || tickOpts.callback, this);\r\n\t},\r\n\tafterTickToLabelConversion: function() {\r\n\t\thelpers$1.callback(this.options.afterTickToLabelConversion, [this]);\r\n\t},\r\n\r\n\t//\r\n\r\n\tbeforeCalculateTickRotation: function() {\r\n\t\thelpers$1.callback(this.options.beforeCalculateTickRotation, [this]);\r\n\t},\r\n\tcalculateTickRotation: function() {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar tickOpts = options.ticks;\r\n\t\tvar numTicks = me.getTicks().length;\r\n\t\tvar minRotation = tickOpts.minRotation || 0;\r\n\t\tvar maxRotation = tickOpts.maxRotation;\r\n\t\tvar labelRotation = minRotation;\r\n\t\tvar labelSizes, maxLabelWidth, maxLabelHeight, maxWidth, tickWidth, maxHeight, maxLabelDiagonal;\r\n\r\n\t\tif (!me._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !me.isHorizontal()) {\r\n\t\t\tme.labelRotation = minRotation;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlabelSizes = me._getLabelSizes();\r\n\t\tmaxLabelWidth = labelSizes.widest.width;\r\n\t\tmaxLabelHeight = labelSizes.highest.height - labelSizes.highest.offset;\r\n\r\n\t\t// Estimate the width of each grid based on the canvas width, the maximum\r\n\t\t// label width and the number of tick intervals\r\n\t\tmaxWidth = Math.min(me.maxWidth, me.chart.width - maxLabelWidth);\r\n\t\ttickWidth = options.offset ? me.maxWidth / numTicks : maxWidth / (numTicks - 1);\r\n\r\n\t\t// Allow 3 pixels x2 padding either side for label readability\r\n\t\tif (maxLabelWidth + 6 > tickWidth) {\r\n\t\t\ttickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\r\n\t\t\tmaxHeight = me.maxHeight - getTickMarkLength(options.gridLines)\r\n\t\t\t\t- tickOpts.padding - getScaleLabelHeight(options.scaleLabel);\r\n\t\t\tmaxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\r\n\t\t\tlabelRotation = helpers$1.toDegrees(Math.min(\r\n\t\t\t\tMath.asin(Math.min((labelSizes.highest.height + 6) / tickWidth, 1)),\r\n\t\t\t\tMath.asin(Math.min(maxHeight / maxLabelDiagonal, 1)) - Math.asin(maxLabelHeight / maxLabelDiagonal)\r\n\t\t\t));\r\n\t\t\tlabelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\r\n\t\t}\r\n\r\n\t\tme.labelRotation = labelRotation;\r\n\t},\r\n\tafterCalculateTickRotation: function() {\r\n\t\thelpers$1.callback(this.options.afterCalculateTickRotation, [this]);\r\n\t},\r\n\r\n\t//\r\n\r\n\tbeforeFit: function() {\r\n\t\thelpers$1.callback(this.options.beforeFit, [this]);\r\n\t},\r\n\tfit: function() {\r\n\t\tvar me = this;\r\n\t\t// Reset\r\n\t\tvar minSize = me.minSize = {\r\n\t\t\twidth: 0,\r\n\t\t\theight: 0\r\n\t\t};\r\n\r\n\t\tvar chart = me.chart;\r\n\t\tvar opts = me.options;\r\n\t\tvar tickOpts = opts.ticks;\r\n\t\tvar scaleLabelOpts = opts.scaleLabel;\r\n\t\tvar gridLineOpts = opts.gridLines;\r\n\t\tvar display = me._isVisible();\r\n\t\tvar isBottom = opts.position === 'bottom';\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\r\n\t\t// Width\r\n\t\tif (isHorizontal) {\r\n\t\t\tminSize.width = me.maxWidth;\r\n\t\t} else if (display) {\r\n\t\t\tminSize.width = getTickMarkLength(gridLineOpts) + getScaleLabelHeight(scaleLabelOpts);\r\n\t\t}\r\n\r\n\t\t// height\r\n\t\tif (!isHorizontal) {\r\n\t\t\tminSize.height = me.maxHeight; // fill all the height\r\n\t\t} else if (display) {\r\n\t\t\tminSize.height = getTickMarkLength(gridLineOpts) + getScaleLabelHeight(scaleLabelOpts);\r\n\t\t}\r\n\r\n\t\t// Don't bother fitting the ticks if we are not showing the labels\r\n\t\tif (tickOpts.display && display) {\r\n\t\t\tvar tickFonts = parseTickFontOptions(tickOpts);\r\n\t\t\tvar labelSizes = me._getLabelSizes();\r\n\t\t\tvar firstLabelSize = labelSizes.first;\r\n\t\t\tvar lastLabelSize = labelSizes.last;\r\n\t\t\tvar widestLabelSize = labelSizes.widest;\r\n\t\t\tvar highestLabelSize = labelSizes.highest;\r\n\t\t\tvar lineSpace = tickFonts.minor.lineHeight * 0.4;\r\n\t\t\tvar tickPadding = tickOpts.padding;\r\n\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\t// A horizontal axis is more constrained by the height.\r\n\t\t\t\tvar isRotated = me.labelRotation !== 0;\r\n\t\t\t\tvar angleRadians = helpers$1.toRadians(me.labelRotation);\r\n\t\t\t\tvar cosRotation = Math.cos(angleRadians);\r\n\t\t\t\tvar sinRotation = Math.sin(angleRadians);\r\n\r\n\t\t\t\tvar labelHeight = sinRotation * widestLabelSize.width\r\n\t\t\t\t\t+ cosRotation * (highestLabelSize.height - (isRotated ? highestLabelSize.offset : 0))\r\n\t\t\t\t\t+ (isRotated ? 0 : lineSpace); // padding\r\n\r\n\t\t\t\tminSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);\r\n\r\n\t\t\t\tvar offsetLeft = me.getPixelForTick(0) - me.left;\r\n\t\t\t\tvar offsetRight = me.right - me.getPixelForTick(me.getTicks().length - 1);\r\n\t\t\t\tvar paddingLeft, paddingRight;\r\n\r\n\t\t\t\t// Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\r\n\t\t\t\t// which means that the right padding is dominated by the font height\r\n\t\t\t\tif (isRotated) {\r\n\t\t\t\t\tpaddingLeft = isBottom ?\r\n\t\t\t\t\t\tcosRotation * firstLabelSize.width + sinRotation * firstLabelSize.offset :\r\n\t\t\t\t\t\tsinRotation * (firstLabelSize.height - firstLabelSize.offset);\r\n\t\t\t\t\tpaddingRight = isBottom ?\r\n\t\t\t\t\t\tsinRotation * (lastLabelSize.height - lastLabelSize.offset) :\r\n\t\t\t\t\t\tcosRotation * lastLabelSize.width + sinRotation * lastLabelSize.offset;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tpaddingLeft = firstLabelSize.width / 2;\r\n\t\t\t\t\tpaddingRight = lastLabelSize.width / 2;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Adjust padding taking into account changes in offsets\r\n\t\t\t\t// and add 3 px to move away from canvas edges\r\n\t\t\t\tme.paddingLeft = Math.max((paddingLeft - offsetLeft) * me.width / (me.width - offsetLeft), 0) + 3;\r\n\t\t\t\tme.paddingRight = Math.max((paddingRight - offsetRight) * me.width / (me.width - offsetRight), 0) + 3;\r\n\t\t\t} else {\r\n\t\t\t\t// A vertical axis is more constrained by the width. Labels are the\r\n\t\t\t\t// dominant factor here, so get that length first and account for padding\r\n\t\t\t\tvar labelWidth = tickOpts.mirror ? 0 :\r\n\t\t\t\t\t// use lineSpace for consistency with horizontal axis\r\n\t\t\t\t\t// tickPadding is not implemented for horizontal\r\n\t\t\t\t\twidestLabelSize.width + tickPadding + lineSpace;\r\n\r\n\t\t\t\tminSize.width = Math.min(me.maxWidth, minSize.width + labelWidth);\r\n\r\n\t\t\t\tme.paddingTop = firstLabelSize.height / 2;\r\n\t\t\t\tme.paddingBottom = lastLabelSize.height / 2;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.handleMargins();\r\n\r\n\t\tif (isHorizontal) {\r\n\t\t\tme.width = me._length = chart.width - me.margins.left - me.margins.right;\r\n\t\t\tme.height = minSize.height;\r\n\t\t} else {\r\n\t\t\tme.width = minSize.width;\r\n\t\t\tme.height = me._length = chart.height - me.margins.top - me.margins.bottom;\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Handle margins and padding interactions\r\n\t * @private\r\n\t */\r\n\thandleMargins: function() {\r\n\t\tvar me = this;\r\n\t\tif (me.margins) {\r\n\t\t\tme.margins.left = Math.max(me.paddingLeft, me.margins.left);\r\n\t\t\tme.margins.top = Math.max(me.paddingTop, me.margins.top);\r\n\t\t\tme.margins.right = Math.max(me.paddingRight, me.margins.right);\r\n\t\t\tme.margins.bottom = Math.max(me.paddingBottom, me.margins.bottom);\r\n\t\t}\r\n\t},\r\n\r\n\tafterFit: function() {\r\n\t\thelpers$1.callback(this.options.afterFit, [this]);\r\n\t},\r\n\r\n\t// Shared Methods\r\n\tisHorizontal: function() {\r\n\t\tvar pos = this.options.position;\r\n\t\treturn pos === 'top' || pos === 'bottom';\r\n\t},\r\n\tisFullWidth: function() {\r\n\t\treturn this.options.fullWidth;\r\n\t},\r\n\r\n\t// Get the correct value. NaN bad inputs, If the value type is object get the x or y based on whether we are horizontal or not\r\n\tgetRightValue: function(rawValue) {\r\n\t\t// Null and undefined values first\r\n\t\tif (isNullOrUndef(rawValue)) {\r\n\t\t\treturn NaN;\r\n\t\t}\r\n\t\t// isNaN(object) returns true, so make sure NaN is checking for a number; Discard Infinite values\r\n\t\tif ((typeof rawValue === 'number' || rawValue instanceof Number) && !isFinite(rawValue)) {\r\n\t\t\treturn NaN;\r\n\t\t}\r\n\r\n\t\t// If it is in fact an object, dive in one more level\r\n\t\tif (rawValue) {\r\n\t\t\tif (this.isHorizontal()) {\r\n\t\t\t\tif (rawValue.x !== undefined) {\r\n\t\t\t\t\treturn this.getRightValue(rawValue.x);\r\n\t\t\t\t}\r\n\t\t\t} else if (rawValue.y !== undefined) {\r\n\t\t\t\treturn this.getRightValue(rawValue.y);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Value is good, return it\r\n\t\treturn rawValue;\r\n\t},\r\n\r\n\t_convertTicksToLabels: function(ticks) {\r\n\t\tvar me = this;\r\n\t\tvar labels, i, ilen;\r\n\r\n\t\tme.ticks = ticks.map(function(tick) {\r\n\t\t\treturn tick.value;\r\n\t\t});\r\n\r\n\t\tme.beforeTickToLabelConversion();\r\n\r\n\t\t// New implementations should return the formatted tick labels but for BACKWARD\r\n\t\t// COMPAT, we still support no return (`this.ticks` internally changed by calling\r\n\t\t// this method and supposed to contain only string values).\r\n\t\tlabels = me.convertTicksToLabels(ticks) || me.ticks;\r\n\r\n\t\tme.afterTickToLabelConversion();\r\n\r\n\t\t// BACKWARD COMPAT: synchronize `_ticks` with labels (so potentially `this.ticks`)\r\n\t\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\r\n\t\t\tticks[i].label = labels[i];\r\n\t\t}\r\n\r\n\t\treturn labels;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getLabelSizes: function() {\r\n\t\tvar me = this;\r\n\t\tvar labelSizes = me._labelSizes;\r\n\r\n\t\tif (!labelSizes) {\r\n\t\t\tme._labelSizes = labelSizes = computeLabelSizes(me.ctx, parseTickFontOptions(me.options.ticks), me.getTicks(), me.longestTextCache);\r\n\t\t\tme.longestLabelWidth = labelSizes.widest.width;\r\n\t\t}\r\n\r\n\t\treturn labelSizes;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_parseValue: function(value) {\r\n\t\tvar start, end, min, max;\r\n\r\n\t\tif (isArray(value)) {\r\n\t\t\tstart = +this.getRightValue(value[0]);\r\n\t\t\tend = +this.getRightValue(value[1]);\r\n\t\t\tmin = Math.min(start, end);\r\n\t\t\tmax = Math.max(start, end);\r\n\t\t} else {\r\n\t\t\tvalue = +this.getRightValue(value);\r\n\t\t\tstart = undefined;\r\n\t\t\tend = value;\r\n\t\t\tmin = value;\r\n\t\t\tmax = value;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tmin: min,\r\n\t\t\tmax: max,\r\n\t\t\tstart: start,\r\n\t\t\tend: end\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t* @private\r\n\t*/\r\n\t_getScaleLabel: function(rawValue) {\r\n\t\tvar v = this._parseValue(rawValue);\r\n\t\tif (v.start !== undefined) {\r\n\t\t\treturn '[' + v.start + ', ' + v.end + ']';\r\n\t\t}\r\n\r\n\t\treturn +this.getRightValue(rawValue);\r\n\t},\r\n\r\n\t/**\r\n\t * Used to get the value to display in the tooltip for the data at the given index\r\n\t * @param index\r\n\t * @param datasetIndex\r\n\t */\r\n\tgetLabelForIndex: helpers$1.noop,\r\n\r\n\t/**\r\n\t * Returns the location of the given data point. Value can either be an index or a numerical value\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t * @param value\r\n\t * @param index\r\n\t * @param datasetIndex\r\n\t */\r\n\tgetPixelForValue: helpers$1.noop,\r\n\r\n\t/**\r\n\t * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t * @param pixel\r\n\t */\r\n\tgetValueForPixel: helpers$1.noop,\r\n\r\n\t/**\r\n\t * Returns the location of the tick at the given index\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t */\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar offset = me.options.offset;\r\n\t\tvar numTicks = me._ticks.length;\r\n\t\tvar tickWidth = 1 / Math.max(numTicks - (offset ? 0 : 1), 1);\r\n\r\n\t\treturn index < 0 || index > numTicks - 1\r\n\t\t\t? null\r\n\t\t\t: me.getPixelForDecimal(index * tickWidth + (offset ? tickWidth / 2 : 0));\r\n\t},\r\n\r\n\t/**\r\n\t * Utility for getting the pixel location of a percentage of scale\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t */\r\n\tgetPixelForDecimal: function(decimal) {\r\n\t\tvar me = this;\r\n\r\n\t\tif (me._reversePixels) {\r\n\t\t\tdecimal = 1 - decimal;\r\n\t\t}\r\n\r\n\t\treturn me._startPixel + decimal * me._length;\r\n\t},\r\n\r\n\tgetDecimalForPixel: function(pixel) {\r\n\t\tvar decimal = (pixel - this._startPixel) / this._length;\r\n\t\treturn this._reversePixels ? 1 - decimal : decimal;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the pixel for the minimum chart value\r\n\t * The coordinate (0, 0) is at the upper-left corner of the canvas\r\n\t */\r\n\tgetBasePixel: function() {\r\n\t\treturn this.getPixelForValue(this.getBaseValue());\r\n\t},\r\n\r\n\tgetBaseValue: function() {\r\n\t\tvar me = this;\r\n\t\tvar min = me.min;\r\n\t\tvar max = me.max;\r\n\r\n\t\treturn me.beginAtZero ? 0 :\r\n\t\t\tmin < 0 && max < 0 ? max :\r\n\t\t\tmin > 0 && max > 0 ? min :\r\n\t\t\t0;\r\n\t},\r\n\r\n\t/**\r\n\t * Returns a subset of ticks to be plotted to avoid overlapping labels.\r\n\t * @private\r\n\t */\r\n\t_autoSkip: function(ticks) {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar axisLength = me._length;\r\n\t\tvar ticksLimit = tickOpts.maxTicksLimit || axisLength / me._tickSize() + 1;\r\n\t\tvar majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\r\n\t\tvar numMajorIndices = majorIndices.length;\r\n\t\tvar first = majorIndices[0];\r\n\t\tvar last = majorIndices[numMajorIndices - 1];\r\n\t\tvar i, ilen, spacing, avgMajorSpacing;\r\n\r\n\t\t// If there are too many major ticks to display them all\r\n\t\tif (numMajorIndices > ticksLimit) {\r\n\t\t\tskipMajors(ticks, majorIndices, numMajorIndices / ticksLimit);\r\n\t\t\treturn nonSkipped(ticks);\r\n\t\t}\r\n\r\n\t\tspacing = calculateSpacing(majorIndices, ticks, axisLength, ticksLimit);\r\n\r\n\t\tif (numMajorIndices > 0) {\r\n\t\t\tfor (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\r\n\t\t\t\tskip(ticks, spacing, majorIndices[i], majorIndices[i + 1]);\r\n\t\t\t}\r\n\t\t\tavgMajorSpacing = numMajorIndices > 1 ? (last - first) / (numMajorIndices - 1) : null;\r\n\t\t\tskip(ticks, spacing, helpers$1.isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\r\n\t\t\tskip(ticks, spacing, last, helpers$1.isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\r\n\t\t\treturn nonSkipped(ticks);\r\n\t\t}\r\n\t\tskip(ticks, spacing);\r\n\t\treturn nonSkipped(ticks);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_tickSize: function() {\r\n\t\tvar me = this;\r\n\t\tvar optionTicks = me.options.ticks;\r\n\r\n\t\t// Calculate space needed by label in axis direction.\r\n\t\tvar rot = helpers$1.toRadians(me.labelRotation);\r\n\t\tvar cos = Math.abs(Math.cos(rot));\r\n\t\tvar sin = Math.abs(Math.sin(rot));\r\n\r\n\t\tvar labelSizes = me._getLabelSizes();\r\n\t\tvar padding = optionTicks.autoSkipPadding || 0;\r\n\t\tvar w = labelSizes ? labelSizes.widest.width + padding : 0;\r\n\t\tvar h = labelSizes ? labelSizes.highest.height + padding : 0;\r\n\r\n\t\t// Calculate space needed for 1 tick in axis direction.\r\n\t\treturn me.isHorizontal()\r\n\t\t\t? h * cos > w * sin ? w / cos : h / sin\r\n\t\t\t: h * sin < w * cos ? h / cos : w / sin;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_isVisible: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar display = me.options.display;\r\n\t\tvar i, ilen, meta;\r\n\r\n\t\tif (display !== 'auto') {\r\n\t\t\treturn !!display;\r\n\t\t}\r\n\r\n\t\t// When 'auto', the scale is visible if at least one associated dataset is visible.\r\n\t\tfor (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\r\n\t\t\tif (chart.isDatasetVisible(i)) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\t\tif (meta.xAxisID === me.id || meta.yAxisID === me.id) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_computeGridLineItems: function(chartArea) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar options = me.options;\r\n\t\tvar gridLines = options.gridLines;\r\n\t\tvar position = options.position;\r\n\t\tvar offsetGridLines = gridLines.offsetGridLines;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tvar ticks = me._ticksToDraw;\r\n\t\tvar ticksLength = ticks.length + (offsetGridLines ? 1 : 0);\r\n\r\n\t\tvar tl = getTickMarkLength(gridLines);\r\n\t\tvar items = [];\r\n\t\tvar axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0;\r\n\t\tvar axisHalfWidth = axisWidth / 2;\r\n\t\tvar alignPixel = helpers$1._alignPixel;\r\n\t\tvar alignBorderValue = function(pixel) {\r\n\t\t\treturn alignPixel(chart, pixel, axisWidth);\r\n\t\t};\r\n\t\tvar borderValue, i, tick, lineValue, alignedLineValue;\r\n\t\tvar tx1, ty1, tx2, ty2, x1, y1, x2, y2, lineWidth, lineColor, borderDash, borderDashOffset;\r\n\r\n\t\tif (position === 'top') {\r\n\t\t\tborderValue = alignBorderValue(me.bottom);\r\n\t\t\tty1 = me.bottom - tl;\r\n\t\t\tty2 = borderValue - axisHalfWidth;\r\n\t\t\ty1 = alignBorderValue(chartArea.top) + axisHalfWidth;\r\n\t\t\ty2 = chartArea.bottom;\r\n\t\t} else if (position === 'bottom') {\r\n\t\t\tborderValue = alignBorderValue(me.top);\r\n\t\t\ty1 = chartArea.top;\r\n\t\t\ty2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\r\n\t\t\tty1 = borderValue + axisHalfWidth;\r\n\t\t\tty2 = me.top + tl;\r\n\t\t} else if (position === 'left') {\r\n\t\t\tborderValue = alignBorderValue(me.right);\r\n\t\t\ttx1 = me.right - tl;\r\n\t\t\ttx2 = borderValue - axisHalfWidth;\r\n\t\t\tx1 = alignBorderValue(chartArea.left) + axisHalfWidth;\r\n\t\t\tx2 = chartArea.right;\r\n\t\t} else {\r\n\t\t\tborderValue = alignBorderValue(me.left);\r\n\t\t\tx1 = chartArea.left;\r\n\t\t\tx2 = alignBorderValue(chartArea.right) - axisHalfWidth;\r\n\t\t\ttx1 = borderValue + axisHalfWidth;\r\n\t\t\ttx2 = me.left + tl;\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < ticksLength; ++i) {\r\n\t\t\ttick = ticks[i] || {};\r\n\r\n\t\t\t// autoskipper skipped this tick (#4635)\r\n\t\t\tif (isNullOrUndef(tick.label) && i < ticks.length) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (i === me.zeroLineIndex && options.offset === offsetGridLines) {\r\n\t\t\t\t// Draw the first index specially\r\n\t\t\t\tlineWidth = gridLines.zeroLineWidth;\r\n\t\t\t\tlineColor = gridLines.zeroLineColor;\r\n\t\t\t\tborderDash = gridLines.zeroLineBorderDash || [];\r\n\t\t\t\tborderDashOffset = gridLines.zeroLineBorderDashOffset || 0.0;\r\n\t\t\t} else {\r\n\t\t\t\tlineWidth = valueAtIndexOrDefault(gridLines.lineWidth, i, 1);\r\n\t\t\t\tlineColor = valueAtIndexOrDefault(gridLines.color, i, 'rgba(0,0,0,0.1)');\r\n\t\t\t\tborderDash = gridLines.borderDash || [];\r\n\t\t\t\tborderDashOffset = gridLines.borderDashOffset || 0.0;\r\n\t\t\t}\r\n\r\n\t\t\tlineValue = getPixelForGridLine(me, tick._index || i, offsetGridLines);\r\n\r\n\t\t\t// Skip if the pixel is out of the range\r\n\t\t\tif (lineValue === undefined) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\talignedLineValue = alignPixel(chart, lineValue, lineWidth);\r\n\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\ttx1 = tx2 = x1 = x2 = alignedLineValue;\r\n\t\t\t} else {\r\n\t\t\t\tty1 = ty2 = y1 = y2 = alignedLineValue;\r\n\t\t\t}\r\n\r\n\t\t\titems.push({\r\n\t\t\t\ttx1: tx1,\r\n\t\t\t\tty1: ty1,\r\n\t\t\t\ttx2: tx2,\r\n\t\t\t\tty2: ty2,\r\n\t\t\t\tx1: x1,\r\n\t\t\t\ty1: y1,\r\n\t\t\t\tx2: x2,\r\n\t\t\t\ty2: y2,\r\n\t\t\t\twidth: lineWidth,\r\n\t\t\t\tcolor: lineColor,\r\n\t\t\t\tborderDash: borderDash,\r\n\t\t\t\tborderDashOffset: borderDashOffset,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\titems.ticksLength = ticksLength;\r\n\t\titems.borderValue = borderValue;\r\n\r\n\t\treturn items;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_computeLabelItems: function() {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar optionTicks = options.ticks;\r\n\t\tvar position = options.position;\r\n\t\tvar isMirrored = optionTicks.mirror;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tvar ticks = me._ticksToDraw;\r\n\t\tvar fonts = parseTickFontOptions(optionTicks);\r\n\t\tvar tickPadding = optionTicks.padding;\r\n\t\tvar tl = getTickMarkLength(options.gridLines);\r\n\t\tvar rotation = -helpers$1.toRadians(me.labelRotation);\r\n\t\tvar items = [];\r\n\t\tvar i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\r\n\r\n\t\tif (position === 'top') {\r\n\t\t\ty = me.bottom - tl - tickPadding;\r\n\t\t\ttextAlign = !rotation ? 'center' : 'left';\r\n\t\t} else if (position === 'bottom') {\r\n\t\t\ty = me.top + tl + tickPadding;\r\n\t\t\ttextAlign = !rotation ? 'center' : 'right';\r\n\t\t} else if (position === 'left') {\r\n\t\t\tx = me.right - (isMirrored ? 0 : tl) - tickPadding;\r\n\t\t\ttextAlign = isMirrored ? 'left' : 'right';\r\n\t\t} else {\r\n\t\t\tx = me.left + (isMirrored ? 0 : tl) + tickPadding;\r\n\t\t\ttextAlign = isMirrored ? 'right' : 'left';\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\r\n\t\t\ttick = ticks[i];\r\n\t\t\tlabel = tick.label;\r\n\r\n\t\t\t// autoskipper skipped this tick (#4635)\r\n\t\t\tif (isNullOrUndef(label)) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tpixel = me.getPixelForTick(tick._index || i) + optionTicks.labelOffset;\r\n\t\t\tfont = tick.major ? fonts.major : fonts.minor;\r\n\t\t\tlineHeight = font.lineHeight;\r\n\t\t\tlineCount = isArray(label) ? label.length : 1;\r\n\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\tx = pixel;\r\n\t\t\t\ttextOffset = position === 'top'\r\n\t\t\t\t\t? ((!rotation ? 0.5 : 1) - lineCount) * lineHeight\r\n\t\t\t\t\t: (!rotation ? 0.5 : 0) * lineHeight;\r\n\t\t\t} else {\r\n\t\t\t\ty = pixel;\r\n\t\t\t\ttextOffset = (1 - lineCount) * lineHeight / 2;\r\n\t\t\t}\r\n\r\n\t\t\titems.push({\r\n\t\t\t\tx: x,\r\n\t\t\t\ty: y,\r\n\t\t\t\trotation: rotation,\r\n\t\t\t\tlabel: label,\r\n\t\t\t\tfont: font,\r\n\t\t\t\ttextOffset: textOffset,\r\n\t\t\t\ttextAlign: textAlign\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn items;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawGrid: function(chartArea) {\r\n\t\tvar me = this;\r\n\t\tvar gridLines = me.options.gridLines;\r\n\r\n\t\tif (!gridLines.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar chart = me.chart;\r\n\t\tvar alignPixel = helpers$1._alignPixel;\r\n\t\tvar axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0;\r\n\t\tvar items = me._gridLineItems || (me._gridLineItems = me._computeGridLineItems(chartArea));\r\n\t\tvar width, color, i, ilen, item;\r\n\r\n\t\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\r\n\t\t\titem = items[i];\r\n\t\t\twidth = item.width;\r\n\t\t\tcolor = item.color;\r\n\r\n\t\t\tif (width && color) {\r\n\t\t\t\tctx.save();\r\n\t\t\t\tctx.lineWidth = width;\r\n\t\t\t\tctx.strokeStyle = color;\r\n\t\t\t\tif (ctx.setLineDash) {\r\n\t\t\t\t\tctx.setLineDash(item.borderDash);\r\n\t\t\t\t\tctx.lineDashOffset = item.borderDashOffset;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tctx.beginPath();\r\n\r\n\t\t\t\tif (gridLines.drawTicks) {\r\n\t\t\t\t\tctx.moveTo(item.tx1, item.ty1);\r\n\t\t\t\t\tctx.lineTo(item.tx2, item.ty2);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (gridLines.drawOnChartArea) {\r\n\t\t\t\t\tctx.moveTo(item.x1, item.y1);\r\n\t\t\t\t\tctx.lineTo(item.x2, item.y2);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tctx.stroke();\r\n\t\t\t\tctx.restore();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (axisWidth) {\r\n\t\t\t// Draw the line at the edge of the axis\r\n\t\t\tvar firstLineWidth = axisWidth;\r\n\t\t\tvar lastLineWidth = valueAtIndexOrDefault(gridLines.lineWidth, items.ticksLength - 1, 1);\r\n\t\t\tvar borderValue = items.borderValue;\r\n\t\t\tvar x1, x2, y1, y2;\r\n\r\n\t\t\tif (me.isHorizontal()) {\r\n\t\t\t\tx1 = alignPixel(chart, me.left, firstLineWidth) - firstLineWidth / 2;\r\n\t\t\t\tx2 = alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2;\r\n\t\t\t\ty1 = y2 = borderValue;\r\n\t\t\t} else {\r\n\t\t\t\ty1 = alignPixel(chart, me.top, firstLineWidth) - firstLineWidth / 2;\r\n\t\t\t\ty2 = alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;\r\n\t\t\t\tx1 = x2 = borderValue;\r\n\t\t\t}\r\n\r\n\t\t\tctx.lineWidth = axisWidth;\r\n\t\t\tctx.strokeStyle = valueAtIndexOrDefault(gridLines.color, 0);\r\n\t\t\tctx.beginPath();\r\n\t\t\tctx.moveTo(x1, y1);\r\n\t\t\tctx.lineTo(x2, y2);\r\n\t\t\tctx.stroke();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawLabels: function() {\r\n\t\tvar me = this;\r\n\t\tvar optionTicks = me.options.ticks;\r\n\r\n\t\tif (!optionTicks.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar items = me._labelItems || (me._labelItems = me._computeLabelItems());\r\n\t\tvar i, j, ilen, jlen, item, tickFont, label, y;\r\n\r\n\t\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\r\n\t\t\titem = items[i];\r\n\t\t\ttickFont = item.font;\r\n\r\n\t\t\t// Make sure we draw text in the correct color and font\r\n\t\t\tctx.save();\r\n\t\t\tctx.translate(item.x, item.y);\r\n\t\t\tctx.rotate(item.rotation);\r\n\t\t\tctx.font = tickFont.string;\r\n\t\t\tctx.fillStyle = tickFont.color;\r\n\t\t\tctx.textBaseline = 'middle';\r\n\t\t\tctx.textAlign = item.textAlign;\r\n\r\n\t\t\tlabel = item.label;\r\n\t\t\ty = item.textOffset;\r\n\t\t\tif (isArray(label)) {\r\n\t\t\t\tfor (j = 0, jlen = label.length; j < jlen; ++j) {\r\n\t\t\t\t\t// We just make sure the multiline element is a string here..\r\n\t\t\t\t\tctx.fillText('' + label[j], 0, y);\r\n\t\t\t\t\ty += tickFont.lineHeight;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tctx.fillText(label, 0, y);\r\n\t\t\t}\r\n\t\t\tctx.restore();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawTitle: function() {\r\n\t\tvar me = this;\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar options = me.options;\r\n\t\tvar scaleLabel = options.scaleLabel;\r\n\r\n\t\tif (!scaleLabel.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar scaleLabelFontColor = valueOrDefault$a(scaleLabel.fontColor, core_defaults.global.defaultFontColor);\r\n\t\tvar scaleLabelFont = helpers$1.options._parseFont(scaleLabel);\r\n\t\tvar scaleLabelPadding = helpers$1.options.toPadding(scaleLabel.padding);\r\n\t\tvar halfLineHeight = scaleLabelFont.lineHeight / 2;\r\n\t\tvar position = options.position;\r\n\t\tvar rotation = 0;\r\n\t\tvar scaleLabelX, scaleLabelY;\r\n\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\tscaleLabelX = me.left + me.width / 2; // midpoint of the width\r\n\t\t\tscaleLabelY = position === 'bottom'\r\n\t\t\t\t? me.bottom - halfLineHeight - scaleLabelPadding.bottom\r\n\t\t\t\t: me.top + halfLineHeight + scaleLabelPadding.top;\r\n\t\t} else {\r\n\t\t\tvar isLeft = position === 'left';\r\n\t\t\tscaleLabelX = isLeft\r\n\t\t\t\t? me.left + halfLineHeight + scaleLabelPadding.top\r\n\t\t\t\t: me.right - halfLineHeight - scaleLabelPadding.top;\r\n\t\t\tscaleLabelY = me.top + me.height / 2;\r\n\t\t\trotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI;\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\t\tctx.translate(scaleLabelX, scaleLabelY);\r\n\t\tctx.rotate(rotation);\r\n\t\tctx.textAlign = 'center';\r\n\t\tctx.textBaseline = 'middle';\r\n\t\tctx.fillStyle = scaleLabelFontColor; // render in correct colour\r\n\t\tctx.font = scaleLabelFont.string;\r\n\t\tctx.fillText(scaleLabel.labelString, 0, 0);\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\tdraw: function(chartArea) {\r\n\t\tvar me = this;\r\n\r\n\t\tif (!me._isVisible()) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tme._drawGrid(chartArea);\r\n\t\tme._drawTitle();\r\n\t\tme._drawLabels();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_layers: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar tz = opts.ticks && opts.ticks.z || 0;\r\n\t\tvar gz = opts.gridLines && opts.gridLines.z || 0;\r\n\r\n\t\tif (!me._isVisible() || tz === gz || me.draw !== me._draw) {\r\n\t\t\t// backward compatibility: draw has been overridden by custom scale\r\n\t\t\treturn [{\r\n\t\t\t\tz: tz,\r\n\t\t\t\tdraw: function() {\r\n\t\t\t\t\tme.draw.apply(me, arguments);\r\n\t\t\t\t}\r\n\t\t\t}];\r\n\t\t}\r\n\r\n\t\treturn [{\r\n\t\t\tz: gz,\r\n\t\t\tdraw: function() {\r\n\t\t\t\tme._drawGrid.apply(me, arguments);\r\n\t\t\t\tme._drawTitle.apply(me, arguments);\r\n\t\t\t}\r\n\t\t}, {\r\n\t\t\tz: tz,\r\n\t\t\tdraw: function() {\r\n\t\t\t\tme._drawLabels.apply(me, arguments);\r\n\t\t\t}\r\n\t\t}];\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getMatchingVisibleMetas: function(type) {\r\n\t\tvar me = this;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\treturn me.chart._getSortedVisibleDatasetMetas()\r\n\t\t\t.filter(function(meta) {\r\n\t\t\t\treturn (!type || meta.type === type)\r\n\t\t\t\t\t&& (isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id);\r\n\t\t\t});\r\n\t}\r\n});\r\n\r\nScale.prototype._draw = Scale.prototype.draw;\r\n\r\nvar core_scale = Scale;\n\nvar isNullOrUndef$1 = helpers$1.isNullOrUndef;\r\n\r\nvar defaultConfig = {\r\n\tposition: 'bottom'\r\n};\r\n\r\nvar scale_category = core_scale.extend({\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar labels = me._getLabels();\r\n\t\tvar ticksOpts = me.options.ticks;\r\n\t\tvar min = ticksOpts.min;\r\n\t\tvar max = ticksOpts.max;\r\n\t\tvar minIndex = 0;\r\n\t\tvar maxIndex = labels.length - 1;\r\n\t\tvar findIndex;\r\n\r\n\t\tif (min !== undefined) {\r\n\t\t\t// user specified min value\r\n\t\t\tfindIndex = labels.indexOf(min);\r\n\t\t\tif (findIndex >= 0) {\r\n\t\t\t\tminIndex = findIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (max !== undefined) {\r\n\t\t\t// user specified max value\r\n\t\t\tfindIndex = labels.indexOf(max);\r\n\t\t\tif (findIndex >= 0) {\r\n\t\t\t\tmaxIndex = findIndex;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.minIndex = minIndex;\r\n\t\tme.maxIndex = maxIndex;\r\n\t\tme.min = labels[minIndex];\r\n\t\tme.max = labels[maxIndex];\r\n\t},\r\n\r\n\tbuildTicks: function() {\r\n\t\tvar me = this;\r\n\t\tvar labels = me._getLabels();\r\n\t\tvar minIndex = me.minIndex;\r\n\t\tvar maxIndex = me.maxIndex;\r\n\r\n\t\t// If we are viewing some subset of labels, slice the original array\r\n\t\tme.ticks = (minIndex === 0 && maxIndex === labels.length - 1) ? labels : labels.slice(minIndex, maxIndex + 1);\r\n\t},\r\n\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\r\n\t\tif (chart.getDatasetMeta(datasetIndex).controller._getValueScaleId() === me.id) {\r\n\t\t\treturn me.getRightValue(chart.data.datasets[datasetIndex].data[index]);\r\n\t\t}\r\n\r\n\t\treturn me._getLabels()[index];\r\n\t},\r\n\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tvar offset = me.options.offset;\r\n\t\tvar ticks = me.ticks;\r\n\r\n\t\tcore_scale.prototype._configure.call(me);\r\n\r\n\t\tif (!me.isHorizontal()) {\r\n\t\t\t// For backward compatibility, vertical category scale reverse is inverted.\r\n\t\t\tme._reversePixels = !me._reversePixels;\r\n\t\t}\r\n\r\n\t\tif (!ticks) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tme._startValue = me.minIndex - (offset ? 0.5 : 0);\r\n\t\tme._valueRange = Math.max(ticks.length - (offset ? 0 : 1), 1);\r\n\t},\r\n\r\n\t// Used to get data value locations.  Value can either be an index or a numerical value\r\n\tgetPixelForValue: function(value, index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar valueCategory, labels, idx;\r\n\r\n\t\tif (!isNullOrUndef$1(index) && !isNullOrUndef$1(datasetIndex)) {\r\n\t\t\tvalue = me.chart.data.datasets[datasetIndex].data[index];\r\n\t\t}\r\n\r\n\t\t// If value is a data object, then index is the index in the data array,\r\n\t\t// not the index of the scale. We need to change that.\r\n\t\tif (!isNullOrUndef$1(value)) {\r\n\t\t\tvalueCategory = me.isHorizontal() ? value.x : value.y;\r\n\t\t}\r\n\t\tif (valueCategory !== undefined || (value !== undefined && isNaN(index))) {\r\n\t\t\tlabels = me._getLabels();\r\n\t\t\tvalue = helpers$1.valueOrDefault(valueCategory, value);\r\n\t\t\tidx = labels.indexOf(value);\r\n\t\t\tindex = idx !== -1 ? idx : index;\r\n\t\t\tif (isNaN(index)) {\r\n\t\t\t\tindex = value;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn me.getPixelForDecimal((index - me._startValue) / me._valueRange);\r\n\t},\r\n\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar ticks = this.ticks;\r\n\t\treturn index < 0 || index > ticks.length - 1\r\n\t\t\t? null\r\n\t\t\t: this.getPixelForValue(ticks[index], index + this.minIndex);\r\n\t},\r\n\r\n\tgetValueForPixel: function(pixel) {\r\n\t\tvar me = this;\r\n\t\tvar value = Math.round(me._startValue + me.getDecimalForPixel(pixel) * me._valueRange);\r\n\t\treturn Math.min(Math.max(value, 0), me.ticks.length - 1);\r\n\t},\r\n\r\n\tgetBasePixel: function() {\r\n\t\treturn this.bottom;\r\n\t}\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults = defaultConfig;\nscale_category._defaults = _defaults;\n\nvar noop = helpers$1.noop;\r\nvar isNullOrUndef$2 = helpers$1.isNullOrUndef;\r\n\r\n/**\r\n * Generate a set of linear ticks\r\n * @param generationOptions the options used to generate the ticks\r\n * @param dataRange the range of the data\r\n * @returns {number[]} array of tick values\r\n */\r\nfunction generateTicks(generationOptions, dataRange) {\r\n\tvar ticks = [];\r\n\t// To get a \"nice\" value for the tick spacing, we will use the appropriately named\r\n\t// \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\r\n\t// for details.\r\n\r\n\tvar MIN_SPACING = 1e-14;\r\n\tvar stepSize = generationOptions.stepSize;\r\n\tvar unit = stepSize || 1;\r\n\tvar maxNumSpaces = generationOptions.maxTicks - 1;\r\n\tvar min = generationOptions.min;\r\n\tvar max = generationOptions.max;\r\n\tvar precision = generationOptions.precision;\r\n\tvar rmin = dataRange.min;\r\n\tvar rmax = dataRange.max;\r\n\tvar spacing = helpers$1.niceNum((rmax - rmin) / maxNumSpaces / unit) * unit;\r\n\tvar factor, niceMin, niceMax, numSpaces;\r\n\r\n\t// Beyond MIN_SPACING floating point numbers being to lose precision\r\n\t// such that we can't do the math necessary to generate ticks\r\n\tif (spacing < MIN_SPACING && isNullOrUndef$2(min) && isNullOrUndef$2(max)) {\r\n\t\treturn [rmin, rmax];\r\n\t}\r\n\r\n\tnumSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\r\n\tif (numSpaces > maxNumSpaces) {\r\n\t\t// If the calculated num of spaces exceeds maxNumSpaces, recalculate it\r\n\t\tspacing = helpers$1.niceNum(numSpaces * spacing / maxNumSpaces / unit) * unit;\r\n\t}\r\n\r\n\tif (stepSize || isNullOrUndef$2(precision)) {\r\n\t\t// If a precision is not specified, calculate factor based on spacing\r\n\t\tfactor = Math.pow(10, helpers$1._decimalPlaces(spacing));\r\n\t} else {\r\n\t\t// If the user specified a precision, round to that number of decimal places\r\n\t\tfactor = Math.pow(10, precision);\r\n\t\tspacing = Math.ceil(spacing * factor) / factor;\r\n\t}\r\n\r\n\tniceMin = Math.floor(rmin / spacing) * spacing;\r\n\tniceMax = Math.ceil(rmax / spacing) * spacing;\r\n\r\n\t// If min, max and stepSize is set and they make an evenly spaced scale use it.\r\n\tif (stepSize) {\r\n\t\t// If very close to our whole number, use it.\r\n\t\tif (!isNullOrUndef$2(min) && helpers$1.almostWhole(min / spacing, spacing / 1000)) {\r\n\t\t\tniceMin = min;\r\n\t\t}\r\n\t\tif (!isNullOrUndef$2(max) && helpers$1.almostWhole(max / spacing, spacing / 1000)) {\r\n\t\t\tniceMax = max;\r\n\t\t}\r\n\t}\r\n\r\n\tnumSpaces = (niceMax - niceMin) / spacing;\r\n\t// If very close to our rounded value, use it.\r\n\tif (helpers$1.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\r\n\t\tnumSpaces = Math.round(numSpaces);\r\n\t} else {\r\n\t\tnumSpaces = Math.ceil(numSpaces);\r\n\t}\r\n\r\n\tniceMin = Math.round(niceMin * factor) / factor;\r\n\tniceMax = Math.round(niceMax * factor) / factor;\r\n\tticks.push(isNullOrUndef$2(min) ? niceMin : min);\r\n\tfor (var j = 1; j < numSpaces; ++j) {\r\n\t\tticks.push(Math.round((niceMin + j * spacing) * factor) / factor);\r\n\t}\r\n\tticks.push(isNullOrUndef$2(max) ? niceMax : max);\r\n\r\n\treturn ticks;\r\n}\r\n\r\nvar scale_linearbase = core_scale.extend({\r\n\tgetRightValue: function(value) {\r\n\t\tif (typeof value === 'string') {\r\n\t\t\treturn +value;\r\n\t\t}\r\n\t\treturn core_scale.prototype.getRightValue.call(this, value);\r\n\t},\r\n\r\n\thandleTickRangeOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar tickOpts = opts.ticks;\r\n\r\n\t\t// If we are forcing it to begin at 0, but 0 will already be rendered on the chart,\r\n\t\t// do nothing since that would make the chart weird. If the user really wants a weird chart\r\n\t\t// axis, they can manually override it\r\n\t\tif (tickOpts.beginAtZero) {\r\n\t\t\tvar minSign = helpers$1.sign(me.min);\r\n\t\t\tvar maxSign = helpers$1.sign(me.max);\r\n\r\n\t\t\tif (minSign < 0 && maxSign < 0) {\r\n\t\t\t\t// move the top up to 0\r\n\t\t\t\tme.max = 0;\r\n\t\t\t} else if (minSign > 0 && maxSign > 0) {\r\n\t\t\t\t// move the bottom down to 0\r\n\t\t\t\tme.min = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar setMin = tickOpts.min !== undefined || tickOpts.suggestedMin !== undefined;\r\n\t\tvar setMax = tickOpts.max !== undefined || tickOpts.suggestedMax !== undefined;\r\n\r\n\t\tif (tickOpts.min !== undefined) {\r\n\t\t\tme.min = tickOpts.min;\r\n\t\t} else if (tickOpts.suggestedMin !== undefined) {\r\n\t\t\tif (me.min === null) {\r\n\t\t\t\tme.min = tickOpts.suggestedMin;\r\n\t\t\t} else {\r\n\t\t\t\tme.min = Math.min(me.min, tickOpts.suggestedMin);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (tickOpts.max !== undefined) {\r\n\t\t\tme.max = tickOpts.max;\r\n\t\t} else if (tickOpts.suggestedMax !== undefined) {\r\n\t\t\tif (me.max === null) {\r\n\t\t\t\tme.max = tickOpts.suggestedMax;\r\n\t\t\t} else {\r\n\t\t\t\tme.max = Math.max(me.max, tickOpts.suggestedMax);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (setMin !== setMax) {\r\n\t\t\t// We set the min or the max but not both.\r\n\t\t\t// So ensure that our range is good\r\n\t\t\t// Inverted or 0 length range can happen when\r\n\t\t\t// ticks.min is set, and no datasets are visible\r\n\t\t\tif (me.min >= me.max) {\r\n\t\t\t\tif (setMin) {\r\n\t\t\t\t\tme.max = me.min + 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tme.min = me.max - 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (me.min === me.max) {\r\n\t\t\tme.max++;\r\n\r\n\t\t\tif (!tickOpts.beginAtZero) {\r\n\t\t\t\tme.min--;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tgetTickLimit: function() {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar stepSize = tickOpts.stepSize;\r\n\t\tvar maxTicksLimit = tickOpts.maxTicksLimit;\r\n\t\tvar maxTicks;\r\n\r\n\t\tif (stepSize) {\r\n\t\t\tmaxTicks = Math.ceil(me.max / stepSize) - Math.floor(me.min / stepSize) + 1;\r\n\t\t} else {\r\n\t\t\tmaxTicks = me._computeTickLimit();\r\n\t\t\tmaxTicksLimit = maxTicksLimit || 11;\r\n\t\t}\r\n\r\n\t\tif (maxTicksLimit) {\r\n\t\t\tmaxTicks = Math.min(maxTicksLimit, maxTicks);\r\n\t\t}\r\n\r\n\t\treturn maxTicks;\r\n\t},\r\n\r\n\t_computeTickLimit: function() {\r\n\t\treturn Number.POSITIVE_INFINITY;\r\n\t},\r\n\r\n\thandleDirectionalChanges: noop,\r\n\r\n\tbuildTicks: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar tickOpts = opts.ticks;\r\n\r\n\t\t// Figure out what the max number of ticks we can support it is based on the size of\r\n\t\t// the axis area. For now, we say that the minimum tick spacing in pixels must be 40\r\n\t\t// We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\r\n\t\t// the graph. Make sure we always have at least 2 ticks\r\n\t\tvar maxTicks = me.getTickLimit();\r\n\t\tmaxTicks = Math.max(2, maxTicks);\r\n\r\n\t\tvar numericGeneratorOptions = {\r\n\t\t\tmaxTicks: maxTicks,\r\n\t\t\tmin: tickOpts.min,\r\n\t\t\tmax: tickOpts.max,\r\n\t\t\tprecision: tickOpts.precision,\r\n\t\t\tstepSize: helpers$1.valueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize)\r\n\t\t};\r\n\t\tvar ticks = me.ticks = generateTicks(numericGeneratorOptions, me);\r\n\r\n\t\tme.handleDirectionalChanges();\r\n\r\n\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\r\n\t\t// range of the scale\r\n\t\tme.max = helpers$1.max(ticks);\r\n\t\tme.min = helpers$1.min(ticks);\r\n\r\n\t\tif (tickOpts.reverse) {\r\n\t\t\tticks.reverse();\r\n\r\n\t\t\tme.start = me.max;\r\n\t\t\tme.end = me.min;\r\n\t\t} else {\r\n\t\t\tme.start = me.min;\r\n\t\t\tme.end = me.max;\r\n\t\t}\r\n\t},\r\n\r\n\tconvertTicksToLabels: function() {\r\n\t\tvar me = this;\r\n\t\tme.ticksAsNumbers = me.ticks.slice();\r\n\t\tme.zeroLineIndex = me.ticks.indexOf(0);\r\n\r\n\t\tcore_scale.prototype.convertTicksToLabels.call(me);\r\n\t},\r\n\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tvar ticks = me.getTicks();\r\n\t\tvar start = me.min;\r\n\t\tvar end = me.max;\r\n\t\tvar offset;\r\n\r\n\t\tcore_scale.prototype._configure.call(me);\r\n\r\n\t\tif (me.options.offset && ticks.length) {\r\n\t\t\toffset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\r\n\t\t\tstart -= offset;\r\n\t\t\tend += offset;\r\n\t\t}\r\n\t\tme._startValue = start;\r\n\t\tme._endValue = end;\r\n\t\tme._valueRange = end - start;\r\n\t}\r\n});\n\nvar defaultConfig$1 = {\r\n\tposition: 'left',\r\n\tticks: {\r\n\t\tcallback: core_ticks.formatters.linear\r\n\t}\r\n};\r\n\r\nvar DEFAULT_MIN = 0;\r\nvar DEFAULT_MAX = 1;\r\n\r\nfunction getOrCreateStack(stacks, stacked, meta) {\r\n\tvar key = [\r\n\t\tmeta.type,\r\n\t\t// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\r\n\t\tstacked === undefined && meta.stack === undefined ? meta.index : '',\r\n\t\tmeta.stack\r\n\t].join('.');\r\n\r\n\tif (stacks[key] === undefined) {\r\n\t\tstacks[key] = {\r\n\t\t\tpos: [],\r\n\t\t\tneg: []\r\n\t\t};\r\n\t}\r\n\r\n\treturn stacks[key];\r\n}\r\n\r\nfunction stackData(scale, stacks, meta, data) {\r\n\tvar opts = scale.options;\r\n\tvar stacked = opts.stacked;\r\n\tvar stack = getOrCreateStack(stacks, stacked, meta);\r\n\tvar pos = stack.pos;\r\n\tvar neg = stack.neg;\r\n\tvar ilen = data.length;\r\n\tvar i, value;\r\n\r\n\tfor (i = 0; i < ilen; ++i) {\r\n\t\tvalue = scale._parseValue(data[i]);\r\n\t\tif (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tpos[i] = pos[i] || 0;\r\n\t\tneg[i] = neg[i] || 0;\r\n\r\n\t\tif (opts.relativePoints) {\r\n\t\t\tpos[i] = 100;\r\n\t\t} else if (value.min < 0 || value.max < 0) {\r\n\t\t\tneg[i] += value.min;\r\n\t\t} else {\r\n\t\t\tpos[i] += value.max;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction updateMinMax(scale, meta, data) {\r\n\tvar ilen = data.length;\r\n\tvar i, value;\r\n\r\n\tfor (i = 0; i < ilen; ++i) {\r\n\t\tvalue = scale._parseValue(data[i]);\r\n\t\tif (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tscale.min = Math.min(scale.min, value.min);\r\n\t\tscale.max = Math.max(scale.max, value.max);\r\n\t}\r\n}\r\n\r\nvar scale_linear = scale_linearbase.extend({\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasets = chart.data.datasets;\r\n\t\tvar metasets = me._getMatchingVisibleMetas();\r\n\t\tvar hasStacks = opts.stacked;\r\n\t\tvar stacks = {};\r\n\t\tvar ilen = metasets.length;\r\n\t\tvar i, meta, data, values;\r\n\r\n\t\tme.min = Number.POSITIVE_INFINITY;\r\n\t\tme.max = Number.NEGATIVE_INFINITY;\r\n\r\n\t\tif (hasStacks === undefined) {\r\n\t\t\tfor (i = 0; !hasStacks && i < ilen; ++i) {\r\n\t\t\t\tmeta = metasets[i];\r\n\t\t\t\thasStacks = meta.stack !== undefined;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < ilen; ++i) {\r\n\t\t\tmeta = metasets[i];\r\n\t\t\tdata = datasets[meta.index].data;\r\n\t\t\tif (hasStacks) {\r\n\t\t\t\tstackData(me, stacks, meta, data);\r\n\t\t\t} else {\r\n\t\t\t\tupdateMinMax(me, meta, data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\thelpers$1.each(stacks, function(stackValues) {\r\n\t\t\tvalues = stackValues.pos.concat(stackValues.neg);\r\n\t\t\tme.min = Math.min(me.min, helpers$1.min(values));\r\n\t\t\tme.max = Math.max(me.max, helpers$1.max(values));\r\n\t\t});\r\n\r\n\t\tme.min = helpers$1.isFinite(me.min) && !isNaN(me.min) ? me.min : DEFAULT_MIN;\r\n\t\tme.max = helpers$1.isFinite(me.max) && !isNaN(me.max) ? me.max : DEFAULT_MAX;\r\n\r\n\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\r\n\t\tme.handleTickRangeOptions();\r\n\t},\r\n\r\n\t// Returns the maximum number of ticks based on the scale dimension\r\n\t_computeTickLimit: function() {\r\n\t\tvar me = this;\r\n\t\tvar tickFont;\r\n\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\treturn Math.ceil(me.width / 40);\r\n\t\t}\r\n\t\ttickFont = helpers$1.options._parseFont(me.options.ticks);\r\n\t\treturn Math.ceil(me.height / tickFont.lineHeight);\r\n\t},\r\n\r\n\t// Called after the ticks are built. We need\r\n\thandleDirectionalChanges: function() {\r\n\t\tif (!this.isHorizontal()) {\r\n\t\t\t// We are in a vertical orientation. The top value is the highest. So reverse the array\r\n\t\t\tthis.ticks.reverse();\r\n\t\t}\r\n\t},\r\n\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\treturn this._getScaleLabel(this.chart.data.datasets[datasetIndex].data[index]);\r\n\t},\r\n\r\n\t// Utils\r\n\tgetPixelForValue: function(value) {\r\n\t\tvar me = this;\r\n\t\treturn me.getPixelForDecimal((+me.getRightValue(value) - me._startValue) / me._valueRange);\r\n\t},\r\n\r\n\tgetValueForPixel: function(pixel) {\r\n\t\treturn this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\r\n\t},\r\n\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar ticks = this.ticksAsNumbers;\r\n\t\tif (index < 0 || index > ticks.length - 1) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.getPixelForValue(ticks[index]);\r\n\t}\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults$1 = defaultConfig$1;\nscale_linear._defaults = _defaults$1;\n\nvar valueOrDefault$b = helpers$1.valueOrDefault;\r\nvar log10 = helpers$1.math.log10;\r\n\r\n/**\r\n * Generate a set of logarithmic ticks\r\n * @param generationOptions the options used to generate the ticks\r\n * @param dataRange the range of the data\r\n * @returns {number[]} array of tick values\r\n */\r\nfunction generateTicks$1(generationOptions, dataRange) {\r\n\tvar ticks = [];\r\n\r\n\tvar tickVal = valueOrDefault$b(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\r\n\r\n\tvar endExp = Math.floor(log10(dataRange.max));\r\n\tvar endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\r\n\tvar exp, significand;\r\n\r\n\tif (tickVal === 0) {\r\n\t\texp = Math.floor(log10(dataRange.minNotZero));\r\n\t\tsignificand = Math.floor(dataRange.minNotZero / Math.pow(10, exp));\r\n\r\n\t\tticks.push(tickVal);\r\n\t\ttickVal = significand * Math.pow(10, exp);\r\n\t} else {\r\n\t\texp = Math.floor(log10(tickVal));\r\n\t\tsignificand = Math.floor(tickVal / Math.pow(10, exp));\r\n\t}\r\n\tvar precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\r\n\r\n\tdo {\r\n\t\tticks.push(tickVal);\r\n\r\n\t\t++significand;\r\n\t\tif (significand === 10) {\r\n\t\t\tsignificand = 1;\r\n\t\t\t++exp;\r\n\t\t\tprecision = exp >= 0 ? 1 : precision;\r\n\t\t}\r\n\r\n\t\ttickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\r\n\t} while (exp < endExp || (exp === endExp && significand < endSignificand));\r\n\r\n\tvar lastTick = valueOrDefault$b(generationOptions.max, tickVal);\r\n\tticks.push(lastTick);\r\n\r\n\treturn ticks;\r\n}\r\n\r\nvar defaultConfig$2 = {\r\n\tposition: 'left',\r\n\r\n\t// label settings\r\n\tticks: {\r\n\t\tcallback: core_ticks.formatters.logarithmic\r\n\t}\r\n};\r\n\r\n// TODO(v3): change this to positiveOrDefault\r\nfunction nonNegativeOrDefault(value, defaultValue) {\r\n\treturn helpers$1.isFinite(value) && value >= 0 ? value : defaultValue;\r\n}\r\n\r\nvar scale_logarithmic = core_scale.extend({\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar chart = me.chart;\r\n\t\tvar datasets = chart.data.datasets;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tfunction IDMatches(meta) {\r\n\t\t\treturn isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\r\n\t\t}\r\n\t\tvar datasetIndex, meta, value, data, i, ilen;\r\n\r\n\t\t// Calculate Range\r\n\t\tme.min = Number.POSITIVE_INFINITY;\r\n\t\tme.max = Number.NEGATIVE_INFINITY;\r\n\t\tme.minNotZero = Number.POSITIVE_INFINITY;\r\n\r\n\t\tvar hasStacks = opts.stacked;\r\n\t\tif (hasStacks === undefined) {\r\n\t\t\tfor (datasetIndex = 0; datasetIndex < datasets.length; datasetIndex++) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(datasetIndex);\r\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) &&\r\n\t\t\t\t\tmeta.stack !== undefined) {\r\n\t\t\t\t\thasStacks = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (opts.stacked || hasStacks) {\r\n\t\t\tvar valuesPerStack = {};\r\n\r\n\t\t\tfor (datasetIndex = 0; datasetIndex < datasets.length; datasetIndex++) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(datasetIndex);\r\n\t\t\t\tvar key = [\r\n\t\t\t\t\tmeta.type,\r\n\t\t\t\t\t// we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\r\n\t\t\t\t\t((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''),\r\n\t\t\t\t\tmeta.stack\r\n\t\t\t\t].join('.');\r\n\r\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\r\n\t\t\t\t\tif (valuesPerStack[key] === undefined) {\r\n\t\t\t\t\t\tvaluesPerStack[key] = [];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdata = datasets[datasetIndex].data;\r\n\t\t\t\t\tfor (i = 0, ilen = data.length; i < ilen; i++) {\r\n\t\t\t\t\t\tvar values = valuesPerStack[key];\r\n\t\t\t\t\t\tvalue = me._parseValue(data[i]);\r\n\t\t\t\t\t\t// invalid, hidden and negative values are ignored\r\n\t\t\t\t\t\tif (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden || value.min < 0 || value.max < 0) {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvalues[i] = values[i] || 0;\r\n\t\t\t\t\t\tvalues[i] += value.max;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\thelpers$1.each(valuesPerStack, function(valuesForType) {\r\n\t\t\t\tif (valuesForType.length > 0) {\r\n\t\t\t\t\tvar minVal = helpers$1.min(valuesForType);\r\n\t\t\t\t\tvar maxVal = helpers$1.max(valuesForType);\r\n\t\t\t\t\tme.min = Math.min(me.min, minVal);\r\n\t\t\t\t\tme.max = Math.max(me.max, maxVal);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t} else {\r\n\t\t\tfor (datasetIndex = 0; datasetIndex < datasets.length; datasetIndex++) {\r\n\t\t\t\tmeta = chart.getDatasetMeta(datasetIndex);\r\n\t\t\t\tif (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\r\n\t\t\t\t\tdata = datasets[datasetIndex].data;\r\n\t\t\t\t\tfor (i = 0, ilen = data.length; i < ilen; i++) {\r\n\t\t\t\t\t\tvalue = me._parseValue(data[i]);\r\n\t\t\t\t\t\t// invalid, hidden and negative values are ignored\r\n\t\t\t\t\t\tif (isNaN(value.min) || isNaN(value.max) || meta.data[i].hidden || value.min < 0 || value.max < 0) {\r\n\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tme.min = Math.min(value.min, me.min);\r\n\t\t\t\t\t\tme.max = Math.max(value.max, me.max);\r\n\r\n\t\t\t\t\t\tif (value.min !== 0) {\r\n\t\t\t\t\t\t\tme.minNotZero = Math.min(value.min, me.minNotZero);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.min = helpers$1.isFinite(me.min) ? me.min : null;\r\n\t\tme.max = helpers$1.isFinite(me.max) ? me.max : null;\r\n\t\tme.minNotZero = helpers$1.isFinite(me.minNotZero) ? me.minNotZero : null;\r\n\r\n\t\t// Common base implementation to handle ticks.min, ticks.max\r\n\t\tthis.handleTickRangeOptions();\r\n\t},\r\n\r\n\thandleTickRangeOptions: function() {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar DEFAULT_MIN = 1;\r\n\t\tvar DEFAULT_MAX = 10;\r\n\r\n\t\tme.min = nonNegativeOrDefault(tickOpts.min, me.min);\r\n\t\tme.max = nonNegativeOrDefault(tickOpts.max, me.max);\r\n\r\n\t\tif (me.min === me.max) {\r\n\t\t\tif (me.min !== 0 && me.min !== null) {\r\n\t\t\t\tme.min = Math.pow(10, Math.floor(log10(me.min)) - 1);\r\n\t\t\t\tme.max = Math.pow(10, Math.floor(log10(me.max)) + 1);\r\n\t\t\t} else {\r\n\t\t\t\tme.min = DEFAULT_MIN;\r\n\t\t\t\tme.max = DEFAULT_MAX;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (me.min === null) {\r\n\t\t\tme.min = Math.pow(10, Math.floor(log10(me.max)) - 1);\r\n\t\t}\r\n\t\tif (me.max === null) {\r\n\t\t\tme.max = me.min !== 0\r\n\t\t\t\t? Math.pow(10, Math.floor(log10(me.min)) + 1)\r\n\t\t\t\t: DEFAULT_MAX;\r\n\t\t}\r\n\t\tif (me.minNotZero === null) {\r\n\t\t\tif (me.min > 0) {\r\n\t\t\t\tme.minNotZero = me.min;\r\n\t\t\t} else if (me.max < 1) {\r\n\t\t\t\tme.minNotZero = Math.pow(10, Math.floor(log10(me.max)));\r\n\t\t\t} else {\r\n\t\t\t\tme.minNotZero = DEFAULT_MIN;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tbuildTicks: function() {\r\n\t\tvar me = this;\r\n\t\tvar tickOpts = me.options.ticks;\r\n\t\tvar reverse = !me.isHorizontal();\r\n\r\n\t\tvar generationOptions = {\r\n\t\t\tmin: nonNegativeOrDefault(tickOpts.min),\r\n\t\t\tmax: nonNegativeOrDefault(tickOpts.max)\r\n\t\t};\r\n\t\tvar ticks = me.ticks = generateTicks$1(generationOptions, me);\r\n\r\n\t\t// At this point, we need to update our max and min given the tick values since we have expanded the\r\n\t\t// range of the scale\r\n\t\tme.max = helpers$1.max(ticks);\r\n\t\tme.min = helpers$1.min(ticks);\r\n\r\n\t\tif (tickOpts.reverse) {\r\n\t\t\treverse = !reverse;\r\n\t\t\tme.start = me.max;\r\n\t\t\tme.end = me.min;\r\n\t\t} else {\r\n\t\t\tme.start = me.min;\r\n\t\t\tme.end = me.max;\r\n\t\t}\r\n\t\tif (reverse) {\r\n\t\t\tticks.reverse();\r\n\t\t}\r\n\t},\r\n\r\n\tconvertTicksToLabels: function() {\r\n\t\tthis.tickValues = this.ticks.slice();\r\n\r\n\t\tcore_scale.prototype.convertTicksToLabels.call(this);\r\n\t},\r\n\r\n\t// Get the correct tooltip label\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\treturn this._getScaleLabel(this.chart.data.datasets[datasetIndex].data[index]);\r\n\t},\r\n\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar ticks = this.tickValues;\r\n\t\tif (index < 0 || index > ticks.length - 1) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.getPixelForValue(ticks[index]);\r\n\t},\r\n\r\n\t/**\r\n\t * Returns the value of the first tick.\r\n\t * @param {number} value - The minimum not zero value.\r\n\t * @return {number} The first tick value.\r\n\t * @private\r\n\t */\r\n\t_getFirstTickValue: function(value) {\r\n\t\tvar exp = Math.floor(log10(value));\r\n\t\tvar significand = Math.floor(value / Math.pow(10, exp));\r\n\r\n\t\treturn significand * Math.pow(10, exp);\r\n\t},\r\n\r\n\t_configure: function() {\r\n\t\tvar me = this;\r\n\t\tvar start = me.min;\r\n\t\tvar offset = 0;\r\n\r\n\t\tcore_scale.prototype._configure.call(me);\r\n\r\n\t\tif (start === 0) {\r\n\t\t\tstart = me._getFirstTickValue(me.minNotZero);\r\n\t\t\toffset = valueOrDefault$b(me.options.ticks.fontSize, core_defaults.global.defaultFontSize) / me._length;\r\n\t\t}\r\n\r\n\t\tme._startValue = log10(start);\r\n\t\tme._valueOffset = offset;\r\n\t\tme._valueRange = (log10(me.max) - log10(start)) / (1 - offset);\r\n\t},\r\n\r\n\tgetPixelForValue: function(value) {\r\n\t\tvar me = this;\r\n\t\tvar decimal = 0;\r\n\r\n\t\tvalue = +me.getRightValue(value);\r\n\r\n\t\tif (value > me.min && value > 0) {\r\n\t\t\tdecimal = (log10(value) - me._startValue) / me._valueRange + me._valueOffset;\r\n\t\t}\r\n\t\treturn me.getPixelForDecimal(decimal);\r\n\t},\r\n\r\n\tgetValueForPixel: function(pixel) {\r\n\t\tvar me = this;\r\n\t\tvar decimal = me.getDecimalForPixel(pixel);\r\n\t\treturn decimal === 0 && me.min === 0\r\n\t\t\t? 0\r\n\t\t\t: Math.pow(10, me._startValue + (decimal - me._valueOffset) * me._valueRange);\r\n\t}\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults$2 = defaultConfig$2;\nscale_logarithmic._defaults = _defaults$2;\n\nvar valueOrDefault$c = helpers$1.valueOrDefault;\r\nvar valueAtIndexOrDefault$1 = helpers$1.valueAtIndexOrDefault;\r\nvar resolve$4 = helpers$1.options.resolve;\r\n\r\nvar defaultConfig$3 = {\r\n\tdisplay: true,\r\n\r\n\t// Boolean - Whether to animate scaling the chart from the centre\r\n\tanimate: true,\r\n\tposition: 'chartArea',\r\n\r\n\tangleLines: {\r\n\t\tdisplay: true,\r\n\t\tcolor: 'rgba(0,0,0,0.1)',\r\n\t\tlineWidth: 1,\r\n\t\tborderDash: [],\r\n\t\tborderDashOffset: 0.0\r\n\t},\r\n\r\n\tgridLines: {\r\n\t\tcircular: false\r\n\t},\r\n\r\n\t// label settings\r\n\tticks: {\r\n\t\t// Boolean - Show a backdrop to the scale label\r\n\t\tshowLabelBackdrop: true,\r\n\r\n\t\t// String - The colour of the label backdrop\r\n\t\tbackdropColor: 'rgba(255,255,255,0.75)',\r\n\r\n\t\t// Number - The backdrop padding above & below the label in pixels\r\n\t\tbackdropPaddingY: 2,\r\n\r\n\t\t// Number - The backdrop padding to the side of the label in pixels\r\n\t\tbackdropPaddingX: 2,\r\n\r\n\t\tcallback: core_ticks.formatters.linear\r\n\t},\r\n\r\n\tpointLabels: {\r\n\t\t// Boolean - if true, show point labels\r\n\t\tdisplay: true,\r\n\r\n\t\t// Number - Point label font size in pixels\r\n\t\tfontSize: 10,\r\n\r\n\t\t// Function - Used to convert point labels\r\n\t\tcallback: function(label) {\r\n\t\t\treturn label;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nfunction getTickBackdropHeight(opts) {\r\n\tvar tickOpts = opts.ticks;\r\n\r\n\tif (tickOpts.display && opts.display) {\r\n\t\treturn valueOrDefault$c(tickOpts.fontSize, core_defaults.global.defaultFontSize) + tickOpts.backdropPaddingY * 2;\r\n\t}\r\n\treturn 0;\r\n}\r\n\r\nfunction measureLabelSize(ctx, lineHeight, label) {\r\n\tif (helpers$1.isArray(label)) {\r\n\t\treturn {\r\n\t\t\tw: helpers$1.longestText(ctx, ctx.font, label),\r\n\t\t\th: label.length * lineHeight\r\n\t\t};\r\n\t}\r\n\r\n\treturn {\r\n\t\tw: ctx.measureText(label).width,\r\n\t\th: lineHeight\r\n\t};\r\n}\r\n\r\nfunction determineLimits(angle, pos, size, min, max) {\r\n\tif (angle === min || angle === max) {\r\n\t\treturn {\r\n\t\t\tstart: pos - (size / 2),\r\n\t\t\tend: pos + (size / 2)\r\n\t\t};\r\n\t} else if (angle < min || angle > max) {\r\n\t\treturn {\r\n\t\t\tstart: pos - size,\r\n\t\t\tend: pos\r\n\t\t};\r\n\t}\r\n\r\n\treturn {\r\n\t\tstart: pos,\r\n\t\tend: pos + size\r\n\t};\r\n}\r\n\r\n/**\r\n * Helper function to fit a radial linear scale with point labels\r\n */\r\nfunction fitWithPointLabels(scale) {\r\n\r\n\t// Right, this is really confusing and there is a lot of maths going on here\r\n\t// The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\r\n\t//\r\n\t// Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\r\n\t//\r\n\t// Solution:\r\n\t//\r\n\t// We assume the radius of the polygon is half the size of the canvas at first\r\n\t// at each index we check if the text overlaps.\r\n\t//\r\n\t// Where it does, we store that angle and that index.\r\n\t//\r\n\t// After finding the largest index and angle we calculate how much we need to remove\r\n\t// from the shape radius to move the point inwards by that x.\r\n\t//\r\n\t// We average the left and right distances to get the maximum shape radius that can fit in the box\r\n\t// along with labels.\r\n\t//\r\n\t// Once we have that, we can find the centre point for the chart, by taking the x text protrusion\r\n\t// on each side, removing that from the size, halving it and adding the left x protrusion width.\r\n\t//\r\n\t// This will mean we have a shape fitted to the canvas, as large as it can be with the labels\r\n\t// and position it in the most space efficient manner\r\n\t//\r\n\t// https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\r\n\r\n\tvar plFont = helpers$1.options._parseFont(scale.options.pointLabels);\r\n\r\n\t// Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\r\n\t// Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\r\n\tvar furthestLimits = {\r\n\t\tl: 0,\r\n\t\tr: scale.width,\r\n\t\tt: 0,\r\n\t\tb: scale.height - scale.paddingTop\r\n\t};\r\n\tvar furthestAngles = {};\r\n\tvar i, textSize, pointPosition;\r\n\r\n\tscale.ctx.font = plFont.string;\r\n\tscale._pointLabelSizes = [];\r\n\r\n\tvar valueCount = scale.chart.data.labels.length;\r\n\tfor (i = 0; i < valueCount; i++) {\r\n\t\tpointPosition = scale.getPointPosition(i, scale.drawingArea + 5);\r\n\t\ttextSize = measureLabelSize(scale.ctx, plFont.lineHeight, scale.pointLabels[i]);\r\n\t\tscale._pointLabelSizes[i] = textSize;\r\n\r\n\t\t// Add quarter circle to make degree 0 mean top of circle\r\n\t\tvar angleRadians = scale.getIndexAngle(i);\r\n\t\tvar angle = helpers$1.toDegrees(angleRadians) % 360;\r\n\t\tvar hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\r\n\t\tvar vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\r\n\r\n\t\tif (hLimits.start < furthestLimits.l) {\r\n\t\t\tfurthestLimits.l = hLimits.start;\r\n\t\t\tfurthestAngles.l = angleRadians;\r\n\t\t}\r\n\r\n\t\tif (hLimits.end > furthestLimits.r) {\r\n\t\t\tfurthestLimits.r = hLimits.end;\r\n\t\t\tfurthestAngles.r = angleRadians;\r\n\t\t}\r\n\r\n\t\tif (vLimits.start < furthestLimits.t) {\r\n\t\t\tfurthestLimits.t = vLimits.start;\r\n\t\t\tfurthestAngles.t = angleRadians;\r\n\t\t}\r\n\r\n\t\tif (vLimits.end > furthestLimits.b) {\r\n\t\t\tfurthestLimits.b = vLimits.end;\r\n\t\t\tfurthestAngles.b = angleRadians;\r\n\t\t}\r\n\t}\r\n\r\n\tscale.setReductions(scale.drawingArea, furthestLimits, furthestAngles);\r\n}\r\n\r\nfunction getTextAlignForAngle(angle) {\r\n\tif (angle === 0 || angle === 180) {\r\n\t\treturn 'center';\r\n\t} else if (angle < 180) {\r\n\t\treturn 'left';\r\n\t}\r\n\r\n\treturn 'right';\r\n}\r\n\r\nfunction fillText(ctx, text, position, lineHeight) {\r\n\tvar y = position.y + lineHeight / 2;\r\n\tvar i, ilen;\r\n\r\n\tif (helpers$1.isArray(text)) {\r\n\t\tfor (i = 0, ilen = text.length; i < ilen; ++i) {\r\n\t\t\tctx.fillText(text[i], position.x, y);\r\n\t\t\ty += lineHeight;\r\n\t\t}\r\n\t} else {\r\n\t\tctx.fillText(text, position.x, y);\r\n\t}\r\n}\r\n\r\nfunction adjustPointPositionForLabelHeight(angle, textSize, position) {\r\n\tif (angle === 90 || angle === 270) {\r\n\t\tposition.y -= (textSize.h / 2);\r\n\t} else if (angle > 270 || angle < 90) {\r\n\t\tposition.y -= textSize.h;\r\n\t}\r\n}\r\n\r\nfunction drawPointLabels(scale) {\r\n\tvar ctx = scale.ctx;\r\n\tvar opts = scale.options;\r\n\tvar pointLabelOpts = opts.pointLabels;\r\n\tvar tickBackdropHeight = getTickBackdropHeight(opts);\r\n\tvar outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max);\r\n\tvar plFont = helpers$1.options._parseFont(pointLabelOpts);\r\n\r\n\tctx.save();\r\n\r\n\tctx.font = plFont.string;\r\n\tctx.textBaseline = 'middle';\r\n\r\n\tfor (var i = scale.chart.data.labels.length - 1; i >= 0; i--) {\r\n\t\t// Extra pixels out for some label spacing\r\n\t\tvar extra = (i === 0 ? tickBackdropHeight / 2 : 0);\r\n\t\tvar pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + 5);\r\n\r\n\t\t// Keep this in loop since we may support array properties here\r\n\t\tvar pointLabelFontColor = valueAtIndexOrDefault$1(pointLabelOpts.fontColor, i, core_defaults.global.defaultFontColor);\r\n\t\tctx.fillStyle = pointLabelFontColor;\r\n\r\n\t\tvar angleRadians = scale.getIndexAngle(i);\r\n\t\tvar angle = helpers$1.toDegrees(angleRadians);\r\n\t\tctx.textAlign = getTextAlignForAngle(angle);\r\n\t\tadjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition);\r\n\t\tfillText(ctx, scale.pointLabels[i], pointLabelPosition, plFont.lineHeight);\r\n\t}\r\n\tctx.restore();\r\n}\r\n\r\nfunction drawRadiusLine(scale, gridLineOpts, radius, index) {\r\n\tvar ctx = scale.ctx;\r\n\tvar circular = gridLineOpts.circular;\r\n\tvar valueCount = scale.chart.data.labels.length;\r\n\tvar lineColor = valueAtIndexOrDefault$1(gridLineOpts.color, index - 1);\r\n\tvar lineWidth = valueAtIndexOrDefault$1(gridLineOpts.lineWidth, index - 1);\r\n\tvar pointPosition;\r\n\r\n\tif ((!circular && !valueCount) || !lineColor || !lineWidth) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tctx.save();\r\n\tctx.strokeStyle = lineColor;\r\n\tctx.lineWidth = lineWidth;\r\n\tif (ctx.setLineDash) {\r\n\t\tctx.setLineDash(gridLineOpts.borderDash || []);\r\n\t\tctx.lineDashOffset = gridLineOpts.borderDashOffset || 0.0;\r\n\t}\r\n\r\n\tctx.beginPath();\r\n\tif (circular) {\r\n\t\t// Draw circular arcs between the points\r\n\t\tctx.arc(scale.xCenter, scale.yCenter, radius, 0, Math.PI * 2);\r\n\t} else {\r\n\t\t// Draw straight lines connecting each index\r\n\t\tpointPosition = scale.getPointPosition(0, radius);\r\n\t\tctx.moveTo(pointPosition.x, pointPosition.y);\r\n\r\n\t\tfor (var i = 1; i < valueCount; i++) {\r\n\t\t\tpointPosition = scale.getPointPosition(i, radius);\r\n\t\t\tctx.lineTo(pointPosition.x, pointPosition.y);\r\n\t\t}\r\n\t}\r\n\tctx.closePath();\r\n\tctx.stroke();\r\n\tctx.restore();\r\n}\r\n\r\nfunction numberOrZero(param) {\r\n\treturn helpers$1.isNumber(param) ? param : 0;\r\n}\r\n\r\nvar scale_radialLinear = scale_linearbase.extend({\r\n\tsetDimensions: function() {\r\n\t\tvar me = this;\r\n\r\n\t\t// Set the unconstrained dimension before label rotation\r\n\t\tme.width = me.maxWidth;\r\n\t\tme.height = me.maxHeight;\r\n\t\tme.paddingTop = getTickBackdropHeight(me.options) / 2;\r\n\t\tme.xCenter = Math.floor(me.width / 2);\r\n\t\tme.yCenter = Math.floor((me.height - me.paddingTop) / 2);\r\n\t\tme.drawingArea = Math.min(me.height - me.paddingTop, me.width) / 2;\r\n\t},\r\n\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar min = Number.POSITIVE_INFINITY;\r\n\t\tvar max = Number.NEGATIVE_INFINITY;\r\n\r\n\t\thelpers$1.each(chart.data.datasets, function(dataset, datasetIndex) {\r\n\t\t\tif (chart.isDatasetVisible(datasetIndex)) {\r\n\t\t\t\tvar meta = chart.getDatasetMeta(datasetIndex);\r\n\r\n\t\t\t\thelpers$1.each(dataset.data, function(rawValue, index) {\r\n\t\t\t\t\tvar value = +me.getRightValue(rawValue);\r\n\t\t\t\t\tif (isNaN(value) || meta.data[index].hidden) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tmin = Math.min(value, min);\r\n\t\t\t\t\tmax = Math.max(value, max);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tme.min = (min === Number.POSITIVE_INFINITY ? 0 : min);\r\n\t\tme.max = (max === Number.NEGATIVE_INFINITY ? 0 : max);\r\n\r\n\t\t// Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\r\n\t\tme.handleTickRangeOptions();\r\n\t},\r\n\r\n\t// Returns the maximum number of ticks based on the scale dimension\r\n\t_computeTickLimit: function() {\r\n\t\treturn Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\r\n\t},\r\n\r\n\tconvertTicksToLabels: function() {\r\n\t\tvar me = this;\r\n\r\n\t\tscale_linearbase.prototype.convertTicksToLabels.call(me);\r\n\r\n\t\t// Point labels\r\n\t\tme.pointLabels = me.chart.data.labels.map(function() {\r\n\t\t\tvar label = helpers$1.callback(me.options.pointLabels.callback, arguments, me);\r\n\t\t\treturn label || label === 0 ? label : '';\r\n\t\t});\r\n\t},\r\n\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\treturn +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\r\n\t},\r\n\r\n\tfit: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\r\n\t\tif (opts.display && opts.pointLabels.display) {\r\n\t\t\tfitWithPointLabels(me);\r\n\t\t} else {\r\n\t\t\tme.setCenterPoint(0, 0, 0, 0);\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * Set radius reductions and determine new radius and center point\r\n\t * @private\r\n\t */\r\n\tsetReductions: function(largestPossibleRadius, furthestLimits, furthestAngles) {\r\n\t\tvar me = this;\r\n\t\tvar radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);\r\n\t\tvar radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);\r\n\t\tvar radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);\r\n\t\tvar radiusReductionBottom = -Math.max(furthestLimits.b - (me.height - me.paddingTop), 0) / Math.cos(furthestAngles.b);\r\n\r\n\t\tradiusReductionLeft = numberOrZero(radiusReductionLeft);\r\n\t\tradiusReductionRight = numberOrZero(radiusReductionRight);\r\n\t\tradiusReductionTop = numberOrZero(radiusReductionTop);\r\n\t\tradiusReductionBottom = numberOrZero(radiusReductionBottom);\r\n\r\n\t\tme.drawingArea = Math.min(\r\n\t\t\tMath.floor(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2),\r\n\t\t\tMath.floor(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2));\r\n\t\tme.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);\r\n\t},\r\n\r\n\tsetCenterPoint: function(leftMovement, rightMovement, topMovement, bottomMovement) {\r\n\t\tvar me = this;\r\n\t\tvar maxRight = me.width - rightMovement - me.drawingArea;\r\n\t\tvar maxLeft = leftMovement + me.drawingArea;\r\n\t\tvar maxTop = topMovement + me.drawingArea;\r\n\t\tvar maxBottom = (me.height - me.paddingTop) - bottomMovement - me.drawingArea;\r\n\r\n\t\tme.xCenter = Math.floor(((maxLeft + maxRight) / 2) + me.left);\r\n\t\tme.yCenter = Math.floor(((maxTop + maxBottom) / 2) + me.top + me.paddingTop);\r\n\t},\r\n\r\n\tgetIndexAngle: function(index) {\r\n\t\tvar chart = this.chart;\r\n\t\tvar angleMultiplier = 360 / chart.data.labels.length;\r\n\t\tvar options = chart.options || {};\r\n\t\tvar startAngle = options.startAngle || 0;\r\n\r\n\t\t// Start from the top instead of right, so remove a quarter of the circle\r\n\t\tvar angle = (index * angleMultiplier + startAngle) % 360;\r\n\r\n\t\treturn (angle < 0 ? angle + 360 : angle) * Math.PI * 2 / 360;\r\n\t},\r\n\r\n\tgetDistanceFromCenterForValue: function(value) {\r\n\t\tvar me = this;\r\n\r\n\t\tif (helpers$1.isNullOrUndef(value)) {\r\n\t\t\treturn NaN;\r\n\t\t}\r\n\r\n\t\t// Take into account half font size + the yPadding of the top value\r\n\t\tvar scalingFactor = me.drawingArea / (me.max - me.min);\r\n\t\tif (me.options.ticks.reverse) {\r\n\t\t\treturn (me.max - value) * scalingFactor;\r\n\t\t}\r\n\t\treturn (value - me.min) * scalingFactor;\r\n\t},\r\n\r\n\tgetPointPosition: function(index, distanceFromCenter) {\r\n\t\tvar me = this;\r\n\t\tvar thisAngle = me.getIndexAngle(index) - (Math.PI / 2);\r\n\t\treturn {\r\n\t\t\tx: Math.cos(thisAngle) * distanceFromCenter + me.xCenter,\r\n\t\t\ty: Math.sin(thisAngle) * distanceFromCenter + me.yCenter\r\n\t\t};\r\n\t},\r\n\r\n\tgetPointPositionForValue: function(index, value) {\r\n\t\treturn this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\r\n\t},\r\n\r\n\tgetBasePosition: function(index) {\r\n\t\tvar me = this;\r\n\t\tvar min = me.min;\r\n\t\tvar max = me.max;\r\n\r\n\t\treturn me.getPointPositionForValue(index || 0,\r\n\t\t\tme.beginAtZero ? 0 :\r\n\t\t\tmin < 0 && max < 0 ? max :\r\n\t\t\tmin > 0 && max > 0 ? min :\r\n\t\t\t0);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawGrid: function() {\r\n\t\tvar me = this;\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar opts = me.options;\r\n\t\tvar gridLineOpts = opts.gridLines;\r\n\t\tvar angleLineOpts = opts.angleLines;\r\n\t\tvar lineWidth = valueOrDefault$c(angleLineOpts.lineWidth, gridLineOpts.lineWidth);\r\n\t\tvar lineColor = valueOrDefault$c(angleLineOpts.color, gridLineOpts.color);\r\n\t\tvar i, offset, position;\r\n\r\n\t\tif (opts.pointLabels.display) {\r\n\t\t\tdrawPointLabels(me);\r\n\t\t}\r\n\r\n\t\tif (gridLineOpts.display) {\r\n\t\t\thelpers$1.each(me.ticks, function(label, index) {\r\n\t\t\t\tif (index !== 0) {\r\n\t\t\t\t\toffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);\r\n\t\t\t\t\tdrawRadiusLine(me, gridLineOpts, offset, index);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (angleLineOpts.display && lineWidth && lineColor) {\r\n\t\t\tctx.save();\r\n\t\t\tctx.lineWidth = lineWidth;\r\n\t\t\tctx.strokeStyle = lineColor;\r\n\t\t\tif (ctx.setLineDash) {\r\n\t\t\t\tctx.setLineDash(resolve$4([angleLineOpts.borderDash, gridLineOpts.borderDash, []]));\r\n\t\t\t\tctx.lineDashOffset = resolve$4([angleLineOpts.borderDashOffset, gridLineOpts.borderDashOffset, 0.0]);\r\n\t\t\t}\r\n\r\n\t\t\tfor (i = me.chart.data.labels.length - 1; i >= 0; i--) {\r\n\t\t\t\toffset = me.getDistanceFromCenterForValue(opts.ticks.reverse ? me.min : me.max);\r\n\t\t\t\tposition = me.getPointPosition(i, offset);\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\tctx.moveTo(me.xCenter, me.yCenter);\r\n\t\t\t\tctx.lineTo(position.x, position.y);\r\n\t\t\t\tctx.stroke();\r\n\t\t\t}\r\n\r\n\t\t\tctx.restore();\r\n\t\t}\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawLabels: function() {\r\n\t\tvar me = this;\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar opts = me.options;\r\n\t\tvar tickOpts = opts.ticks;\r\n\r\n\t\tif (!tickOpts.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar startAngle = me.getIndexAngle(0);\r\n\t\tvar tickFont = helpers$1.options._parseFont(tickOpts);\r\n\t\tvar tickFontColor = valueOrDefault$c(tickOpts.fontColor, core_defaults.global.defaultFontColor);\r\n\t\tvar offset, width;\r\n\r\n\t\tctx.save();\r\n\t\tctx.font = tickFont.string;\r\n\t\tctx.translate(me.xCenter, me.yCenter);\r\n\t\tctx.rotate(startAngle);\r\n\t\tctx.textAlign = 'center';\r\n\t\tctx.textBaseline = 'middle';\r\n\r\n\t\thelpers$1.each(me.ticks, function(label, index) {\r\n\t\t\tif (index === 0 && !tickOpts.reverse) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\toffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);\r\n\r\n\t\t\tif (tickOpts.showLabelBackdrop) {\r\n\t\t\t\twidth = ctx.measureText(label).width;\r\n\t\t\t\tctx.fillStyle = tickOpts.backdropColor;\r\n\r\n\t\t\t\tctx.fillRect(\r\n\t\t\t\t\t-width / 2 - tickOpts.backdropPaddingX,\r\n\t\t\t\t\t-offset - tickFont.size / 2 - tickOpts.backdropPaddingY,\r\n\t\t\t\t\twidth + tickOpts.backdropPaddingX * 2,\r\n\t\t\t\t\ttickFont.size + tickOpts.backdropPaddingY * 2\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tctx.fillStyle = tickFontColor;\r\n\t\t\tctx.fillText(label, 0, -offset);\r\n\t\t});\r\n\r\n\t\tctx.restore();\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_drawTitle: helpers$1.noop\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults$3 = defaultConfig$3;\nscale_radialLinear._defaults = _defaults$3;\n\nvar deprecated$1 = helpers$1._deprecated;\r\nvar resolve$5 = helpers$1.options.resolve;\r\nvar valueOrDefault$d = helpers$1.valueOrDefault;\r\n\r\n// Integer constants are from the ES6 spec.\r\nvar MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\r\nvar MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\r\n\r\nvar INTERVALS = {\r\n\tmillisecond: {\r\n\t\tcommon: true,\r\n\t\tsize: 1,\r\n\t\tsteps: 1000\r\n\t},\r\n\tsecond: {\r\n\t\tcommon: true,\r\n\t\tsize: 1000,\r\n\t\tsteps: 60\r\n\t},\r\n\tminute: {\r\n\t\tcommon: true,\r\n\t\tsize: 60000,\r\n\t\tsteps: 60\r\n\t},\r\n\thour: {\r\n\t\tcommon: true,\r\n\t\tsize: 3600000,\r\n\t\tsteps: 24\r\n\t},\r\n\tday: {\r\n\t\tcommon: true,\r\n\t\tsize: 86400000,\r\n\t\tsteps: 30\r\n\t},\r\n\tweek: {\r\n\t\tcommon: false,\r\n\t\tsize: 604800000,\r\n\t\tsteps: 4\r\n\t},\r\n\tmonth: {\r\n\t\tcommon: true,\r\n\t\tsize: 2.628e9,\r\n\t\tsteps: 12\r\n\t},\r\n\tquarter: {\r\n\t\tcommon: false,\r\n\t\tsize: 7.884e9,\r\n\t\tsteps: 4\r\n\t},\r\n\tyear: {\r\n\t\tcommon: true,\r\n\t\tsize: 3.154e10\r\n\t}\r\n};\r\n\r\nvar UNITS = Object.keys(INTERVALS);\r\n\r\nfunction sorter(a, b) {\r\n\treturn a - b;\r\n}\r\n\r\nfunction arrayUnique(items) {\r\n\tvar hash = {};\r\n\tvar out = [];\r\n\tvar i, ilen, item;\r\n\r\n\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\r\n\t\titem = items[i];\r\n\t\tif (!hash[item]) {\r\n\t\t\thash[item] = true;\r\n\t\t\tout.push(item);\r\n\t\t}\r\n\t}\r\n\r\n\treturn out;\r\n}\r\n\r\nfunction getMin(options) {\r\n\treturn helpers$1.valueOrDefault(options.time.min, options.ticks.min);\r\n}\r\n\r\nfunction getMax(options) {\r\n\treturn helpers$1.valueOrDefault(options.time.max, options.ticks.max);\r\n}\r\n\r\n/**\r\n * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\r\n * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\r\n * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\r\n * extremity (left + width or top + height). Note that it would be more optimized to directly\r\n * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\r\n * to create the lookup table. The table ALWAYS contains at least two items: min and max.\r\n *\r\n * @param {number[]} timestamps - timestamps sorted from lowest to highest.\r\n * @param {string} distribution - If 'linear', timestamps will be spread linearly along the min\r\n * and max range, so basically, the table will contains only two items: {min, 0} and {max, 1}.\r\n * If 'series', timestamps will be positioned at the same distance from each other. In this\r\n * case, only timestamps that break the time linearity are registered, meaning that in the\r\n * best case, all timestamps are linear, the table contains only min and max.\r\n */\r\nfunction buildLookupTable(timestamps, min, max, distribution) {\r\n\tif (distribution === 'linear' || !timestamps.length) {\r\n\t\treturn [\r\n\t\t\t{time: min, pos: 0},\r\n\t\t\t{time: max, pos: 1}\r\n\t\t];\r\n\t}\r\n\r\n\tvar table = [];\r\n\tvar items = [min];\r\n\tvar i, ilen, prev, curr, next;\r\n\r\n\tfor (i = 0, ilen = timestamps.length; i < ilen; ++i) {\r\n\t\tcurr = timestamps[i];\r\n\t\tif (curr > min && curr < max) {\r\n\t\t\titems.push(curr);\r\n\t\t}\r\n\t}\r\n\r\n\titems.push(max);\r\n\r\n\tfor (i = 0, ilen = items.length; i < ilen; ++i) {\r\n\t\tnext = items[i + 1];\r\n\t\tprev = items[i - 1];\r\n\t\tcurr = items[i];\r\n\r\n\t\t// only add points that breaks the scale linearity\r\n\t\tif (prev === undefined || next === undefined || Math.round((next + prev) / 2) !== curr) {\r\n\t\t\ttable.push({time: curr, pos: i / (ilen - 1)});\r\n\t\t}\r\n\t}\r\n\r\n\treturn table;\r\n}\r\n\r\n// @see adapted from https://www.anujgakhar.com/2014/03/01/binary-search-in-javascript/\r\nfunction lookup(table, key, value) {\r\n\tvar lo = 0;\r\n\tvar hi = table.length - 1;\r\n\tvar mid, i0, i1;\r\n\r\n\twhile (lo >= 0 && lo <= hi) {\r\n\t\tmid = (lo + hi) >> 1;\r\n\t\ti0 = table[mid - 1] || null;\r\n\t\ti1 = table[mid];\r\n\r\n\t\tif (!i0) {\r\n\t\t\t// given value is outside table (before first item)\r\n\t\t\treturn {lo: null, hi: i1};\r\n\t\t} else if (i1[key] < value) {\r\n\t\t\tlo = mid + 1;\r\n\t\t} else if (i0[key] > value) {\r\n\t\t\thi = mid - 1;\r\n\t\t} else {\r\n\t\t\treturn {lo: i0, hi: i1};\r\n\t\t}\r\n\t}\r\n\r\n\t// given value is outside table (after last item)\r\n\treturn {lo: i1, hi: null};\r\n}\r\n\r\n/**\r\n * Linearly interpolates the given source `value` using the table items `skey` values and\r\n * returns the associated `tkey` value. For example, interpolate(table, 'time', 42, 'pos')\r\n * returns the position for a timestamp equal to 42. If value is out of bounds, values at\r\n * index [0, 1] or [n - 1, n] are used for the interpolation.\r\n */\r\nfunction interpolate$1(table, skey, sval, tkey) {\r\n\tvar range = lookup(table, skey, sval);\r\n\r\n\t// Note: the lookup table ALWAYS contains at least 2 items (min and max)\r\n\tvar prev = !range.lo ? table[0] : !range.hi ? table[table.length - 2] : range.lo;\r\n\tvar next = !range.lo ? table[1] : !range.hi ? table[table.length - 1] : range.hi;\r\n\r\n\tvar span = next[skey] - prev[skey];\r\n\tvar ratio = span ? (sval - prev[skey]) / span : 0;\r\n\tvar offset = (next[tkey] - prev[tkey]) * ratio;\r\n\r\n\treturn prev[tkey] + offset;\r\n}\r\n\r\nfunction toTimestamp(scale, input) {\r\n\tvar adapter = scale._adapter;\r\n\tvar options = scale.options.time;\r\n\tvar parser = options.parser;\r\n\tvar format = parser || options.format;\r\n\tvar value = input;\r\n\r\n\tif (typeof parser === 'function') {\r\n\t\tvalue = parser(value);\r\n\t}\r\n\r\n\t// Only parse if its not a timestamp already\r\n\tif (!helpers$1.isFinite(value)) {\r\n\t\tvalue = typeof format === 'string'\r\n\t\t\t? adapter.parse(value, format)\r\n\t\t\t: adapter.parse(value);\r\n\t}\r\n\r\n\tif (value !== null) {\r\n\t\treturn +value;\r\n\t}\r\n\r\n\t// Labels are in an incompatible format and no `parser` has been provided.\r\n\t// The user might still use the deprecated `format` option for parsing.\r\n\tif (!parser && typeof format === 'function') {\r\n\t\tvalue = format(input);\r\n\r\n\t\t// `format` could return something else than a timestamp, if so, parse it\r\n\t\tif (!helpers$1.isFinite(value)) {\r\n\t\t\tvalue = adapter.parse(value);\r\n\t\t}\r\n\t}\r\n\r\n\treturn value;\r\n}\r\n\r\nfunction parse(scale, input) {\r\n\tif (helpers$1.isNullOrUndef(input)) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tvar options = scale.options.time;\r\n\tvar value = toTimestamp(scale, scale.getRightValue(input));\r\n\tif (value === null) {\r\n\t\treturn value;\r\n\t}\r\n\r\n\tif (options.round) {\r\n\t\tvalue = +scale._adapter.startOf(value, options.round);\r\n\t}\r\n\r\n\treturn value;\r\n}\r\n\r\n/**\r\n * Figures out what unit results in an appropriate number of auto-generated ticks\r\n */\r\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\r\n\tvar ilen = UNITS.length;\r\n\tvar i, interval, factor;\r\n\r\n\tfor (i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\r\n\t\tinterval = INTERVALS[UNITS[i]];\r\n\t\tfactor = interval.steps ? interval.steps : MAX_INTEGER;\r\n\r\n\t\tif (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\r\n\t\t\treturn UNITS[i];\r\n\t\t}\r\n\t}\r\n\r\n\treturn UNITS[ilen - 1];\r\n}\r\n\r\n/**\r\n * Figures out what unit to format a set of ticks with\r\n */\r\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\r\n\tvar i, unit;\r\n\r\n\tfor (i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\r\n\t\tunit = UNITS[i];\r\n\t\tif (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\r\n\t\t\treturn unit;\r\n\t\t}\r\n\t}\r\n\r\n\treturn UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\r\n}\r\n\r\nfunction determineMajorUnit(unit) {\r\n\tfor (var i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\r\n\t\tif (INTERVALS[UNITS[i]].common) {\r\n\t\t\treturn UNITS[i];\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Generates a maximum of `capacity` timestamps between min and max, rounded to the\r\n * `minor` unit using the given scale time `options`.\r\n * Important: this method can return ticks outside the min and max range, it's the\r\n * responsibility of the calling code to clamp values if needed.\r\n */\r\nfunction generate(scale, min, max, capacity) {\r\n\tvar adapter = scale._adapter;\r\n\tvar options = scale.options;\r\n\tvar timeOpts = options.time;\r\n\tvar minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, capacity);\r\n\tvar stepSize = resolve$5([timeOpts.stepSize, timeOpts.unitStepSize, 1]);\r\n\tvar weekday = minor === 'week' ? timeOpts.isoWeekday : false;\r\n\tvar first = min;\r\n\tvar ticks = [];\r\n\tvar time;\r\n\r\n\t// For 'week' unit, handle the first day of week option\r\n\tif (weekday) {\r\n\t\tfirst = +adapter.startOf(first, 'isoWeek', weekday);\r\n\t}\r\n\r\n\t// Align first ticks on unit\r\n\tfirst = +adapter.startOf(first, weekday ? 'day' : minor);\r\n\r\n\t// Prevent browser from freezing in case user options request millions of milliseconds\r\n\tif (adapter.diff(max, min, minor) > 100000 * stepSize) {\r\n\t\tthrow min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor;\r\n\t}\r\n\r\n\tfor (time = first; time < max; time = +adapter.add(time, stepSize, minor)) {\r\n\t\tticks.push(time);\r\n\t}\r\n\r\n\tif (time === max || options.bounds === 'ticks') {\r\n\t\tticks.push(time);\r\n\t}\r\n\r\n\treturn ticks;\r\n}\r\n\r\n/**\r\n * Returns the start and end offsets from edges in the form of {start, end}\r\n * where each value is a relative width to the scale and ranges between 0 and 1.\r\n * They add extra margins on the both sides by scaling down the original scale.\r\n * Offsets are added when the `offset` option is true.\r\n */\r\nfunction computeOffsets(table, ticks, min, max, options) {\r\n\tvar start = 0;\r\n\tvar end = 0;\r\n\tvar first, last;\r\n\r\n\tif (options.offset && ticks.length) {\r\n\t\tfirst = interpolate$1(table, 'time', ticks[0], 'pos');\r\n\t\tif (ticks.length === 1) {\r\n\t\t\tstart = 1 - first;\r\n\t\t} else {\r\n\t\t\tstart = (interpolate$1(table, 'time', ticks[1], 'pos') - first) / 2;\r\n\t\t}\r\n\t\tlast = interpolate$1(table, 'time', ticks[ticks.length - 1], 'pos');\r\n\t\tif (ticks.length === 1) {\r\n\t\t\tend = last;\r\n\t\t} else {\r\n\t\t\tend = (last - interpolate$1(table, 'time', ticks[ticks.length - 2], 'pos')) / 2;\r\n\t\t}\r\n\t}\r\n\r\n\treturn {start: start, end: end, factor: 1 / (start + 1 + end)};\r\n}\r\n\r\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\r\n\tvar adapter = scale._adapter;\r\n\tvar first = +adapter.startOf(ticks[0].value, majorUnit);\r\n\tvar last = ticks[ticks.length - 1].value;\r\n\tvar major, index;\r\n\r\n\tfor (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\r\n\t\tindex = map[major];\r\n\t\tif (index >= 0) {\r\n\t\t\tticks[index].major = true;\r\n\t\t}\r\n\t}\r\n\treturn ticks;\r\n}\r\n\r\nfunction ticksFromTimestamps(scale, values, majorUnit) {\r\n\tvar ticks = [];\r\n\tvar map = {};\r\n\tvar ilen = values.length;\r\n\tvar i, value;\r\n\r\n\tfor (i = 0; i < ilen; ++i) {\r\n\t\tvalue = values[i];\r\n\t\tmap[value] = i;\r\n\r\n\t\tticks.push({\r\n\t\t\tvalue: value,\r\n\t\t\tmajor: false\r\n\t\t});\r\n\t}\r\n\r\n\t// We set the major ticks separately from the above loop because calling startOf for every tick\r\n\t// is expensive when there is a large number of ticks\r\n\treturn (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\r\n}\r\n\r\nvar defaultConfig$4 = {\r\n\tposition: 'bottom',\r\n\r\n\t/**\r\n\t * Data distribution along the scale:\r\n\t * - 'linear': data are spread according to their time (distances can vary),\r\n\t * - 'series': data are spread at the same distance from each other.\r\n\t * @see https://github.com/chartjs/Chart.js/pull/4507\r\n\t * @since 2.7.0\r\n\t */\r\n\tdistribution: 'linear',\r\n\r\n\t/**\r\n\t * Scale boundary strategy (bypassed by min/max time options)\r\n\t * - `data`: make sure data are fully visible, ticks outside are removed\r\n\t * - `ticks`: make sure ticks are fully visible, data outside are truncated\r\n\t * @see https://github.com/chartjs/Chart.js/pull/4556\r\n\t * @since 2.7.0\r\n\t */\r\n\tbounds: 'data',\r\n\r\n\tadapters: {},\r\n\ttime: {\r\n\t\tparser: false, // false == a pattern string from https://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment\r\n\t\tunit: false, // false == automatic or override with week, month, year, etc.\r\n\t\tround: false, // none, or override with week, month, year, etc.\r\n\t\tdisplayFormat: false, // DEPRECATED\r\n\t\tisoWeekday: false, // override week start day - see https://momentjs.com/docs/#/get-set/iso-weekday/\r\n\t\tminUnit: 'millisecond',\r\n\t\tdisplayFormats: {}\r\n\t},\r\n\tticks: {\r\n\t\tautoSkip: false,\r\n\r\n\t\t/**\r\n\t\t * Ticks generation input values:\r\n\t\t * - 'auto': generates \"optimal\" ticks based on scale size and time options.\r\n\t\t * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\r\n\t\t * - 'labels': generates ticks from user given `data.labels` values ONLY.\r\n\t\t * @see https://github.com/chartjs/Chart.js/pull/4507\r\n\t\t * @since 2.7.0\r\n\t\t */\r\n\t\tsource: 'auto',\r\n\r\n\t\tmajor: {\r\n\t\t\tenabled: false\r\n\t\t}\r\n\t}\r\n};\r\n\r\nvar scale_time = core_scale.extend({\r\n\tinitialize: function() {\r\n\t\tthis.mergeTicksOptions();\r\n\t\tcore_scale.prototype.initialize.call(this);\r\n\t},\r\n\r\n\tupdate: function() {\r\n\t\tvar me = this;\r\n\t\tvar options = me.options;\r\n\t\tvar time = options.time || (options.time = {});\r\n\t\tvar adapter = me._adapter = new core_adapters._date(options.adapters.date);\r\n\r\n\t\t// DEPRECATIONS: output a message only one time per update\r\n\t\tdeprecated$1('time scale', time.format, 'time.format', 'time.parser');\r\n\t\tdeprecated$1('time scale', time.min, 'time.min', 'ticks.min');\r\n\t\tdeprecated$1('time scale', time.max, 'time.max', 'ticks.max');\r\n\r\n\t\t// Backward compatibility: before introducing adapter, `displayFormats` was\r\n\t\t// supposed to contain *all* unit/string pairs but this can't be resolved\r\n\t\t// when loading the scale (adapters are loaded afterward), so let's populate\r\n\t\t// missing formats on update\r\n\t\thelpers$1.mergeIf(time.displayFormats, adapter.formats());\r\n\r\n\t\treturn core_scale.prototype.update.apply(me, arguments);\r\n\t},\r\n\r\n\t/**\r\n\t * Allows data to be referenced via 't' attribute\r\n\t */\r\n\tgetRightValue: function(rawValue) {\r\n\t\tif (rawValue && rawValue.t !== undefined) {\r\n\t\t\trawValue = rawValue.t;\r\n\t\t}\r\n\t\treturn core_scale.prototype.getRightValue.call(this, rawValue);\r\n\t},\r\n\r\n\tdetermineDataLimits: function() {\r\n\t\tvar me = this;\r\n\t\tvar chart = me.chart;\r\n\t\tvar adapter = me._adapter;\r\n\t\tvar options = me.options;\r\n\t\tvar unit = options.time.unit || 'day';\r\n\t\tvar min = MAX_INTEGER;\r\n\t\tvar max = MIN_INTEGER;\r\n\t\tvar timestamps = [];\r\n\t\tvar datasets = [];\r\n\t\tvar labels = [];\r\n\t\tvar i, j, ilen, jlen, data, timestamp, labelsAdded;\r\n\t\tvar dataLabels = me._getLabels();\r\n\r\n\t\tfor (i = 0, ilen = dataLabels.length; i < ilen; ++i) {\r\n\t\t\tlabels.push(parse(me, dataLabels[i]));\r\n\t\t}\r\n\r\n\t\tfor (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\r\n\t\t\tif (chart.isDatasetVisible(i)) {\r\n\t\t\t\tdata = chart.data.datasets[i].data;\r\n\r\n\t\t\t\t// Let's consider that all data have the same format.\r\n\t\t\t\tif (helpers$1.isObject(data[0])) {\r\n\t\t\t\t\tdatasets[i] = [];\r\n\r\n\t\t\t\t\tfor (j = 0, jlen = data.length; j < jlen; ++j) {\r\n\t\t\t\t\t\ttimestamp = parse(me, data[j]);\r\n\t\t\t\t\t\ttimestamps.push(timestamp);\r\n\t\t\t\t\t\tdatasets[i][j] = timestamp;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdatasets[i] = labels.slice(0);\r\n\t\t\t\t\tif (!labelsAdded) {\r\n\t\t\t\t\t\ttimestamps = timestamps.concat(labels);\r\n\t\t\t\t\t\tlabelsAdded = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tdatasets[i] = [];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (labels.length) {\r\n\t\t\tmin = Math.min(min, labels[0]);\r\n\t\t\tmax = Math.max(max, labels[labels.length - 1]);\r\n\t\t}\r\n\r\n\t\tif (timestamps.length) {\r\n\t\t\ttimestamps = ilen > 1 ? arrayUnique(timestamps).sort(sorter) : timestamps.sort(sorter);\r\n\t\t\tmin = Math.min(min, timestamps[0]);\r\n\t\t\tmax = Math.max(max, timestamps[timestamps.length - 1]);\r\n\t\t}\r\n\r\n\t\tmin = parse(me, getMin(options)) || min;\r\n\t\tmax = parse(me, getMax(options)) || max;\r\n\r\n\t\t// In case there is no valid min/max, set limits based on unit time option\r\n\t\tmin = min === MAX_INTEGER ? +adapter.startOf(Date.now(), unit) : min;\r\n\t\tmax = max === MIN_INTEGER ? +adapter.endOf(Date.now(), unit) + 1 : max;\r\n\r\n\t\t// Make sure that max is strictly higher than min (required by the lookup table)\r\n\t\tme.min = Math.min(min, max);\r\n\t\tme.max = Math.max(min + 1, max);\r\n\r\n\t\t// PRIVATE\r\n\t\tme._table = [];\r\n\t\tme._timestamps = {\r\n\t\t\tdata: timestamps,\r\n\t\t\tdatasets: datasets,\r\n\t\t\tlabels: labels\r\n\t\t};\r\n\t},\r\n\r\n\tbuildTicks: function() {\r\n\t\tvar me = this;\r\n\t\tvar min = me.min;\r\n\t\tvar max = me.max;\r\n\t\tvar options = me.options;\r\n\t\tvar tickOpts = options.ticks;\r\n\t\tvar timeOpts = options.time;\r\n\t\tvar timestamps = me._timestamps;\r\n\t\tvar ticks = [];\r\n\t\tvar capacity = me.getLabelCapacity(min);\r\n\t\tvar source = tickOpts.source;\r\n\t\tvar distribution = options.distribution;\r\n\t\tvar i, ilen, timestamp;\r\n\r\n\t\tif (source === 'data' || (source === 'auto' && distribution === 'series')) {\r\n\t\t\ttimestamps = timestamps.data;\r\n\t\t} else if (source === 'labels') {\r\n\t\t\ttimestamps = timestamps.labels;\r\n\t\t} else {\r\n\t\t\ttimestamps = generate(me, min, max, capacity);\r\n\t\t}\r\n\r\n\t\tif (options.bounds === 'ticks' && timestamps.length) {\r\n\t\t\tmin = timestamps[0];\r\n\t\t\tmax = timestamps[timestamps.length - 1];\r\n\t\t}\r\n\r\n\t\t// Enforce limits with user min/max options\r\n\t\tmin = parse(me, getMin(options)) || min;\r\n\t\tmax = parse(me, getMax(options)) || max;\r\n\r\n\t\t// Remove ticks outside the min/max range\r\n\t\tfor (i = 0, ilen = timestamps.length; i < ilen; ++i) {\r\n\t\t\ttimestamp = timestamps[i];\r\n\t\t\tif (timestamp >= min && timestamp <= max) {\r\n\t\t\t\tticks.push(timestamp);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tme.min = min;\r\n\t\tme.max = max;\r\n\r\n\t\t// PRIVATE\r\n\t\t// determineUnitForFormatting relies on the number of ticks so we don't use it when\r\n\t\t// autoSkip is enabled because we don't yet know what the final number of ticks will be\r\n\t\tme._unit = timeOpts.unit || (tickOpts.autoSkip\r\n\t\t\t? determineUnitForAutoTicks(timeOpts.minUnit, me.min, me.max, capacity)\r\n\t\t\t: determineUnitForFormatting(me, ticks.length, timeOpts.minUnit, me.min, me.max));\r\n\t\tme._majorUnit = !tickOpts.major.enabled || me._unit === 'year' ? undefined\r\n\t\t\t: determineMajorUnit(me._unit);\r\n\t\tme._table = buildLookupTable(me._timestamps.data, min, max, distribution);\r\n\t\tme._offsets = computeOffsets(me._table, ticks, min, max, options);\r\n\r\n\t\tif (tickOpts.reverse) {\r\n\t\t\tticks.reverse();\r\n\t\t}\r\n\r\n\t\treturn ticksFromTimestamps(me, ticks, me._majorUnit);\r\n\t},\r\n\r\n\tgetLabelForIndex: function(index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar adapter = me._adapter;\r\n\t\tvar data = me.chart.data;\r\n\t\tvar timeOpts = me.options.time;\r\n\t\tvar label = data.labels && index < data.labels.length ? data.labels[index] : '';\r\n\t\tvar value = data.datasets[datasetIndex].data[index];\r\n\r\n\t\tif (helpers$1.isObject(value)) {\r\n\t\t\tlabel = me.getRightValue(value);\r\n\t\t}\r\n\t\tif (timeOpts.tooltipFormat) {\r\n\t\t\treturn adapter.format(toTimestamp(me, label), timeOpts.tooltipFormat);\r\n\t\t}\r\n\t\tif (typeof label === 'string') {\r\n\t\t\treturn label;\r\n\t\t}\r\n\t\treturn adapter.format(toTimestamp(me, label), timeOpts.displayFormats.datetime);\r\n\t},\r\n\r\n\t/**\r\n\t * Function to format an individual tick mark\r\n\t * @private\r\n\t */\r\n\ttickFormatFunction: function(time, index, ticks, format) {\r\n\t\tvar me = this;\r\n\t\tvar adapter = me._adapter;\r\n\t\tvar options = me.options;\r\n\t\tvar formats = options.time.displayFormats;\r\n\t\tvar minorFormat = formats[me._unit];\r\n\t\tvar majorUnit = me._majorUnit;\r\n\t\tvar majorFormat = formats[majorUnit];\r\n\t\tvar tick = ticks[index];\r\n\t\tvar tickOpts = options.ticks;\r\n\t\tvar major = majorUnit && majorFormat && tick && tick.major;\r\n\t\tvar label = adapter.format(time, format ? format : major ? majorFormat : minorFormat);\r\n\t\tvar nestedTickOpts = major ? tickOpts.major : tickOpts.minor;\r\n\t\tvar formatter = resolve$5([\r\n\t\t\tnestedTickOpts.callback,\r\n\t\t\tnestedTickOpts.userCallback,\r\n\t\t\ttickOpts.callback,\r\n\t\t\ttickOpts.userCallback\r\n\t\t]);\r\n\r\n\t\treturn formatter ? formatter(label, index, ticks) : label;\r\n\t},\r\n\r\n\tconvertTicksToLabels: function(ticks) {\r\n\t\tvar labels = [];\r\n\t\tvar i, ilen;\r\n\r\n\t\tfor (i = 0, ilen = ticks.length; i < ilen; ++i) {\r\n\t\t\tlabels.push(this.tickFormatFunction(ticks[i].value, i, ticks));\r\n\t\t}\r\n\r\n\t\treturn labels;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tgetPixelForOffset: function(time) {\r\n\t\tvar me = this;\r\n\t\tvar offsets = me._offsets;\r\n\t\tvar pos = interpolate$1(me._table, 'time', time, 'pos');\r\n\t\treturn me.getPixelForDecimal((offsets.start + pos) * offsets.factor);\r\n\t},\r\n\r\n\tgetPixelForValue: function(value, index, datasetIndex) {\r\n\t\tvar me = this;\r\n\t\tvar time = null;\r\n\r\n\t\tif (index !== undefined && datasetIndex !== undefined) {\r\n\t\t\ttime = me._timestamps.datasets[datasetIndex][index];\r\n\t\t}\r\n\r\n\t\tif (time === null) {\r\n\t\t\ttime = parse(me, value);\r\n\t\t}\r\n\r\n\t\tif (time !== null) {\r\n\t\t\treturn me.getPixelForOffset(time);\r\n\t\t}\r\n\t},\r\n\r\n\tgetPixelForTick: function(index) {\r\n\t\tvar ticks = this.getTicks();\r\n\t\treturn index >= 0 && index < ticks.length ?\r\n\t\t\tthis.getPixelForOffset(ticks[index].value) :\r\n\t\t\tnull;\r\n\t},\r\n\r\n\tgetValueForPixel: function(pixel) {\r\n\t\tvar me = this;\r\n\t\tvar offsets = me._offsets;\r\n\t\tvar pos = me.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\r\n\t\tvar time = interpolate$1(me._table, 'pos', pos, 'time');\r\n\r\n\t\t// DEPRECATION, we should return time directly\r\n\t\treturn me._adapter._create(time);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getLabelSize: function(label) {\r\n\t\tvar me = this;\r\n\t\tvar ticksOpts = me.options.ticks;\r\n\t\tvar tickLabelWidth = me.ctx.measureText(label).width;\r\n\t\tvar angle = helpers$1.toRadians(me.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\r\n\t\tvar cosRotation = Math.cos(angle);\r\n\t\tvar sinRotation = Math.sin(angle);\r\n\t\tvar tickFontSize = valueOrDefault$d(ticksOpts.fontSize, core_defaults.global.defaultFontSize);\r\n\r\n\t\treturn {\r\n\t\t\tw: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\r\n\t\t\th: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\r\n\t\t};\r\n\t},\r\n\r\n\t/**\r\n\t * Crude approximation of what the label width might be\r\n\t * @private\r\n\t */\r\n\tgetLabelWidth: function(label) {\r\n\t\treturn this._getLabelSize(label).w;\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\tgetLabelCapacity: function(exampleTime) {\r\n\t\tvar me = this;\r\n\t\tvar timeOpts = me.options.time;\r\n\t\tvar displayFormats = timeOpts.displayFormats;\r\n\r\n\t\t// pick the longest format (milliseconds) for guestimation\r\n\t\tvar format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\r\n\t\tvar exampleLabel = me.tickFormatFunction(exampleTime, 0, ticksFromTimestamps(me, [exampleTime], me._majorUnit), format);\r\n\t\tvar size = me._getLabelSize(exampleLabel);\r\n\t\tvar capacity = Math.floor(me.isHorizontal() ? me.width / size.w : me.height / size.h);\r\n\r\n\t\tif (me.options.offset) {\r\n\t\t\tcapacity--;\r\n\t\t}\r\n\r\n\t\treturn capacity > 0 ? capacity : 1;\r\n\t}\r\n});\r\n\r\n// INTERNAL: static default options, registered in src/index.js\r\nvar _defaults$4 = defaultConfig$4;\nscale_time._defaults = _defaults$4;\n\nvar scales = {\r\n\tcategory: scale_category,\r\n\tlinear: scale_linear,\r\n\tlogarithmic: scale_logarithmic,\r\n\tradialLinear: scale_radialLinear,\r\n\ttime: scale_time\r\n};\n\nvar FORMATS = {\r\n\tdatetime: 'MMM D, YYYY, h:mm:ss a',\r\n\tmillisecond: 'h:mm:ss.SSS a',\r\n\tsecond: 'h:mm:ss a',\r\n\tminute: 'h:mm a',\r\n\thour: 'hA',\r\n\tday: 'MMM D',\r\n\tweek: 'll',\r\n\tmonth: 'MMM YYYY',\r\n\tquarter: '[Q]Q - YYYY',\r\n\tyear: 'YYYY'\r\n};\r\n\r\ncore_adapters._date.override(typeof moment === 'function' ? {\r\n\t_id: 'moment', // DEBUG ONLY\r\n\r\n\tformats: function() {\r\n\t\treturn FORMATS;\r\n\t},\r\n\r\n\tparse: function(value, format) {\r\n\t\tif (typeof value === 'string' && typeof format === 'string') {\r\n\t\t\tvalue = moment(value, format);\r\n\t\t} else if (!(value instanceof moment)) {\r\n\t\t\tvalue = moment(value);\r\n\t\t}\r\n\t\treturn value.isValid() ? value.valueOf() : null;\r\n\t},\r\n\r\n\tformat: function(time, format) {\r\n\t\treturn moment(time).format(format);\r\n\t},\r\n\r\n\tadd: function(time, amount, unit) {\r\n\t\treturn moment(time).add(amount, unit).valueOf();\r\n\t},\r\n\r\n\tdiff: function(max, min, unit) {\r\n\t\treturn moment(max).diff(moment(min), unit);\r\n\t},\r\n\r\n\tstartOf: function(time, unit, weekday) {\r\n\t\ttime = moment(time);\r\n\t\tif (unit === 'isoWeek') {\r\n\t\t\treturn time.isoWeekday(weekday).valueOf();\r\n\t\t}\r\n\t\treturn time.startOf(unit).valueOf();\r\n\t},\r\n\r\n\tendOf: function(time, unit) {\r\n\t\treturn moment(time).endOf(unit).valueOf();\r\n\t},\r\n\r\n\t// DEPRECATIONS\r\n\r\n\t/**\r\n\t * Provided for backward compatibility with scale.getValueForPixel().\r\n\t * @deprecated since version 2.8.0\r\n\t * @todo remove at version 3\r\n\t * @private\r\n\t */\r\n\t_create: function(time) {\r\n\t\treturn moment(time);\r\n\t},\r\n} : {});\n\ncore_defaults._set('global', {\r\n\tplugins: {\r\n\t\tfiller: {\r\n\t\t\tpropagate: true\r\n\t\t}\r\n\t}\r\n});\r\n\r\nvar mappers = {\r\n\tdataset: function(source) {\r\n\t\tvar index = source.fill;\r\n\t\tvar chart = source.chart;\r\n\t\tvar meta = chart.getDatasetMeta(index);\r\n\t\tvar visible = meta && chart.isDatasetVisible(index);\r\n\t\tvar points = (visible && meta.dataset._children) || [];\r\n\t\tvar length = points.length || 0;\r\n\r\n\t\treturn !length ? null : function(point, i) {\r\n\t\t\treturn (i < length && points[i]._view) || null;\r\n\t\t};\r\n\t},\r\n\r\n\tboundary: function(source) {\r\n\t\tvar boundary = source.boundary;\r\n\t\tvar x = boundary ? boundary.x : null;\r\n\t\tvar y = boundary ? boundary.y : null;\r\n\r\n\t\tif (helpers$1.isArray(boundary)) {\r\n\t\t\treturn function(point, i) {\r\n\t\t\t\treturn boundary[i];\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn function(point) {\r\n\t\t\treturn {\r\n\t\t\t\tx: x === null ? point.x : x,\r\n\t\t\t\ty: y === null ? point.y : y,\r\n\t\t\t};\r\n\t\t};\r\n\t}\r\n};\r\n\r\n// @todo if (fill[0] === '#')\r\nfunction decodeFill(el, index, count) {\r\n\tvar model = el._model || {};\r\n\tvar fill = model.fill;\r\n\tvar target;\r\n\r\n\tif (fill === undefined) {\r\n\t\tfill = !!model.backgroundColor;\r\n\t}\r\n\r\n\tif (fill === false || fill === null) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif (fill === true) {\r\n\t\treturn 'origin';\r\n\t}\r\n\r\n\ttarget = parseFloat(fill, 10);\r\n\tif (isFinite(target) && Math.floor(target) === target) {\r\n\t\tif (fill[0] === '-' || fill[0] === '+') {\r\n\t\t\ttarget = index + target;\r\n\t\t}\r\n\r\n\t\tif (target === index || target < 0 || target >= count) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn target;\r\n\t}\r\n\r\n\tswitch (fill) {\r\n\t// compatibility\r\n\tcase 'bottom':\r\n\t\treturn 'start';\r\n\tcase 'top':\r\n\t\treturn 'end';\r\n\tcase 'zero':\r\n\t\treturn 'origin';\r\n\t// supported boundaries\r\n\tcase 'origin':\r\n\tcase 'start':\r\n\tcase 'end':\r\n\t\treturn fill;\r\n\t// invalid fill values\r\n\tdefault:\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\nfunction computeLinearBoundary(source) {\r\n\tvar model = source.el._model || {};\r\n\tvar scale = source.el._scale || {};\r\n\tvar fill = source.fill;\r\n\tvar target = null;\r\n\tvar horizontal;\r\n\r\n\tif (isFinite(fill)) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\t// Backward compatibility: until v3, we still need to support boundary values set on\r\n\t// the model (scaleTop, scaleBottom and scaleZero) because some external plugins and\r\n\t// controllers might still use it (e.g. the Smith chart).\r\n\r\n\tif (fill === 'start') {\r\n\t\ttarget = model.scaleBottom === undefined ? scale.bottom : model.scaleBottom;\r\n\t} else if (fill === 'end') {\r\n\t\ttarget = model.scaleTop === undefined ? scale.top : model.scaleTop;\r\n\t} else if (model.scaleZero !== undefined) {\r\n\t\ttarget = model.scaleZero;\r\n\t} else if (scale.getBasePixel) {\r\n\t\ttarget = scale.getBasePixel();\r\n\t}\r\n\r\n\tif (target !== undefined && target !== null) {\r\n\t\tif (target.x !== undefined && target.y !== undefined) {\r\n\t\t\treturn target;\r\n\t\t}\r\n\r\n\t\tif (helpers$1.isFinite(target)) {\r\n\t\t\thorizontal = scale.isHorizontal();\r\n\t\t\treturn {\r\n\t\t\t\tx: horizontal ? target : null,\r\n\t\t\t\ty: horizontal ? null : target\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n\r\nfunction computeCircularBoundary(source) {\r\n\tvar scale = source.el._scale;\r\n\tvar options = scale.options;\r\n\tvar length = scale.chart.data.labels.length;\r\n\tvar fill = source.fill;\r\n\tvar target = [];\r\n\tvar start, end, center, i, point;\r\n\r\n\tif (!length) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tstart = options.ticks.reverse ? scale.max : scale.min;\r\n\tend = options.ticks.reverse ? scale.min : scale.max;\r\n\tcenter = scale.getPointPositionForValue(0, start);\r\n\tfor (i = 0; i < length; ++i) {\r\n\t\tpoint = fill === 'start' || fill === 'end'\r\n\t\t\t? scale.getPointPositionForValue(i, fill === 'start' ? start : end)\r\n\t\t\t: scale.getBasePosition(i);\r\n\t\tif (options.gridLines.circular) {\r\n\t\t\tpoint.cx = center.x;\r\n\t\t\tpoint.cy = center.y;\r\n\t\t\tpoint.angle = scale.getIndexAngle(i) - Math.PI / 2;\r\n\t\t}\r\n\t\ttarget.push(point);\r\n\t}\r\n\treturn target;\r\n}\r\n\r\nfunction computeBoundary(source) {\r\n\tvar scale = source.el._scale || {};\r\n\r\n\tif (scale.getPointPositionForValue) {\r\n\t\treturn computeCircularBoundary(source);\r\n\t}\r\n\treturn computeLinearBoundary(source);\r\n}\r\n\r\nfunction resolveTarget(sources, index, propagate) {\r\n\tvar source = sources[index];\r\n\tvar fill = source.fill;\r\n\tvar visited = [index];\r\n\tvar target;\r\n\r\n\tif (!propagate) {\r\n\t\treturn fill;\r\n\t}\r\n\r\n\twhile (fill !== false && visited.indexOf(fill) === -1) {\r\n\t\tif (!isFinite(fill)) {\r\n\t\t\treturn fill;\r\n\t\t}\r\n\r\n\t\ttarget = sources[fill];\r\n\t\tif (!target) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (target.visible) {\r\n\t\t\treturn fill;\r\n\t\t}\r\n\r\n\t\tvisited.push(fill);\r\n\t\tfill = target.fill;\r\n\t}\r\n\r\n\treturn false;\r\n}\r\n\r\nfunction createMapper(source) {\r\n\tvar fill = source.fill;\r\n\tvar type = 'dataset';\r\n\r\n\tif (fill === false) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif (!isFinite(fill)) {\r\n\t\ttype = 'boundary';\r\n\t}\r\n\r\n\treturn mappers[type](source);\r\n}\r\n\r\nfunction isDrawable(point) {\r\n\treturn point && !point.skip;\r\n}\r\n\r\nfunction drawArea(ctx, curve0, curve1, len0, len1) {\r\n\tvar i, cx, cy, r;\r\n\r\n\tif (!len0 || !len1) {\r\n\t\treturn;\r\n\t}\r\n\r\n\t// building first area curve (normal)\r\n\tctx.moveTo(curve0[0].x, curve0[0].y);\r\n\tfor (i = 1; i < len0; ++i) {\r\n\t\thelpers$1.canvas.lineTo(ctx, curve0[i - 1], curve0[i]);\r\n\t}\r\n\r\n\tif (curve1[0].angle !== undefined) {\r\n\t\tcx = curve1[0].cx;\r\n\t\tcy = curve1[0].cy;\r\n\t\tr = Math.sqrt(Math.pow(curve1[0].x - cx, 2) + Math.pow(curve1[0].y - cy, 2));\r\n\t\tfor (i = len1 - 1; i > 0; --i) {\r\n\t\t\tctx.arc(cx, cy, r, curve1[i].angle, curve1[i - 1].angle, true);\r\n\t\t}\r\n\t\treturn;\r\n\t}\r\n\r\n\t// joining the two area curves\r\n\tctx.lineTo(curve1[len1 - 1].x, curve1[len1 - 1].y);\r\n\r\n\t// building opposite area curve (reverse)\r\n\tfor (i = len1 - 1; i > 0; --i) {\r\n\t\thelpers$1.canvas.lineTo(ctx, curve1[i], curve1[i - 1], true);\r\n\t}\r\n}\r\n\r\nfunction doFill(ctx, points, mapper, view, color, loop) {\r\n\tvar count = points.length;\r\n\tvar span = view.spanGaps;\r\n\tvar curve0 = [];\r\n\tvar curve1 = [];\r\n\tvar len0 = 0;\r\n\tvar len1 = 0;\r\n\tvar i, ilen, index, p0, p1, d0, d1, loopOffset;\r\n\r\n\tctx.beginPath();\r\n\r\n\tfor (i = 0, ilen = count; i < ilen; ++i) {\r\n\t\tindex = i % count;\r\n\t\tp0 = points[index]._view;\r\n\t\tp1 = mapper(p0, index, view);\r\n\t\td0 = isDrawable(p0);\r\n\t\td1 = isDrawable(p1);\r\n\r\n\t\tif (loop && loopOffset === undefined && d0) {\r\n\t\t\tloopOffset = i + 1;\r\n\t\t\tilen = count + loopOffset;\r\n\t\t}\r\n\r\n\t\tif (d0 && d1) {\r\n\t\t\tlen0 = curve0.push(p0);\r\n\t\t\tlen1 = curve1.push(p1);\r\n\t\t} else if (len0 && len1) {\r\n\t\t\tif (!span) {\r\n\t\t\t\tdrawArea(ctx, curve0, curve1, len0, len1);\r\n\t\t\t\tlen0 = len1 = 0;\r\n\t\t\t\tcurve0 = [];\r\n\t\t\t\tcurve1 = [];\r\n\t\t\t} else {\r\n\t\t\t\tif (d0) {\r\n\t\t\t\t\tcurve0.push(p0);\r\n\t\t\t\t}\r\n\t\t\t\tif (d1) {\r\n\t\t\t\t\tcurve1.push(p1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tdrawArea(ctx, curve0, curve1, len0, len1);\r\n\r\n\tctx.closePath();\r\n\tctx.fillStyle = color;\r\n\tctx.fill();\r\n}\r\n\r\nvar plugin_filler = {\r\n\tid: 'filler',\r\n\r\n\tafterDatasetsUpdate: function(chart, options) {\r\n\t\tvar count = (chart.data.datasets || []).length;\r\n\t\tvar propagate = options.propagate;\r\n\t\tvar sources = [];\r\n\t\tvar meta, i, el, source;\r\n\r\n\t\tfor (i = 0; i < count; ++i) {\r\n\t\t\tmeta = chart.getDatasetMeta(i);\r\n\t\t\tel = meta.dataset;\r\n\t\t\tsource = null;\r\n\r\n\t\t\tif (el && el._model && el instanceof elements.Line) {\r\n\t\t\t\tsource = {\r\n\t\t\t\t\tvisible: chart.isDatasetVisible(i),\r\n\t\t\t\t\tfill: decodeFill(el, i, count),\r\n\t\t\t\t\tchart: chart,\r\n\t\t\t\t\tel: el\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tmeta.$filler = source;\r\n\t\t\tsources.push(source);\r\n\t\t}\r\n\r\n\t\tfor (i = 0; i < count; ++i) {\r\n\t\t\tsource = sources[i];\r\n\t\t\tif (!source) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tsource.fill = resolveTarget(sources, i, propagate);\r\n\t\t\tsource.boundary = computeBoundary(source);\r\n\t\t\tsource.mapper = createMapper(source);\r\n\t\t}\r\n\t},\r\n\r\n\tbeforeDatasetsDraw: function(chart) {\r\n\t\tvar metasets = chart._getSortedVisibleDatasetMetas();\r\n\t\tvar ctx = chart.ctx;\r\n\t\tvar meta, i, el, view, points, mapper, color;\r\n\r\n\t\tfor (i = metasets.length - 1; i >= 0; --i) {\r\n\t\t\tmeta = metasets[i].$filler;\r\n\r\n\t\t\tif (!meta || !meta.visible) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tel = meta.el;\r\n\t\t\tview = el._view;\r\n\t\t\tpoints = el._children || [];\r\n\t\t\tmapper = meta.mapper;\r\n\t\t\tcolor = view.backgroundColor || core_defaults.global.defaultColor;\r\n\r\n\t\t\tif (mapper && color && points.length) {\r\n\t\t\t\thelpers$1.canvas.clipArea(ctx, chart.chartArea);\r\n\t\t\t\tdoFill(ctx, points, mapper, view, color, el._loop);\r\n\t\t\t\thelpers$1.canvas.unclipArea(ctx);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\n\nvar getRtlHelper$1 = helpers$1.rtl.getRtlAdapter;\r\nvar noop$1 = helpers$1.noop;\r\nvar valueOrDefault$e = helpers$1.valueOrDefault;\r\n\r\ncore_defaults._set('global', {\r\n\tlegend: {\r\n\t\tdisplay: true,\r\n\t\tposition: 'top',\r\n\t\talign: 'center',\r\n\t\tfullWidth: true,\r\n\t\treverse: false,\r\n\t\tweight: 1000,\r\n\r\n\t\t// a callback that will handle\r\n\t\tonClick: function(e, legendItem) {\r\n\t\t\tvar index = legendItem.datasetIndex;\r\n\t\t\tvar ci = this.chart;\r\n\t\t\tvar meta = ci.getDatasetMeta(index);\r\n\r\n\t\t\t// See controller.isDatasetVisible comment\r\n\t\t\tmeta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null;\r\n\r\n\t\t\t// We hid a dataset ... rerender the chart\r\n\t\t\tci.update();\r\n\t\t},\r\n\r\n\t\tonHover: null,\r\n\t\tonLeave: null,\r\n\r\n\t\tlabels: {\r\n\t\t\tboxWidth: 40,\r\n\t\t\tpadding: 10,\r\n\t\t\t// Generates labels shown in the legend\r\n\t\t\t// Valid properties to return:\r\n\t\t\t// text : text to display\r\n\t\t\t// fillStyle : fill of coloured box\r\n\t\t\t// strokeStyle: stroke of coloured box\r\n\t\t\t// hidden : if this legend item refers to a hidden item\r\n\t\t\t// lineCap : cap style for line\r\n\t\t\t// lineDash\r\n\t\t\t// lineDashOffset :\r\n\t\t\t// lineJoin :\r\n\t\t\t// lineWidth :\r\n\t\t\tgenerateLabels: function(chart) {\r\n\t\t\t\tvar datasets = chart.data.datasets;\r\n\t\t\t\tvar options = chart.options.legend || {};\r\n\t\t\t\tvar usePointStyle = options.labels && options.labels.usePointStyle;\r\n\r\n\t\t\t\treturn chart._getSortedDatasetMetas().map(function(meta) {\r\n\t\t\t\t\tvar style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\r\n\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\ttext: datasets[meta.index].label,\r\n\t\t\t\t\t\tfillStyle: style.backgroundColor,\r\n\t\t\t\t\t\thidden: !chart.isDatasetVisible(meta.index),\r\n\t\t\t\t\t\tlineCap: style.borderCapStyle,\r\n\t\t\t\t\t\tlineDash: style.borderDash,\r\n\t\t\t\t\t\tlineDashOffset: style.borderDashOffset,\r\n\t\t\t\t\t\tlineJoin: style.borderJoinStyle,\r\n\t\t\t\t\t\tlineWidth: style.borderWidth,\r\n\t\t\t\t\t\tstrokeStyle: style.borderColor,\r\n\t\t\t\t\t\tpointStyle: style.pointStyle,\r\n\t\t\t\t\t\trotation: style.rotation,\r\n\r\n\t\t\t\t\t\t// Below is extra data used for toggling the datasets\r\n\t\t\t\t\t\tdatasetIndex: meta.index\r\n\t\t\t\t\t};\r\n\t\t\t\t}, this);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tlegendCallback: function(chart) {\r\n\t\tvar list = document.createElement('ul');\r\n\t\tvar datasets = chart.data.datasets;\r\n\t\tvar i, ilen, listItem, listItemSpan;\r\n\r\n\t\tlist.setAttribute('class', chart.id + '-legend');\r\n\r\n\t\tfor (i = 0, ilen = datasets.length; i < ilen; i++) {\r\n\t\t\tlistItem = list.appendChild(document.createElement('li'));\r\n\t\t\tlistItemSpan = listItem.appendChild(document.createElement('span'));\r\n\t\t\tlistItemSpan.style.backgroundColor = datasets[i].backgroundColor;\r\n\t\t\tif (datasets[i].label) {\r\n\t\t\t\tlistItem.appendChild(document.createTextNode(datasets[i].label));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn list.outerHTML;\r\n\t}\r\n});\r\n\r\n/**\r\n * Helper function to get the box width based on the usePointStyle option\r\n * @param {object} labelopts - the label options on the legend\r\n * @param {number} fontSize - the label font size\r\n * @return {number} width of the color box area\r\n */\r\nfunction getBoxWidth(labelOpts, fontSize) {\r\n\treturn labelOpts.usePointStyle && labelOpts.boxWidth > fontSize ?\r\n\t\tfontSize :\r\n\t\tlabelOpts.boxWidth;\r\n}\r\n\r\n/**\r\n * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\r\n */\r\nvar Legend = core_element.extend({\r\n\r\n\tinitialize: function(config) {\r\n\t\tvar me = this;\r\n\t\thelpers$1.extend(me, config);\r\n\r\n\t\t// Contains hit boxes for each dataset (in dataset order)\r\n\t\tme.legendHitBoxes = [];\r\n\r\n\t\t/**\r\n \t\t * @private\r\n \t\t */\r\n\t\tme._hoveredItem = null;\r\n\r\n\t\t// Are we in doughnut mode which has a different data type\r\n\t\tme.doughnutMode = false;\r\n\t},\r\n\r\n\t// These methods are ordered by lifecycle. Utilities then follow.\r\n\t// Any function defined here is inherited by all legend types.\r\n\t// Any function can be extended by the legend type\r\n\r\n\tbeforeUpdate: noop$1,\r\n\tupdate: function(maxWidth, maxHeight, margins) {\r\n\t\tvar me = this;\r\n\r\n\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\r\n\t\tme.beforeUpdate();\r\n\r\n\t\t// Absorb the master measurements\r\n\t\tme.maxWidth = maxWidth;\r\n\t\tme.maxHeight = maxHeight;\r\n\t\tme.margins = margins;\r\n\r\n\t\t// Dimensions\r\n\t\tme.beforeSetDimensions();\r\n\t\tme.setDimensions();\r\n\t\tme.afterSetDimensions();\r\n\t\t// Labels\r\n\t\tme.beforeBuildLabels();\r\n\t\tme.buildLabels();\r\n\t\tme.afterBuildLabels();\r\n\r\n\t\t// Fit\r\n\t\tme.beforeFit();\r\n\t\tme.fit();\r\n\t\tme.afterFit();\r\n\t\t//\r\n\t\tme.afterUpdate();\r\n\r\n\t\treturn me.minSize;\r\n\t},\r\n\tafterUpdate: noop$1,\r\n\r\n\t//\r\n\r\n\tbeforeSetDimensions: noop$1,\r\n\tsetDimensions: function() {\r\n\t\tvar me = this;\r\n\t\t// Set the unconstrained dimension before label rotation\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.width = me.maxWidth;\r\n\t\t\tme.left = 0;\r\n\t\t\tme.right = me.width;\r\n\t\t} else {\r\n\t\t\tme.height = me.maxHeight;\r\n\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.top = 0;\r\n\t\t\tme.bottom = me.height;\r\n\t\t}\r\n\r\n\t\t// Reset padding\r\n\t\tme.paddingLeft = 0;\r\n\t\tme.paddingTop = 0;\r\n\t\tme.paddingRight = 0;\r\n\t\tme.paddingBottom = 0;\r\n\r\n\t\t// Reset minSize\r\n\t\tme.minSize = {\r\n\t\t\twidth: 0,\r\n\t\t\theight: 0\r\n\t\t};\r\n\t},\r\n\tafterSetDimensions: noop$1,\r\n\r\n\t//\r\n\r\n\tbeforeBuildLabels: noop$1,\r\n\tbuildLabels: function() {\r\n\t\tvar me = this;\r\n\t\tvar labelOpts = me.options.labels || {};\r\n\t\tvar legendItems = helpers$1.callback(labelOpts.generateLabels, [me.chart], me) || [];\r\n\r\n\t\tif (labelOpts.filter) {\r\n\t\t\tlegendItems = legendItems.filter(function(item) {\r\n\t\t\t\treturn labelOpts.filter(item, me.chart.data);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (me.options.reverse) {\r\n\t\t\tlegendItems.reverse();\r\n\t\t}\r\n\r\n\t\tme.legendItems = legendItems;\r\n\t},\r\n\tafterBuildLabels: noop$1,\r\n\r\n\t//\r\n\r\n\tbeforeFit: noop$1,\r\n\tfit: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar labelOpts = opts.labels;\r\n\t\tvar display = opts.display;\r\n\r\n\t\tvar ctx = me.ctx;\r\n\r\n\t\tvar labelFont = helpers$1.options._parseFont(labelOpts);\r\n\t\tvar fontSize = labelFont.size;\r\n\r\n\t\t// Reset hit boxes\r\n\t\tvar hitboxes = me.legendHitBoxes = [];\r\n\r\n\t\tvar minSize = me.minSize;\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\r\n\t\tif (isHorizontal) {\r\n\t\t\tminSize.width = me.maxWidth; // fill all the width\r\n\t\t\tminSize.height = display ? 10 : 0;\r\n\t\t} else {\r\n\t\t\tminSize.width = display ? 10 : 0;\r\n\t\t\tminSize.height = me.maxHeight; // fill all the height\r\n\t\t}\r\n\r\n\t\t// Increase sizes here\r\n\t\tif (!display) {\r\n\t\t\tme.width = minSize.width = me.height = minSize.height = 0;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tctx.font = labelFont.string;\r\n\r\n\t\tif (isHorizontal) {\r\n\t\t\t// Labels\r\n\r\n\t\t\t// Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\r\n\t\t\tvar lineWidths = me.lineWidths = [0];\r\n\t\t\tvar totalHeight = 0;\r\n\r\n\t\t\tctx.textAlign = 'left';\r\n\t\t\tctx.textBaseline = 'middle';\r\n\r\n\t\t\thelpers$1.each(me.legendItems, function(legendItem, i) {\r\n\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\r\n\t\t\t\tvar width = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\r\n\r\n\t\t\t\tif (i === 0 || lineWidths[lineWidths.length - 1] + width + 2 * labelOpts.padding > minSize.width) {\r\n\t\t\t\t\ttotalHeight += fontSize + labelOpts.padding;\r\n\t\t\t\t\tlineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\r\n\t\t\t\thitboxes[i] = {\r\n\t\t\t\t\tleft: 0,\r\n\t\t\t\t\ttop: 0,\r\n\t\t\t\t\twidth: width,\r\n\t\t\t\t\theight: fontSize\r\n\t\t\t\t};\r\n\r\n\t\t\t\tlineWidths[lineWidths.length - 1] += width + labelOpts.padding;\r\n\t\t\t});\r\n\r\n\t\t\tminSize.height += totalHeight;\r\n\r\n\t\t} else {\r\n\t\t\tvar vPadding = labelOpts.padding;\r\n\t\t\tvar columnWidths = me.columnWidths = [];\r\n\t\t\tvar columnHeights = me.columnHeights = [];\r\n\t\t\tvar totalWidth = labelOpts.padding;\r\n\t\t\tvar currentColWidth = 0;\r\n\t\t\tvar currentColHeight = 0;\r\n\r\n\t\t\thelpers$1.each(me.legendItems, function(legendItem, i) {\r\n\t\t\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\r\n\t\t\t\tvar itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\r\n\r\n\t\t\t\t// If too tall, go to new column\r\n\t\t\t\tif (i > 0 && currentColHeight + fontSize + 2 * vPadding > minSize.height) {\r\n\t\t\t\t\ttotalWidth += currentColWidth + labelOpts.padding;\r\n\t\t\t\t\tcolumnWidths.push(currentColWidth); // previous column width\r\n\t\t\t\t\tcolumnHeights.push(currentColHeight);\r\n\t\t\t\t\tcurrentColWidth = 0;\r\n\t\t\t\t\tcurrentColHeight = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Get max width\r\n\t\t\t\tcurrentColWidth = Math.max(currentColWidth, itemWidth);\r\n\t\t\t\tcurrentColHeight += fontSize + vPadding;\r\n\r\n\t\t\t\t// Store the hitbox width and height here. Final position will be updated in `draw`\r\n\t\t\t\thitboxes[i] = {\r\n\t\t\t\t\tleft: 0,\r\n\t\t\t\t\ttop: 0,\r\n\t\t\t\t\twidth: itemWidth,\r\n\t\t\t\t\theight: fontSize\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\ttotalWidth += currentColWidth;\r\n\t\t\tcolumnWidths.push(currentColWidth);\r\n\t\t\tcolumnHeights.push(currentColHeight);\r\n\t\t\tminSize.width += totalWidth;\r\n\t\t}\r\n\r\n\t\tme.width = minSize.width;\r\n\t\tme.height = minSize.height;\r\n\t},\r\n\tafterFit: noop$1,\r\n\r\n\t// Shared Methods\r\n\tisHorizontal: function() {\r\n\t\treturn this.options.position === 'top' || this.options.position === 'bottom';\r\n\t},\r\n\r\n\t// Actually draw the legend on the canvas\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar labelOpts = opts.labels;\r\n\t\tvar globalDefaults = core_defaults.global;\r\n\t\tvar defaultColor = globalDefaults.defaultColor;\r\n\t\tvar lineDefault = globalDefaults.elements.line;\r\n\t\tvar legendHeight = me.height;\r\n\t\tvar columnHeights = me.columnHeights;\r\n\t\tvar legendWidth = me.width;\r\n\t\tvar lineWidths = me.lineWidths;\r\n\r\n\t\tif (!opts.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar rtlHelper = getRtlHelper$1(opts.rtl, me.left, me.minSize.width);\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar fontColor = valueOrDefault$e(labelOpts.fontColor, globalDefaults.defaultFontColor);\r\n\t\tvar labelFont = helpers$1.options._parseFont(labelOpts);\r\n\t\tvar fontSize = labelFont.size;\r\n\t\tvar cursor;\r\n\r\n\t\t// Canvas setup\r\n\t\tctx.textAlign = rtlHelper.textAlign('left');\r\n\t\tctx.textBaseline = 'middle';\r\n\t\tctx.lineWidth = 0.5;\r\n\t\tctx.strokeStyle = fontColor; // for strikethrough effect\r\n\t\tctx.fillStyle = fontColor; // render in correct colour\r\n\t\tctx.font = labelFont.string;\r\n\r\n\t\tvar boxWidth = getBoxWidth(labelOpts, fontSize);\r\n\t\tvar hitboxes = me.legendHitBoxes;\r\n\r\n\t\t// current position\r\n\t\tvar drawLegendBox = function(x, y, legendItem) {\r\n\t\t\tif (isNaN(boxWidth) || boxWidth <= 0) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// Set the ctx for the box\r\n\t\t\tctx.save();\r\n\r\n\t\t\tvar lineWidth = valueOrDefault$e(legendItem.lineWidth, lineDefault.borderWidth);\r\n\t\t\tctx.fillStyle = valueOrDefault$e(legendItem.fillStyle, defaultColor);\r\n\t\t\tctx.lineCap = valueOrDefault$e(legendItem.lineCap, lineDefault.borderCapStyle);\r\n\t\t\tctx.lineDashOffset = valueOrDefault$e(legendItem.lineDashOffset, lineDefault.borderDashOffset);\r\n\t\t\tctx.lineJoin = valueOrDefault$e(legendItem.lineJoin, lineDefault.borderJoinStyle);\r\n\t\t\tctx.lineWidth = lineWidth;\r\n\t\t\tctx.strokeStyle = valueOrDefault$e(legendItem.strokeStyle, defaultColor);\r\n\r\n\t\t\tif (ctx.setLineDash) {\r\n\t\t\t\t// IE 9 and 10 do not support line dash\r\n\t\t\t\tctx.setLineDash(valueOrDefault$e(legendItem.lineDash, lineDefault.borderDash));\r\n\t\t\t}\r\n\r\n\t\t\tif (labelOpts && labelOpts.usePointStyle) {\r\n\t\t\t\t// Recalculate x and y for drawPoint() because its expecting\r\n\t\t\t\t// x and y to be center of figure (instead of top left)\r\n\t\t\t\tvar radius = boxWidth * Math.SQRT2 / 2;\r\n\t\t\t\tvar centerX = rtlHelper.xPlus(x, boxWidth / 2);\r\n\t\t\t\tvar centerY = y + fontSize / 2;\r\n\r\n\t\t\t\t// Draw pointStyle as legend symbol\r\n\t\t\t\thelpers$1.canvas.drawPoint(ctx, legendItem.pointStyle, radius, centerX, centerY, legendItem.rotation);\r\n\t\t\t} else {\r\n\t\t\t\t// Draw box as legend symbol\r\n\t\t\t\tctx.fillRect(rtlHelper.leftForLtr(x, boxWidth), y, boxWidth, fontSize);\r\n\t\t\t\tif (lineWidth !== 0) {\r\n\t\t\t\t\tctx.strokeRect(rtlHelper.leftForLtr(x, boxWidth), y, boxWidth, fontSize);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tctx.restore();\r\n\t\t};\r\n\r\n\t\tvar fillText = function(x, y, legendItem, textWidth) {\r\n\t\t\tvar halfFontSize = fontSize / 2;\r\n\t\t\tvar xLeft = rtlHelper.xPlus(x, boxWidth + halfFontSize);\r\n\t\t\tvar yMiddle = y + halfFontSize;\r\n\r\n\t\t\tctx.fillText(legendItem.text, xLeft, yMiddle);\r\n\r\n\t\t\tif (legendItem.hidden) {\r\n\t\t\t\t// Strikethrough the text if hidden\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\tctx.lineWidth = 2;\r\n\t\t\t\tctx.moveTo(xLeft, yMiddle);\r\n\t\t\t\tctx.lineTo(rtlHelper.xPlus(xLeft, textWidth), yMiddle);\r\n\t\t\t\tctx.stroke();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvar alignmentOffset = function(dimension, blockSize) {\r\n\t\t\tswitch (opts.align) {\r\n\t\t\tcase 'start':\r\n\t\t\t\treturn labelOpts.padding;\r\n\t\t\tcase 'end':\r\n\t\t\t\treturn dimension - blockSize;\r\n\t\t\tdefault: // center\r\n\t\t\t\treturn (dimension - blockSize + labelOpts.padding) / 2;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Horizontal\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tif (isHorizontal) {\r\n\t\t\tcursor = {\r\n\t\t\t\tx: me.left + alignmentOffset(legendWidth, lineWidths[0]),\r\n\t\t\t\ty: me.top + labelOpts.padding,\r\n\t\t\t\tline: 0\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\tcursor = {\r\n\t\t\t\tx: me.left + labelOpts.padding,\r\n\t\t\t\ty: me.top + alignmentOffset(legendHeight, columnHeights[0]),\r\n\t\t\t\tline: 0\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\thelpers$1.rtl.overrideTextDirection(me.ctx, opts.textDirection);\r\n\r\n\t\tvar itemHeight = fontSize + labelOpts.padding;\r\n\t\thelpers$1.each(me.legendItems, function(legendItem, i) {\r\n\t\t\tvar textWidth = ctx.measureText(legendItem.text).width;\r\n\t\t\tvar width = boxWidth + (fontSize / 2) + textWidth;\r\n\t\t\tvar x = cursor.x;\r\n\t\t\tvar y = cursor.y;\r\n\r\n\t\t\trtlHelper.setWidth(me.minSize.width);\r\n\r\n\t\t\t// Use (me.left + me.minSize.width) and (me.top + me.minSize.height)\r\n\t\t\t// instead of me.right and me.bottom because me.width and me.height\r\n\t\t\t// may have been changed since me.minSize was calculated\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\tif (i > 0 && x + width + labelOpts.padding > me.left + me.minSize.width) {\r\n\t\t\t\t\ty = cursor.y += itemHeight;\r\n\t\t\t\t\tcursor.line++;\r\n\t\t\t\t\tx = cursor.x = me.left + alignmentOffset(legendWidth, lineWidths[cursor.line]);\r\n\t\t\t\t}\r\n\t\t\t} else if (i > 0 && y + itemHeight > me.top + me.minSize.height) {\r\n\t\t\t\tx = cursor.x = x + me.columnWidths[cursor.line] + labelOpts.padding;\r\n\t\t\t\tcursor.line++;\r\n\t\t\t\ty = cursor.y = me.top + alignmentOffset(legendHeight, columnHeights[cursor.line]);\r\n\t\t\t}\r\n\r\n\t\t\tvar realX = rtlHelper.x(x);\r\n\r\n\t\t\tdrawLegendBox(realX, y, legendItem);\r\n\r\n\t\t\thitboxes[i].left = rtlHelper.leftForLtr(realX, hitboxes[i].width);\r\n\t\t\thitboxes[i].top = y;\r\n\r\n\t\t\t// Fill the actual label\r\n\t\t\tfillText(realX, y, legendItem, textWidth);\r\n\r\n\t\t\tif (isHorizontal) {\r\n\t\t\t\tcursor.x += width + labelOpts.padding;\r\n\t\t\t} else {\r\n\t\t\t\tcursor.y += itemHeight;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\thelpers$1.rtl.restoreTextDirection(me.ctx, opts.textDirection);\r\n\t},\r\n\r\n\t/**\r\n\t * @private\r\n\t */\r\n\t_getLegendItemAt: function(x, y) {\r\n\t\tvar me = this;\r\n\t\tvar i, hitBox, lh;\r\n\r\n\t\tif (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {\r\n\t\t\t// See if we are touching one of the dataset boxes\r\n\t\t\tlh = me.legendHitBoxes;\r\n\t\t\tfor (i = 0; i < lh.length; ++i) {\r\n\t\t\t\thitBox = lh[i];\r\n\r\n\t\t\t\tif (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {\r\n\t\t\t\t\t// Touching an element\r\n\t\t\t\t\treturn me.legendItems[i];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t},\r\n\r\n\t/**\r\n\t * Handle an event\r\n\t * @private\r\n\t * @param {IEvent} event - The event to handle\r\n\t */\r\n\thandleEvent: function(e) {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar type = e.type === 'mouseup' ? 'click' : e.type;\r\n\t\tvar hoveredItem;\r\n\r\n\t\tif (type === 'mousemove') {\r\n\t\t\tif (!opts.onHover && !opts.onLeave) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t} else if (type === 'click') {\r\n\t\t\tif (!opts.onClick) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Chart event already has relative position in it\r\n\t\thoveredItem = me._getLegendItemAt(e.x, e.y);\r\n\r\n\t\tif (type === 'click') {\r\n\t\t\tif (hoveredItem && opts.onClick) {\r\n\t\t\t\t// use e.native for backwards compatibility\r\n\t\t\t\topts.onClick.call(me, e.native, hoveredItem);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (opts.onLeave && hoveredItem !== me._hoveredItem) {\r\n\t\t\t\tif (me._hoveredItem) {\r\n\t\t\t\t\topts.onLeave.call(me, e.native, me._hoveredItem);\r\n\t\t\t\t}\r\n\t\t\t\tme._hoveredItem = hoveredItem;\r\n\t\t\t}\r\n\r\n\t\t\tif (opts.onHover && hoveredItem) {\r\n\t\t\t\t// use e.native for backwards compatibility\r\n\t\t\t\topts.onHover.call(me, e.native, hoveredItem);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nfunction createNewLegendAndAttach(chart, legendOpts) {\r\n\tvar legend = new Legend({\r\n\t\tctx: chart.ctx,\r\n\t\toptions: legendOpts,\r\n\t\tchart: chart\r\n\t});\r\n\r\n\tcore_layouts.configure(chart, legend, legendOpts);\r\n\tcore_layouts.addBox(chart, legend);\r\n\tchart.legend = legend;\r\n}\r\n\r\nvar plugin_legend = {\r\n\tid: 'legend',\r\n\r\n\t/**\r\n\t * Backward compatibility: since 2.1.5, the legend is registered as a plugin, making\r\n\t * Chart.Legend obsolete. To avoid a breaking change, we export the Legend as part of\r\n\t * the plugin, which one will be re-exposed in the chart.js file.\r\n\t * https://github.com/chartjs/Chart.js/pull/2640\r\n\t * @private\r\n\t */\r\n\t_element: Legend,\r\n\r\n\tbeforeInit: function(chart) {\r\n\t\tvar legendOpts = chart.options.legend;\r\n\r\n\t\tif (legendOpts) {\r\n\t\t\tcreateNewLegendAndAttach(chart, legendOpts);\r\n\t\t}\r\n\t},\r\n\r\n\tbeforeUpdate: function(chart) {\r\n\t\tvar legendOpts = chart.options.legend;\r\n\t\tvar legend = chart.legend;\r\n\r\n\t\tif (legendOpts) {\r\n\t\t\thelpers$1.mergeIf(legendOpts, core_defaults.global.legend);\r\n\r\n\t\t\tif (legend) {\r\n\t\t\t\tcore_layouts.configure(chart, legend, legendOpts);\r\n\t\t\t\tlegend.options = legendOpts;\r\n\t\t\t} else {\r\n\t\t\t\tcreateNewLegendAndAttach(chart, legendOpts);\r\n\t\t\t}\r\n\t\t} else if (legend) {\r\n\t\t\tcore_layouts.removeBox(chart, legend);\r\n\t\t\tdelete chart.legend;\r\n\t\t}\r\n\t},\r\n\r\n\tafterEvent: function(chart, e) {\r\n\t\tvar legend = chart.legend;\r\n\t\tif (legend) {\r\n\t\t\tlegend.handleEvent(e);\r\n\t\t}\r\n\t}\r\n};\n\nvar noop$2 = helpers$1.noop;\r\n\r\ncore_defaults._set('global', {\r\n\ttitle: {\r\n\t\tdisplay: false,\r\n\t\tfontStyle: 'bold',\r\n\t\tfullWidth: true,\r\n\t\tpadding: 10,\r\n\t\tposition: 'top',\r\n\t\ttext: '',\r\n\t\tweight: 2000         // by default greater than legend (1000) to be above\r\n\t}\r\n});\r\n\r\n/**\r\n * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\r\n */\r\nvar Title = core_element.extend({\r\n\tinitialize: function(config) {\r\n\t\tvar me = this;\r\n\t\thelpers$1.extend(me, config);\r\n\r\n\t\t// Contains hit boxes for each dataset (in dataset order)\r\n\t\tme.legendHitBoxes = [];\r\n\t},\r\n\r\n\t// These methods are ordered by lifecycle. Utilities then follow.\r\n\r\n\tbeforeUpdate: noop$2,\r\n\tupdate: function(maxWidth, maxHeight, margins) {\r\n\t\tvar me = this;\r\n\r\n\t\t// Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\r\n\t\tme.beforeUpdate();\r\n\r\n\t\t// Absorb the master measurements\r\n\t\tme.maxWidth = maxWidth;\r\n\t\tme.maxHeight = maxHeight;\r\n\t\tme.margins = margins;\r\n\r\n\t\t// Dimensions\r\n\t\tme.beforeSetDimensions();\r\n\t\tme.setDimensions();\r\n\t\tme.afterSetDimensions();\r\n\t\t// Labels\r\n\t\tme.beforeBuildLabels();\r\n\t\tme.buildLabels();\r\n\t\tme.afterBuildLabels();\r\n\r\n\t\t// Fit\r\n\t\tme.beforeFit();\r\n\t\tme.fit();\r\n\t\tme.afterFit();\r\n\t\t//\r\n\t\tme.afterUpdate();\r\n\r\n\t\treturn me.minSize;\r\n\r\n\t},\r\n\tafterUpdate: noop$2,\r\n\r\n\t//\r\n\r\n\tbeforeSetDimensions: noop$2,\r\n\tsetDimensions: function() {\r\n\t\tvar me = this;\r\n\t\t// Set the unconstrained dimension before label rotation\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.width = me.maxWidth;\r\n\t\t\tme.left = 0;\r\n\t\t\tme.right = me.width;\r\n\t\t} else {\r\n\t\t\tme.height = me.maxHeight;\r\n\r\n\t\t\t// Reset position before calculating rotation\r\n\t\t\tme.top = 0;\r\n\t\t\tme.bottom = me.height;\r\n\t\t}\r\n\r\n\t\t// Reset padding\r\n\t\tme.paddingLeft = 0;\r\n\t\tme.paddingTop = 0;\r\n\t\tme.paddingRight = 0;\r\n\t\tme.paddingBottom = 0;\r\n\r\n\t\t// Reset minSize\r\n\t\tme.minSize = {\r\n\t\t\twidth: 0,\r\n\t\t\theight: 0\r\n\t\t};\r\n\t},\r\n\tafterSetDimensions: noop$2,\r\n\r\n\t//\r\n\r\n\tbeforeBuildLabels: noop$2,\r\n\tbuildLabels: noop$2,\r\n\tafterBuildLabels: noop$2,\r\n\r\n\t//\r\n\r\n\tbeforeFit: noop$2,\r\n\tfit: function() {\r\n\t\tvar me = this;\r\n\t\tvar opts = me.options;\r\n\t\tvar minSize = me.minSize = {};\r\n\t\tvar isHorizontal = me.isHorizontal();\r\n\t\tvar lineCount, textSize;\r\n\r\n\t\tif (!opts.display) {\r\n\t\t\tme.width = minSize.width = me.height = minSize.height = 0;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlineCount = helpers$1.isArray(opts.text) ? opts.text.length : 1;\r\n\t\ttextSize = lineCount * helpers$1.options._parseFont(opts).lineHeight + opts.padding * 2;\r\n\r\n\t\tme.width = minSize.width = isHorizontal ? me.maxWidth : textSize;\r\n\t\tme.height = minSize.height = isHorizontal ? textSize : me.maxHeight;\r\n\t},\r\n\tafterFit: noop$2,\r\n\r\n\t// Shared Methods\r\n\tisHorizontal: function() {\r\n\t\tvar pos = this.options.position;\r\n\t\treturn pos === 'top' || pos === 'bottom';\r\n\t},\r\n\r\n\t// Actually draw the title block on the canvas\r\n\tdraw: function() {\r\n\t\tvar me = this;\r\n\t\tvar ctx = me.ctx;\r\n\t\tvar opts = me.options;\r\n\r\n\t\tif (!opts.display) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar fontOpts = helpers$1.options._parseFont(opts);\r\n\t\tvar lineHeight = fontOpts.lineHeight;\r\n\t\tvar offset = lineHeight / 2 + opts.padding;\r\n\t\tvar rotation = 0;\r\n\t\tvar top = me.top;\r\n\t\tvar left = me.left;\r\n\t\tvar bottom = me.bottom;\r\n\t\tvar right = me.right;\r\n\t\tvar maxWidth, titleX, titleY;\r\n\r\n\t\tctx.fillStyle = helpers$1.valueOrDefault(opts.fontColor, core_defaults.global.defaultFontColor); // render in correct colour\r\n\t\tctx.font = fontOpts.string;\r\n\r\n\t\t// Horizontal\r\n\t\tif (me.isHorizontal()) {\r\n\t\t\ttitleX = left + ((right - left) / 2); // midpoint of the width\r\n\t\t\ttitleY = top + offset;\r\n\t\t\tmaxWidth = right - left;\r\n\t\t} else {\r\n\t\t\ttitleX = opts.position === 'left' ? left + offset : right - offset;\r\n\t\t\ttitleY = top + ((bottom - top) / 2);\r\n\t\t\tmaxWidth = bottom - top;\r\n\t\t\trotation = Math.PI * (opts.position === 'left' ? -0.5 : 0.5);\r\n\t\t}\r\n\r\n\t\tctx.save();\r\n\t\tctx.translate(titleX, titleY);\r\n\t\tctx.rotate(rotation);\r\n\t\tctx.textAlign = 'center';\r\n\t\tctx.textBaseline = 'middle';\r\n\r\n\t\tvar text = opts.text;\r\n\t\tif (helpers$1.isArray(text)) {\r\n\t\t\tvar y = 0;\r\n\t\t\tfor (var i = 0; i < text.length; ++i) {\r\n\t\t\t\tctx.fillText(text[i], 0, y, maxWidth);\r\n\t\t\t\ty += lineHeight;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tctx.fillText(text, 0, 0, maxWidth);\r\n\t\t}\r\n\r\n\t\tctx.restore();\r\n\t}\r\n});\r\n\r\nfunction createNewTitleBlockAndAttach(chart, titleOpts) {\r\n\tvar title = new Title({\r\n\t\tctx: chart.ctx,\r\n\t\toptions: titleOpts,\r\n\t\tchart: chart\r\n\t});\r\n\r\n\tcore_layouts.configure(chart, title, titleOpts);\r\n\tcore_layouts.addBox(chart, title);\r\n\tchart.titleBlock = title;\r\n}\r\n\r\nvar plugin_title = {\r\n\tid: 'title',\r\n\r\n\t/**\r\n\t * Backward compatibility: since 2.1.5, the title is registered as a plugin, making\r\n\t * Chart.Title obsolete. To avoid a breaking change, we export the Title as part of\r\n\t * the plugin, which one will be re-exposed in the chart.js file.\r\n\t * https://github.com/chartjs/Chart.js/pull/2640\r\n\t * @private\r\n\t */\r\n\t_element: Title,\r\n\r\n\tbeforeInit: function(chart) {\r\n\t\tvar titleOpts = chart.options.title;\r\n\r\n\t\tif (titleOpts) {\r\n\t\t\tcreateNewTitleBlockAndAttach(chart, titleOpts);\r\n\t\t}\r\n\t},\r\n\r\n\tbeforeUpdate: function(chart) {\r\n\t\tvar titleOpts = chart.options.title;\r\n\t\tvar titleBlock = chart.titleBlock;\r\n\r\n\t\tif (titleOpts) {\r\n\t\t\thelpers$1.mergeIf(titleOpts, core_defaults.global.title);\r\n\r\n\t\t\tif (titleBlock) {\r\n\t\t\t\tcore_layouts.configure(chart, titleBlock, titleOpts);\r\n\t\t\t\ttitleBlock.options = titleOpts;\r\n\t\t\t} else {\r\n\t\t\t\tcreateNewTitleBlockAndAttach(chart, titleOpts);\r\n\t\t\t}\r\n\t\t} else if (titleBlock) {\r\n\t\t\tcore_layouts.removeBox(chart, titleBlock);\r\n\t\t\tdelete chart.titleBlock;\r\n\t\t}\r\n\t}\r\n};\n\nvar plugins = {};\r\nvar filler = plugin_filler;\r\nvar legend = plugin_legend;\r\nvar title = plugin_title;\nplugins.filler = filler;\nplugins.legend = legend;\nplugins.title = title;\n\n/**\r\n * @namespace Chart\r\n */\r\n\r\n\r\ncore_controller.helpers = helpers$1;\r\n\r\n// @todo dispatch these helpers into appropriated helpers/helpers.* file and write unit tests!\r\ncore_helpers();\r\n\r\ncore_controller._adapters = core_adapters;\r\ncore_controller.Animation = core_animation;\r\ncore_controller.animationService = core_animations;\r\ncore_controller.controllers = controllers;\r\ncore_controller.DatasetController = core_datasetController;\r\ncore_controller.defaults = core_defaults;\r\ncore_controller.Element = core_element;\r\ncore_controller.elements = elements;\r\ncore_controller.Interaction = core_interaction;\r\ncore_controller.layouts = core_layouts;\r\ncore_controller.platform = platform;\r\ncore_controller.plugins = core_plugins;\r\ncore_controller.Scale = core_scale;\r\ncore_controller.scaleService = core_scaleService;\r\ncore_controller.Ticks = core_ticks;\r\ncore_controller.Tooltip = core_tooltip;\r\n\r\n// Register built-in scales\r\n\r\ncore_controller.helpers.each(scales, function(scale, type) {\r\n\tcore_controller.scaleService.registerScaleType(type, scale, scale._defaults);\r\n});\r\n\r\n// Load to register built-in adapters (as side effects)\r\n\r\n\r\n// Loading built-in plugins\r\n\r\nfor (var k in plugins) {\r\n\tif (plugins.hasOwnProperty(k)) {\r\n\t\tcore_controller.plugins.register(plugins[k]);\r\n\t}\r\n}\r\n\r\ncore_controller.platform.initialize();\r\n\r\nvar src = core_controller;\r\nif (typeof window !== 'undefined') {\r\n\twindow.Chart = core_controller;\r\n}\r\n\r\n// DEPRECATIONS\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore\r\n * @namespace Chart.Chart\r\n * @deprecated since version 2.8.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.Chart = core_controller;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore\r\n * @namespace Chart.Legend\r\n * @deprecated since version 2.1.5\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.Legend = plugins.legend._element;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore\r\n * @namespace Chart.Title\r\n * @deprecated since version 2.1.5\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.Title = plugins.title._element;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.plugins instead\r\n * @namespace Chart.pluginService\r\n * @deprecated since version 2.1.5\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.pluginService = core_controller.plugins;\r\n\r\n/**\r\n * Provided for backward compatibility, inheriting from Chart.PlugingBase has no\r\n * effect, instead simply create/register plugins via plain JavaScript objects.\r\n * @interface Chart.PluginBase\r\n * @deprecated since version 2.5.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.PluginBase = core_controller.Element.extend({});\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.helpers.canvas instead.\r\n * @namespace Chart.canvasHelpers\r\n * @deprecated since version 2.6.0\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.canvasHelpers = core_controller.helpers.canvas;\r\n\r\n/**\r\n * Provided for backward compatibility, use Chart.layouts instead.\r\n * @namespace Chart.layoutService\r\n * @deprecated since version 2.7.3\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.layoutService = core_controller.layouts;\r\n\r\n/**\r\n * Provided for backward compatibility, not available anymore.\r\n * @namespace Chart.LinearScaleBase\r\n * @deprecated since version 2.8\r\n * @todo remove at version 3\r\n * @private\r\n */\r\ncore_controller.LinearScaleBase = scale_linearbase;\r\n\r\n/**\r\n * Provided for backward compatibility, instead we should create a new Chart\r\n * by setting the type in the config (`new Chart(id, {type: '{chart-type}'}`).\r\n * @deprecated since version 2.8.0\r\n * @todo remove at version 3\r\n */\r\ncore_controller.helpers.each(\r\n\t[\r\n\t\t'Bar',\r\n\t\t'Bubble',\r\n\t\t'Doughnut',\r\n\t\t'Line',\r\n\t\t'PolarArea',\r\n\t\t'Radar',\r\n\t\t'Scatter'\r\n\t],\r\n\tfunction(klass) {\r\n\t\tcore_controller[klass] = function(ctx, cfg) {\r\n\t\t\treturn new core_controller(ctx, core_controller.helpers.merge(cfg || {}, {\r\n\t\t\t\ttype: klass.charAt(0).toLowerCase() + klass.slice(1)\r\n\t\t\t}));\r\n\t\t};\r\n\t}\r\n);\n\nreturn src;\n\n})));\n",null],"names":["__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","document","querySelectorAll","forEach","el","url","dataset","pbFetchFill","pbFetchKey","fetch","then","json","textContent","value","m","addEventListener","e","modalId","closest","attributes","querySelector","removeAttribute","b","setAttribute","checkLabel","checkbox","parentElement","checked","toggle","sidebar","classList","contains","remove","style","zIndex","add","menu","preventDefault","isCEPolyfill","window","customElements","undefined","polyfillWrapFlushCallback","removeNodes","container","start","end","n","nextSibling","removeChild","marker","String","Math","random","slice","nodeMarker","markerRegex","RegExp","Template","[object Object]","result","element","this","nodesToRemove","stack","walker","createTreeWalker","content","lastPartIndex","index","partIndex","strings","values","node","nextNode","nodeType","hasAttributes","count","endsWith","name","stringForPart","lastAttributeNameRegex","exec","attributeLookupName","toLowerCase","attributeValue","getAttribute","statics","split","parts","push","type","tagName","currentNode","data","indexOf","parent","parentNode","lastIndex","insert","s","createMarker","match","createTextNode","insertBefore","previousSibling","pop","str","suffix","isTemplatePartActive","part","createComment","removeNodesFromTemplate","template","nextActiveIndexInTemplateParts","nodeIndex","removeCount","nodesToRemoveInTemplate","currentRemovingNode","has","countNodes","startIndex","directives","WeakMap","isDirective","o","noChange","nothing","TemplateInstance","processor","options","__parts","setValue","commit","fragment","cloneNode","importNode","nodeName","handleTextExpression","insertAfterNode","handleAttributeExpressions","adoptNode","upgrade","policy","trustedTypes","createPolicy","createHTML","commentMarker","TemplateResult","l","html","isCommentBinding","commentOpen","lastIndexOf","attributeMatch","substr","createElement","getHTML","innerHTML","isPrimitive","isIterable","Array","isArray","Symbol","iterator","AttributeCommitter","_createPart","AttributePart","v","text","t","dirty","_getValue","committer","directive","NodePart","startNode","appendChild","endNode","ref","__insert","__pendingValue","__commitText","__commitTemplateResult","Node","__commitNode","__commitIterable","clear","valueAsString","templateFactory","update","instance","_clone","itemParts","itemPart","item","appendIntoPart","insertAfterPart","BooleanAttributePart","Error","PropertyCommitter","super","single","PropertyPart","eventOptionsSupported","capture","removeEventListener","_e","EventPart","eventName","eventContext","__boundHandleEvent","handleEvent","newListener","oldListener","shouldRemoveListener","once","passive","shouldAddListener","__options","getOptions","event","call","templateCache","templateCaches","get","stringsArray","keyString","Map","set","join","getTemplateElement","defaultTemplateProcessor","prefix","getTemplateCacheKey","scopeName","compatibleShadyCSSVersion","ShadyCSS","prepareTemplateDom","console","warn","shadyTemplateFactory","cacheKey","TEMPLATE_TYPES","shadyRenderSet","Set","prepareTemplateStyles","renderedDOM","templateElement","styles","condensedStyle","templates","from","removeStylesFromLitTemplates","refNode","insertCount","walkerIndex","insertNodeIntoTemplate","firstChild","nativeShadow","removes","JSCompiler_renameProperty","prop","_obj","defaultConverter","Boolean","JSON","stringify","Number","parse","notEqual","old","defaultPropertyDeclaration","attribute","converter","reflect","hasChanged","UpdatingElement","HTMLElement","initialize","observedAttributes","finalize","_classProperties","p","attr","_attributeNameForProperty","_attributeToPropertyMap","hasOwnProperty","superProperties","getPrototypeOf","k","_ensureClassProperties","noAccessor","prototype","descriptor","getPropertyDescriptor","oldValue","requestUpdateInternal","configurable","enumerable","superCtor","props","properties","propKeys","getOwnPropertyNames","getOwnPropertySymbols","createProperty","fromAttribute","toAttribute","_updateState","_updatePromise","Promise","res","_enableUpdatingResolver","_changedProperties","_saveInstanceProperties","constructor","_v","_instanceProperties","enableUpdating","_attributeToProperty","ctor","attrValue","_propertyValueToAttribute","propName","getPropertyOptions","_propertyValueFromAttribute","shouldRequestUpdate","_valueHasChanged","_reflectingProperties","_hasRequestedUpdate","_enqueueUpdate","updateComplete","performUpdate","hasUpdated","_applyInstanceProperties","shouldUpdate","changedProperties","_markUpdated","firstUpdated","updated","_getUpdateComplete","size","_propertyToAttribute","customElement","classOrDescriptor","clazz","define","legacyCustomElement","kind","elements","standardCustomElement","standardProperty","placement","initializer","property","protoOrDescriptor","proto","legacyProperty","supportsAdoptingStyleSheets","Document","CSSStyleSheet","constructionToken","CSSResult","cssText","safeToken","styleSheet","_styleSheet","replaceSync","css","reduce","acc","idx","textFromCSSResult","renderNotImplemented","LitElement","userStyles","getStyles","addStyles","reduceRight","unshift","_styles","map","cssRules","rule","_getUniqueStyles","renderRoot","createRenderRoot","ShadowRoot","adoptStyles","attachShadow","mode","adoptedStyleSheets","_needsShimAdoptedStyleSheets","ScopingShim","prepareAdoptedCssText","localName","connectedCallback","styleElement","templateResult","render","hasRendered","needsScoping","host","firstScopeRender","renderContainer","createDocumentFragment","appendInto","litRender","delete","LEVEL_ICON_MAP","error","warning","success","info","updateMessages","fetchMessages","Messages","messages","message","messageElement","renderMessage","id","toString","level_tag","setTimeout","ActionButton","GlobalsStyle","ButtonStyle","SpinnerStyle","isRunning","requestUpdate","statusClass","replace","setLoading","csrftoken","cookieValue","cookie","cookies","trim","substring","decodeURIComponent","getCookie","request","Request","headers","X-CSRFToken","method","setDone","catch","callAction","SIDEBAR_ITEMS","path","condition","sb","user","is_superuser","children","Sidebar","u","activePath","location","hash","Infinity","PageStyle","NavStyle","renderItem","brandLogo","brandTitle","SidebarBrand","SidebarUser","fa","AvatarStyle","avatar","username","module","userAgent","navigator","platform","gecko","test","ie_upto10","ie_11up","edge","ie","ie_version","documentMode","webkit","qtwebkit","chrome","presto","safari","vendor","mac_geMountainLion","phantom","ios","android","mobile","mac","chromeOS","windows","presto_version","flipCtrlCmd","captureRightClick","classTest","cls","range","rmClass","current","className","after","removeChildren","childNodes","removeChildrenAndAdd","elt","tag","eltP","child","activeElt","activeElement","body","shadowRoot","addClass","joinClasses","a","as","createRange","setEnd","setStart","createTextRange","moveToElementText","collapse","moveEnd","moveStart","selectInput","select","bind","f","args","apply","copyObj","obj","overwrite","countColumn","string","tabSize","startValue","search","nextTab","selectionStart","selectionEnd","Delayed","time","handler","onTimeout","array","self","Date","ms","clearTimeout","scrollerGap","Pass","sel_dontScroll","scroll","sel_mouse","origin","sel_move","findColumn","goal","pos","col","skipped","min","spaceStrs","spaceStr","lst","arr","out","insertSorted","score","priority","splice","createObj","base","inst","create","nonASCIISingleCaseWordChar","isWordCharBasic","ch","toUpperCase","isWordChar","helper","source","isEmpty","extendingChars","isExtendingChar","charCodeAt","skipExtendingChars","dir","charAt","findFirst","pred","to","midF","mid","ceil","floor","iterateBidiSections","order","found","max","level","bidiOther","getBidiPartAt","sticky","cur","bidiOrdering","lowTypes","arabicTypes","charType","code","bidiRE","isNeutral","isStrong","countsAsLeft","countsAsNum","BidiSpan","direction","outerType","len","types","i$1","prev","i$2","type$1","i$3","prev$1","type$2","i$4","type$3","j","i$5","cur$1","type$4","i$6","end$1","before","replace$1","j$1","i$7","at","isRTL","j$2","nstart","reverse","getOrder","line","noHandlers","on","emitter","attachEvent","_handlers","concat","getHandlers","off","detachEvent","signal","handlers","signalDOMEvent","cm","override","defaultPrevented","e_defaultPrevented","codemirrorIgnore","signalCursorActivity","cursorActivity","curOp","cursorActivityHandlers","hasHandler","eventMixin","e_preventDefault","returnValue","e_stopPropagation","stopPropagation","cancelBubble","e_stop","e_target","srcElement","e_button","which","button","ctrlKey","zwspSupported","badBidiRects","dragAndDrop","div","zeroWidthElement","measure","offsetHeight","offsetWidth","hasBadBidiRects","txt","r0","getBoundingClientRect","r1","left","right","splitLinesAuto","nl","rt","hasSelection","getSelection","te","ownerDocument","selection","compareEndPoints","hasCopyEvent","oncopy","badZoomedRects","hasBadZoomedRects","normal","fromRange","abs","modes","mimeModes","defineMode","dependencies","defineMIME","mime","spec","resolveMode","getMode","mfactory","modeObj","modeExtensions","exts","helperType","modeProps","prop$1","extendMode","copyState","state","nstate","val","innerMode","startState","a1","a2","StringStream","lineOracle","lastColumnPos","lastColumnValue","lineStart","getLine","doc","first","chunk","lines","sz","chunkSize","getBetween","iter","getLines","updateLineHeight","height","diff","lineNo","no","lineAtHeight","h","outer","lh","isLine","lineNumberFor","lineNumberFormatter","firstLineNumber","Pos","cmp","equalCursorPos","copyPos","x","maxPos","minPos","clipLine","clipPos","last","clipToLen","linelen","clipPosArray","eol","sol","peek","next","eat","eatWhile","eatSpace","skipToEnd","skipTo","backUp","column","indentation","pattern","consume","caseInsensitive","cased","hideFirstChars","inner","lookAhead","oracle","baseToken","SavedContext","Context","maxLookAhead","baseTokens","baseTokenPos","highlightLine","context","forceToEnd","st","modeGen","lineClasses","runMode","loop","overlay","overlays","i_end","opaque","classes","bgClass","textClass","getLineStyles","updateFrontier","getContextBefore","resetState","maxHighlightLength","stateAfter","save","styleClasses","highlightFrontier","modeFrontier","precise","display","findStartLine","saved","fromSaved","processLine","viewFrom","viewTo","nextLine","startAt","stream","callBlankLine","readToken","blankLine","token","copy","Token","takeToken","asArray","tokens","extractLineClasses","output","lineClass","flattenSpans","curStart","curStyle","addModeClass","mName","minindent","minline","lim","indented","retreatFrontier","sawReadOnlySpans","sawCollapsedSpans","seeReadOnlySpans","seeCollapsedSpans","MarkedSpan","getMarkedSpanFor","spans","span","removeMarkedSpan","addMarkedSpan","markedSpans","attachLine","markedSpansBefore","startCh","isInsert","nw","inclusiveLeft","insertLeft","endsAfter","inclusiveRight","markedSpansAfter","endCh","startsBefore","stretchSpansOverChange","change","full","oldFirst","oldLast","sameLine","offset","span$1","clearEmptySpans","newMarkers","gapMarkers","gap","clearWhenEmpty","removeReadOnlyRanges","markers","mark","readOnly","mk","find","newParts","dfrom","dto","detachMarkedSpans","detachLine","attachMarkedSpans","extraLeft","extraRight","compareCollapsedMarkers","lenDiff","aPos","bPos","fromCmp","toCmp","collapsedSpanAtSide","sps","sp","collapsed","collapsedSpanAtStart","collapsedSpanAtEnd","collapsedSpanAround","conflictingCollapsedRange","visualLine","merged","visualLineEnd","visualLineContinued","visualLineNo","lineN","vis","visualLineEndNo","lastLine","lineIsHidden","widgetNode","lineIsHiddenInner","heightAtLine","lineObj","lineLength","found$1","findMaxLine","maxLine","maxLineLength","maxLineChanged","Line","estimateHeight","updateLine","estHeight","cleanUpLine","styleToClassCache","styleToClassCacheWithMode","interpretTokenStyle","cache","buildLineContent","lineView","builder","pre","trailingSpace","splitSpaces","getOption","rest","addToken","buildToken","buildTokenBadBidi","insertLineContent","externalMeasured","maps","caches","lastChild","defaultSpecialCharPlaceholder","title","startStyle","endStyle","displayText","special","specialChars","mustWrap","txt$1","tabWidth","specialCharPlaceholder","fullStyle","trailingBefore","spaceBefore","buildCollapsedSpan","ignoreWidget","widget","input","needsContentAttribute","setUneditable","allText","spanStyle","spanEndStyle","spanStartStyle","nextChange","foundBookmarks","endStyles","upto","tokenText","LineView","hidden","buildViewArray","nextPos","view","operationGroup","pushOperation","op","ops","ownsGroup","delayedCallbacks","fireCallbacksForOps","group","callbacks","cursorActivityCalled","finishOperation","endCb","orphanDelayedCallbacks","signalLater","list","fireOrphanDelayed","delayed","updateLineForChanges","dims","changes","updateLineText","updateLineGutter","updateLineClasses","updateLineWidgets","ensureLineWrapped","replaceChild","updateLineBackground","background","wrap","getLineContent","ext","built","wrapClass","gutter","gutterBackground","gutterClass","fixedGutter","fixedPos","gutterTotalWidth","gutterMarkers","lineNumbers","wrap$1","gutterWrap","lineNumber","gutterLeft","gutterSpecs","gutterWidth","alignable","isWidget","insertLineWidgets","buildLineElement","insertLineWidgetsFor","allowAbove","widgets","ws","handleMouseEvents","positionLineWidget","above","noHScroll","width","wrapperWidth","coverGutter","paddingLeft","position","marginLeft","widgetHeight","parentStyle","gutters","wrapper","clientWidth","eventInWidget","sizer","mover","paddingTop","lineSpace","offsetTop","paddingVert","paddingH","cachedPaddingH","getComputedStyle","currentStyle","parseInt","paddingRight","isNaN","scrollGap","nativeBarWidth","displayWidth","scroller","barWidth","displayHeight","clientHeight","barHeight","ensureLineHeights","rect","wrapping","lineWrapping","curWidth","heights","rects","getClientRects","bottom","top","mapFromLineView","updateExternalMeasurement","lineMeasure","measureChar","bias","measureCharPrepared","prepareMeasureForLine","findViewForLine","findViewIndex","getDimensions","forceUpdate","hasHeights","prepared","varHeight","measureCharInner","bogus","rtop","rbottom","measureText","nullRect","nodeAndOffsetInLineMap","mStart","mEnd","coverStart","coverEnd","getUsefulRect","place","maybeUpdateRectForZooming","rSpan","charWidth","rbot","bot","singleCursorHeightPerLine","screen","logicalXDPI","deviceXDPI","scaleX","scaleY","logicalYDPI","deviceYDPI","clearLineMeasurementCacheFor","clearLineMeasurementCache","externalMeasure","clearCaches","cachedCharWidth","cachedTextHeight","lineNumChars","pageScrollX","pageXOffset","documentElement","scrollLeft","pageScrollY","marginTop","pageYOffset","scrollTop","widgetTopHeight","intoCoordSystem","includeWidgets","yOff","viewOffset","lOff","xOff","fromCoordSystem","coords","localBox","lineSpaceBox","charCoords","cursorCoords","preparedMeasure","getBidi","partPos","invert","other","estimateCoords","PosWithInfo","outside","xRel","coordsChar","y","coordsCharInner","rangeEnd","wrappedLineExtent","begin","wrappedLineExtentChar","boxIsAfter","box","ltr","coordsBidiPartWrapped","coordsBidiPart","baseX","chAround","boxAround","atLeft","atStart","_lineNo","closestDist","endX","dist","textHeight","anchor","clientLeft","offsetLeft","compensateForHScroll","th","perLine","widgetsHeight","estimateLineHeights","est","posFromMouse","liberal","forRect","space","clientX","clientY","e$1","colDiff","round","regChange","lendiff","updateLineNumbers","viewChanged","resetView","cut","viewCuttingPoint","cut$1","cutTop","cutBot","regLineChange","oldN","newN","adjustView","countDirtyView","updateSelection","showSelection","prepareSelection","primary","curFragment","cursors","selFragment","sel","ranges","primIndex","empty","showCursorWhenSelecting","drawSelectionCursor","head","drawSelectionRange","cursor","cursorHeight","otherCursor","cmpCoords","padding","leftSide","rightSide","sizerWidth","docLTR","drawForLine","fromArg","toArg","lineLen","wrapX","side","extent","fromPos","toPos","openStart","openEnd","openRight","topLeft","topRight","botLeft","botRight","sFrom","sTo","fromLine","toLine","singleVLine","leftEnd","rightStart","restartBlink","focused","clearInterval","blinker","cursorDiv","visibility","cursorBlinkRate","setInterval","hasFocus","onBlur","ensureFocus","focus","onFocus","delayBlurEvent","delayingBlurEvent","draggingText","selForContextMenu","reset","receivedFocus","shift","updateHeightsInViewport","prevBottom","lineDiv","updateWidgetHeight","chWidth","w","visibleLines","viewport","ensure","ensureFrom","ensureTo","maybeScrollWindow","doScroll","innerHeight","scrollNode","scrollIntoView","scrollPosIntoView","margin","limit","changed","endCoords","scrollPos","calculateScrollPos","startTop","startLeft","updateScrollTop","setScrollLeft","snapMargin","screentop","docBottom","atTop","atBottom","newTop","gutterSpace","screenleft","screenw","tooWide","addToScrollTop","resolveScrollToPos","ensureCursorVisible","getCursor","scrollToPos","cursorScrollMargin","scrollToCoords","scrollToRange","scrollToCoordsRange","sPos","updateDisplaySimple","setScrollTop","startWorker","forceScroll","scrollHeight","scrollbars","isScroller","scrollWidth","alignHorizontally","measureForScrollbars","gutterW","docH","viewHeight","viewWidth","barLeft","docHeight","NativeScrollbars","vert","horiz","tabIndex","checkedZeroWidth","minHeight","minWidth","needsH","needsV","sWidth","totalHeight","totalWidth","zeroWidthHack","disableHoriz","enableZeroWidthBar","disableVert","pointerEvents","bar","delay","maybeDisable","elementFromPoint","NullScrollbars","updateScrollbars","startWidth","startHeight","updateScrollbarsInner","sizes","paddingBottom","heightForcer","borderBottom","scrollbarFiller","coverGutterNextToScrollbar","gutterFiller","scrollbarModel","native","null","initScrollbars","scrollbarStyle","axis","nextOpId","startOperation","updateInput","typing","changeObjs","selectionChanged","updateMaxLine","endOperation","endOperations","endOperation_R1","endOperation_W1","endOperation_R2","endOperation_W2","endOperation_finish","maybeClipScrollbars","mustUpdate","DisplayUpdate","updatedDisplay","updateDisplayIfNeeded","barMeasure","adjustWidthTo","maxScrollLeft","preparedSelection","takeFocus","setDocumentHeight","postUpdateDisplay","wheelStartX","wheelStartY","maybeHiddenMarkers","unhidden","maybeUnhiddenMarkers","finish","runInOp","operation","methodOp","docMethodOp","highlight","highlightWorker","workTime","changedLines","oldStyles","highlighted","oldCls","newCls","ischange","workDelay","force","visible","editorIsHidden","wrapperHeight","oldDisplayWidth","events","scrollbarsClipped","marginBottom","borderRightWidth","selectionSnapshot","active","anchorNode","extend","anchorOffset","focusNode","focusOffset","restoreSelection","snapshot","removeAllRanges","addRange","renderedView","maybeUpdateLineNumberWidth","viewportMargin","different","lastWrapHeight","lastWrapWidth","toUpdate","selSnapshot","patchDisplay","selectionDiv","reportedViewFrom","reportedViewTo","updateNumbersFrom","rm","currentWheelTarget","updateNumber","updateGutterSpace","alignWidgets","comp","align","innerW","lineGutter","lineNumInnerWidth","lineNumWidth","getGutters","sawLineNumbers","renderGutters","specs","gElt","updateGutters","Display","draggable","wheelDX","wheelDY","activeTouch","init","wheelSamples","wheelPixelsPerUnit","wheelEventDelta","dx","wheelDeltaX","dy","wheelDeltaY","detail","HORIZONTAL_AXIS","VERTICAL_AXIS","wheelDelta","wheelEventPixels","delta","onScrollWheel","canScrollX","canScrollY","pixels","movedX","movedY","sample","Selection","equals","here","there","deepCopy","Range","somethingSelected","normalizeSelection","mayTouch","selectionsMayTouch","prim","sort","inv","simpleSelection","changeEnd","adjustForChange","computeSelAfterChange","offsetPos","computeReplacedSel","hint","oldPrev","newPrev","loadMode","modeOption","resetModeState","isWholeLineUpdate","wholeLineUpdateBefore","updateDoc","spansFor","linesFor","firstLine","lastText","lastSpans","nlines","added","added$1","added$2","linkedDocs","sharedHistOnly","propagate","skip","sharedHist","linked","rel","shared","attachDoc","setDirectionClass","directionChanged","History","startGen","done","undone","undoDepth","lastModTime","lastSelTime","lastOp","lastSelOp","lastOrigin","lastSelOrigin","generation","maxGeneration","historyChangeFromChange","histChange","attachLocalSpans","clearSelectionEvents","lastChangeEvent","hist","addChangeToHistory","selAfter","opId","history","historyEventDelay","pushSelectionToHistory","selectionEventCanBeMerged","addSelectionToHistory","clearRedo","dest","existing","removeClearedSpans","explicitlyCleared","getOldSpans","mergeOldSpans","stretched","oldCur","stretchCur","copyHistoryArray","newGroup","instantiateSel","newChanges","extendRange","posBefore","extendSelection","setSelection","extendSelections","heads","replaceOneSelection","setSimpleSelection","filterSelectionChange","setSelectionReplaceHistory","setSelectionNoUndo","NaN","setSelectionInner","skipAtomicInSelection","reCheckSelection","mayClear","newAnchor","skipAtomic","newHead","skipAtomicInner","oldPos","preventCursorLeft","selectLeft","preventCursorRight","selectRight","atomic","near","movePos","far","cantEdit","selectAll","filterChange","canceled","cancel","makeChange","ignoreReadOnly","suppressEdits","makeChangeInner","makeChangeSingleDoc","rebased","rebaseHist","makeChangeFromHistory","allowSelectionOnly","suppress","antiChanges","filter","returned","shiftDoc","distance","removed","makeChangeSingleDocInEditor","recomputeMaxLength","checkWidthStart","changesHandler","changeHandler","replaceRange","assign","splitLines","rebaseHistSelSingle","rebaseHistArray","sub","ok","copied","changeLine","handle","changeType","LeafChunk","BranchChunk","removeInner","insertInner","iterN","oldHeight","remaining","leaf","maybeSpill","me","sibling","myIndex","used","LineWidget","opt","adjustScrollWhenAboveVisible","addLineWidget","insertAt","aboveVisible","this$1","oldH","nextMarkerId","TextMarker","markText","markTextShared","replacedWith","addToHistory","curLine","clearOnEnter","clearHistory","withOp","visual","dHeight","SharedTextMarker","isParent","findSharedMarkers","findMarks","copySharedMarkers","mFrom","mTo","subMark","detachSharedMarkers","subMarker","nextDocId","Doc","lineSep","cleanGeneration","getValue","lineSeparator","getRange","getLineHandle","getLineNumber","getLineHandleVisualStart","lineCount","listSelections","setCursor","extendSelectionsBy","setSelections","addSelection","getSelections","replaceSelection","dup","replaceSelections","newSel","undo","redo","undoSelection","redoSelection","setExtending","getExtending","historySize","markClean","changeGeneration","forceSplit","isClean","gen","getHistory","setHistory","histData","setGutterMarker","gutterID","clearGutter","lineInfo","addLineClass","where","removeLineClass","removeLineWidget","setBookmark","realOpts","findMarksAt","getAllMarks","posFromIndex","sepSize","indexFromPos","copyHistory","linkedDoc","unlinkDoc","CodeMirror","splitIds","iterLinkedDocs","getEditor","setDirection","eachLine","lastDrop","onDrop","clearDragCursor","files","dataTransfer","isReadOnly","FileReader","File","read","markAsReadAndPasteIfAllFilesAreRead","readTextFromFile","file","allowDropFileTypes","reader","onerror","onload","readAsText","text$1","getData","selected","onDragStart","setData","effectAllowed","setDragImage","img","src","_top","onDragOver","frag","dragCursor","forEachCodeMirror","getElementsByClassName","byClass","editors","globalsRegistered","ensureGlobalHandlers","registerGlobalHandlers","resizeTimer","onResize","setSize","keyNames","3","8","9","13","16","17","18","19","20","27","32","33","34","35","36","37","38","39","40","44","45","46","59","61","91","92","93","106","107","109","110","111","145","173","186","187","188","189","190","191","192","219","220","221","222","224","63232","63233","63234","63235","63272","63273","63275","63276","63277","63302","fromCharCode","keyMap","normalizeKeyName","alt","ctrl","cmd","mod","normalizeKeyMap","keymap","keyname","keys","lookupKey","getKeyMap","fallthrough","isModifierKey","keyCode","addModifierNames","noShift","altKey","metaKey","shiftKey","keyName","altGraphKey","deleteNearSelection","compute","kill","toKill","replaced","moveCharLogically","moveLogically","endOfLine","visually","prep","targetTop","moveVisually","bidi","mv","getWrappedLineExtent","moveInStorageOrder","searchInVisualLine","getRes","nextCh","basic","Left","Right","Up","Down","End","Home","PageUp","PageDown","Delete","Backspace","Shift-Backspace","Tab","Shift-Tab","Enter","Insert","Esc","pcDefault","Ctrl-A","Ctrl-D","Ctrl-Z","Shift-Ctrl-Z","Ctrl-Y","Ctrl-Home","Ctrl-End","Ctrl-Up","Ctrl-Down","Ctrl-Left","Ctrl-Right","Alt-Left","Alt-Right","Ctrl-Backspace","Ctrl-Delete","Ctrl-S","Ctrl-F","Ctrl-G","Shift-Ctrl-G","Shift-Ctrl-F","Shift-Ctrl-R","Ctrl-[","Ctrl-]","Ctrl-U","Shift-Ctrl-U","Alt-U","emacsy","Ctrl-B","Ctrl-P","Ctrl-N","Alt-F","Alt-B","Ctrl-E","Ctrl-V","Shift-Ctrl-V","Ctrl-H","Alt-D","Alt-Backspace","Ctrl-K","Ctrl-T","Ctrl-O","macDefault","Cmd-A","Cmd-D","Cmd-Z","Shift-Cmd-Z","Cmd-Y","Cmd-Home","Cmd-Up","Cmd-End","Cmd-Down","Cmd-Left","Cmd-Right","Ctrl-Alt-Backspace","Alt-Delete","Cmd-S","Cmd-F","Cmd-G","Shift-Cmd-G","Cmd-Alt-F","Shift-Cmd-Alt-F","Cmd-[","Cmd-]","Cmd-Backspace","Cmd-Delete","Cmd-U","Shift-Cmd-U","commands","singleSelection","killLine","deleteLine","delLineLeft","delWrappedLineLeft","delWrappedLineRight","rightPos","goDocStart","goDocEnd","goLineStart","goLineStartSmart","lineStartSmart","goLineEnd","lineEnd","goLineRight","goLineLeft","goLineLeftSmart","goLineUp","moveV","goLineDown","goPageUp","goPageDown","goCharLeft","moveH","goCharRight","goColumnLeft","goColumnRight","goWordLeft","goGroupRight","goGroupLeft","goWordRight","delCharBefore","deleteH","delCharAfter","delWordBefore","delWordAfter","delGroupBefore","delGroupAfter","indentAuto","indentSelection","indentMore","indentLess","insertTab","insertSoftTab","spaces","defaultTab","execCommand","transposeChars","newlineAndIndent","sels","indentLine","openLine","toggleOverwrite","firstNonWS","inWS","doHandleBinding","bound","dropShift","ensurePolled","prevShift","lookupKeyForEditor","keyMaps","extraKeys","stopSeq","dispatchKey","seq","keySeq","dispatchKeyInner","handleKeyBinding","motion","handleCharBinding","lastStoppedKey","onKeyDown","getField","handled","showCrossHair","up","onKeyUp","onKeyPress","charCode","lastClick","lastDoubleClick","DOUBLECLICK_DELAY","PastClick","clickRepeat","now","compare","onMouseDown","supportsTouch","clickInGutter","repeat","selectingText","handleMappedButton","leftButtonDown","onContextMenu","configureMouse","option","unit","addNew","moveOnDrag","contained","behavior","dragDrop","leftButtonStartDrag","leftButtonSelect","moved","dragEnd","mouseMove","dragStart","preventScroll","e2","rangeForUnit","findWordAt","ourRange","ourIndex","startSel","lastPos","extendTo","startCol","posCol","leftPos","oldRange","ranges$1","bidiSimplify","editorSize","counter","curCount","move","buttons","anchorLine","boundary","headIndex","usePart","gutterEvent","prevent","mX","mY","touches","lineBox","g","contextMenuInGutter","themeChanged","theme","Init","defaults","optionHandlers","defineOptions","deflt","notOnInit","defineOption","newBreaks","refresh","getInputField","spellcheck","autocorrect","autocapitalize","detach","attach","wrappingChanged","integer","blur","readOnlyChanged","screenReaderLabelChanged","dragDropChanged","resetPosition","funcs","dragFunctions","enter","over","leave","drop","inputStyles","inputStyle","pasteIncoming","cutIncoming","autofocus","registerEventHandlers","finishInit","initHooks","textRendering","word","touchFinished","prevTouch","finishTouch","isMouseLikeTouchEvent","touch","radiusX","radiusY","farAway","pageX","pageY","inp","how","aggressive","indent","curSpace","curSpaceString","indentUnit","indentString","indentWithTabs","pos$1","defineInitHook","lastCopied","setLastCopied","newLastCopied","applyTextInput","inserted","deleted","recent","paste","textLines","multiPaste","pasteLinesPerSelection","lineWise","changeEvent","triggerElectric","handlePaste","pasted","clipboardData","disableInput","electricChars","smartIndent","getModeAt","electricInput","copyableRanges","lineRange","disableBrowserMagic","field","hiddenTextarea","border","addEditorMethods","helpers","setOption","getDoc","addKeyMap","removeKeyMap","addOverlay","modeSpec","removeOverlay","newRanges","getTokenAt","getLineTokens","getTokenTypeAt","getHelper","getHelpers","help","_global","getStateAfter","defaultTextHeight","defaultCharWidth","getViewport","addWidget","vspace","hspace","triggerOnKeyDown","triggerOnKeyPress","triggerOnKeyUp","triggerOnMouseDown","findPosH","amount","hitSide","rtlMoveVisually","findPosV","goalColumn","goals","headPos","startChar","check","scrollTo","getScrollInfo","interpret","swapDoc","phrase","phraseText","phrases","getWrapperElement","getScrollerElement","getGutterElement","registerHelper","registerGlobalHelper","predicate","origDir","lineDir","findNextLine","moveOnce","boundToLine","sawType","pageSize","moveAmount","ContentEditableInput","lastAnchorNode","lastAnchorOffset","lastFocusNode","lastFocusOffset","polling","composing","gracePeriod","readDOMTimeout","posToDOM","isInGutter","scan","badPos","bad","domTextBetween","closing","extraLinebreak","recognizeMarker","close","addText","walk","cmText","markerID","isBlock","nodeValue","domToPos","lineNode","locateNodeInLineView","textNode","topNode","curNode","dist$1","belongsToInput","onCopyCut","lineWiseCopyCut","clearData","kludge","hadFocus","showPrimarySelection","updateFromDOM","readFromDOMSoon","forceCompositionEnd","label","showMultipleSelections","curAnchor","curFocus","rng","rangeCount","getRangeAt","startGracePeriod","rememberSelection","selectionInEditor","commonAncestorContainer","poll","pollSelection","pollInterval","pollContent","fromIndex","fromNode","toNode","toIndex","newText","oldText","cutFront","cutEnd","oldTop","maxCutFront","newBot","oldBot","maxCutEnd","chFrom","chTo","contentEditable","TextareaInput","prevInput","pollingFast","fromTextArea","textarea","tabindex","placeholder","realSubmit","form","leaveSubmitMethodAlone","submit","wrappedSubmit","getTextArea","toTextArea","addLegacyProps","cmpPos","createField","prepareCopyCut","fastPoll","dispatchEvent","Event","_display","moveInputWithCursor","wrapOff","lineOff","teTop","teLeft","drawn","contextMenuPending","slowPoll","missed","same","resetSelectionOnContextMenu","oldScrollY","oldCSS","oldWrapperCSS","wrapperBox","offsetParent","scrollY","rehide","detectingSelectAll","prepareSelectAllHack","mouseup","extval","disabled","dontDelegate","contenteditable","defineExtension","func","defineDocExtension","version","factory","startListening","stopListening","timeout","hurry","_cm","autoRefresh","require$$0","htmlConfig","xmlConfig","autoSelfClosers","area","br","command","embed","frame","hr","keygen","link","meta","param","track","wbr","menuitem","implicitlyClosed","dd","li","optgroup","rp","tbody","td","tfoot","tr","contextGrabbers","dt","address","article","aside","blockquote","dl","fieldset","footer","h1","h2","h3","h4","h5","h6","header","hgroup","nav","ol","section","table","ul","thead","doNotIndent","allowUnquoted","allowMissing","caseFold","allowMissingTagName","editorConf","config_","setStyle","config","htmlMode","inText","chain","parser","tokenize","inBlock","doctype","inTag","baseState","tagStart","inAttribute","stringStartCol","quote","closure","isInAttribute","terminator","depth","startOfLine","noIndent","popContext","maybePopContext","nextTagName","parentTagName","tagNameState","closeTagNameState","attrState","matchClosing","closeState","closeStateErr","_stream","attrEqState","attrValueState","attrContinuedState","isInText","baseIndent","textAfter","fullLine","multilineTagIndentPastTag","multilineTagIndentFactor","alignCDATA","tagAfter","grabbers","blockCommentStart","blockCommentEnd","configuration","skipAttribute","xmlCurrentTag","xmlCurrentContext","cx","keywordRegex","esc","escaped","literal","keyCol","pair","pairStart","inlinePairs","inlineList","lineComment","fold","wordRegexp","words","wordOperators","commonKeywords","commonBuiltins","scopes","conf","parserConf","ERRORCLASS","delimiters","singleDelimiters","operators","singleOperators","doubleOperators","doubleDelimiters","tripleDelimiters","hangingIndent","myKeywords","myBuiltins","extra_keywords","extra_builtins","py3","identifiers","stringPrefixes","keywords","builtins","tokenBase","lastToken","scopeOffset","lineOffset","pushPyScope","dedent","errorToken","tokenBaseInner","inFormat","floatLiteral","intLiteral","formatStringFactory","tokenStringFactory","delimiter","tokenOuter","singleline","OUTCLASS","tokenNestedExpr","tokenString","singleLineStringErrors","isString","pushBracketScope","tokenLexer","beginningOfLine","lambda","delimiter_index","basecolumn","addErr","scope","closeBrackets","triples","CodeMirrorTextarea","editor","DropdownButton","btn","FetchFillSlot","slotName","comparisonOperatorsHash","<",">",">=","<=","==","!=","===","!==","selectedSlot","slot","comparison","dv","ModalButton","open","ModalBoxStyle","BullseyeStyle","BackdropStyle","slugField","formData","FormData","action","href","response","setContent","CustomEvent","bubbles","onClick","renderModal","Tabs","currentPage","_currentPage","_firstPage","tabPage","SiteShell","_url","loadContent","loading","URL","qs","pathname","URLSearchParams","ResponseType","FlowShellCard","flowBodyUrl","statusText","updateCard","errorMessage","redirect","flowBody","checkAutofocus","loadFormCode","setFormSubmitHandlers","log","script","newScript","autofocusElement","checkAutosubmit","updateFormAction","ROUTES","RouterOutlet","navigate","PF","PFAddons","PBGlobal","activeUrl","defaultUrl","route","selectedRoute","activeRoute","hookCallback","some","hooks","setHookCallback","callback","isObject","hasOwnProp","isObjectEmpty","isUndefined","isNumber","isDate","fn","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","defaultParsingFlags","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","isValid","_isValid","flags","parsedParts","isNowValid","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","fun","momentProperties","updateInProgress","copyConfig","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","updateOffset","isMoment","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","arg","deprecations","deprecateSimple","isFunction","Function","_config","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","mom","_calendar","zeroFill","number","targetLength","forceSign","absNumber","zerosToFill","pow","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","ordinal","localeData","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","invalidDate","replaceLongDateFormatTokens","longDateFormat","defaultLongDateFormat","LTS","LT","L","LL","LLL","LLLL","_longDateFormat","formatUpper","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","future","past","ss","mm","hh","ww","M","MM","yy","relativeTime","withoutSuffix","isFuture","_relativeTime","pastFuture","aliases","addUnitAlias","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","getPrioritizedUnits","unitsObj","isLeapYear","year","absFloor","toInt","argumentForCoercion","coercedNumber","isFinite","makeGetSet","keepTime","set$1","month","date","daysInMonth","stringGet","stringSet","prioritized","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p1","p2","p3","p4","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","_a","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","isFormat","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","parseTwoDigitYear","getSetYear","getIsLeapYear","createDate","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","shiftWeekdays","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","day","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","hours","kFormat","lowercase","minutes","matchMeridiem","_meridiemParse","localeIsPM","seconds","kInput","_isPm","isPM","_meridiem","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","globalLocale","baseConfig","dayOfMonthOrdinalParse","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","names","loadLocale","oldLocale","exports","_abbr","require","getSetGlobalLocale","getLocale","defineLocale","abbr","parentLocale","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","setUTCMinutes","getUTCMinutes","configFromString","createFromInputFallback","currentDateArray","nowValue","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","temp","weekdayOverflow","curWeek","GG","W","E","createLocal","gg","ISO_8601","RFC_2822","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","hour","isPm","meridiemHour","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configFromObject","dayOrDate","minute","second","millisecond","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","prototypeMin","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","parseFloat","isValid$1","createInvalid$1","createDuration","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","matches","cloneWithOffset","model","clone","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","toArray","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","ret","diffRes","parseIso","momentsDifference","positiveMomentsDifference","isAfter","isBefore","createAdder","period","tmp","isAdding","invalid","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","formats","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","toISOString","keepOffset","toDate","inspect","datetime","zone","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOfDate","isoWeekday","unix","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","until","localeErasParse","eraName","narrow","localeErasConvertYear","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","isoWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","eraYearOrdinalParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","parseZone","preParsePostFormat","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","dates","isDSTShifted","proto$1","get$1","setter","listMonthsImpl","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","valueOf$1","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","argWithSuffix","argThresholds","withSuffix","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","moment","createCommonjsModule","getCjsExportFromNamespace","colorName","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","conversions","reverseKeywords","convert","rgb","channels","labels","hsl","hsv","hwb","cmyk","xyz","lab","lch","hex","keyword","ansi16","ansi256","hcg","apple","comparativeDistance","rdif","gdif","bdif","diffc","reversed","currentClosestKeyword","currentClosestDistance","z","t1","t2","t3","smin","lmin","hi","q","sl","vmin","wh","bl","ratio","y2","x2","z2","atan2","PI","sqrt","cos","sin","ansi","color","mult","rem","colorString","char","hue","chroma","pure","mg","buildGraph","graph","models","deriveBFS","fromModel","queue","adjacents","adjacent","wrapConversion","toModel","conversion","wrapRaw","wrappedFn","wrapRounded","routes","raw","colorConvert","colorName$1","getRgba","getHsla","getRgb","getHsl","getHwb","getAlpha","hexString","rgbString","rgbaString","percentString","percentaString","hslString","hslaString","hwbString","rgba","per","hexAlpha","scale","alpha","hsla","vals","hexDouble","reverseNames","num","Color","valid","setValues","lightness","whiteness","setSpace","rgbArray","hslArray","hsvArray","hwbArray","cmykArray","rgbaArray","hslaArray","setChannel","saturation","saturationv","blackness","rgbNumber","luminosity","lum","chan","contrast","color2","lum1","lum2","contrastRatio","dark","light","negate","lighten","darken","saturate","desaturate","whiten","blacken","greyscale","clearer","opaquer","rotate","degrees","mix","mixinColor","weight","color1","w1","w2","maxes","getValues","capped","chans","sname","svalues","chartjsColor","isValidKey","noop","uid","isNullOrUndef","valueOrDefault","defaultValue","valueAtIndexOrDefault","thisArg","each","loopable","arrayEquals","a0","ilen","v0","v1","klen","_merger","tval","sval","merge","_mergerIf","mergeIf","sources","merger","dst","inherits","extensions","ChartElement","Surrogate","__super__","_deprecated","previous","helpers_core","callCallback","getValueOrDefault","getValueAtIndexOrDefault","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","asin","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","helpers_easing","easingEffects","RAD_PER_DEG","DOUBLE_PI","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","exports$1","chart","ctx","clearRect","roundedRect","radius","moveTo","arc","closePath","drawPoint","rotation","xOffset","yOffset","cornerRadius","rad","translate","drawImage","restore","beginPath","lineTo","SQRT1_2","fill","stroke","_isPointInArea","point","epsilon","clipArea","clip","unclipArea","flip","stepped","steppedLine","midpoint","tension","bezierCurveTo","controlPointPreviousX","controlPointNextX","controlPointPreviousY","controlPointNextY","helpers_canvas","drawRoundedRectangle","_set","defaultColor","defaultFontColor","defaultFontFamily","defaultFontSize","defaultFontStyle","defaultLineHeight","showLines","core_defaults","toFontString","font","family","helpers_options","toLineHeight","toPadding","_parseFont","globalDefaults","global","fontSize","fontFamily","lineHeight","fontStyle","resolve","inputs","cacheable","exports$2","_factorize","log10","exponent","LOG10E","powerOf10","helpers_math","getRtlAdapter","rectX","setWidth","textAlign","xPlus","leftForLtr","itemWidth","getLtrAdapter","_itemWidth","helpers$1","easing","canvas","math","rtl","overrideTextDirection","original","getPropertyValue","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","interpolate","ease","actual","c0","c1","Element","_type","pivot","_view","_model","_start","transition","tooltipPosition","hasValue","core_element","exports$3","currentStep","numSteps","onAnimationProgress","onAnimationComplete","core_animation","animation","onProgress","onComplete","core_animations","animations","addAnimation","lazy","startTime","animating","requestAnimationFrame","cancelAnimation","findIndex","requestAnimFrame","startDigest","advance","nextStep","arrayEvents","listenArrayEvents","listener","_chartjs","listeners","object","unlistenArrayEvents","stub","DatasetController","datasetIndex","datasetElementType","dataElementType","_datasetElementOptions","_dataElementOptions","linkScales","addElements","getMeta","updateIndex","scales","getDataset","scalesOpts","xAxisID","xAxes","yAxisID","yAxes","datasets","getDatasetMeta","getScaleForId","scaleID","_getValueScaleId","_getIndexScaleId","_getValueScale","_getIndexScale","_update","destroy","createMetaDataset","_chart","_datasetIndex","createMetaData","_index","metaData","addElementAndReset","updateElement","buildOrUpdateElements","isExtensible","resyncElements","_configure","_cachedDataOpts","easingValue","draw","getStyle","_resolveDatasetElementOptions","_resolveDataElementOptions","backgroundColor","borderColor","hover","readKey","datasetOpts","custom","elementOptions","cached","dataIndex","freeze","removeHoverStyle","$previousStyle","setHoverStyle","getHoverColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","_removeDatasetHoverStyle","_setDatasetHoverStyle","hoverOptions","numMeta","numData","insertElements","onDataPush","onDataPop","onDataShift","onDataSplice","onDataUnshift","core_datasetController","TAU","clipArc","startAngle","endAngle","pixelMargin","angleMargin","outerRadius","innerRadius","drawFullCircleBorders","vm","fullCircles","drawBorder","borderAlign","lineWidth","lineJoin","element_arc","inLabelRange","mouseX","hoverRadius","inRange","chartX","chartY","pointRelativePosition","getAngleFromPoint","angle","betweenAngles","withinRadius","getCenterPoint","halfAngle","halfRadius","getArea","centreAngle","rangeFromCentre","circumference","fillStyle","strokeStyle","valueOrDefault$1","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","capBezierPoints","element_line","currentVM","spanGaps","points","_children","globalOptionLineElements","lastDrawnIndex","_loop","previousItem","lineCap","setLineDash","lineDashOffset","valueOrDefault$2","defaultColor$1","xRange","hitRadius","yRange","mouseY","pointStyle","element_point","inXRange","inYRange","chartArea","defaultColor$2","isVertical","getBarBounds","x1","y1","half","swap","orig","v2","parseBorderSkipped","borderSkipped","horizontal","parseBorderWidth","maxW","maxH","boundingRects","bounds","skipX","skipY","rectangle","element_rectangle","fillRect","Arc","Point","Rectangle","deprecated","valueOrDefault$3","computeMinSampleSize","curr","_length","getTicks","getPixelForTick","computeFitCategoryTraits","ruler","thickness","barThickness","stackCount","categoryPercentage","barPercentage","computeFlexCategoryTraits","percent","gridLines","offsetGridLines","controller_bar","scaleOpts","minBarLength","maxBarThickness","_ruler","getRuler","_xScale","_yScale","datasetLabel","_updateElementGeometry","vscale","getBasePixel","isHorizontal","vpixels","calculateBarValuePixels","ipixels","calculateBarIndexPixels","center","_getStacks","metasets","_getMatchingVisibleMetas","stacked","stacks","getStackCount","getStackIndex","getPixelForValue","_startPixel","_endPixel","imeta","ivalue","stackLength","_parseValue","stackIndex","indexOpts","valueOpts","valueOrDefault$4","resolve$1","tooltips","dataPoint","xLabel","yLabel","controller_bubble","xScale","yScale","dsIndex","getPixelForDecimal","_options","valueOrDefault$5","PI$1","DOUBLE_PI$1","HALF_PI$1","animateRotate","animateScale","legendCallback","listItem","outerHTML","legend","generateLabels","controller","legendItem","cutoutPercentage","tooltipItem","dataLabel","controller_doughnut","getRingIndex","ringIndex","isDatasetVisible","maxWidth","maxHeight","opts","ratioX","ratioY","offsetX","offsetY","arcs","cutout","chartWeight","_getRingWeight","startX","startY","endY","contains0","contains90","contains270","minX","minY","maxX","maxY","getMaxBorderWidth","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","animationOpts","centerX","centerY","calculateCircumference","hoverWidth","ringWeightOffset","dataSetIndex","horizontalBar","controller_horizontalBar","valueOrDefault$6","resolve$2","isPointInArea","scaleClip","halfBorderWidth","tickOpts","ticks","defaultClip","toClip","controller_line","showLine","_showLine","lineTension","_scale","updateBezierControlPoints","lineModel","calculatePointY","lineOptions","ds","dsMeta","stackedRightValue","rightValue","sumPos","sumNeg","getRightValue","_getSortedVisibleDatasetMetas","controlPoints","capControlPoint","pt","cubicInterpolationMode","splineCurveMonotone","splineCurve","nextItem","resolve$3","angleLines","circular","pointLabels","beginAtZero","controller_polarArea","starts","_starts","angles","_angles","_updateRadius","countVisibleElements","_computeAngle","minSize","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getDistanceFromCenterForValue","resetRadius","doughnut","controller_pie","valueOrDefault$7","controller_radar","pointPosition","getPointPositionForValue","scatter","controllers","polarArea","pie","radar","getRelativePosition","parseVisibleItems","metadata","jlen","getIntersectItems","getNearestItems","intersect","distanceMetric","minDistance","POSITIVE_INFINITY","nearestItems","getDistanceMetricForAxis","useX","useY","pt1","pt2","deltaX","deltaY","indexMode","items","core_interaction","x-axis","nearest","intersectsItem","filterByPosition","sortByWeight","wrapBoxes","boxes","layoutBoxes","setLayoutDims","layouts","params","layout","fullWidth","availableWidth","vBoxMaxWidth","hBoxMaxHeight","buildLayoutBoxes","leftAndTop","rightAndBottom","vertical","getCombinedMax","maxPadding","updateDims","newWidth","newHeight","getPadding","boxPadding","outerWidth","outerHeight","handleMaxPadding","updatePos","getMargins","marginForPositions","positions","fitBoxes","refit","refitBoxes","placeBoxes","userPadding","core_layouts","addBox","_layers","removeBox","layoutItem","configure","layoutOptions","availableHeight","verticalBoxes","horizontalBoxes","platform_basic","acquireContext","getContext","platform_dom","stylesheet","__proto__","default","EXPANDO_KEY","CSS_PREFIX","CSS_SIZE_MONITOR","CSS_RENDER_MONITOR","CSS_RENDER_ANIMATION","ANIMATION_START_EVENTS","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","readUsedSize","initCanvas","renderHeight","renderWidth","initial","aspectRatio","eventListenerOptions","supports","addListener","removeListener","createEvent","nativeEvent","fromNativeEvent","throttled","ticking","createDiv","createResizer","maxSize","resizer","expand","shrink","_reset","onScroll","watchForRender","expando","proxy","renderProxy","animationName","reflow","unwatchForRender","addResizeListener","maintainAspectRatio","removeResizeListener","injectCSS","rootNode","containsStyles","platform_dom$2","disableCSSInjection","_enabled","_ensureLoaded","root","getRootNode","getElementById","releaseContext","proxies","addEvent","removeEvent","implementation","plugins","core_plugins","_plugins","_cacheId","register","plugin","unregister","getAll","notify","hook","descriptors","$plugins","_invalidate","core_scaleService","constructors","registerScaleType","scaleConstructor","scaleDefaults","getScaleConstructor","getScaleDefaults","updateScaleDefaults","additions","addScalesToLayout","valueOrDefault$8","getRtlHelper","enabled","titleFontStyle","titleSpacing","titleMarginBottom","titleFontColor","titleAlign","bodySpacing","bodyFontColor","bodyAlign","footerFontStyle","footerSpacing","footerMarginTop","footerFontColor","footerAlign","yPadding","xPadding","caretPadding","caretSize","multiKeyBackground","displayColors","beforeTitle","tooltipItems","labelCount","afterTitle","beforeBody","beforeLabel","labelColor","labelTextColor","afterLabel","afterBody","beforeFooter","afterFooter","positioners","average","eventPosition","nearestElement","distanceBetweenPoints","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","indexScale","valueScale","getLabelForIndex","getBaseModel","tooltipOpts","xAlign","yAlign","textDirection","_bodyFontFamily","bodyFontFamily","_bodyFontStyle","bodyFontStyle","_bodyAlign","bodyFontSize","_titleFontFamily","titleFontFamily","_titleFontStyle","titleFontSize","_titleAlign","_footerFontFamily","footerFontFamily","_footerFontStyle","footerFontSize","_footerAlign","opacity","legendColorBackground","getTooltipSize","tooltip","combinedBodyLength","bodyItem","titleLineCount","footerLineCount","widthPadding","maxLineWidth","fontString","determineAlignment","lf","rf","olf","orf","yf","midX","midY","getBackgroundPoint","alignment","paddingAndSize","radiusAndPadding","getAlignedX","getBeforeAfterBodyLines","exports$4","_lastActive","getTitle","getBeforeBody","getBody","bodyItems","getAfterBody","getFooter","existingModel","_active","backgroundPoint","tooltipSize","caretX","caretY","labelColors","labelTextColors","_eventPosition","itemSort","dataPoints","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","drawTitle","rtlHelper","textBaseline","fillText","drawBody","textColor","drawColorBoxes","xLinePadding","colorX","fillLineOfText","bodyAlignForCalculation","rtlColorX","strokeRect","drawFooter","drawBackground","quadraticCurveTo","hasTooltipContent","globalAlpha","getElementsAtEventForMode","positioners_1","core_tooltip","valueOrDefault$9","mergeScaleConfig","slen","mergeConfig","initConfig","updateConfig","newOptions","ensureScalesHaveIDs","buildOrUpdateScales","nextAvailableScaleId","axesOpts","hasId","positionIsHorizontal","compare2Level","l1","l2","onHover","animationDuration","responsive","responsiveAnimationDuration","Chart","construct","_bufferedRender","instances","retinaScale","devicePixelRatio","bindEvents","resize","initToolTip","stop","silent","getMaximumWidth","getMaximumHeight","newSize","scalesOptions","scaleOptions","xAxisOptions","yAxisOptions","dtype","dposition","isDefault","scaleType","scaleClass","mergeTicksOptions","buildOrUpdateControllers","newControllers","destroyDatasetMeta","ControllerClass","resetElements","updateLayout","updateDatasets","lastActive","_bufferedRequest","_idx","updateDataset","animationOptions","animationObject","easingFunction","stepDecimal","layers","drawDatasets","_drawTooltip","_getSortedDatasetMetas","filterVisible","drawDataset","getElementAtEvent","getElementsAtEvent","getElementsAtXAxis","getDatasetAtEvent","_meta","generateLegend","unbindEvents","toBase64Image","toDataURL","_chartInstance","_listeners","eventHandler","updateHoverStyle","bufferedRequest","core_controller","Controller","configMerge","scaleMerge","core_helpers","parseMaxStyle","styleValue","parentProperty","valueInPixels","isConstrainedValue","getConstraintDimension","domNode","maxStyle","percentageProperty","defaultView","_getParentNode","constrainedNode","constrainedContainer","hasCNode","hasCContainer","infinity","collection","filterCallback","filtered","findNextWhere","arrayToSearch","currentItem","findPreviousWhere","almostEquals","almostWhole","rounded","NEGATIVE_INFINITY","toRadians","toDegrees","radians","_decimalPlaces","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","aliasPixel","pixelWidth","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fb","EPSILON","pointBefore","pointCurrent","pointAfter","alphaK","betaK","tauK","squaredMagnitude","pointsWithTangents","deltaK","mK","pointsLen","slopeDeltaX","niceNum","fraction","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","evt","originalEvent","boundingRect","getConstraintWidth","getConstraintHeight","_calculatePadding","parentDimension","cw","forceRatio","pixelRatio","pixelSize","longestText","arrayOfThings","gc","garbageCollect","thing","nestedThing","longest","gcLen","textWidth","numberOfLabelLines","numberOfLines","CanvasGradient","colorValue","CanvasPattern","abstract","DateAdapter","_create","members","core_adapters","_date","core_ticks","formatters","tickValue","logDelta","tickString","logTick","numExponential","toExponential","numDecimal","logarithmic","remain","valueOrDefault$a","numItems","increment","getPixelForGridLine","validIndex","lineValue","computeLabelSizes","tickFonts","tickFont","nestedLabel","widest","highest","widths","offsets","widestLabelSize","highestLabelSize","major","minor","valueAt","getTickMarkLength","drawTicks","tickMarkLength","getScaleLabelHeight","parseFontOptions","nestedOpts","fontColor","parseTickFontOptions","nonSkipped","ticksToFilter","getEvenSpacing","calculateSpacing","majorIndices","axisLength","ticksLimit","factors","factor","evenMajorSpacing","spacing","getMajorIndices","skipMajors","tick","majorStart","majorEnd","drawOnChartArea","zeroLineWidth","zeroLineColor","zeroLineBorderDash","zeroLineBorderDashOffset","scaleLabel","labelString","minRotation","maxRotation","mirror","autoSkip","autoSkipPadding","labelOffset","Scale","zeroLineIndex","_ticks","_getLabels","xLabels","yLabels","beforeUpdate","margins","samplingEnabled","sampleSize","_labelSizes","_maxLabelLines","longestLabelWidth","longestTextCache","_gridLineItems","_labelItems","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","_convertTicksToLabels","beforeCalculateTickRotation","calculateTickRotation","afterCalculateTickRotation","beforeFit","fit","afterFit","_ticksToDraw","_autoSkip","afterUpdate","startPixel","endPixel","reversePixels","_reversePixels","beforeTickToLabelConversion","convertTicksToLabels","userCallback","afterTickToLabelConversion","labelSizes","maxLabelWidth","maxLabelHeight","tickWidth","maxLabelDiagonal","numTicks","labelRotation","_isVisible","_getLabelSizes","scaleLabelOpts","gridLineOpts","isBottom","firstLabelSize","lastLabelSize","tickPadding","isRotated","angleRadians","cosRotation","sinRotation","labelHeight","offsetRight","labelWidth","handleMargins","isFullWidth","rawValue","_getScaleLabel","getValueForPixel","decimal","getDecimalForPixel","getBaseValue","avgMajorSpacing","maxTicksLimit","_tickSize","numMajorIndices","optionTicks","rot","_computeGridLineItems","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","lineColor","ticksLength","tl","axisWidth","axisHalfWidth","alignPixel","alignBorderValue","_computeLabelItems","textOffset","isMirrored","fonts","_drawGrid","firstLineWidth","lastLineWidth","_drawLabels","_drawTitle","scaleLabelX","scaleLabelY","scaleLabelFontColor","scaleLabelFont","scaleLabelPadding","halfLineHeight","isLeft","tz","gz","_draw","core_scale","isNullOrUndef$1","defaultConfig","scale_category","ticksOpts","minIndex","maxIndex","_startValue","_valueRange","valueCategory","_defaults","isNullOrUndef$2","generateTicks","generationOptions","dataRange","niceMin","niceMax","numSpaces","MIN_SPACING","stepSize","maxNumSpaces","maxTicks","precision","rmin","rmax","scale_linearbase","handleTickRangeOptions","minSign","maxSign","setMin","suggestedMin","setMax","suggestedMax","getTickLimit","_computeTickLimit","handleDirectionalChanges","numericGeneratorOptions","fixedStepSize","ticksAsNumbers","_endValue","defaultConfig$1","DEFAULT_MIN","DEFAULT_MAX","getOrCreateStack","neg","stackData","relativePoints","updateMinMax","scale_linear","hasStacks","stackValues","_defaults$1","valueOrDefault$b","generateTicks$1","exp","significand","tickVal","endExp","endSignificand","minNotZero","lastTick","defaultConfig$2","nonNegativeOrDefault","scale_logarithmic","IDMatches","valuesPerStack","valuesForType","minVal","maxVal","tickValues","_getFirstTickValue","_valueOffset","_defaults$2","valueOrDefault$c","valueAtIndexOrDefault$1","resolve$4","defaultConfig$3","animate","showLabelBackdrop","backdropColor","backdropPaddingY","backdropPaddingX","getTickBackdropHeight","measureLabelSize","determineLimits","fitWithPointLabels","textSize","plFont","furthestLimits","furthestAngles","_pointLabelSizes","valueCount","getPointPosition","drawingArea","getIndexAngle","hLimits","vLimits","setReductions","getTextAlignForAngle","adjustPointPositionForLabelHeight","drawPointLabels","pointLabelOpts","tickBackdropHeight","outerDistance","extra","pointLabelPosition","pointLabelFontColor","drawRadiusLine","numberOrZero","scale_radialLinear","setCenterPoint","largestPossibleRadius","radiusReductionLeft","radiusReductionRight","radiusReductionTop","radiusReductionBottom","leftMovement","rightMovement","topMovement","bottomMovement","maxRight","maxLeft","maxTop","maxBottom","scalingFactor","distanceFromCenter","thisAngle","getBasePosition","angleLineOpts","tickFontColor","_defaults$3","deprecated$1","resolve$5","valueOrDefault$d","MIN_INTEGER","MIN_SAFE_INTEGER","MAX_INTEGER","MAX_SAFE_INTEGER","INTERVALS","common","steps","UNITS","sorter","arrayUnique","getMin","getMax","buildLookupTable","timestamps","distribution","lookup","i0","i1","lo","interpolate$1","skey","tkey","toTimestamp","adapter","_adapter","determineUnitForAutoTicks","minUnit","capacity","interval","determineUnitForFormatting","determineMajorUnit","generate","timeOpts","unitStepSize","computeOffsets","setMajorTicks","majorUnit","ticksFromTimestamps","defaultConfig$4","adapters","displayFormat","displayFormats","scale_time","timestamp","labelsAdded","dataLabels","_table","_timestamps","getLabelCapacity","_unit","_majorUnit","_offsets","tooltipFormat","tickFormatFunction","minorFormat","majorFormat","nestedTickOpts","formatter","getPixelForOffset","_getLabelSize","tickLabelWidth","tickFontSize","getLabelWidth","exampleTime","exampleLabel","_defaults$4","category","radialLinear","FORMATS","_id","filler","mappers","decodeFill","computeLinearBoundary","scaleBottom","scaleTop","scaleZero","computeCircularBoundary","cy","computeBoundary","resolveTarget","visited","createMapper","isDrawable","drawArea","curve0","curve1","len0","len1","doFill","mapper","p0","d0","d1","loopOffset","plugin_filler","afterDatasetsUpdate","$filler","beforeDatasetsDraw","getRtlHelper$1","noop$1","valueOrDefault$e","getBoxWidth","labelOpts","usePointStyle","boxWidth","ci","onLeave","lineDash","Legend","legendHitBoxes","_hoveredItem","doughnutMode","beforeBuildLabels","buildLabels","afterBuildLabels","legendItems","labelFont","hitboxes","lineWidths","vPadding","columnWidths","columnHeights","currentColWidth","currentColHeight","lineDefault","legendHeight","legendWidth","drawLegendBox","SQRT2","halfFontSize","xLeft","yMiddle","alignmentOffset","dimension","blockSize","itemHeight","realX","_getLegendItemAt","hitBox","hoveredItem","createNewLegendAndAttach","legendOpts","plugin_legend","_element","beforeInit","afterEvent","noop$2","Title","titleX","titleY","fontOpts","createNewTitleBlockAndAttach","titleOpts","titleBlock","_adapters","Animation","animationService","Interaction","scaleService","Ticks","Tooltip","pluginService","PluginBase","canvasHelpers","layoutService","LinearScaleBase","klass","cfg","AdminLoginsChart","logins_failed_per_1h","logins_per_1h","valueStamp"],"mappings":"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"}
\ No newline at end of file
diff --git a/passbook/static/static/src/pages/RouterOutlet.ts b/passbook/static/static/src/pages/RouterOutlet.ts
index 7dfab9c50..080f4ed28 100644
--- a/passbook/static/static/src/pages/RouterOutlet.ts
+++ b/passbook/static/static/src/pages/RouterOutlet.ts
@@ -9,6 +9,8 @@ import {
 import PF from "@patternfly/patternfly/patternfly.css";
 // @ts-ignore
 import PFAddons from "@patternfly/patternfly/patternfly-addons.css";
+// @ts-ignore
+import PBGlobal from "../../passbook/passbook.css";
 
 export interface Route {
     url: RegExp;
@@ -37,7 +39,7 @@ export class RouterOutlet extends LitElement {
     defaultUrl?: string;
 
     static get styles() {
-        return [PF, PFAddons];
+        return [PF, PFAddons, PBGlobal];
     }
 
     constructor() {