{"version":3,"file":"legacy.stats.B55uf0mW.js","names":[],"sources":["../../src/legacy/highcharts/hcbasetheme.es6.js","../../src/legacy/highcharts/themes/hcareaspline.es6.js","../../src/legacy/highcharts/themes/hcsplinecolumn.es6.js","../../src/legacy/highcharts/themes/hcgroupedcolumns.es6.js","../../src/legacy/react/stats/utils/poller.es6.js","../../src/legacy/react/stats/utils/odo.es6.js","../../src/legacy/stats.es6.js","../../src/legacy/react/stats/components/HeaderView.js","../../src/legacy/react/stats/components/ItemView.js","../../src/legacy/react/stats/components/RowView.js","../../src/legacy/react/stats/components/LinearTableView.js","../../src/legacy/react/stats/components/LabelView.js","../../src/legacy/react/stats/components/DataView.js","../../src/legacy/react/stats/components/ColumnView.js","../../src/legacy/react/stats/components/ComparisonTableView.js","../../src/legacy/react/stats/components/stats.js"],"sourcesContent":["'use strict';\n\nclass HCBaseTheme {\n constructor() {\n let options = {\n chart: {\n height: 240,\n style: {\n fontFamily: '\"Helvetica\", \"Arial\", sans-serif'\n }\n },\n credits: {\n enabled: false\n },\n exporting: {\n enabled: false\n },\n title: {\n text: ''\n },\n plotOptions: {\n series: {\n pointPadding: 0,\n groupPadding: 0\n }\n },\n xAxis: {\n allowDecimals: false,\n tickLength: 0,\n title: null,\n labels: {\n groupedOptions: [{\n style: {\n color: '#222222',\n fontSize: '12px',\n fontWeight: 200\n }\n }],\n style: {\n color: '#222222',\n fontSize: '12px',\n fontWeight: 200\n }\n }\n },\n yAxis: {\n allowDecimals: false,\n endOnTick: true,\n title: null,\n gridLineColor: '#F3F3F3',\n showFirstLabel: false,\n tickPixelInterval: 50,\n labels: {\n style: {\n color: '#222222',\n fontSize: '12px',\n fontWeight: 200\n }\n }\n },\n tooltip: {\n shared: false,\n backgroundColor: '#BBBBBB',\n borderRadius: 12,\n borderWidth: 0,\n shadow: false,\n useHTML: true,\n style: {\n color: '#FFFFFF'\n }\n },\n legend: {\n enabled: false\n }\n };\n\n Highcharts.setOptions(options);\n }\n\n drawChart(container, options, callback) {\n $(() => { // Prevents errors with undefined $(container).highcharts\n $(container).highcharts(options, callback);\n this.chart = $(container).highcharts();\n })\n }\n\n setAdditionalOptions(options) {\n $.extend(true, this.options, options);\n return this;\n }\n\n // Definitions for formatters that are/might be reused\n static simpleFormattedNumberTooltip() {\n return `

${accounting.formatNumber(this.y)}

`;\n }\n\n static groupedColumnsTooltip() {\n const leftTranslations = this.series.chart.series[0].options.translations;\n const rightTranslations = this.series.chart.series[1].options.translations;\n\n const leftValue = this.series.chart.series[0].points[this.point.index].y;\n const rightValue = this.series.chart.series[1].points[this.point.index].y;\n\n const leftLabel = Stats.pluralize(leftTranslations[0], leftTranslations[1], leftValue)\n const rightLabel = Stats.pluralize(rightTranslations[0], rightTranslations[1], rightValue);\n\n const gap = accounting.formatNumber((rightValue / leftValue) * 100, 2);\n\n return `

${leftValue} ${leftLabel}

\n

${rightValue} ${rightLabel}

\n

${gap}%

`;\n }\n}\n\nexport default HCBaseTheme;\n","/* global $ */\n'use strict;'\n\nimport HCBaseTheme from '../hcbasetheme.es6.js';\n\nclass HCAreaSpline extends HCBaseTheme {\n constructor(container) {\n super();\n\n this.container = container;\n\n this.options = {\n chart: {\n type: 'areaspline'\n },\n plotOptions: {\n areaspline: {\n color: {\n linearGradient: { x1: 0, x2: 1, y1: 0, y2: 0 },\n stops: [\n [0, '#D6F1FD'],\n [1, '#64C9F5']\n ]\n },\n marker: {\n enabled: false,\n states: {\n hover: {\n enabled: false\n }\n }\n },\n states: {\n hover: {\n lineWidthPlus: 0\n }\n }\n }\n },\n yAxis: {\n labels: {\n format: '{value}'\n }\n }\n };\n\n this.paths = [];\n this._drawAreaColumns = this._drawAreaColumns.bind(this);\n\n this._resizeEventHandler();\n }\n\n drawChart() {\n super.drawChart(this.container, this.options, this._drawAreaColumns);\n return this;\n }\n\n _resizeEventHandler() {\n let resizeTimer;\n\n $(window).on('resize', (e) => {\n clearTimeout(resizeTimer);\n resizeTimer = setTimeout(() => {\n this._drawAreaColumns($(this.container).highcharts());\n }, 150);\n });\n }\n\n _drawAreaColumns(chart) {\n (this.paths).forEach((path, index) => {\n path.element.remove();\n });\n\n (chart.series[0].data).forEach((point, index) => {\n const pos = chart.plotBox.x + point.plotX;\n\n let path = chart.renderer.path(['M', pos, 0, 'V', chart.chartHeight])\n .attr({\n 'stroke-width': 1,\n stroke: 'white',\n zIndex: 4\n })\n .add();\n\n this.paths.push(path);\n });\n }\n}\n\nexport default HCAreaSpline;\n","'use strict';\n\nimport HCBaseTheme from '../hcbasetheme.es6.js';\n\n/* global lang */\nclass HCSplineColumn extends HCBaseTheme {\n constructor(container, highlightToday=false) {\n super();\n\n let self = this;\n let baseColor;\n\n this.container = container;\n this.highlightToday = highlightToday;\n\n this.options = {\n plotOptions: {\n column: {\n animation: false,\n color: '#F0F0F0'\n },\n spline: {\n animation: {\n duration: 2500\n },\n color: '#B4B4B4',\n cursor: 'pointer',\n lineWidth: 1,\n marker: {\n fillColor: '#18A5D6',\n radius: 5\n }\n },\n series: {\n point: {\n events: {\n mouseOver() {\n const chart = $(container).highcharts();\n baseColor = chart.series[0].data[this.x].graphic.attr('fill');\n chart.series[0].data[this.x].graphic.attr({ fill: '#CBE4F0' });\n },\n mouseOut() {\n const chart = $(container).highcharts();\n chart.series[0].data[this.x].graphic.attr({ fill: baseColor });\n }\n },\n },\n states: {\n hover: {\n lineWidth: 1\n }\n }\n }\n },\n yAxis: [{\n floor: 0\n }, {\n linkedTo: 0,\n labels: {\n enabled: false\n }\n }],\n series: [{\n type: 'column',\n yAxis: 1,\n enableMouseTracking: false\n }, {\n type: 'spline'\n }]\n };\n\n this._highlightCurrentDate = this._highlightCurrentDate.bind(this);\n\n if (this.highlightToday === true) {\n this.options.chart = {\n events: {\n redraw() {\n self._highlightCurrentDate();\n }\n }\n }\n }\n }\n\n drawChart() {\n if (this.highlightToday === true) {\n super.drawChart(this.container, this.options, this._highlightCurrentDate);\n } else {\n super.drawChart(this.container, this.options);\n }\n\n return this;\n }\n\n _highlightCurrentDate() {\n const chart = $(this.container).highcharts();\n const columns = chart.series[0].data;\n\n for (let i = 0; i < columns.length; ++i) {\n let column = columns[i];\n\n if (column.category.name === moment().lang(lang).format('L')) {\n column.graphic.attr({ fill: '#C9EAC9' });\n } else {\n column.graphic.attr({ fill: '#F0F0F0' });\n }\n }\n }\n}\n\nexport default HCSplineColumn;\n","'use strict';\n\nimport HCBaseTheme from '../hcbasetheme.es6.js';\n\nclass HCGroupedColumns extends HCBaseTheme {\n constructor(container) {\n super();\n\n this.container = container;\n\n this.options = {\n chart: {\n type: 'column'\n },\n plotOptions: {\n series: {\n point: {\n events: {\n mouseOver() {\n HCGroupedColumns._changeColumnColor($(container), '#18A5D6', '#0071A4', this);\n },\n mouseOut() {\n HCGroupedColumns._changeColumnColor($(container), '#F0F0F0', '#D5D5D5', this);\n }\n }\n },\n states: {\n hover: {\n enabled: false\n }\n }\n }\n },\n series: [{\n color: '#F0F0F0',\n stack: 'left'\n }, {\n color: '#D5D5D5',\n stack: 'right'\n }]\n };\n }\n\n drawChart() {\n super.drawChart(this.container, this.options);\n return this;\n }\n\n static _changeColumnColor(container, firstColor, secondColor, self) {\n let chart = container.highcharts();\n chart.series[0].data[self.x].graphic.attr({ fill: firstColor });\n chart.series[1].data[self.x].graphic.attr({ fill: secondColor });\n }\n}\n\nexport default HCGroupedColumns;\n","'use strict';\n/**\n * @desc (Object) Options object\n * @TODO Add XHR support :)\n*/\nclass Poller {\n constructor(options) {\n if (!options || !options.url) {\n console.log('[Poller] Missing options or URL.');\n return null;\n }\n\n this.url = options.url;\n\n this.maxRetries = options.maxRetries === undefined ? 3 : options.maxRetries;\n this.retryInterval = options.retryInterval || 1000;\n this.pollTime = options.pollTime || 10000;\n this.onSuccess = options.onSuccess || null;\n this.onError = options.onError || null;\n this.onPoll = options.onPoll || null;\n this.onFail = options.onFail || null;\n\n // Inner state\n this.failed = false;\n this.polling = false;\n this.failCount = 0;\n this.pollTimer = null;\n\n // Save options if we need em someday, dunno, bbq dawg\n this.options = options;\n\n this.create();\n }\n\n create(interval) {\n interval = interval || 0;\n\n if (this.pollTimer) {\n clearTimeout(this.pollTimer);\n }\n\n this.pollTimer = setTimeout(() => {\n this.doPoll(this);\n }, this.pollTime + interval);\n }\n\n doPoll(self) {\n this.polling = true;\n\n if (this.onPoll !== null) {\n this.onPoll();\n }\n\n $.getJSON(self.url, (data) => {\n self.doSuccess(data);\n }).fail((data) => {\n self.doRetry(data);\n });\n }\n\n doRetry(e) {\n this.polling = false;\n\n if (this.failCount === this.maxRetries) {\n console.log(`[Poller] URL exceeded maxRetries (${this.maxRetries}), stopping.`);\n this.doFail(e);\n } else {\n console.log(`[Poller] URL failed, retrying (${this.failCount}/${this.maxRetries})`);\n this.create(this.retryInterval);\n }\n\n if (this.onError) {\n this.onError(e);\n }\n\n this.failCount++;\n }\n\n doFail(e) {\n this.failed = true;\n this.polling = false;\n this.remove();\n\n if (this.onFail !== null) {\n this.onFail(e);\n }\n }\n\n doSuccess(s) {\n this.failCount = 0;\n this.polling = false;\n this.create(this.retryInterval);\n\n if (this.onSuccess !== null) {\n this.onSuccess(s);\n }\n }\n\n remove() {\n if (this.pollTimer) {\n clearTimeout(this.pollTimer);\n this.pollTimer = null;\n }\n }\n}\n\nexport default Poller;\n\nwindow.Poller = Poller;\n","'use strict';\n/**\n * @desc (String) String for the Odo element\n * @desc (Object) Options object\n * @desc (Function) Overload setup function (Odometer)\n */\nclass Odo {\n constructor(elm, options) {\n if (!elm || !options) {\n return null;\n }\n\n this.elm = document.querySelector(elm);\n this.options = options;\n this.setup();\n }\n\n setup() {\n this.odometer = new Odometer({\n el: this.elm,\n value: 0,\n theme: 'default',\n format: this.options.format || '',\n duration: this.options.duration || '1000'\n });\n\n this.update();\n }\n\n update(v) {\n if (v) {\n this.odometer.update(v);\n } else {\n this.odometer.update(this.options.value);\n }\n }\n}\n\nexport default Odo;\n","'use strict';\n\nimport accounting from 'accounting'\nimport HCBaseTheme from './highcharts/hcbasetheme.es6.js';\nimport HCAreaSpline from './highcharts/themes/hcareaspline.es6.js';\nimport HCSplineColumn from './highcharts/themes/hcsplinecolumn.es6.js';\nimport HCGroupedColumns from './highcharts/themes/hcgroupedcolumns.es6.js';\nimport Poller from './react/stats/utils/poller.es6.js';\nimport Odo from './react/stats/utils/odo.es6.js';\n\nwindow.accounting = accounting\nwindow.Swipe = Swipe\n\n/*global Odometer, Poller, window */\nclass Stats {\n constructor(options) {\n if (!options.url) {\n console.log('[Stats] Cannot init, no URL');\n return null;\n }\n\n this.url = options.url;\n this.dataset = options.data;\n this.currentLang = options.langCode;\n this.translations = options.translations || {};\n this.showLastMonth = options.showLastMonth || false;\n\n this.datum = [];\n this.graphs = {};\n this.odometers = {};\n\n this.currency = options.currentCurrency;\n\n this.hcwrapper = new HCBaseTheme();\n\n this._initPoller();\n this._initOdometers();\n this._drawCharts()\n this._updateTextData();\n\n Stats.reloadSprites();\n\n this._handleCurrencyChange();\n }\n\n static pluralize(singular, plural, count) {\n return (count === 1) ? singular : plural;\n }\n\n static reloadSprites() {\n let sprites = document.querySelectorAll('main i');\n\n [].forEach.call(sprites, (sprite, index) => {\n if (window.innerWidth <= 320) {\n sprite.className = 'sprite-stats-' + sprite.className;\n } else {\n sprite.className = 'sprite-stats-big-' + sprite.className;\n }\n });\n }\n\n static sortObject(source) {\n let keys = [];\n let result = {};\n\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n keys.push(key);\n }\n }\n\n keys.sort();\n\n $.each(keys, (i, key) => {\n result[key] = source[key];\n });\n\n return result;\n }\n\n static selectPeriod(endDate, period, datum) {\n let selection = [];\n\n const startDate = moment(endDate).subtract('months', period).toDate();\n const years = Stats.sortObject(Stats.parseSelection(startDate, endDate, datum));\n\n for (const year in years) {\n selection.push({key: year, value: years[year]})\n }\n\n return selection;\n }\n\n static parseSelection(first, current, datum) {\n const firstYear = first.getFullYear();\n const firstMonth = first.getMonth() + 1;\n const currentYear = current.getFullYear();\n const currentMonth = current.getMonth() + 1;\n\n let months = [];\n let years = {};\n\n var entry = {};\n\n let selectMonths = function(range) {\n if (entry.year === currentYear) {\n if (range.month <= currentMonth) {\n return range;\n }\n }\n else if (entry.year === firstYear) {\n if (range.month >= firstMonth) {\n return range;\n }\n }\n else {\n return range;\n }\n };\n\n for (let i = 0; i < datum.length; ++i) {\n entry = datum[i];\n\n if (entry.year >= firstYear && entry.year <= currentYear) {\n months = entry.months.filter(selectMonths);\n years[entry.year] = months;\n } else {\n continue;\n }\n }\n\n return years;\n }\n\n static flatten(array, callback) {\n let result = [];\n\n for (let i = 0; i < array.length; ++i) {\n const year = array[i];\n for (let j = 0; j < year.value.length; ++j) {\n const month = year.value[j];\n callback(result, year, month);\n }\n }\n\n return result;\n }\n\n static combine(date, value) {\n let res = [];\n\n for (let i = 0, len = value.length; i < len; ++i) {\n const obj = {\n 'date': date[i],\n 'value': value[i]\n };\n res.push(obj);\n }\n\n return res;\n }\n\n _handleCurrencyChange() {\n let currenciesSelectors = $('.currency-selector span');\n\n currenciesSelectors.on('click', ((e) => {\n let selector = $(e.target);\n let selectedCurrency = selector.attr(\"data-currency\");\n\n if (selectedCurrency === this.currency) return;\n\n this.currency = selectedCurrency;\n $('.currency-selector span').removeClass('active');\n selector.addClass('active');\n\n accounting.settings.currency.symbol = selector.text();\n\n this.cumulCollectedFundsChartUpdate();\n\n this._updateTextData();\n this.odometers.collectedFunds.update(this.dataset.amount_raised[this.currency]);\n\n document.querySelector('#graph-cumul-collected-funds header span').textContent = accounting.formatMoney(this.dataset.amount_raised[this.currency]);\n }).bind(this))\n }\n\n _setFlatten(selection, callback) {\n return Stats.combine(\n Stats.flatten(selection, ((result, year, month) => {\n let date = new Date(parseInt(year.key, 10), parseInt(month.month, 10) - 1, 1);\n date.label = month.languages_abbrv[this.currentLang];\n date.legend = month.languages[this.currentLang];\n\n result.push(date);\n }).bind(this)),\n Stats.flatten(selection, (result, year, month) => {\n result.push(callback(month));\n })\n );\n }\n\n cumulCollectedFundsChart(selection) {\n const data = this._setFlatten(selection, (m) => {\n return [m.amount_raised_cumulated[this.currency], m.amount_raised[this.currency]];\n });\n\n let chart = new HCAreaSpline($('#graph-cumul-collected-funds > .graph-container.chart'));\n\n chart.setAdditionalOptions({\n chart: {\n height: 320\n },\n xAxis: {\n labels: {\n style: {\n color: 'transparent',\n fontSize: '3px'\n }\n },\n categories: selection.map((entry, index) => {\n return {\n name: entry.key,\n categories: entry.value.map((entry, index) => {\n return entry.languages[this.currentLang];\n })\n }\n })\n },\n yAxis: {\n labels: {\n formatter() {\n return accounting.formatMoney(this.value);\n }\n }\n },\n tooltip: {\n formatter() {\n const cumul = accounting.formatMoney(this.y);\n const diff = accounting.formatMoney(data[this.point.index].value[1]);\n return `

${this.x}

\n

${cumul}

\n

${diff}

`\n }\n },\n series: [{\n data: data.map((entry, index) => {\n return entry.value[0];\n })\n }]\n })\n .drawChart();\n\n this.graphs.cumulCollectedFundsChart = chart;\n }\n\n cumulCollectedFundsChartUpdate() {\n const selection = Stats.selectPeriod(moment().toDate(), 36, this.datum);\n\n const data = this._setFlatten(selection, (m) => {\n return [m.amount_raised_cumulated[this.currency], m.amount_raised[this.currency]];\n });\n\n this.graphs.cumulCollectedFundsChart.chart.series[0].setData(data.map((entry, index) => {\n return entry.value[0]\n }));\n }\n\n collectedFundsChart(selection, showLastMonth) {\n const data = this._setFlatten(selection, (m) => {\n return m.amount_raised[this.currency];\n });\n\n let chart = new HCSplineColumn($('#graph-collected-funds > .graph-container.chart'));\n\n chart.setAdditionalOptions({\n xAxis: {\n labels: {\n style: {\n color: 'transparent',\n fontSize: '3px'\n }\n },\n categories: selection.map((entry, index) => {\n return {\n name: entry.key,\n categories: entry.value.map((entry, index) => {\n return entry.languages[this.currentLang];\n })\n }\n })\n },\n yAxis: [{\n labels: {\n formatter() {\n return accounting.formatMoney(this.value);\n }\n }\n }, {}],\n tooltip: {\n formatter() {\n const value = accounting.formatMoney(this.y);\n return `

${this.x}

\n

${value}

`;\n }\n },\n series: [{\n data: data.map((entry, index) => {\n return entry.value;\n })\n }, {\n data: data.map((entry, index) => {\n return entry.value;\n })\n }]\n })\n .drawChart();\n\n this.graphs.collectedFundsChart = chart;\n }\n\n presalesChart(selection) {\n const data = this._setFlatten(selection, (m) => {\n return m.contributions_count;\n });\n\n let chart = new HCAreaSpline($('#graph-presales > .graph-container.chart'));\n\n chart.setAdditionalOptions({\n xAxis: {\n categories: data.map((entry, index) => {\n return entry.date.label;\n })\n },\n yAxis: {\n labels: {\n formatter() {\n return accounting.formatNumber(this.value);\n }\n }\n },\n tooltip: {\n formatter: HCBaseTheme.simpleFormattedNumberTooltip\n },\n series: [{\n data: data.map((entry, index) => {\n return entry.value;\n })\n }]\n })\n .drawChart();\n }\n\n projectsCountChart(selection) {\n const data = this._setFlatten(selection, (m) => {\n return [m.projects_started_count, m.projects_success_count, m.projects_success_percent];\n });\n\n let chart = new HCGroupedColumns($('#graph-projects > .graph-container.chart'));\n\n chart.setAdditionalOptions({\n xAxis: {\n categories: data.map((entry, index) => {\n return entry.date.label;\n })\n },\n tooltip: {\n formatter: HCBaseTheme.groupedColumnsTooltip\n },\n series: [{\n translations: this.translations.started,\n data: data.map((entry, index) => {\n return entry.value[0];\n })\n }, {\n translations: this.translations.funded,\n data: data.map((entry, index) => {\n return entry.value[1];\n })\n }]\n })\n .drawChart();\n }\n\n proposalsCountChart(selection) {\n const data = this._setFlatten(selection, (m) => {\n return [m.proposals_started_count, m.proposals_accepted_count, m.proposals_accepted_percent];\n });\n\n let chart = new HCGroupedColumns($('#graph-proposals > .graph-container.chart'));\n\n chart.setAdditionalOptions({\n xAxis: {\n categories: data.map((entry, index) => {\n return entry.date.label;\n })\n },\n tooltip: {\n formatter: HCBaseTheme.groupedColumnsTooltip\n },\n series: [{\n translations: this.translations.started,\n data: data.map((entry, index) => {\n return entry.value[0];\n })\n }, {\n translations: this.translations.accepted,\n data: data.map((entry, index) => {\n return entry.value[1];\n })\n }]\n })\n .drawChart();\n }\n\n _initPoller() {\n let plr = new Poller({\n url: this.url,\n onSuccess: ((s) => {\n this.odometers.collectedFunds.update(s.amount_raised[this.currency]);\n this.odometers.projectsFunded.update(s.projects_success_count);\n this.odometers.projectsFunding.update(s.projects_started_count);\n this.odometers.totalMembers.update(s.users_count);\n }).bind(this),\n maxRetries: 3,\n pollTime: 30000\n });\n }\n\n _drawCharts() {\n this.datum = this.dataset.years.slice().reverse();\n const endDate = moment().toDate();\n\n if (document.querySelector('#graph-cumul-collected-funds') !== null) {\n const selection = Stats.selectPeriod(endDate, 36, this.datum);\n this.cumulCollectedFundsChart(selection);\n document.querySelector('#graph-cumul-collected-funds header span').textContent = accounting.formatMoney(this.dataset.amount_raised[this.currency]);\n }\n\n if (document.querySelector('#graph-presales') !== null) {\n const selection = Stats.selectPeriod(endDate, 12, this.datum);\n this.presalesChart(selection);\n document.querySelector('#graph-presales header span').textContent = accounting.formatNumber(this.dataset.contributions_count);\n }\n\n if (document.querySelector('#graph-projects') !== null) {\n const selection = Stats.selectPeriod(endDate, 12, this.datum);\n this.projectsCountChart(selection);\n document.querySelector('#graph-projects .graph-selector .started span').textContent = accounting.formatNumber(this.dataset.projects_started_count);\n document.querySelector('#graph-projects .graph-selector .funded span').textContent = accounting.formatNumber(this.dataset.projects_success_count);\n }\n\n if (document.querySelector('#graph-proposals') !== null) {\n const selection = Stats.selectPeriod(endDate, 12, this.datum);\n this.proposalsCountChart(selection);\n document.querySelector('#graph-proposals .graph-selector .accepted span').textContent = accounting.formatNumber(this.dataset.proposals_accepted_count);\n document.querySelector('#graph-proposals .graph-selector .started span').textContent = accounting.formatNumber(this.dataset.proposals_started_count);\n }\n }\n\n _initOdometers() {\n this.odometers.collectedFunds = new Odo('#counter-collected-funds .stats-counter', {\n duration: 1600,\n format: '( ddd),dd',\n value: this.dataset.amount_raised[this.currency]\n });\n\n this.odometers.successRate = new Odo('#counter-success-rate .stats-counter', {\n duration: 1400,\n format: '',\n value: Math.round(this.dataset.years[(this.dataset.years.length - 1)].projects_success_percent)\n });\n\n this.odometers.projectsFunded = new Odo('#counter-projects-funded .stats-counter', {\n duration: 1800,\n format: '( ddd),dd',\n value: this.dataset.projects_success_count\n });\n\n this.odometers.projectsFunding = new Odo('#counter-projects-funding .stats-counter', {\n duration: 2400,\n format: '( ddd),dd',\n value: this.dataset.projects_started_count\n });\n\n this.odometers.totalMembers = new Odo('#counter-total-members .stats-counter', {\n duration: 2200,\n format: '( ddd),dd',\n value: this.dataset.users_count\n });\n }\n\n _updateTextData() {\n document.querySelector('#contrib-moy').textContent = accounting.formatMoney(this.dataset.amount_avg[this.currency]);\n document.querySelector('#current_year').textContent = this.dataset.years[(this.dataset.years.length - 1)].year;\n document.querySelector('#total-members').textContent = accounting.formatNumber(this.dataset.users_count);\n\n const currency = this.dataset.currencies.find(currency => currency.value === this.currency);\n if (currency) {\n document.querySelector('#counter-collected-funds .currency-value').textContent = currency.label;\n }\n }\n}\n\nexport default Stats;\n\nwindow.Stats = Stats;\nwindow.dispatchEvent(new Event('stats-loaded'));\n","\"use strict\";\n\nimport React from 'react';\n\n\nclass HeaderView extends React.Component {\n render() {\n let headers = this.props.headers.map((header, index) =>\n
  • \n {header}\n
  • \n );\n\n return (\n \n );\n }\n}\n\nexport default HeaderView;\n","\"use strict\";\n\nimport React from 'react';\n\n\nclass ItemView extends React.Component {\n render() {\n return (\n
  • {this.props.children}
  • \n );\n }\n}\n\nexport default ItemView;\n","\"use strict\";\n\nimport React from 'react';\nimport ItemView from './ItemView.js';\n\n\nclass RowView extends React.Component {\n render() {\n let items = this.props.data.map((item, index) =>\n \n {item}\n \n );\n\n return (\n \n );\n }\n}\n\nexport default RowView;\n","\"use strict\";\n\nimport React from 'react';\nimport HeaderView from './HeaderView.js';\nimport RowView from './RowView.js';\n\n\nclass LinearTableView extends React.Component {\n render() {\n let rows = this.props.rows.map((row, index) =>\n
    \n

    {row.label}

    \n \n
    \n );\n\n return (\n
    \n
    \n \n
    \n {rows}\n
    \n );\n }\n}\n\nexport default LinearTableView;\n","\"use strict\";\n\nimport React from 'react';\n\n\nclass LabelView extends React.Component {\n render() {\n let labels = this.props.labels.map((label, i) =>\n
  • {label}
  • \n );\n\n return (\n \n );\n }\n}\n\nexport default LabelView;\n","\"use strict\";\n\nimport React from 'react';\n\n\nclass DataView extends React.Component {\n render() {\n let column = this.props.column.data.map((data, i) =>\n
  • {data}
  • \n );\n\n return (\n \n );\n }\n}\n\nexport default DataView;\n","\"use strict\";\n\nimport React from 'react';\nimport DataView from './DataView.js';\n\n\nclass ColumnView extends React.Component {\n render() {\n let data = this.props.columns.map((column, i) =>\n \n );\n\n return (\n
    \n
    \n {data}\n
    \n \n \n
    \n );\n }\n}\n\nexport default ColumnView;\n","\"use strict\";\n\nimport React from 'react';\nimport LabelView from './LabelView.js';\nimport ColumnView from './ColumnView.js';\n\n\nclass ComparisonTableView extends React.Component {\n render() {\n return (\n
    \n
    \n {this.props.title}\n
    \n\n
    \n \n \n \n
    \n
    \n );\n }\n}\n\nexport default ComparisonTableView;\n","'use strict'\n\nimport * as React from 'react'\nimport * as ReactDOM from 'react-dom/client'\nimport LinearTableView from './LinearTableView.js'\nimport ComparisonTableView from './ComparisonTableView.js'\n\nclass ReactStats extends React.Component {\n constructor(dataset, objects, language, yearLimit) {\n super()\n\n this.dataset = dataset\n this.objects = objects\n this.language = language\n this.sortedCategories = this.dataset.categories.slice().sort((a, b) => b.amount_raised.EUR - a.amount_raised.EUR)\n }\n\n renderYearsTable(container, legend, yearLimit = 5) {\n let years = { ...this.dataset.years }\n\n years = Object.assign([], years).reverse()\n years = Object.values(years).slice(0, yearLimit)\n\n let headers = Object.values(years).map((year) => {\n return year.year\n })\n headers.unshift(legend)\n\n let totals = Object.values(this.objects).map(\n ((object) => {\n return {\n label: object.label,\n data: Object.values(years).map((year) => object.data(year)),\n total: object.total,\n }\n }).bind(this)\n )\n\n for (let i = 0; i < totals.length; ++i) {\n let total = totals[i]\n total.data.unshift(total.total)\n }\n\n const root = ReactDOM.createRoot(container)\n root.render()\n }\n\n renderCategoriesTable(container, title) {\n let categories = Object.values(this.objects).map(\n ((object) => {\n return {\n label: object.label,\n data: this.sortedCategories.map(object.data),\n }\n }).bind(this)\n )\n\n let labels = Object.values(this.sortedCategories).map(\n ((category) => {\n return category.labels[this.language] || category.name\n }).bind(this)\n )\n\n const root = ReactDOM.createRoot(container)\n root.render()\n }\n}\n\nexport default ReactStats\n\nwindow.ReactStats = ReactStats\n"],"mappings":"sgBAEM,EAAN,KAAkB,CAChB,aAAc,CAyEZ,WAAW,WAAW,CAvEpB,MAAO,CACL,OAAQ,IACR,MAAO,CACL,WAAY,kCACd,CACF,EACA,QAAS,CACP,QAAS,EACX,EACA,UAAW,CACT,QAAS,EACX,EACA,MAAO,CACL,KAAM,EACR,EACA,YAAa,CACX,OAAQ,CACN,aAAc,EACd,aAAc,CAChB,CACF,EACA,MAAO,CACL,cAAe,GACf,WAAY,EACZ,MAAO,KACP,OAAQ,CACN,eAAgB,CAAC,CACf,MAAO,CACL,MAAO,UACP,SAAU,OACV,WAAY,GACd,CACF,CAAC,EACD,MAAO,CACL,MAAO,UACP,SAAU,OACV,WAAY,GACd,CACF,CACF,EACA,MAAO,CACL,cAAe,GACf,UAAW,GACX,MAAO,KACP,cAAe,UACf,eAAgB,GAChB,kBAAmB,GACnB,OAAQ,CACN,MAAO,CACL,MAAO,UACP,SAAU,OACV,WAAY,GACd,CACF,CACF,EACA,QAAS,CACP,OAAQ,GACR,gBAAiB,UACjB,aAAc,GACd,YAAa,EACb,OAAQ,GACR,QAAS,GACT,MAAO,CACL,MAAO,SACT,CACF,EACA,OAAQ,CACN,QAAS,EACX,CAGoB,CAAO,CAC/B,CAEA,UAAU,EAAW,EAAS,EAAU,CACtC,MAAQ,CACN,EAAE,CAAS,CAAC,CAAC,WAAW,EAAS,CAAQ,EACzC,KAAK,MAAQ,EAAE,CAAS,CAAC,CAAC,WAAW,CACvC,CAAC,CACH,CAEA,qBAAqB,EAAS,CAE5B,OADA,EAAE,OAAO,GAAM,KAAK,QAAS,CAAO,EAC7B,IACT,CAGA,OAAO,8BAA+B,CACpC,MAAO,MAAM,WAAW,aAAa,KAAK,CAAC,EAAE,KAC/C,CAEA,OAAO,uBAAwB,CAC7B,IAAM,EAAmB,KAAK,OAAO,MAAM,OAAO,EAAE,CAAC,QAAQ,aACvD,EAAoB,KAAK,OAAO,MAAM,OAAO,EAAE,CAAC,QAAQ,aAExD,EAAY,KAAK,OAAO,MAAM,OAAO,EAAE,CAAC,OAAO,KAAK,MAAM,MAAM,CAAC,EACjE,EAAa,KAAK,OAAO,MAAM,OAAO,EAAE,CAAC,OAAO,KAAK,MAAM,MAAM,CAAC,EAOxE,MAAO,MAAM,EAAU,sCALL,MAAM,UAAU,EAAiB,GAAI,EAAiB,GAAI,CAKf,EAAU;iBAC1D,EAAW,sCALL,MAAM,UAAU,EAAkB,GAAI,EAAkB,GAAI,CAKjB,EAAW;iBAH7D,WAAW,aAAc,EAAa,EAAa,IAAK,CAIvD,EAAI,MACnB,CACF,EC3GM,EAAN,cAA2B,CAAY,CACrC,YAAY,EAAW,CACrB,MAAM,EAEN,KAAK,UAAY,EAEjB,KAAK,QAAU,CACb,MAAO,CACL,KAAM,YACR,EACA,YAAa,CACX,WAAY,CACV,MAAO,CACL,eAAgB,CAAE,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAE,EAC7C,MAAO,CACL,CAAC,EAAG,SAAS,EACb,CAAC,EAAG,SAAS,CACf,CACF,EACA,OAAQ,CACN,QAAS,GACT,OAAQ,CACN,MAAO,CACL,QAAS,EACX,CACF,CACF,EACA,OAAQ,CACN,MAAO,CACL,cAAe,CACjB,CACF,CACF,CACF,EACA,MAAO,CACL,OAAQ,CACN,OAAQ,SACV,CACF,CACF,EAEA,KAAK,MAAQ,CAAC,EACd,KAAK,iBAAmB,KAAK,iBAAiB,KAAK,IAAI,EAEvD,KAAK,oBAAoB,CAC3B,CAEA,WAAY,CAEV,OADA,MAAM,UAAU,KAAK,UAAW,KAAK,QAAS,KAAK,gBAAgB,EAC5D,IACT,CAEA,qBAAsB,CACpB,IAAI,EAEJ,EAAE,MAAM,CAAC,CAAC,GAAG,SAAW,GAAM,CAC5B,aAAa,CAAW,EACxB,EAAc,eAAiB,CAC7B,KAAK,iBAAiB,EAAE,KAAK,SAAS,CAAC,CAAC,WAAW,CAAC,CACtD,EAAG,GAAG,CACR,CAAC,CACH,CAEA,iBAAiB,EAAO,CACtB,KAAM,MAAO,SAAS,EAAM,IAAU,CACpC,EAAK,QAAQ,OAAO,CACtB,CAAC,EAED,EAAO,OAAO,EAAE,CAAC,KAAM,SAAS,EAAO,IAAU,CAC/C,IAAM,EAAM,EAAM,QAAQ,EAAI,EAAM,MAEhC,EAAO,EAAM,SAAS,KAAK,CAAC,IAAK,EAAK,EAAG,IAAK,EAAM,WAAW,CAAC,CAAC,CACpE,KAAK,CACJ,eAAgB,EAChB,OAAQ,QACR,OAAQ,CACV,CAAC,CAAC,CACD,IAAI,EAEL,KAAK,MAAM,KAAK,CAAI,CACtB,CAAC,CACH,CACF,EClFM,EAAN,cAA6B,CAAY,CACvC,YAAY,EAAW,EAAe,GAAO,CAC3C,MAAM,EAEN,IAAI,EAAO,KACP,EAEJ,KAAK,UAAY,EACjB,KAAK,eAAiB,EAEtB,KAAK,QAAU,CACb,YAAa,CACX,OAAQ,CACN,UAAW,GACX,MAAO,SACT,EACA,OAAQ,CACN,UAAW,CACT,SAAU,IACZ,EACA,MAAO,UACP,OAAQ,UACR,UAAW,EACX,OAAQ,CACN,UAAW,UACX,OAAQ,CACV,CACF,EACA,OAAQ,CACN,MAAO,CACL,OAAQ,CACN,WAAY,CACV,IAAM,EAAQ,EAAE,CAAS,CAAC,CAAC,WAAW,EACtC,EAAY,EAAM,OAAO,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,QAAQ,KAAK,MAAM,EAC5D,EAAM,OAAO,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,QAAQ,KAAK,CAAE,KAAM,SAAU,CAAC,CAC/D,EACA,UAAW,CAET,EADgB,CAAS,CAAC,CAAC,WAC3B,CAAA,CAAM,OAAO,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,QAAQ,KAAK,CAAE,KAAM,CAAU,CAAC,CAC/D,CACF,CACF,EACA,OAAQ,CACN,MAAO,CACL,UAAW,CACb,CACF,CACF,CACF,EACA,MAAO,CAAC,CACN,MAAO,CACT,EAAG,CACD,SAAU,EACV,OAAQ,CACN,QAAS,EACX,CACF,CAAC,EACD,OAAQ,CAAC,CACP,KAAM,SACN,MAAO,EACP,oBAAqB,EACvB,EAAG,CACD,KAAM,QACR,CAAC,CACH,EAEA,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EAE7D,KAAK,iBAAmB,KAC1B,KAAK,QAAQ,MAAQ,CACnB,OAAQ,CACN,QAAS,CACP,EAAK,sBAAsB,CAC7B,CACF,CACF,EAEJ,CAEA,WAAY,CAOV,OANI,KAAK,iBAAmB,GAC1B,MAAM,UAAU,KAAK,UAAW,KAAK,QAAS,KAAK,qBAAqB,EAExE,MAAM,UAAU,KAAK,UAAW,KAAK,OAAO,EAGvC,IACT,CAEA,uBAAwB,CAEtB,IAAM,EADQ,EAAE,KAAK,SAAS,CAAC,CAAC,WAChB,CAAA,CAAM,OAAO,EAAE,CAAC,KAEhC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,OAAQ,EAAE,EAAG,CACvC,IAAI,EAAS,EAAQ,GAEjB,EAAO,SAAS,OAAS,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,EACzD,EAAO,QAAQ,KAAK,CAAE,KAAM,SAAU,CAAC,EAEvC,EAAO,QAAQ,KAAK,CAAE,KAAM,SAAU,CAAC,CAE3C,CACF,CACF,ECxGM,EAAN,MAAM,UAAyB,CAAY,CACzC,YAAY,EAAW,CACrB,MAAM,EAEN,KAAK,UAAY,EAEjB,KAAK,QAAU,CACb,MAAO,CACL,KAAM,QACR,EACA,YAAa,CACX,OAAQ,CACN,MAAO,CACL,OAAQ,CACN,WAAY,CACV,EAAiB,mBAAmB,EAAE,CAAS,EAAG,UAAW,UAAW,IAAI,CAC9E,EACA,UAAW,CACT,EAAiB,mBAAmB,EAAE,CAAS,EAAG,UAAW,UAAW,IAAI,CAC9E,CACF,CACF,EACA,OAAQ,CACN,MAAO,CACL,QAAS,EACX,CACF,CACF,CACF,EACA,OAAQ,CAAC,CACP,MAAO,UACP,MAAO,MACT,EAAG,CACD,MAAO,UACP,MAAO,OACT,CAAC,CACH,CACF,CAEA,WAAY,CAEV,OADA,MAAM,UAAU,KAAK,UAAW,KAAK,OAAO,EACrC,IACT,CAEA,OAAO,mBAAmB,EAAW,EAAY,EAAa,EAAM,CAClE,IAAI,EAAQ,EAAU,WAAW,EACjC,EAAM,OAAO,EAAE,CAAC,KAAK,EAAK,EAAE,CAAC,QAAQ,KAAK,CAAE,KAAM,CAAW,CAAC,EAC9D,EAAM,OAAO,EAAE,CAAC,KAAK,EAAK,EAAE,CAAC,QAAQ,KAAK,CAAE,KAAM,CAAY,CAAC,CACjE,CACF,EChDM,EAAN,KAAa,CACX,YAAY,EAAS,CACnB,GAAI,CAAC,GAAW,CAAC,EAAQ,IAEvB,OADA,QAAQ,IAAI,kCAAkC,EACvC,KAGT,KAAK,IAAM,EAAQ,IAEnB,KAAK,WAAa,EAAQ,aAAe,IAAA,GAAY,EAAI,EAAQ,WACjE,KAAK,cAAgB,EAAQ,eAAiB,IAC9C,KAAK,SAAW,EAAQ,UAAY,IACpC,KAAK,UAAY,EAAQ,WAAa,KACtC,KAAK,QAAU,EAAQ,SAAW,KAClC,KAAK,OAAS,EAAQ,QAAU,KAChC,KAAK,OAAS,EAAQ,QAAU,KAGhC,KAAK,OAAS,GACd,KAAK,QAAU,GACf,KAAK,UAAY,EACjB,KAAK,UAAY,KAGjB,KAAK,QAAU,EAEf,KAAK,OAAO,CACd,CAEA,OAAO,EAAU,CACf,IAAuB,EAEnB,KAAK,WACP,aAAa,KAAK,SAAS,EAG7B,KAAK,UAAY,eAAiB,CAChC,KAAK,OAAO,IAAI,CAClB,EAAG,KAAK,SAAW,CAAQ,CAC7B,CAEA,OAAO,EAAM,CACX,KAAK,QAAU,GAEX,KAAK,SAAW,MAClB,KAAK,OAAO,EAGd,EAAE,QAAQ,EAAK,IAAM,GAAS,CAC5B,EAAK,UAAU,CAAI,CACrB,CAAC,CAAC,CAAC,KAAM,GAAS,CAChB,EAAK,QAAQ,CAAI,CACnB,CAAC,CACH,CAEA,QAAQ,EAAG,CACT,KAAK,QAAU,GAEX,KAAK,YAAc,KAAK,YAC1B,QAAQ,IAAI,qCAAqC,KAAK,WAAW,aAAa,EAC9E,KAAK,OAAO,CAAC,IAEb,QAAQ,IAAI,kCAAkC,KAAK,UAAU,GAAG,KAAK,WAAW,EAAE,EAClF,KAAK,OAAO,KAAK,aAAa,GAG5B,KAAK,SACP,KAAK,QAAQ,CAAC,EAGhB,KAAK,WACP,CAEA,OAAO,EAAG,CACR,KAAK,OAAS,GACd,KAAK,QAAU,GACf,KAAK,OAAO,EAER,KAAK,SAAW,MAClB,KAAK,OAAO,CAAC,CAEjB,CAEA,UAAU,EAAG,CACX,KAAK,UAAY,EACjB,KAAK,QAAU,GACf,KAAK,OAAO,KAAK,aAAa,EAE1B,KAAK,YAAc,MACrB,KAAK,UAAU,CAAC,CAEpB,CAEA,QAAS,CACP,AAEE,KAAK,aADL,aAAa,KAAK,SAAS,EACV,KAErB,CACF,EAIA,OAAO,OAAS,ECtGhB,IAAM,EAAN,KAAU,CACR,YAAY,EAAK,EAAS,CACxB,GAAI,CAAC,GAAO,CAAC,EACX,OAAO,KAGT,KAAK,IAAM,SAAS,cAAc,CAAG,EACrC,KAAK,QAAU,EACf,KAAK,MAAM,CACb,CAEA,OAAQ,CACN,KAAK,SAAW,IAAI,SAAS,CAC3B,GAAI,KAAK,IACT,MAAO,EACP,MAAO,UACP,OAAQ,KAAK,QAAQ,QAAU,GAC/B,SAAU,KAAK,QAAQ,UAAY,MACrC,CAAC,EAED,KAAK,OAAO,CACd,CAEA,OAAO,EAAG,CACJ,EACF,KAAK,SAAS,OAAO,CAAC,EAEtB,KAAK,SAAS,OAAO,KAAK,QAAQ,KAAK,CAE3C,CACF,EC1BA,OAAO,WAAa,EAAA,QACpB,OAAO,MAAQ,MA8ef,OAAO,MAAQ,MA3eT,CAAM,CACV,YAAY,EAAS,CACnB,GAAI,CAAC,EAAQ,IAEX,OADA,QAAQ,IAAI,6BAA6B,EAClC,KAGT,KAAK,IAAM,EAAQ,IACnB,KAAK,QAAU,EAAQ,KACvB,KAAK,YAAc,EAAQ,SAC3B,KAAK,aAAe,EAAQ,cAAgB,CAAC,EAC7C,KAAK,cAAgB,EAAQ,eAAiB,GAE9C,KAAK,MAAQ,CAAC,EACd,KAAK,OAAS,CAAC,EACf,KAAK,UAAY,CAAC,EAElB,KAAK,SAAW,EAAQ,gBAExB,KAAK,UAAY,IAAI,EAErB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAErB,EAAM,cAAc,EAEpB,KAAK,sBAAsB,CAC7B,CAEA,OAAO,UAAU,EAAU,EAAQ,EAAO,CACxC,OAAQ,IAAU,EAAK,EAAW,CACpC,CAEA,OAAO,eAAgB,CACrB,IAAI,EAAU,SAAS,iBAAiB,QAAQ,EAEhD,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAU,EAAQ,IAAU,CAC1C,AAGE,EAAO,UAHL,OAAO,YAAc,IACJ,gBAAkB,EAAO,UAEzB,oBAAsB,EAAO,SAEpD,CAAC,CACH,CAEA,OAAO,WAAW,EAAQ,CACxB,IAAI,EAAO,CAAC,EACR,EAAS,CAAC,EAEd,IAAK,IAAI,KAAO,EACV,EAAO,eAAe,CAAG,GAC3B,EAAK,KAAK,CAAG,EAUjB,OANA,EAAK,KAAK,EAEV,EAAE,KAAK,GAAO,EAAG,IAAQ,CACvB,EAAO,GAAO,EAAO,EACvB,CAAC,EAEM,CACT,CAEA,OAAO,aAAa,EAAS,EAAQ,EAAO,CAC1C,IAAI,EAAY,CAAC,EAEX,EAAY,OAAO,CAAO,CAAC,CAAC,SAAS,SAAU,CAAM,CAAC,CAAC,OAAO,EAC9D,EAAQ,EAAM,WAAW,EAAM,eAAe,EAAW,EAAS,CAAK,CAAC,EAE9E,IAAK,IAAM,KAAQ,EACjB,EAAU,KAAK,CAAC,IAAK,EAAM,MAAO,EAAM,EAAK,CAAC,EAGhD,OAAO,CACT,CAEA,OAAO,eAAe,EAAO,EAAS,EAAO,CAC3C,IAAM,EAAY,EAAM,YAAY,EAC9B,EAAa,EAAM,SAAS,EAAI,EAChC,EAAc,EAAQ,YAAY,EAClC,EAAe,EAAQ,SAAS,EAAI,EAEtC,EAAS,CAAC,EACV,EAAQ,CAAC,EAEb,IAAI,EAAQ,CAAC,EAEb,IAAI,EAAe,SAAS,EAAO,CACjC,GAAI,EAAM,OAAS,EACb,IAAA,EAAM,OAAS,EACjB,OAAO,CAAA,MAGN,GAAI,EAAM,OAAS,EAClB,IAAA,EAAM,OAAS,EACjB,OAAO,CAAA,MAIT,OAAO,CAEX,EAEA,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,EAAE,EAGlC,GAFA,EAAQ,EAAM,GAEV,EAAM,MAAQ,GAAa,EAAM,MAAQ,EAC3C,EAAS,EAAM,OAAO,OAAO,CAAY,EACzC,EAAM,EAAM,MAAQ,OAEpB,SAIJ,OAAO,CACT,CAEA,OAAO,QAAQ,EAAO,EAAU,CAC9B,IAAI,EAAS,CAAC,EAEd,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,EAAE,EAAG,CACrC,IAAM,EAAO,EAAM,GACnB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,MAAM,OAAQ,EAAE,EAAG,CAC1C,IAAM,EAAQ,EAAK,MAAM,GACzB,EAAS,EAAQ,EAAM,CAAK,CAC9B,CACF,CAEA,OAAO,CACT,CAEA,OAAO,QAAQ,EAAM,EAAO,CAC1B,IAAI,EAAM,CAAC,EAEX,IAAK,IAAI,EAAI,EAAG,EAAM,EAAM,OAAQ,EAAI,EAAK,EAAE,EAAG,CAChD,IAAM,EAAM,CACV,KAAQ,EAAK,GACb,MAAS,EAAM,EACjB,EACA,EAAI,KAAK,CAAG,CACd,CAEA,OAAO,CACT,CAEA,uBAAwB,CAGtB,EAF4B,yBAE5B,CAAA,CAAoB,GAAG,SAAW,GAAM,CACtC,IAAI,EAAW,EAAE,EAAE,MAAM,EACrB,EAAmB,EAAS,KAAK,eAAe,EAEhD,IAAqB,KAAK,WAE9B,KAAK,SAAW,EAChB,EAAE,yBAAyB,CAAC,CAAC,YAAY,QAAQ,EACjD,EAAS,SAAS,QAAQ,EAE1B,EAAA,QAAW,SAAS,SAAS,OAAS,EAAS,KAAK,EAEpD,KAAK,+BAA+B,EAEpC,KAAK,gBAAgB,EACrB,KAAK,UAAU,eAAe,OAAO,KAAK,QAAQ,cAAc,KAAK,SAAS,EAE9E,SAAS,cAAc,0CAA0C,CAAC,CAAC,YAAc,EAAA,QAAW,YAAY,KAAK,QAAQ,cAAc,KAAK,SAAS,EACnJ,EAAA,CAAG,KAAK,IAAI,CAAC,CACf,CAEA,YAAY,EAAW,EAAU,CAC/B,OAAO,EAAM,QACX,EAAM,QAAQ,IAAa,EAAQ,EAAM,IAAU,CACjD,IAAI,EAAO,IAAI,KAAK,SAAS,EAAK,IAAK,EAAE,EAAG,SAAS,EAAM,MAAO,EAAE,EAAI,EAAG,CAAC,EAC5E,EAAK,MAAQ,EAAM,gBAAgB,KAAK,aACxC,EAAK,OAAS,EAAM,UAAU,KAAK,aAEnC,EAAO,KAAK,CAAI,CAClB,EAAA,CAAG,KAAK,IAAI,CAAC,EACb,EAAM,QAAQ,GAAY,EAAQ,EAAM,IAAU,CAChD,EAAO,KAAK,EAAS,CAAK,CAAC,CAC7B,CAAC,CACH,CACF,CAEA,yBAAyB,EAAW,CAClC,IAAM,EAAO,KAAK,YAAY,EAAY,GACjC,CAAC,EAAE,wBAAwB,KAAK,UAAW,EAAE,cAAc,KAAK,SAAS,CACjF,EAEG,EAAQ,IAAI,EAAa,EAAE,uDAAuD,CAAC,EAEvF,EAAM,qBAAqB,CACzB,MAAO,CACL,OAAQ,GACV,EACA,MAAO,CACL,OAAQ,CACN,MAAO,CACL,MAAO,cACP,SAAU,KACZ,CACF,EACA,WAAY,EAAU,KAAK,EAAO,KACzB,CACL,KAAM,EAAM,IACZ,WAAY,EAAM,MAAM,KAAK,EAAO,IAC3B,EAAM,UAAU,KAAK,YAC7B,CACH,EACF,CACF,EACA,MAAO,CACL,OAAQ,CACN,WAAY,CACV,OAAO,EAAA,QAAW,YAAY,KAAK,KAAK,CAC1C,CACF,CACF,EACA,QAAS,CACP,WAAY,CACV,IAAM,EAAQ,EAAA,QAAW,YAAY,KAAK,CAAC,EACrC,EAAO,EAAA,QAAW,YAAY,EAAK,KAAK,MAAM,MAAM,CAAC,MAAM,EAAE,EACnE,MAAO,kCAAkC,KAAK,EAAE;uBACnC,EAAM;uBACN,EAAK,KACpB,CACF,EACA,OAAQ,CAAC,CACP,KAAM,EAAK,KAAK,EAAO,IACd,EAAM,MAAM,EACpB,CACH,CAAC,CACH,CAAC,CAAC,CACD,UAAU,EAEX,KAAK,OAAO,yBAA2B,CACzC,CAEA,gCAAiC,CAC/B,IAAM,EAAY,EAAM,aAAa,OAAO,CAAC,CAAC,OAAO,EAAG,GAAI,KAAK,KAAK,EAEhE,EAAO,KAAK,YAAY,EAAY,GACjC,CAAC,EAAE,wBAAwB,KAAK,UAAW,EAAE,cAAc,KAAK,SAAS,CACjF,EAED,KAAK,OAAO,yBAAyB,MAAM,OAAO,EAAE,CAAC,QAAQ,EAAK,KAAK,EAAO,IACrE,EAAM,MAAM,EACpB,CAAC,CACJ,CAEA,oBAAoB,EAAW,EAAe,CAC5C,IAAM,EAAO,KAAK,YAAY,EAAY,GACjC,EAAE,cAAc,KAAK,SAC7B,EAEG,EAAQ,IAAI,EAAe,EAAE,iDAAiD,CAAC,EAEnF,EAAM,qBAAqB,CACzB,MAAO,CACL,OAAQ,CACN,MAAO,CACL,MAAO,cACP,SAAU,KACZ,CACF,EACA,WAAY,EAAU,KAAK,EAAO,KACzB,CACL,KAAM,EAAM,IACZ,WAAY,EAAM,MAAM,KAAK,EAAO,IAC3B,EAAM,UAAU,KAAK,YAC7B,CACH,EACD,CACH,EACA,MAAO,CAAC,CACN,OAAQ,CACN,WAAY,CACV,OAAO,EAAA,QAAW,YAAY,KAAK,KAAK,CAC1C,CACF,CACF,EAAG,CAAC,CAAC,EACL,QAAS,CACP,WAAY,CACV,IAAM,EAAQ,EAAA,QAAW,YAAY,KAAK,CAAC,EAC3C,MAAO,kCAAkC,KAAK,EAAE;uBACnC,EAAM,KACrB,CACF,EACA,OAAQ,CAAC,CACP,KAAM,EAAK,KAAK,EAAO,IACd,EAAM,KACd,CACH,EAAG,CACD,KAAM,EAAK,KAAK,EAAO,IACd,EAAM,KACd,CACH,CAAC,CACH,CAAC,CAAC,CACD,UAAU,EAEX,KAAK,OAAO,oBAAsB,CACpC,CAEA,cAAc,EAAW,CACvB,IAAM,EAAO,KAAK,YAAY,EAAY,GACjC,EAAE,mBACV,EAID,IAFgB,EAAa,EAAE,0CAA0C,CAEzE,CAAA,CAAM,qBAAqB,CACzB,MAAO,CACL,WAAY,EAAK,KAAK,EAAO,IACpB,EAAM,KAAK,KACnB,CACH,EACA,MAAO,CACL,OAAQ,CACN,WAAY,CACV,OAAO,EAAA,QAAW,aAAa,KAAK,KAAK,CAC3C,CACF,CACF,EACA,QAAS,CACP,UAAW,EAAY,4BACzB,EACA,OAAQ,CAAC,CACP,KAAM,EAAK,KAAK,EAAO,IACd,EAAM,KACd,CACH,CAAC,CACH,CAAC,CAAC,CACD,UAAU,CACb,CAEA,mBAAmB,EAAW,CAC5B,IAAM,EAAO,KAAK,YAAY,EAAY,GACjC,CAAC,EAAE,uBAAwB,EAAE,uBAAwB,EAAE,wBAAwB,CACvF,EAID,IAFgB,EAAiB,EAAE,0CAA0C,CAE7E,CAAA,CAAM,qBAAqB,CACzB,MAAO,CACL,WAAY,EAAK,KAAK,EAAO,IACpB,EAAM,KAAK,KACnB,CACH,EACA,QAAS,CACP,UAAW,EAAY,qBACzB,EACA,OAAQ,CAAC,CACP,aAAc,KAAK,aAAa,QAChC,KAAM,EAAK,KAAK,EAAO,IACd,EAAM,MAAM,EACpB,CACH,EAAG,CACD,aAAc,KAAK,aAAa,OAChC,KAAM,EAAK,KAAK,EAAO,IACd,EAAM,MAAM,EACpB,CACH,CAAC,CACH,CAAC,CAAC,CACD,UAAU,CACb,CAEA,oBAAoB,EAAW,CAC7B,IAAM,EAAO,KAAK,YAAY,EAAY,GACjC,CAAC,EAAE,wBAAyB,EAAE,yBAA0B,EAAE,0BAA0B,CAC5F,EAID,IAFgB,EAAiB,EAAE,2CAA2C,CAE9E,CAAA,CAAM,qBAAqB,CACzB,MAAO,CACL,WAAY,EAAK,KAAK,EAAO,IACpB,EAAM,KAAK,KACnB,CACH,EACA,QAAS,CACP,UAAW,EAAY,qBACzB,EACA,OAAQ,CAAC,CACP,aAAc,KAAK,aAAa,QAChC,KAAM,EAAK,KAAK,EAAO,IACd,EAAM,MAAM,EACpB,CACH,EAAG,CACD,aAAc,KAAK,aAAa,SAChC,KAAM,EAAK,KAAK,EAAO,IACd,EAAM,MAAM,EACpB,CACH,CAAC,CACH,CAAC,CAAC,CACD,UAAU,CACb,CAEA,aAAc,CACF,IAAI,EAAO,CACnB,IAAK,KAAK,IACV,WAAa,GAAM,CACjB,KAAK,UAAU,eAAe,OAAO,EAAE,cAAc,KAAK,SAAS,EACnE,KAAK,UAAU,eAAe,OAAO,EAAE,sBAAsB,EAC7D,KAAK,UAAU,gBAAgB,OAAO,EAAE,sBAAsB,EAC9D,KAAK,UAAU,aAAa,OAAO,EAAE,WAAW,CAClD,EAAA,CAAG,KAAK,IAAI,EACZ,WAAY,EACZ,SAAU,GACZ,CAAC,CACH,CAEA,aAAc,CACZ,KAAK,MAAQ,KAAK,QAAQ,MAAM,MAAM,CAAC,CAAC,QAAQ,EAChD,IAAM,EAAU,OAAO,CAAC,CAAC,OAAO,EAEhC,GAAI,SAAS,cAAc,8BAA8B,IAAM,KAAM,CACnE,IAAM,EAAY,EAAM,aAAa,EAAS,GAAI,KAAK,KAAK,EAC5D,KAAK,yBAAyB,CAAS,EACvC,SAAS,cAAc,0CAA0C,CAAC,CAAC,YAAc,EAAA,QAAW,YAAY,KAAK,QAAQ,cAAc,KAAK,SAAS,CACnJ,CAEA,GAAI,SAAS,cAAc,iBAAiB,IAAM,KAAM,CACtD,IAAM,EAAY,EAAM,aAAa,EAAS,GAAI,KAAK,KAAK,EAC5D,KAAK,cAAc,CAAS,EAC5B,SAAS,cAAc,6BAA6B,CAAC,CAAC,YAAc,EAAA,QAAW,aAAa,KAAK,QAAQ,mBAAmB,CAC9H,CAEA,GAAI,SAAS,cAAc,iBAAiB,IAAM,KAAM,CACtD,IAAM,EAAY,EAAM,aAAa,EAAS,GAAI,KAAK,KAAK,EAC5D,KAAK,mBAAmB,CAAS,EACjC,SAAS,cAAc,+CAA+C,CAAC,CAAC,YAAc,EAAA,QAAW,aAAa,KAAK,QAAQ,sBAAsB,EACjJ,SAAS,cAAc,8CAA8C,CAAC,CAAC,YAAc,EAAA,QAAW,aAAa,KAAK,QAAQ,sBAAsB,CAClJ,CAEA,GAAI,SAAS,cAAc,kBAAkB,IAAM,KAAM,CACvD,IAAM,EAAY,EAAM,aAAa,EAAS,GAAI,KAAK,KAAK,EAC5D,KAAK,oBAAoB,CAAS,EAClC,SAAS,cAAc,iDAAiD,CAAC,CAAC,YAAc,EAAA,QAAW,aAAa,KAAK,QAAQ,wBAAwB,EACrJ,SAAS,cAAc,gDAAgD,CAAC,CAAC,YAAc,EAAA,QAAW,aAAa,KAAK,QAAQ,uBAAuB,CACrJ,CACF,CAEA,gBAAiB,CACf,KAAK,UAAU,eAAiB,IAAI,EAAI,0CAA2C,CACjF,SAAU,KACV,OAAQ,YACR,MAAO,KAAK,QAAQ,cAAc,KAAK,SACzC,CAAC,EAED,KAAK,UAAU,YAAc,IAAI,EAAI,uCAAwC,CAC3E,SAAU,KACV,OAAQ,GACR,MAAO,KAAK,MAAM,KAAK,QAAQ,MAAO,KAAK,QAAQ,MAAM,OAAS,EAAG,CAAC,wBAAwB,CAChG,CAAC,EAED,KAAK,UAAU,eAAiB,IAAI,EAAI,0CAA2C,CACjF,SAAU,KACV,OAAQ,YACR,MAAO,KAAK,QAAQ,sBACtB,CAAC,EAED,KAAK,UAAU,gBAAkB,IAAI,EAAI,2CAA4C,CACnF,SAAU,KACV,OAAQ,YACR,MAAO,KAAK,QAAQ,sBACtB,CAAC,EAED,KAAK,UAAU,aAAe,IAAI,EAAI,wCAAyC,CAC7E,SAAU,KACV,OAAQ,YACR,MAAO,KAAK,QAAQ,WACtB,CAAC,CACH,CAEA,iBAAkB,CAChB,SAAS,cAAc,cAAc,CAAC,CAAC,YAAc,EAAA,QAAW,YAAY,KAAK,QAAQ,WAAW,KAAK,SAAS,EAClH,SAAS,cAAc,eAAe,CAAC,CAAC,YAAc,KAAK,QAAQ,MAAO,KAAK,QAAQ,MAAM,OAAS,EAAG,CAAC,KAC1G,SAAS,cAAc,gBAAgB,CAAC,CAAC,YAAc,EAAA,QAAW,aAAa,KAAK,QAAQ,WAAW,EAEvG,IAAM,EAAW,KAAK,QAAQ,WAAW,KAAK,GAAY,EAAS,QAAU,KAAK,QAAQ,EACtF,IACF,SAAS,cAAc,0CAA0C,CAAC,CAAC,YAAc,EAAS,MAE9F,CACF,EAKA,OAAO,cAAc,IAAI,MAAM,cAAc,CAAC,kCCrfxC,EAAN,cAAA,EAA+B,SAAU,CACvC,QAAS,CACP,IAAI,EAAU,KAAK,MAAM,QAAQ,KAAK,EAAQ,KAC5C,EAAA,EAAA,IAAA,CAAC,KAAD,CAAA,SACG,CACC,EAFK,CAEL,CACN,EAEA,OACE,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,SACX,SAAA,CACC,CAAA,CAER,CACF,ECdM,EAAN,cAAA,EAA6B,SAAU,CACrC,QAAS,CACP,OACE,EAAA,EAAA,IAAA,CAAC,KAAD,CAAA,SAAK,KAAK,MAAM,QAAa,CAAA,CAEjC,CACF,ECLM,EAAN,cAAA,EAA4B,SAAU,CACpC,QAAS,CACP,IAAI,EAAQ,KAAK,MAAM,KAAK,KAAK,EAAM,KACrC,EAAA,EAAA,IAAA,CAAC,EAAD,CAAA,SACG,CACO,EAFK,CAEL,CACZ,EAEA,OACE,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,QACX,SAAA,CACC,CAAA,CAER,CACF,ECbM,EAAN,cAAA,EAAoC,SAAU,CAC5C,QAAS,CACP,IAAI,EAAO,KAAK,MAAM,KAAK,KAAK,EAAK,KACnC,EAAA,EAAA,KAAA,CAAC,UAAD,CAAS,UAAU,OAAnB,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,KAAD,CAAA,SAAK,EAAI,KAAU,CAAA,GACnB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAS,KAAM,EAAI,IAAO,CAAA,CACnB,CAHsB,EAAA,CAGtB,CACX,EAEA,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,SAAD,CAAA,UACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,QAAS,KAAK,MAAM,OAAU,CAAA,CACpC,CAAA,EACP,CACE,CAAA,CAAA,CAET,CACF,ECpBM,EAAN,cAAA,EAA8B,SAAU,CACtC,QAAS,CACP,IAAI,EAAS,KAAK,MAAM,OAAO,KAAK,EAAO,KACzC,EAAA,EAAA,IAAA,CAAC,KAAD,CAAA,SAAa,CAAU,EAAd,CAAc,CACzB,EAEA,OACE,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,QACX,SAAA,CACC,CAAA,CAER,CACF,ECZM,EAAN,cAAA,EAA6B,SAAU,CACrC,QAAS,CACP,IAAI,EAAS,KAAK,MAAM,OAAO,KAAK,KAAK,EAAM,KAC7C,EAAA,EAAA,IAAA,CAAC,KAAD,CAAA,SAAa,CAAS,EAAb,CAAa,CAC1B,EAEE,OACE,EAAA,EAAA,KAAA,CAAC,KAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,KAAD,CAAA,SAAK,KAAK,MAAM,KAAU,CAAA,EACzB,CACC,CAAA,CAAA,CAER,CACF,ECZM,EAAN,cAAA,EAA+B,SAAU,CACvC,QAAS,CACP,IAAI,EAAO,KAAK,MAAM,QAAQ,KAAK,EAAQ,KACzC,EAAA,EAAA,IAAA,CAAC,EAAD,CAAkB,SACR,MAAO,EAAO,KACL,EAAJ,CAAI,CACrB,EAEA,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,QAAQ,GAAI,KAAK,MAAM,GAAtC,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,aACb,SAAA,CACG,CAAA,GACH,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,KAAK,IAAI,UAAU,uBAAuB,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,oBAA2B,CAAA,CAAI,CAAA,GAC5F,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,KAAK,IAAI,UAAU,uBAAuB,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,qBAA4B,CAAA,CAAI,CAAA,CAC5F,GAET,CACF,ECjBM,EAAN,cAAA,EAAwC,SAAU,CAChD,QAAS,CACP,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,SAAD,CAAA,SACG,KAAK,MAAM,KACN,CAAA,GAER,EAAA,EAAA,KAAA,CAAC,UAAD,CAAS,UAAU,UAAnB,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAW,OAAQ,KAAK,MAAM,MAAS,CAAA,GACvC,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,QAAS,KAAK,MAAM,QAAS,GAAG,gBAAkB,CAAA,GAC9D,EAAA,EAAA,IAAA,CAAC,EAAD,CAAY,QAAS,KAAK,MAAM,QAAS,GAAG,gBAAkB,CAAA,CACvD,CACN,CAAA,CAAA,CAAA,CAAA,CAET,CACF,EChBM,EAAN,cAAA,EAA+B,SAAU,CACvC,YAAY,EAAS,EAAS,EAAU,EAAW,CACjD,MAAM,EAEN,KAAK,QAAU,EACf,KAAK,QAAU,EACf,KAAK,SAAW,EAChB,KAAK,iBAAmB,KAAK,QAAQ,WAAW,MAAM,CAAC,CAAC,MAAM,EAAG,IAAM,EAAE,cAAc,IAAM,EAAE,cAAc,GAAG,CAClH,CAEA,iBAAiB,EAAW,EAAQ,EAAY,EAAG,CACjD,IAAI,EAAQ,CAAE,GAAG,KAAK,QAAQ,KAAM,EAEpC,EAAQ,OAAO,OAAO,CAAC,EAAG,CAAK,CAAC,CAAC,QAAQ,EACzC,EAAQ,OAAO,OAAO,CAAK,CAAC,CAAC,MAAM,EAAG,CAAS,EAE/C,IAAI,EAAU,OAAO,OAAO,CAAK,CAAC,CAAC,IAAK,GAC/B,EAAK,IACb,EACD,EAAQ,QAAQ,CAAM,EAEtB,IAAI,EAAS,OAAO,OAAO,KAAK,OAAO,CAAC,CAAC,KACrC,IACO,CACL,MAAO,EAAO,MACd,KAAM,OAAO,OAAO,CAAK,CAAC,CAAC,IAAK,GAAS,EAAO,KAAK,CAAI,CAAC,EAC1D,MAAO,EAAO,KAChB,GACF,CAAG,KAAK,IAAI,CACd,EAEA,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,EAAE,EAAG,CACtC,IAAI,EAAQ,EAAO,GACnB,EAAM,KAAK,QAAQ,EAAM,KAAK,CAChC,CAGA,EADsB,WAAW,CACjC,CAAA,CAAK,QAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAA0B,UAAS,KAAM,CAAS,CAAA,CAAC,CACjE,CAEA,sBAAsB,EAAW,EAAO,CACtC,IAAI,EAAa,OAAO,OAAO,KAAK,OAAO,CAAC,CAAC,KACzC,IACO,CACL,MAAO,EAAO,MACd,KAAM,KAAK,iBAAiB,IAAI,EAAO,IAAI,CAC7C,GACF,CAAG,KAAK,IAAI,CACd,EAEI,EAAS,OAAO,OAAO,KAAK,gBAAgB,CAAC,CAAC,KAC9C,GACO,EAAS,OAAO,KAAK,WAAa,EAAS,KACpD,CAAG,KAAK,IAAI,CACd,EAGA,EADsB,WAAW,CACjC,CAAA,CAAK,QAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAA6B,SAAQ,QAAS,EAAmB,QAAO,aAAc,GAAQ,CAAA,CAAC,CAC7G,CACF,EAIA,OAAO,WAAa"}