{"version":3,"file":"tab.nomodule.min.js","sources":["../../../.config/config.js","../../../src/core/api.js","../../../src/component/tab/script/tab/tab-button.js","../../../src/component/tab/script/tab/tab-selector.js","../../../src/component/tab/script/tab/tab-panel-direction.js","../../../src/component/tab/script/tab/tab-panel.js","../../../src/component/tab/script/tab/tab-keys.js","../../../src/component/tab/script/tab/tab-emission.js","../../../src/component/tab/script/tab/tabs-group.js","../../../src/component/tab/script/tab/tabs-list.js","../../../src/component/tab/index.js","../../../src/component/tab/main.js"],"sourcesContent":["const config = {\r\n prefix: 'fr',\r\n namespace: 'dsfr',\r\n organisation: '@gouvfr',\r\n version: '1.11.2'\r\n};\r\n\r\nexport default config;\r\n","import config from './config.js';\nconst api = window[config.namespace];\nexport default api;\n","import api from '../../api.js';\n\n/**\n * TabButton correspond au bouton cliquable qui change le panel\n * TabButton étend de DisclosureButton qui ajoute/enelve l'attribut aria-selected,\n * Et change l'attributte tabindex a 0 si le boutton est actif (value=true), -1 s'il n'est pas actif (value=false)\n */\nclass TabButton extends api.core.DisclosureButton {\n constructor () {\n super(api.core.DisclosureType.SELECT);\n }\n\n static get instanceClassName () {\n return 'TabButton';\n }\n\n handleClick (e) {\n super.handleClick(e);\n this.focus();\n }\n\n apply (value) {\n super.apply(value);\n if (this.isPrimary) {\n this.setAttribute('tabindex', value ? '0' : '-1');\n if (value) {\n if (this.list) this.list.focalize(this);\n }\n }\n }\n\n get list () {\n return this.element.getAscendantInstance('TabsList', 'TabsGroup');\n }\n}\n\nexport { TabButton };\n","import api from '../../api.js';\n\nexport const TabSelector = {\n TAB: api.internals.ns.selector('tabs__tab'),\n GROUP: api.internals.ns.selector('tabs'),\n PANEL: api.internals.ns.selector('tabs__panel'),\n LIST: api.internals.ns.selector('tabs__list'),\n SHADOW: api.internals.ns.selector('tabs__shadow'),\n SHADOW_LEFT: api.internals.ns.selector('tabs__shadow--left'),\n SHADOW_RIGHT: api.internals.ns.selector('tabs__shadow--right'),\n PANEL_START: api.internals.ns.selector('tabs__panel--direction-start'),\n PANEL_END: api.internals.ns.selector('tabs__panel--direction-end')\n};\n","export const TabPanelDirection = {\n START: 'direction-start',\n END: 'direction-end',\n NONE: 'none'\n};\n","import api from '../../api.js';\nimport { TabButton } from './tab-button.js';\nimport { TabSelector } from './tab-selector.js';\nimport { TabPanelDirection } from './tab-panel-direction.js';\n\n/**\n * Tab coorespond au panel d'un élement Tabs (tab panel)\n * Tab étend disclosure qui ajoute/enleve le modifier --selected,\n * et ajoute/eleve l'attribut hidden, sur le panel\n */\nclass TabPanel extends api.core.Disclosure {\n constructor () {\n super(api.core.DisclosureType.SELECT, TabSelector.PANEL, TabButton, 'TabsGroup');\n this._direction = TabPanelDirection.NONE;\n this._isPreventingTransition = false;\n }\n\n static get instanceClassName () {\n return 'TabPanel';\n }\n\n get direction () {\n return this._direction;\n }\n\n set direction (value) {\n if (value === this._direction) return;\n switch (this._direction) {\n case TabPanelDirection.START:\n this.removeClass(TabSelector.PANEL_START);\n break;\n\n case TabPanelDirection.END:\n this.removeClass(TabSelector.PANEL_END);\n break;\n\n case TabPanelDirection.NONE:\n break;\n\n default:\n return;\n }\n\n this._direction = value;\n\n switch (this._direction) {\n case TabPanelDirection.START:\n this.addClass(TabSelector.PANEL_START);\n break;\n\n case TabPanelDirection.END:\n this.addClass(TabSelector.PANEL_END);\n break;\n }\n }\n\n get isPreventingTransition () {\n return this._isPreventingTransition;\n }\n\n set isPreventingTransition (value) {\n if (this._isPreventingTransition === value) return;\n if (value) this.addClass(api.internals.motion.TransitionSelector.NONE);\n else this.removeClass(api.internals.motion.TransitionSelector.NONE);\n this._isPreventingTransition = value === true;\n }\n\n translate (direction, initial) {\n this.isPreventingTransition = initial;\n this.direction = direction;\n }\n\n reset () {\n if (this.group) this.group.retrieve(true);\n }\n\n _electPrimaries (candidates) {\n if (!this.group || !this.group.list) return [];\n return super._electPrimaries(candidates).filter(candidate => this.group.list.node.contains(candidate.node));\n }\n}\n\nexport { TabPanel };\n","export const TabKeys = {\n LEFT: 'tab_keys_left',\n RIGHT: 'tab_keys_right',\n HOME: 'tab_keys_home',\n END: 'tab_keys_end'\n};\n","import api from '../../api.js';\n\nexport const TabEmission = {\n PRESS_KEY: api.internals.ns.emission('tab', 'press_key'),\n LIST_HEIGHT: api.internals.ns.emission('tab', 'list_height')\n};\n","import api from '../../api.js';\nimport { TabPanelDirection } from './tab-panel-direction.js';\nimport { TabKeys } from './tab-keys';\nimport { TabEmission } from './tab-emission';\n\n/**\n* TabGroup est la classe étendue de DiscosuresGroup\n* Correspond à un objet Tabs avec plusieurs tab-button & Tab (panel)\n*/\nclass TabsGroup extends api.core.DisclosuresGroup {\n constructor () {\n super('TabPanel');\n }\n\n static get instanceClassName () {\n return 'TabsGroup';\n }\n\n init () {\n super.init();\n\n this.listen('transitionend', this.transitionend.bind(this));\n this.addAscent(TabEmission.PRESS_KEY, this.pressKey.bind(this));\n this.addAscent(TabEmission.LIST_HEIGHT, this.setListHeight.bind(this));\n this.isRendering = true;\n }\n\n getIndex (defaultIndex = 0) {\n super.getIndex(defaultIndex);\n }\n\n get list () {\n return this.element.getDescendantInstances('TabsList', 'TabsGroup', true)[0];\n }\n\n setListHeight (value) {\n this.listHeight = value;\n }\n\n transitionend (e) {\n this.isPreventingTransition = true;\n }\n\n get buttonHasFocus () {\n return this.members.some(member => member.buttonHasFocus);\n }\n\n pressKey (key) {\n switch (key) {\n case TabKeys.LEFT:\n this.pressLeft();\n break;\n\n case TabKeys.RIGHT:\n this.pressRight();\n break;\n\n case TabKeys.HOME:\n this.pressHome();\n break;\n\n case TabKeys.END:\n this.pressEnd();\n break;\n }\n }\n\n /**\n * Selectionne l'element suivant de la liste si on est sur un bouton\n * Si on est à la fin on retourne au début\n */\n pressRight () {\n if (this.buttonHasFocus) {\n if (this.index < this.length - 1) {\n this.index++;\n } else {\n this.index = 0;\n }\n\n this.focus();\n }\n };\n\n /**\n * Selectionne l'element précédent de la liste si on est sur un bouton\n * Si on est au debut retourne a la fin\n */\n pressLeft () {\n if (this.buttonHasFocus) {\n if (this.index > 0) {\n this.index--;\n } else {\n this.index = this.length - 1;\n }\n\n this.focus();\n }\n };\n\n /**\n * Selectionne le permier element de la liste si on est sur un bouton\n */\n pressHome () {\n if (this.buttonHasFocus) {\n this.index = 0;\n this.focus();\n }\n };\n\n /**\n * Selectionne le dernier element de la liste si on est sur un bouton\n */\n pressEnd () {\n if (this.buttonHasFocus) {\n this.index = this.length - 1;\n this.focus();\n }\n };\n\n focus () {\n if (this.current) {\n this.current.focus();\n }\n }\n\n apply () {\n for (let i = 0; i < this._index; i++) this.members[i].translate(TabPanelDirection.START);\n if (this.current) this.current.translate(TabPanelDirection.NONE);\n for (let i = this._index + 1; i < this.length; i++) this.members[i].translate(TabPanelDirection.END);\n this.isPreventingTransition = false;\n }\n\n get isPreventingTransition () {\n return this._isPreventingTransition;\n }\n\n set isPreventingTransition (value) {\n if (this._isPreventingTransition === value) return;\n if (value) this.addClass(api.internals.motion.TransitionSelector.NONE);\n else this.removeClass(api.internals.motion.TransitionSelector.NONE);\n this._isPreventingTransition = value === true;\n }\n\n render () {\n if (this.current === null) return;\n this.node.scrollTop = 0;\n this.node.scrollLeft = 0;\n const paneHeight = Math.round(this.current.node.offsetHeight);\n if (this.panelHeight === paneHeight) return;\n this.panelHeight = paneHeight;\n this.style.setProperty('--tabs-height', (this.panelHeight + this.listHeight) + 'px');\n }\n}\n\nexport { TabsGroup };\n","import api from '../../api.js';\nimport { TabSelector } from './tab-selector';\nimport { TabKeys } from './tab-keys';\nimport { TabEmission } from './tab-emission';\n\nconst FOCALIZE_OFFSET = 16;\nconst SCROLL_OFFSET = 16; // valeur en px du scroll avant laquelle le shadow s'active ou se desactive\n\nclass TabsList extends api.core.Instance {\n static get instanceClassName () {\n return 'TabsList';\n }\n\n init () {\n this.listen('scroll', this.scroll.bind(this));\n this.listenKey(api.core.KeyCodes.RIGHT, this.ascend.bind(this, TabEmission.PRESS_KEY, TabKeys.RIGHT), true, true);\n this.listenKey(api.core.KeyCodes.LEFT, this.ascend.bind(this, TabEmission.PRESS_KEY, TabKeys.LEFT), true, true);\n this.listenKey(api.core.KeyCodes.HOME, this.ascend.bind(this, TabEmission.PRESS_KEY, TabKeys.HOME), true, true);\n this.listenKey(api.core.KeyCodes.END, this.ascend.bind(this, TabEmission.PRESS_KEY, TabKeys.END), true, true);\n this.isResizing = true;\n }\n\n focalize (btn) {\n const btnRect = btn.getRect();\n const listRect = this.getRect();\n const actualScroll = this.node.scrollLeft;\n if (btnRect.left < listRect.left) this.node.scrollTo(actualScroll - listRect.left + btnRect.left - FOCALIZE_OFFSET, 0);\n else if (btnRect.right > listRect.right) this.node.scrollTo(actualScroll - listRect.right + btnRect.right + FOCALIZE_OFFSET, 0);\n }\n\n get isScrolling () {\n return this._isScrolling;\n }\n\n set isScrolling (value) {\n if (this._isScrolling === value) return;\n this._isScrolling = value;\n this.apply();\n }\n\n apply () {\n if (this._isScrolling) {\n this.addClass(TabSelector.SHADOW);\n this.scroll();\n } else {\n this.removeClass(TabSelector.SHADOW_RIGHT);\n this.removeClass(TabSelector.SHADOW_LEFT);\n this.removeClass(TabSelector.SHADOW);\n }\n }\n\n /* ajoute la classe fr-table__shadow-left ou fr-table__shadow-right sur fr-table en fonction d'une valeur de scroll et du sens (right, left) */\n scroll () {\n const scrollLeft = this.node.scrollLeft;\n const isMin = scrollLeft <= SCROLL_OFFSET;\n const max = this.node.scrollWidth - this.node.clientWidth - SCROLL_OFFSET;\n\n const isMax = Math.abs(scrollLeft) >= max;\n const isRtl = document.documentElement.getAttribute('dir') === 'rtl';\n const minSelector = isRtl ? TabSelector.SHADOW_RIGHT : TabSelector.SHADOW_LEFT;\n const maxSelector = isRtl ? TabSelector.SHADOW_LEFT : TabSelector.SHADOW_RIGHT;\n\n if (isMin) {\n this.removeClass(minSelector);\n } else {\n this.addClass(minSelector);\n }\n\n if (isMax) {\n this.removeClass(maxSelector);\n } else {\n this.addClass(maxSelector);\n }\n }\n\n resize () {\n this.isScrolling = this.node.scrollWidth > this.node.clientWidth + SCROLL_OFFSET;\n const height = this.getRect().height;\n this.setProperty('--tabs-list-height', `${height}px`);\n this.ascend(TabEmission.LIST_HEIGHT, height);\n }\n\n dispose () {\n this.isScrolling = false;\n }\n}\n\nexport { TabsList };\n","import api from './api.js';\nimport { TabPanel } from './script/tab/tab-panel.js';\nimport { TabButton } from './script/tab/tab-button.js';\nimport { TabsGroup } from './script/tab/tabs-group.js';\nimport { TabsList } from './script/tab/tabs-list.js';\nimport { TabSelector } from './script/tab/tab-selector.js';\nimport { TabEmission } from './script/tab/tab-emission.js';\n\napi.tab = {\n TabPanel: TabPanel,\n TabButton: TabButton,\n TabsGroup: TabsGroup,\n TabsList: TabsList,\n TabSelector: TabSelector,\n TabEmission: TabEmission\n};\n\nexport default api;\n","import api from './index.js';\n\napi.internals.register(api.tab.TabSelector.PANEL, api.tab.TabPanel);\napi.internals.register(api.tab.TabSelector.GROUP, api.tab.TabsGroup);\napi.internals.register(api.tab.TabSelector.LIST, api.tab.TabsList);\n\nexport default api;\n"],"names":["const","api","window","TabButton","super","core","DisclosureType","SELECT","staticAccessors","instanceClassName","handleClick","e","this","focus","apply","value","isPrimary","setAttribute","list","focalize","prototypeAccessors","element","getAscendantInstance","DisclosureButton","TabSelector","TAB","internals","ns","selector","GROUP","PANEL","LIST","SHADOW","SHADOW_LEFT","SHADOW_RIGHT","PANEL_START","PANEL_END","TabPanelDirection","TabPanel","_direction","_isPreventingTransition","direction","removeClass","addClass","isPreventingTransition","motion","TransitionSelector","NONE","translate","initial","reset","group","retrieve","_electPrimaries","candidates","filter","candidate","node","contains","Disclosure","TabKeys","TabEmission","PRESS_KEY","emission","LIST_HEIGHT","TabsGroup","init","listen","transitionend","bind","addAscent","pressKey","setListHeight","isRendering","getIndex","defaultIndex","getDescendantInstances","listHeight","buttonHasFocus","members","some","member","key","pressLeft","pressRight","pressHome","pressEnd","index","length","current","let","i","_index","render","scrollTop","scrollLeft","paneHeight","Math","round","offsetHeight","panelHeight","style","setProperty","DisclosuresGroup","TabsList","scroll","listenKey","KeyCodes","RIGHT","ascend","LEFT","HOME","END","isResizing","btn","btnRect","getRect","listRect","actualScroll","left","scrollTo","right","isScrolling","_isScrolling","isMin","max","scrollWidth","clientWidth","isMax","abs","isRtl","document","documentElement","getAttribute","minSelector","maxSelector","resize","height","dispose","Instance","tab","register"],"mappings":";yBAAAA,ICCMC,EAAMC,OAAuB,KCM7BC,cACJ,aACEC,YAAMH,EAAII,KAAKC,eAAeC,6KAGhCC,EAAWC,iCACT,MAAO,yBAGTC,qBAAaC,GACXP,YAAMM,sBAAYC,GAClBC,KAAKC,qBAGPC,eAAOC,GACLX,YAAMU,gBAAMC,GACRH,KAAKI,YACPJ,KAAKK,aAAa,WAAYF,EAAQ,IAAM,MACxCA,GACEH,KAAKM,MAAMN,KAAKM,KAAKC,SAASP,QAKxCQ,EAAIF,oBACF,OAAON,KAAKS,QAAQC,qBAAqB,WAAY,qFAzBjCrB,EAAII,KAAKkB,kBCLpBC,EAAc,CACzBC,IAAKxB,EAAIyB,UAAUC,GAAGC,SAAS,aAC/BC,MAAO5B,EAAIyB,UAAUC,GAAGC,SAAS,QACjCE,MAAO7B,EAAIyB,UAAUC,GAAGC,SAAS,eACjCG,KAAM9B,EAAIyB,UAAUC,GAAGC,SAAS,cAChCI,OAAQ/B,EAAIyB,UAAUC,GAAGC,SAAS,gBAClCK,YAAahC,EAAIyB,UAAUC,GAAGC,SAAS,sBACvCM,aAAcjC,EAAIyB,UAAUC,GAAGC,SAAS,uBACxCO,YAAalC,EAAIyB,UAAUC,GAAGC,SAAS,gCACvCQ,UAAWnC,EAAIyB,UAAUC,GAAGC,SAAS,+BCX1BS,EACJ,kBADIA,EAEN,gBAFMA,EAGL,OCOFC,cACJ,aACElC,YAAMH,EAAII,KAAKC,eAAeC,OAAQiB,EAAYM,MAAO3B,EAAW,aACpES,KAAK2B,WAAaF,EAClBzB,KAAK4B,yBAA0B,qNAGjChC,EAAWC,iCACT,MAAO,YAGTW,EAAIqB,yBACF,OAAO7B,KAAK2B,YAGdnB,EAAIqB,uBAAW1B,GACb,GAAIA,IAAUH,KAAK2B,WAAnB,CACA,OAAQ3B,KAAK2B,YACX,KAAKF,EACHzB,KAAK8B,YAAYlB,EAAYW,aAC7B,MAEF,KAAKE,EACHzB,KAAK8B,YAAYlB,EAAYY,WAC7B,MAEF,KAAKC,EACH,MAEF,QACE,OAKJ,OAFAzB,KAAK2B,WAAaxB,EAEVH,KAAK2B,YACX,KAAKF,EACHzB,KAAK+B,SAASnB,EAAYW,aAC1B,MAEF,KAAKE,EACHzB,KAAK+B,SAASnB,EAAYY,cAKhChB,EAAIwB,sCACF,OAAOhC,KAAK4B,yBAGdpB,EAAIwB,oCAAwB7B,GACtBH,KAAK4B,0BAA4BzB,IACjCA,EAAOH,KAAK+B,SAAS1C,EAAIyB,UAAUmB,OAAOC,mBAAmBC,MAC5DnC,KAAK8B,YAAYzC,EAAIyB,UAAUmB,OAAOC,mBAAmBC,MAC9DnC,KAAK4B,yBAAoC,IAAVzB,gBAGjCiC,mBAAWP,EAAWQ,GACpBrC,KAAKgC,uBAAyBK,EAC9BrC,KAAK6B,UAAYA,eAGnBS,iBACMtC,KAAKuC,OAAOvC,KAAKuC,MAAMC,UAAS,gBAGtCC,yBAAiBC,cACf,OAAK1C,KAAKuC,OAAUvC,KAAKuC,MAAMjC,KACxBd,YAAMiD,0BAAgBC,GAAYC,iBAAOC,UAAa5C,EAAKuC,MAAMjC,KAAKuC,KAAKC,SAASF,EAAUC,SADzD,2EAnEzBxD,EAAII,KAAKsD,YCVnBC,EACL,gBADKA,EAEJ,iBAFIA,EAGL,gBAHKA,EAIN,eCFMC,EAAc,CACzBC,UAAW7D,EAAIyB,UAAUC,GAAGoC,SAAS,MAAO,aAC5CC,YAAa/D,EAAIyB,UAAUC,GAAGoC,SAAS,MAAO,gBCK1CE,cACJ,aACE7D,YAAM,2PAGRI,EAAWC,iCACT,MAAO,yBAGTyD,gBACE9D,YAAM8D,gBAENtD,KAAKuD,OAAO,gBAAiBvD,KAAKwD,cAAcC,KAAKzD,OACrDA,KAAK0D,UAAUT,EAAYC,UAAWlD,KAAK2D,SAASF,KAAKzD,OACzDA,KAAK0D,UAAUT,EAAYG,YAAapD,KAAK4D,cAAcH,KAAKzD,OAChEA,KAAK6D,aAAc,eAGrBC,kBAAUC,kBAAe,GACvBvE,YAAMsE,mBAASC,IAGjBvD,EAAIF,oBACF,OAAON,KAAKS,QAAQuD,uBAAuB,WAAY,aAAa,GAAM,gBAG5EJ,uBAAezD,GACbH,KAAKiE,WAAa9D,eAGpBqD,uBAAezD,GACbC,KAAKgC,wBAAyB,GAGhCxB,EAAI0D,8BACF,OAAOlE,KAAKmE,QAAQC,eAAKC,UAAUA,EAAOH,+BAG5CP,kBAAUW,GACR,OAAQA,GACN,KAAKtB,EACHhD,KAAKuE,YACL,MAEF,KAAKvB,EACHhD,KAAKwE,aACL,MAEF,KAAKxB,EACHhD,KAAKyE,YACL,MAEF,KAAKzB,EACHhD,KAAK0E,yBASXF,sBACMxE,KAAKkE,iBACHlE,KAAK2E,MAAQ3E,KAAK4E,OAAS,EAC7B5E,KAAK2E,QAEL3E,KAAK2E,MAAQ,EAGf3E,KAAKC,sBAQTsE,qBACMvE,KAAKkE,iBACHlE,KAAK2E,MAAQ,EACf3E,KAAK2E,QAEL3E,KAAK2E,MAAQ3E,KAAK4E,OAAS,EAG7B5E,KAAKC,sBAOTwE,qBACMzE,KAAKkE,iBACPlE,KAAK2E,MAAQ,EACb3E,KAAKC,sBAOTyE,oBACM1E,KAAKkE,iBACPlE,KAAK2E,MAAQ3E,KAAK4E,OAAS,EAC3B5E,KAAKC,sBAITA,iBACMD,KAAK6E,SACP7E,KAAK6E,QAAQ5E,qBAIjBC,iBACE,IAAK4E,IAAIC,EAAI,EAAGA,EAAI/E,KAAKgF,OAAQD,IAAK/E,KAAKmE,QAAQY,GAAG3C,UAAUX,GAC5DzB,KAAK6E,SAAS7E,KAAK6E,QAAQzC,UAAUX,GACzC,IAAKqD,IAAIC,EAAI/E,KAAKgF,OAAS,EAAGD,EAAI/E,KAAK4E,OAAQG,IAAK/E,KAAKmE,QAAQY,GAAG3C,UAAUX,GAC9EzB,KAAKgC,wBAAyB,GAGhCxB,EAAIwB,sCACF,OAAOhC,KAAK4B,yBAGdpB,EAAIwB,oCAAwB7B,GACtBH,KAAK4B,0BAA4BzB,IACjCA,EAAOH,KAAK+B,SAAS1C,EAAIyB,UAAUmB,OAAOC,mBAAmBC,MAC5DnC,KAAK8B,YAAYzC,EAAIyB,UAAUmB,OAAOC,mBAAmBC,MAC9DnC,KAAK4B,yBAAoC,IAAVzB,gBAGjC8E,kBACE,GAAqB,OAAjBjF,KAAK6E,QAAT,CACA7E,KAAK6C,KAAKqC,UAAY,EACtBlF,KAAK6C,KAAKsC,WAAa,EACvB/F,IAAMgG,EAAaC,KAAKC,MAAMtF,KAAK6E,QAAQhC,KAAK0C,cAC5CvF,KAAKwF,cAAgBJ,IACzBpF,KAAKwF,YAAcJ,EACnBpF,KAAKyF,MAAMC,YAAY,gBAAkB1F,KAAKwF,YAAcxF,KAAKiE,WAAc,gFA7I3D5E,EAAII,KAAKkG,kBCD3BC,+NACJhG,EAAWC,iCACT,MAAO,wBAGTyD,gBACEtD,KAAKuD,OAAO,SAAUvD,KAAK6F,OAAOpC,KAAKzD,OACvCA,KAAK8F,UAAUzG,EAAII,KAAKsG,SAASC,MAAOhG,KAAKiG,OAAOxC,KAAKzD,KAAMiD,EAAYC,UAAWF,IAAgB,GAAM,GAC5GhD,KAAK8F,UAAUzG,EAAII,KAAKsG,SAASG,KAAMlG,KAAKiG,OAAOxC,KAAKzD,KAAMiD,EAAYC,UAAWF,IAAe,GAAM,GAC1GhD,KAAK8F,UAAUzG,EAAII,KAAKsG,SAASI,KAAMnG,KAAKiG,OAAOxC,KAAKzD,KAAMiD,EAAYC,UAAWF,IAAe,GAAM,GAC1GhD,KAAK8F,UAAUzG,EAAII,KAAKsG,SAASK,IAAKpG,KAAKiG,OAAOxC,KAAKzD,KAAMiD,EAAYC,UAAWF,IAAc,GAAM,GACxGhD,KAAKqG,YAAa,eAGpB9F,kBAAU+F,GACRlH,IAAMmH,EAAUD,EAAIE,UACdC,EAAWzG,KAAKwG,UAChBE,EAAe1G,KAAK6C,KAAKsC,WAC3BoB,EAAQI,KAAOF,EAASE,KAAM3G,KAAK6C,KAAK+D,SAASF,EAAeD,EAASE,KAAOJ,EAAQI,KArBxE,GAqBgG,GAC3GJ,EAAQM,MAAQJ,EAASI,OAAO7G,KAAK6C,KAAK+D,SAASF,EAAeD,EAASI,MAAQN,EAAQM,MAtBhF,GAsByG,IAG/HrG,EAAIsG,2BACF,OAAO9G,KAAK+G,cAGdvG,EAAIsG,yBAAa3G,GACXH,KAAK+G,eAAiB5G,IAC1BH,KAAK+G,aAAe5G,EACpBH,KAAKE,sBAGPA,iBACMF,KAAK+G,cACP/G,KAAK+B,SAASnB,EAAYQ,QAC1BpB,KAAK6F,WAEL7F,KAAK8B,YAAYlB,EAAYU,cAC7BtB,KAAK8B,YAAYlB,EAAYS,aAC7BrB,KAAK8B,YAAYlB,EAAYQ,sBAKjCyE,kBACEzG,IAAM+F,EAAanF,KAAK6C,KAAKsC,WACvB6B,EAAQ7B,GAhDI,GAiDZ8B,EAAMjH,KAAK6C,KAAKqE,YAAclH,KAAK6C,KAAKsE,YAjD5B,GAmDZC,EAAQ/B,KAAKgC,IAAIlC,IAAe8B,EAChCK,EAAyD,QAAjDC,SAASC,gBAAgBC,aAAa,OAC9CC,EAAcJ,EAAQ1G,EAAYU,aAAeV,EAAYS,YAC7DsG,EAAcL,EAAQ1G,EAAYS,YAAcT,EAAYU,aAE9D0F,EACFhH,KAAK8B,YAAY4F,GAEjB1H,KAAK+B,SAAS2F,GAGZN,EACFpH,KAAK8B,YAAY6F,GAEjB3H,KAAK+B,SAAS4F,gBAIlBC,kBACE5H,KAAK8G,YAAc9G,KAAK6C,KAAKqE,YAAclH,KAAK6C,KAAKsE,YAtEnC,GAuElB/H,IAAMyI,EAAS7H,KAAKwG,UAAUqB,OAC9B7H,KAAK0F,YAAY,qBAAyBmC,QAC1C7H,KAAKiG,OAAOhD,EAAYG,YAAayE,gBAGvCC,mBACE9H,KAAK8G,aAAc,0EA3EAzH,EAAII,KAAKsI,UCAhC1I,EAAI2I,IAAM,CACRtG,SAAUA,EACVnC,UAAWA,EACX8D,UAAWA,EACXuC,SAAUA,EACVhF,YAAaA,EACbqC,YAAaA,GCZf5D,EAAIyB,UAAUmH,SAAS5I,EAAI2I,IAAIpH,YAAYM,MAAO7B,EAAI2I,IAAItG,UAC1DrC,EAAIyB,UAAUmH,SAAS5I,EAAI2I,IAAIpH,YAAYK,MAAO5B,EAAI2I,IAAI3E,WAC1DhE,EAAIyB,UAAUmH,SAAS5I,EAAI2I,IAAIpH,YAAYO,KAAM9B,EAAI2I,IAAIpC"}