diff --git a/frontend/packages/cli/package.json b/frontend/packages/cli/package.json index a36267dbfd018b103384fb3ae54b0e51315d76ec..30379873f6588a21e96a9f52c3a99b290bd4136c 100644 --- a/frontend/packages/cli/package.json +++ b/frontend/packages/cli/package.json @@ -41,7 +41,7 @@ "yargs": "15.3.1" }, "devDependencies": { - "@types/node": "14.0.13", + "@types/node": "14.0.14", "@types/yargs": "15.0.5", "cross-env": "7.0.2", "ts-node": "8.10.2", diff --git a/frontend/packages/core/components/Field.tsx b/frontend/packages/core/components/Field.tsx index 05b5cde3135eb595f2334918efa459f0eca9fb37..6b1658668325560751da9cba28ad06d5ad9731b0 100644 --- a/frontend/packages/core/components/Field.tsx +++ b/frontend/packages/core/components/Field.tsx @@ -14,7 +14,7 @@ const Label = styled.div` `; type FieldProps = { - label?: string; + label?: string | JSX.Element; }; const Field: FunctionComponent = ({label, children, className}) => ( diff --git a/frontend/packages/core/components/HistogramPage/HistogramChart.tsx b/frontend/packages/core/components/HistogramPage/HistogramChart.tsx index 25ac2c56673204b07926a17b8578a30c1dedbe25..b1f9b5cd88c454aec3e7a7cf8bae14ab5de0c55c 100644 --- a/frontend/packages/core/components/HistogramPage/HistogramChart.tsx +++ b/frontend/packages/core/components/HistogramPage/HistogramChart.tsx @@ -55,7 +55,6 @@ type HistogramChartProps = { tag: string; mode: Modes; running?: boolean; - onToggleMaximized?: (maximized: boolean) => void; }; const HistogramChart: FunctionComponent = ({cid, run, tag, mode, running}) => { diff --git a/frontend/packages/core/components/LineChart.tsx b/frontend/packages/core/components/LineChart.tsx index 69e9137be438a553ea01b2ec4964cff52a7e555b..cefc3adff747fb25cebbaf42c2a4946c59606580 100644 --- a/frontend/packages/core/components/LineChart.tsx +++ b/frontend/packages/core/components/LineChart.tsx @@ -18,6 +18,17 @@ type LineChartProps = { zoom?: boolean; }; +export enum XAxisType { + value = 'value', + log = 'log', + time = 'time' +} + +export enum YAxisType { + value = 'value', + log = 'log' +} + export type LineChartRef = { restore(): void; saveAsImage(): void; diff --git a/frontend/packages/core/components/PRCurvePage/PRCurveChart.tsx b/frontend/packages/core/components/PRCurvePage/PRCurveChart.tsx new file mode 100644 index 0000000000000000000000000000000000000000..032155ddd6af98ef81af92eb5f07702c5ad51cf4 --- /dev/null +++ b/frontend/packages/core/components/PRCurvePage/PRCurveChart.tsx @@ -0,0 +1,204 @@ +import LineChart, {LineChartRef} from '~/components/LineChart'; +import {PRCurveData, Run, options as chartOptions, nearestPoint} from '~/resource/pr-curve'; +import React, {FunctionComponent, useCallback, useMemo, useRef, useState} from 'react'; +import {rem, size} from '~/utils/style'; + +import ChartToolbox from '~/components/ChartToolbox'; +import {EChartOption} from 'echarts'; +import TooltipTable from '~/components/TooltipTable'; +import {cycleFetcher} from '~/utils/fetch'; +import ee from '~/utils/event'; +import {format} from 'd3-format'; +import queryString from 'query-string'; +import {renderToStaticMarkup} from 'react-dom/server'; +import styled from 'styled-components'; +import {useRunningRequest} from '~/hooks/useRequest'; +import {useTranslation} from '~/utils/i18n'; +import zip from 'lodash/zip'; + +const axisFormatter = format('.4f'); +const valueFormatter = format('.2f'); + +const Wrapper = styled.div` + ${size('100%', '100%')} + display: flex; + flex-direction: column; + align-items: stretch; + justify-content: space-between; +`; + +const StyledLineChart = styled(LineChart)` + flex-grow: 1; +`; + +const Toolbox = styled(ChartToolbox)` + margin-left: ${rem(20)}; + margin-right: ${rem(20)}; + margin-bottom: ${rem(18)}; +`; + +const Error = styled.div` + ${size('100%', '100%')} + display: flex; + justify-content: center; + align-items: center; +`; + +type PRCurveChartProps = { + cid: symbol; + runs: Run[]; + tag: string; + running?: boolean; +}; + +const PRCurveChart: FunctionComponent = ({cid, runs, tag, running}) => { + const {t} = useTranslation(['pr-curve', 'common']); + + const echart = useRef(null); + + const {data: dataset, error, loading} = useRunningRequest( + runs.map(run => `/pr-curve/list?${queryString.stringify({run: run.label, tag})}`), + !!running, + (...urls) => cycleFetcher(urls) + ); + + const [maximized, setMaximized] = useState(false); + const toggleMaximized = useCallback(() => { + ee.emit('toggle-chart-size', cid, !maximized); + setMaximized(m => !m); + }, [cid, maximized]); + + const selectedData = useMemo<[number, number, number[][]][]>( + () => + runs.map((run, i) => { + const [wallTime, step, ...item] = dataset?.[i]?.find(row => row[1] === run.steps[run.index]) ?? [ + 0, + 0, + [], + [], + [], + [], + [], + [], + [] + ]; + return [wallTime, step, zip(...item) as number[][]]; + }), + [dataset, runs] + ); + + const data = useMemo( + () => + selectedData.map((item, i) => { + const run = runs[i]; + return { + name: run.label, + z: i, + itemStyle: { + color: run.colors[0] + }, + lineStyle: { + color: run.colors[0] + }, + data: item[2], + encode: { + x: [1], + y: [0] + } + }; + }), + [selectedData, runs] + ); + + const formatter = useCallback( + (params: EChartOption.Tooltip.Format | EChartOption.Tooltip.Format[]) => { + const series = Array.isArray(params) ? params[0].data : params.data; + const points = nearestPoint( + selectedData.map(s => s[2]), + series[1] + ); + const columns = [ + { + label: t('pr-curve:threshold') + }, + { + label: t('pr-curve:precision') + }, + { + label: t('pr-curve:recall') + }, + { + label: t('pr-curve:true-positives') + }, + { + label: t('pr-curve:false-positives') + }, + { + label: t('pr-curve:true-negatives') + }, + { + label: t('pr-curve:false-negatives') + } + ]; + const data = points.map(([precision, recall, tp, fp, tn, fn, threshold]) => [ + valueFormatter(threshold), + axisFormatter(precision), + axisFormatter(recall), + tp, + fp, + tn, + fn + ]); + return renderToStaticMarkup( + + ); + }, + [selectedData, runs, t] + ); + + const options = useMemo( + () => ({ + ...chartOptions, + tooltip: { + ...chartOptions.tooltip, + formatter + } + }), + [formatter] + ); + + // display error only on first fetch + if (!data && error) { + return {t('common:error')}; + } + + return ( + + + echart.current?.restore() + }, + { + icon: 'download', + tooltip: t('scalars:download-image'), + onClick: () => echart.current?.saveAsImage() + } + ]} + /> + + ); +}; + +export default PRCurveChart; diff --git a/frontend/packages/core/components/PRCurvePage/StepSlider.tsx b/frontend/packages/core/components/PRCurvePage/StepSlider.tsx new file mode 100644 index 0000000000000000000000000000000000000000..5e5e94fd46c923f1baffd8d70707b3d1030d124c --- /dev/null +++ b/frontend/packages/core/components/PRCurvePage/StepSlider.tsx @@ -0,0 +1,92 @@ +import React, {FunctionComponent, useEffect, useState} from 'react'; +import {Run, TimeType} from '~/resource/pr-curve'; +import {ellipsis, size, textLighterColor} from '~/utils/style'; + +import Field from '~/components/Field'; +import RangeSlider from '~/components/RangeSlider'; +import {format} from 'd3-format'; +import {formatTime} from '~/utils'; +import styled from 'styled-components'; +import {useTranslation} from '~/utils/i18n'; + +const relativeFormatter = format('.2f'); + +const TimeDisplay = styled.div` + color: ${textLighterColor}; + font-size: 0.857142857em; + padding-left: 1.666666667em; + margin-bottom: 0.416666667em; +`; + +const Label = styled.span<{color: string}>` + display: inline-block; + padding-left: 1.428571429em; + position: relative; + ${ellipsis()} + + &::before { + content: ''; + display: block; + ${size('0.857142857em', '0.857142857em')} + background-color: ${props => props.color}; + border-radius: 50%; + position: absolute; + left: 0; + top: 50%; + transform: translateY(-50%); + } +`; + +const FullWidthRangeSlider = styled(RangeSlider)` + width: 100%; +`; + +const typeMap = { + [TimeType.WallTime]: 'wallTimes', + [TimeType.Relative]: 'relatives', + [TimeType.Step]: 'steps' +} as const; + +const formatter = { + [TimeType.WallTime]: (wallTime: number, {i18n}: ReturnType) => + formatTime(wallTime, i18n.language), + [TimeType.Relative]: (relative: number) => `${relativeFormatter(relative)} ms`, + [TimeType.Step]: (step: number, {t}: ReturnType) => `${t('common:time-mode.step')} ${step}` +} as const; + +type StepSliderProps = { + run: Run; + type: TimeType; + onChange?: (step: number) => unknown; +}; + +const StepSlider: FunctionComponent = ({onChange, run, type}) => { + const translation = useTranslation('common'); + + const [index, setIndex] = useState(run.index); + useEffect(() => setIndex(run.index), [run.index]); + + return ( + + {run.label} + + } + > + + {run[typeMap[type]][index] == null ? '...' : formatter[type](run[typeMap[type]][index], translation)} + + onChange?.(index)} + /> + + ); +}; + +export default StepSlider; diff --git a/frontend/packages/core/components/RunAside.tsx b/frontend/packages/core/components/RunAside.tsx index 7f3714ef31877aac247931b28cac904ae5b3fac6..2498ed700be5eb4676d8b3569559b9d663718f0d 100644 --- a/frontend/packages/core/components/RunAside.tsx +++ b/frontend/packages/core/components/RunAside.tsx @@ -18,6 +18,7 @@ const StyledAside = styled(Aside)` overflow-y: auto; display: flex; flex-direction: column; + margin-bottom: 0; .run-select { flex: auto; diff --git a/frontend/packages/core/components/ScalarsPage/ScalarChart.tsx b/frontend/packages/core/components/ScalarsPage/ScalarChart.tsx index d6c6de829d521d6496e3f2af74a6aebf8c10ee90..02b330a8c91201c6bba84dbe9f2435bd044207ca 100644 --- a/frontend/packages/core/components/ScalarsPage/ScalarChart.tsx +++ b/frontend/packages/core/components/ScalarsPage/ScalarChart.tsx @@ -1,5 +1,5 @@ -import LineChart, {LineChartRef} from '~/components/LineChart'; import { + Dataset, Range, ScalarDataset, SortingMethod, @@ -14,21 +14,26 @@ import { transform, xAxisMap } from '~/resource/scalars'; +import LineChart, {LineChartRef, XAxisType, YAxisType} from '~/components/LineChart'; import React, {FunctionComponent, useCallback, useMemo, useRef, useState} from 'react'; import {rem, size} from '~/utils/style'; import ChartToolbox from '~/components/ChartToolbox'; import {EChartOption} from 'echarts'; import {Run} from '~/types'; +import TooltipTable from '~/components/TooltipTable'; import {cycleFetcher} from '~/utils/fetch'; import ee from '~/utils/event'; import {format} from 'd3-format'; import queryString from 'query-string'; +import {renderToStaticMarkup} from 'react-dom/server'; import styled from 'styled-components'; import useHeavyWork from '~/hooks/useHeavyWork'; import {useRunningRequest} from '~/hooks/useRequest'; import {useTranslation} from '~/utils/i18n'; +const labelFormatter = format('.8'); + const smoothWasm = () => import('@visualdl/wasm').then(({scalar_transform}): typeof transform => params => scalar_transform(params.datasets, params.smoothing) @@ -47,14 +52,6 @@ const Wrapper = styled.div` flex-direction: column; align-items: stretch; justify-content: space-between; - - .echarts td.run .run-indicator { - ${size(12, 12)} - display: inline-block; - border-radius: 6px; - vertical-align: middle; - margin-right: 5px; - } `; const StyledLineChart = styled(LineChart)` @@ -74,17 +71,6 @@ const Error = styled.div` align-items: center; `; -enum XAxisType { - value = 'value', - log = 'log', - time = 'time' -} - -enum YAxisType { - value = 'value', - log = 'log' -} - type ScalarChartProps = { cid: symbol; runs: Run[]; @@ -94,7 +80,6 @@ type ScalarChartProps = { sortingMethod: SortingMethod; outlier?: boolean; running?: boolean; - onToggleMaximized?: (maximized: boolean) => void; }; const ScalarChart: FunctionComponent = ({ @@ -123,7 +108,7 @@ const ScalarChart: FunctionComponent = ({ setMaximized(m => !m); }, [cid, maximized]); - const xAxisType = useMemo(() => (xAxis === 'wall' ? XAxisType.time : XAxisType.value), [xAxis]); + const xAxisType = useMemo(() => (xAxis === XAxis.WallTime ? XAxisType.time : XAxisType.value), [xAxis]); const [yAxisType, setYAxisType] = useState(YAxisType.value); const toggleYAxisType = useCallback(() => { @@ -179,13 +164,20 @@ const ScalarChart: FunctionComponent = ({ const formatter = useCallback( (params: EChartOption.Tooltip.Format | EChartOption.Tooltip.Format[]) => { - const data = Array.isArray(params) ? params[0].data : params.data; - const step = data[1]; - const points = nearestPoint(smoothedDatasets ?? [], runs, step); + const series: Dataset[number] = Array.isArray(params) ? params[0].data : params.data; + const points = nearestPoint(smoothedDatasets ?? [], runs, series[1]); const sort = sortingMethodMap[sortingMethod]; - return tooltip(sort ? sort(points, data) : points, maxStepLength, i18n); + const sorted = sort(points, series); + const {columns, data} = tooltip( + sorted.map(i => i.item), + maxStepLength, + i18n + ); + return renderToStaticMarkup( + i.run)} columns={columns} data={data} /> + ); }, - [smoothedDatasets, runs, sortingMethod, maxStepLength, i18n] + [smoothedDatasets, runs, sortingMethod, maxStepLength, t, i18n] ); const options = useMemo( @@ -201,7 +193,9 @@ const ScalarChart: FunctionComponent = ({ axisPointer: { label: { formatter: - xAxisType === XAxisType.time ? undefined : ({value}: {value: number}) => format('.8')(value) + xAxisType === XAxisType.time + ? undefined + : ({value}: {value: number}) => labelFormatter(value) } } }, diff --git a/frontend/packages/core/components/TimeModeSelect.tsx b/frontend/packages/core/components/TimeModeSelect.tsx new file mode 100644 index 0000000000000000000000000000000000000000..155e9577e53c3a72c4dd526ced4d7b5da185d733 --- /dev/null +++ b/frontend/packages/core/components/TimeModeSelect.tsx @@ -0,0 +1,41 @@ +import React, {FunctionComponent, useCallback, useEffect, useState} from 'react'; + +import RadioButton from '~/components/RadioButton'; +import RadioGroup from '~/components/RadioGroup'; +import {TimeMode} from '~/types'; +import {useTranslation} from '~/utils/i18n'; + +const timeModes = [TimeMode.Step, TimeMode.Relative, TimeMode.WallTime] as const; + +type TimeModeSelectProps = { + value: TimeMode; + onChange?: (value: TimeMode) => unknown; +}; + +const TimeModeSelect: FunctionComponent = ({value, onChange}) => { + const {t} = useTranslation('common'); + + const [timeMode, setTimeMode] = useState(value); + + useEffect(() => setTimeMode(value), [value]); + + const change = useCallback( + (v: TimeMode) => { + setTimeMode(v); + onChange?.(v); + }, + [onChange] + ); + + return ( + + {timeModes.map(value => ( + + {t(`common:time-mode.${value}`)} + + ))} + + ); +}; + +export default TimeModeSelect; diff --git a/frontend/packages/core/components/TooltipTable.tsx b/frontend/packages/core/components/TooltipTable.tsx new file mode 100644 index 0000000000000000000000000000000000000000..6c1525d1fb590aa11c963d1b3a0e10d0704c2b9b --- /dev/null +++ b/frontend/packages/core/components/TooltipTable.tsx @@ -0,0 +1,99 @@ +import React, {FunctionComponent} from 'react'; +import {rem, size} from '~/utils/style'; + +import {Run} from '~/types'; +import styled from 'styled-components'; + +const Wrapper = styled.div` + table { + border-spacing: none; + text-align: left; + table-layout: fixed; + font-size: ${rem(12)}; + + th, + td { + margin: 0; + + > span { + display: inline-block; + } + } + + th { + font-size: 1.166666667em; + font-weight: bold; + padding: 0 0.285714286em; + + &.run > span { + min-width: 4.285714286em; + max-width: 12.857142857em; + } + } + + td { + padding: 0 0.333333333em; + + &.run-indicator > span { + ${size(12, 12)} + border-radius: 6px; + vertical-align: middle; + background-color: currentColor; + } + } + } +`; + +type TooltipTableProps = { + run: string; + runs: Run[]; + columns: { + label: string; + width?: string; + }[]; + data?: (string | number)[][]; +}; + +const TooltipTable: FunctionComponent = ({run, runs, columns, data}) => { + // CANNOT use translation here + // because we use `ReactDOMServer.renderToStaticMarkup` to render this component into echarts tooltip + // `ReactDOMServer.renderToStaticMarkup` WILL NOT call hydrate so translation will never be initialized + // const {t} = useTranslation('common'); + + return ( + + + + + + + {columns.map((column, i) => ( + + ))} + + + + {data?.map((row, j) => ( + + + + {row.map((cell, k) => ( + + ))} + + ))} + +
{run} + {column.label} +
+ + + {runs[j]?.label} + + {cell} +
+
+ ); +}; + +export default TooltipTable; diff --git a/frontend/packages/core/hooks/useNavItems.ts b/frontend/packages/core/hooks/useNavItems.ts index b461d02262c3eadf701fc8713c6a50e07b1b7fc0..16695c24a32e72bda590d3875658bd1845d37083 100644 --- a/frontend/packages/core/hooks/useNavItems.ts +++ b/frontend/packages/core/hooks/useNavItems.ts @@ -5,17 +5,35 @@ import {fetcher} from '~/utils/fetch'; import intersection from 'lodash/intersection'; import useRequest from '~/hooks/useRequest'; -const allNavItems = ['scalars', 'histogram', 'samples', 'graphs', 'high-dimensional']; +enum Pages { + Scalars = 'scalars', + Histogram = 'histogram', + Samples = 'samples', + Graphs = 'graphs', + HighDimensional = 'high-dimensional', + PRCurve = 'pr-curve' +} + +const pages = [ + Pages.Scalars, + Pages.Histogram, + Pages.Samples, + Pages.Graphs, + Pages.HighDimensional, + Pages.PRCurve +] as const; + export const navMap = { - scalar: 'scalars', - histogram: 'histogram', - image: 'samples', - graph: 'graphs', - embeddings: 'high-dimensional' + scalar: Pages.Scalars, + histogram: Pages.Histogram, + image: Pages.Samples, + graph: Pages.Graphs, + embeddings: Pages.HighDimensional, + 'pr-curve': Pages.PRCurve } as const; const useNavItems = () => { - const [components, setComponents] = useState([]); + const [components, setComponents] = useState([]); const {data, mutate} = useRequest<(keyof typeof navMap)[]>('/components', fetcher, { refreshInterval: components.length ? 61 * 1000 : 15 * 1000, @@ -36,7 +54,7 @@ const useNavItems = () => { }, [mutate]); useEffect(() => { - setComponents(intersection(allNavItems, data?.map(component => navMap[component]) ?? [])); + setComponents(intersection(pages, data?.map(component => navMap[component]) ?? [])); }, [data]); return components; diff --git a/frontend/packages/core/package.json b/frontend/packages/core/package.json index ebf7c1b21f4bb5bbb198afbced9f9d33c4e6014b..8976013f31be596eb370f611dc85ba57dac05d37 100644 --- a/frontend/packages/core/package.json +++ b/frontend/packages/core/package.json @@ -32,7 +32,7 @@ "test": "echo \"Error: no test specified\" && exit 0" }, "dependencies": { - "@tippyjs/react": "4.0.4", + "@tippyjs/react": "4.0.5", "@visualdl/i18n": "2.0.0-beta.43", "@visualdl/netron": "2.0.0-beta.43", "@visualdl/wasm": "2.0.0-beta.43", @@ -65,13 +65,13 @@ "devDependencies": { "@babel/core": "7.10.3", "@types/d3-format": "1.3.1", - "@types/echarts": "4.6.2", + "@types/echarts": "4.6.3", "@types/file-saver": "2.0.1", - "@types/lodash": "4.14.156", + "@types/lodash": "4.14.157", "@types/mime-types": "2.1.0", - "@types/node": "14.0.13", + "@types/node": "14.0.14", "@types/nprogress": "0.2.0", - "@types/react": "16.9.38", + "@types/react": "16.9.41", "@types/react-dom": "16.9.8", "@types/styled-components": "5.1.0", "@visualdl/mock": "2.0.0-beta.43", diff --git a/frontend/packages/core/pages/pr-curve.tsx b/frontend/packages/core/pages/pr-curve.tsx new file mode 100644 index 0000000000000000000000000000000000000000..27e94e311e130ae2d2662e44db4e5adbe98b4645 --- /dev/null +++ b/frontend/packages/core/pages/pr-curve.tsx @@ -0,0 +1,161 @@ +import ChartPage, {WithChart} from '~/components/ChartPage'; +import {NextI18NextPage, useTranslation} from '~/utils/i18n'; +import React, {useCallback, useEffect, useMemo, useState} from 'react'; +import {Run, StepInfo, Tag, TimeType} from '~/resource/pr-curve'; +import {borderColor, rem} from '~/utils/style'; + +import {AsideSection} from '~/components/Aside'; +import Content from '~/components/Content'; +import Error from '~/components/Error'; +import Field from '~/components/Field'; +import PRCurveChart from '~/components/PRCurvePage/PRCurveChart'; +import Preloader from '~/components/Preloader'; +import RunAside from '~/components/RunAside'; +import StepSlider from '~/components/PRCurvePage/StepSlider'; +import TimeModeSelect from '~/components/TimeModeSelect'; +import Title from '~/components/Title'; +import {cycleFetcher} from '~/utils/fetch'; +import queryString from 'query-string'; +import styled from 'styled-components'; +import {useRunningRequest} from '~/hooks/useRequest'; +import useTagFilter from '~/hooks/useTagFilter'; + +const StepSliderWrapper = styled.div` + max-height: 30vh; + overflow: auto; + overflow-x: hidden; + overflow-y: auto; + + > ${AsideSection}:last-child { + padding-bottom: ${rem(20)}; + margin-bottom: 0; + } + + + .run-section { + border-top: 1px solid ${borderColor}; + margin-top: 0; + padding-top: ${rem(20)}; + } +`; + +const PRCurve: NextI18NextPage = () => { + const {t} = useTranslation(['pr-curve', 'common']); + + const [running, setRunning] = useState(true); + + const {runs, tags, selectedRuns, onChangeRuns, loadingRuns, loadingTags} = useTagFilter('pr-curve', running); + + const [indexes, setIndexes] = useState>({}); + const onChangeIndexes = useCallback( + (run: string, index: number) => + setIndexes(indexes => ({ + ...indexes, + [run]: index + })), + [] + ); + useEffect( + () => + setIndexes(indexes => + selectedRuns.reduce((m, c) => { + if (indexes[c.label] != null) { + m[c.label] = indexes[c.label]; + } + return m; + }, {}) + ), + [selectedRuns] + ); + + const {data: stepInfo} = useRunningRequest( + selectedRuns.map(run => `/pr-curve/steps?${queryString.stringify({run: run.label})}`), + !!running, + (...urls) => cycleFetcher(urls) + ); + const runWithInfo = useMemo( + () => + selectedRuns.map((run, i) => ({ + ...run, + index: indexes[run.label] ?? (stepInfo?.[i].length ?? 1) - 1, + steps: stepInfo?.[i].map(j => j[1]) ?? [], + wallTimes: stepInfo?.[i].map(j => Math.floor(j[0] * 1000)) ?? [], + relatives: stepInfo?.[i].map(j => (j[0] - stepInfo[i][0][0]) * 1000) ?? [] + })), + [selectedRuns, stepInfo, indexes] + ); + + const [timeType, setTimeType] = useState(TimeType.Step); + + const prCurveTags = useMemo( + () => + tags.map(tag => ({ + ...tag, + runs: tag.runs.map(run => ({ + ...run, + index: 0, + steps: [] as Run['steps'], + wallTimes: [] as Run['wallTimes'], + relatives: [] as Run['relatives'], + ...runWithInfo.find(r => r.label === run.label) + })) + })), + [tags, runWithInfo] + ); + + const aside = useMemo( + () => + runs.length ? ( + + + + + + + + {runWithInfo.map(run => ( + + onChangeIndexes(run.label, index)} + /> + + ))} + + + ) : null, + [t, onChangeRuns, running, runs, selectedRuns, timeType, runWithInfo, onChangeIndexes] + ); + + const withChart = useCallback>( + ({label, runs, ...args}) => , + [running] + ); + + return ( + <> + + + {t('common:pr-curve')} + + {!loadingRuns && !runs.length ? ( + + ) : ( + + )} + + + ); +}; + +PRCurve.getInitialProps = () => ({ + namespacesRequired: ['pr-curve', 'common'] +}); + +export default PRCurve; diff --git a/frontend/packages/core/pages/scalars.tsx b/frontend/packages/core/pages/scalars.tsx index a78dc1890918585e6d569771b984a453dd5c6e5b..111e8d3b7d1bab1c3a83bad51379890351a7bd07 100644 --- a/frontend/packages/core/pages/scalars.tsx +++ b/frontend/packages/core/pages/scalars.tsx @@ -1,7 +1,7 @@ import ChartPage, {WithChart} from '~/components/ChartPage'; import {NextI18NextPage, useTranslation} from '~/utils/i18n'; import React, {useCallback, useMemo, useState} from 'react'; -import {SortingMethod, XAxis, sortingMethod as toolTipSortingValues, xAxis as xAxisValues} from '~/resource/scalars'; +import {SortingMethod, XAxis, sortingMethod as toolTipSortingValues} from '~/resource/scalars'; import {AsideSection} from '~/components/Aside'; import Checkbox from '~/components/Checkbox'; @@ -9,13 +9,12 @@ import Content from '~/components/Content'; import Error from '~/components/Error'; import Field from '~/components/Field'; import Preloader from '~/components/Preloader'; -import RadioButton from '~/components/RadioButton'; -import RadioGroup from '~/components/RadioGroup'; import RunAside from '~/components/RunAside'; import ScalarChart from '~/components/ScalarsPage/ScalarChart'; import Select from '~/components/Select'; import Slider from '~/components/Slider'; import {Tag} from '~/types'; +import TimeModeSelect from '~/components/TimeModeSelect'; import Title from '~/components/Title'; import {rem} from '~/utils/style'; import styled from 'styled-components'; @@ -42,7 +41,7 @@ const Scalars: NextI18NextPage = () => { const [smoothing, setSmoothing] = useState(0.6); - const [xAxis, setXAxis] = useState(xAxisValues[0]); + const [xAxis, setXAxis] = useState(XAxis.Step); const [tooltipSorting, setTooltipSorting] = useState(toolTipSortingValues[0]); @@ -81,13 +80,7 @@ const Scalars: NextI18NextPage = () => { - - {xAxisValues.map(value => ( - - {t(`scalars:x-axis-value.${value}`)} - - ))} - + diff --git a/frontend/packages/core/public/locales/en/common.json b/frontend/packages/core/public/locales/en/common.json index 73e32d3b4112fe624bb2f31bb988297bab6f66fd..1f23328651bd4ae57f94fdcc707f56858ae01ad5 100644 --- a/frontend/packages/core/public/locales/en/common.json +++ b/frontend/packages/core/public/locales/en/common.json @@ -9,6 +9,7 @@ "histogram": "Histogram", "loading": "Please wait while loading data", "next-page": "Next Page", + "pr-curve": "PR-Curve", "previous-page": "Prev Page", "run": "Run", "running": "Running", @@ -27,6 +28,11 @@ "stop": "Stop", "stop-realtime-refresh": "Stop realtime refresh", "stopped": "Stopped", + "time-mode": { + "relative": "Relative", + "step": "Step", + "wall": "Wall Time" + }, "total-page": "{{count}} page, jump to", "total-page_plural": "{{count}} pages, jump to", "unselected-empty": "Nothing selected. <1/>Please select display data from right side." diff --git a/frontend/packages/core/public/locales/en/pr-curve.json b/frontend/packages/core/public/locales/en/pr-curve.json new file mode 100644 index 0000000000000000000000000000000000000000..4f37a5fd176c3e86c98131a8ce3e37fe99ad3dde --- /dev/null +++ b/frontend/packages/core/public/locales/en/pr-curve.json @@ -0,0 +1,10 @@ +{ + "false-negatives": "FN", + "false-positives": "FP", + "precision": "Precision", + "recall": "Recall", + "threshold": "Threshold", + "time-display-type": "Time Display Type", + "true-negatives": "TN", + "true-positives": "TP" +} diff --git a/frontend/packages/core/public/locales/en/scalars.json b/frontend/packages/core/public/locales/en/scalars.json index 51a9a5d7cc78ef5000a9176d297d26598487d66c..0836d2e391fb712a1794ec259fcccd3728671aac 100644 --- a/frontend/packages/core/public/locales/en/scalars.json +++ b/frontend/packages/core/public/locales/en/scalars.json @@ -15,10 +15,5 @@ "nearest": "Nearest" }, "value": "Value", - "x-axis": "X-Axis", - "x-axis-value": { - "relative": "Relative", - "step": "Step", - "wall": "Wall Time" - } + "x-axis": "X-Axis" } diff --git a/frontend/packages/core/public/locales/zh/common.json b/frontend/packages/core/public/locales/zh/common.json index e3f0de35a41d42bba8a5cb0798b09a9a6211f2a5..21c2be1711364d2beaa44c70b154c4fe025813d0 100644 --- a/frontend/packages/core/public/locales/zh/common.json +++ b/frontend/packages/core/public/locales/zh/common.json @@ -9,6 +9,7 @@ "histogram": "直方图", "loading": "数据载入中,请稍等", "next-page": "下一页", + "pr-curve": "PR曲线", "previous-page": "上一页", "run": "运行", "running": "运行中", @@ -27,6 +28,11 @@ "stop": "停止", "stop-realtime-refresh": "停止实时数据刷新", "stopped": "已停止", + "time-mode": { + "relative": "Relative", + "step": "Step", + "wall": "Wall Time" + }, "total-page": "共 {{count}} 页,跳转至", "total-page_plural": "共 {{count}} 页,跳转至", "unselected-empty": "未选中任何数据<1/>请在右侧操作栏选择要展示的数据" diff --git a/frontend/packages/core/public/locales/zh/pr-curve.json b/frontend/packages/core/public/locales/zh/pr-curve.json new file mode 100644 index 0000000000000000000000000000000000000000..7be3d591f44a9869cea46fb2c175b617b22890a2 --- /dev/null +++ b/frontend/packages/core/public/locales/zh/pr-curve.json @@ -0,0 +1,10 @@ +{ + "false-negatives": "FN", + "false-positives": "FP", + "precision": "Precision", + "recall": "Recall", + "threshold": "Threshold", + "time-display-type": "时间显示类型", + "true-negatives": "TN", + "true-positives": "TP" +} diff --git a/frontend/packages/core/public/locales/zh/scalars.json b/frontend/packages/core/public/locales/zh/scalars.json index f644134cada27cce79702ffb3a0d4cc3c5f144ac..6741a48d876daf749e6846bb0e12ac8abd05fea4 100644 --- a/frontend/packages/core/public/locales/zh/scalars.json +++ b/frontend/packages/core/public/locales/zh/scalars.json @@ -15,10 +15,5 @@ "nearest": "最近" }, "value": "Value", - "x-axis": "X轴", - "x-axis-value": { - "relative": "Relative", - "step": "Step", - "wall": "Wall Time" - } + "x-axis": "X轴" } diff --git a/frontend/packages/core/resource/pr-curve/chart.ts b/frontend/packages/core/resource/pr-curve/chart.ts new file mode 100644 index 0000000000000000000000000000000000000000..8fea614508870fff2a29febc4b32370286973905 --- /dev/null +++ b/frontend/packages/core/resource/pr-curve/chart.ts @@ -0,0 +1,17 @@ +export const options = { + legend: { + data: [] + }, + tooltip: { + position: ['10%', '100%'] + }, + xAxis: { + min: 0, + max: 1 + }, + yAxis: { + min: 0, + max: 1, + splitNumber: 5 + } +}; diff --git a/frontend/packages/core/resource/pr-curve/data.ts b/frontend/packages/core/resource/pr-curve/data.ts new file mode 100644 index 0000000000000000000000000000000000000000..00e58f6dd40a7a45e1ef2a2a3720b7949f7dcee0 --- /dev/null +++ b/frontend/packages/core/resource/pr-curve/data.ts @@ -0,0 +1,16 @@ +export const nearestPoint = (data: number[][][], recall: number): number[][] => { + return data.map(series => { + let delta = Number.POSITIVE_INFINITY; + let index = 0; + for (let i = 0; i < series.length; i++) { + if (series[i][1] - recall < Number.EPSILON) { + return series[i]; + } + if (Math.abs(series[i][1] - recall) < delta) { + delta = Math.abs(series[i][1] - recall); + index = i; + } + } + return series[index]; + }); +}; diff --git a/frontend/packages/core/resource/pr-curve/index.ts b/frontend/packages/core/resource/pr-curve/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..c42ca2029f1fc798c1af49db6a0ba71b392608dd --- /dev/null +++ b/frontend/packages/core/resource/pr-curve/index.ts @@ -0,0 +1,3 @@ +export * from './types'; +export * from './chart'; +export * from './data'; diff --git a/frontend/packages/core/resource/pr-curve/types.ts b/frontend/packages/core/resource/pr-curve/types.ts new file mode 100644 index 0000000000000000000000000000000000000000..373f73418df04a7bc0329caed33166a4d7ff2676 --- /dev/null +++ b/frontend/packages/core/resource/pr-curve/types.ts @@ -0,0 +1,38 @@ +import {Run as BaseRun, Tag as BaseTag, TimeMode} from '~/types'; + +export {TimeMode as TimeType}; + +type Step = number; +type WallTime = number; +type Relative = number; +type Precision = number; +type Recall = number; +type TruePositives = number; +type FalsePositives = number; +type TrueNegatives = number; +type FalseNegatives = number; +type Thresholds = number; + +export type PRCurveDataItem = [ + WallTime, + Step, + Precision[], + Recall[], + TruePositives[], + FalsePositives[], + TrueNegatives[], + FalseNegatives[], + Thresholds[] +]; +export type PRCurveData = PRCurveDataItem[]; + +export interface Run extends BaseRun { + index: number; + steps: Step[]; + wallTimes: WallTime[]; + relatives: Relative[]; +} + +export type Tag = BaseTag; + +export type StepInfo = [WallTime, Step][]; diff --git a/frontend/packages/core/resource/scalars/chart.ts b/frontend/packages/core/resource/scalars/chart.ts index a102fe2b9e45a2023bdf667bd682698463e736a3..f65ca412283f3caa8ee59d1812e20bfd55d5ced6 100644 --- a/frontend/packages/core/resource/scalars/chart.ts +++ b/frontend/packages/core/resource/scalars/chart.ts @@ -1,4 +1,4 @@ -import {Dataset, TooltipData, XAxis} from './types'; +import {Dataset, XAxis} from './types'; import {I18n} from '@visualdl/i18n'; import {Run} from '~/types'; @@ -64,87 +64,36 @@ export const chartData = ({data, runs, xAxis}: {data: Dataset[]; runs: Run[]; xA }) .flat(); -// TODO: make it better, don't concat html -export const tooltip = (data: TooltipData[], stepLength: number, i18n: I18n) => { - const indexPropMap = { - time: 0, - step: 1, - value: 2, - smoothed: 3, - relative: 4 - } as const; - const widthPropMap: Record = { - run: [60, 180], - time: 150, - step: Math.max(stepLength * 8, 40), - value: 60, - smoothed: 70, - relative: 60 - } as const; - const translatePropMap = { - run: 'common:runs', - time: 'scalars:x-axis-value.wall', - step: 'scalars:x-axis-value.step', - value: 'scalars:value', - smoothed: 'scalars:smoothed', - relative: 'scalars:x-axis-value.relative' - } as const; - const transformedData = data.map(item => { - const data = item.item; - return { - run: item.run, - smoothed: valueFormatter(data[indexPropMap.smoothed] ?? Number.NaN), - value: valueFormatter(data[indexPropMap.value] ?? Number.NaN), - step: data[indexPropMap.step], - time: formatTime(data[indexPropMap.time], i18n.language), - // Relative display value should take easy-read into consideration. - // Better to tranform data to 'day:hour', 'hour:minutes', 'minute: seconds' and second only. - relative: Math.floor(data[indexPropMap.relative] * 60 * 60) + 's' - } as const; - }); - - const renderContent = (content: string, width: number | readonly [number, number]) => - `
${content}
`; - - let headerHtml = ''; - headerHtml += (Object.keys(transformedData[0]) as (keyof typeof transformedData[0])[]) - .map(key => { - return `${renderContent( - i18n.t(translatePropMap[key]), - widthPropMap[key] - )}`; - }) - .join(''); - headerHtml += ''; - - const content = transformedData - .map(item => { - let str = ''; - str += Object.keys(item) - .map(key => { - let content = ''; - if (key === 'run') { - content += ``; - content += `${item[key].label}`; - } else { - content += item[key as keyof typeof item]; - } - return `${renderContent( - content, - widthPropMap[key as keyof typeof item] - )}`; - }) - .join(''); - str += ''; - return str; - }) - .join(''); - - return `${headerHtml}${content}
`; +export const tooltip = (data: Dataset, stepLength: number, i18n: I18n) => { + return { + columns: [ + { + label: i18n.t('scalars:smoothed'), + width: '5em' + }, + { + label: i18n.t('scalars:value'), + width: '4.285714286em' + }, + { + label: i18n.t('common:time-mode.step'), + width: `${Math.max(stepLength * 0.571428571, 2.857142857)}em` + }, + { + label: i18n.t('common:time-mode.wall'), + width: '10.714285714em' + }, + { + label: i18n.t('common:time-mode.relative'), + width: '4.285714286em' + } + ], + data: data.map(([time, step, value, smoothed, relative]) => [ + valueFormatter(smoothed ?? Number.NaN), + valueFormatter(value ?? Number.NaN), + step, + formatTime(time, i18n.language), + Math.floor(relative * 60 * 60) + 's' + ]) + }; }; diff --git a/frontend/packages/core/resource/scalars/data.ts b/frontend/packages/core/resource/scalars/data.ts index 28203c22f0668c1e1e09385da7067b9c40777e7f..a764953ad4aa28fac75cf275fc40f9b9466504f9 100644 --- a/frontend/packages/core/resource/scalars/data.ts +++ b/frontend/packages/core/resource/scalars/data.ts @@ -103,6 +103,6 @@ export const nearestPoint = (data: Dataset[], runs: Run[], step: number) => } return { run: runs[index], - item: nearestItem || [] + item: nearestItem || [0, 0, 0, 0, 0] }; }); diff --git a/frontend/packages/core/resource/scalars/index.ts b/frontend/packages/core/resource/scalars/index.ts index 6022f84453b928c31ab7d8beb82c5137103caa88..8fe35e7b670c64d8a9e1d9e3096250b0af6db9b3 100644 --- a/frontend/packages/core/resource/scalars/index.ts +++ b/frontend/packages/core/resource/scalars/index.ts @@ -1,20 +1,20 @@ -import {TooltipData} from './types'; +import {SortingMethod as SM, TooltipData, XAxis} from './types'; + import sortBy from 'lodash/sortBy'; -export const xAxis = ['step', 'relative', 'wall'] as const; export const xAxisMap = { - step: 1, - relative: 4, - wall: 0 + [XAxis.Step]: 1, + [XAxis.Relative]: 4, + [XAxis.WallTime]: 0 } as const; -export const sortingMethod = ['default', 'descending', 'ascending', 'nearest'] as const; -export const sortingMethodMap = { - default: null, - descending: (points: TooltipData[]) => sortBy(points, point => point.item[3]).reverse(), - ascending: (points: TooltipData[]) => sortBy(points, point => point.item[3]), +export const sortingMethod = [SM.Default, SM.Descending, SM.Ascending, SM.Nearest] as const; +export const sortingMethodMap: Record TooltipData[]> = { + [SM.Default]: (points: TooltipData[]) => points, + [SM.Descending]: (points: TooltipData[]) => sortBy(points, point => point.item[3]).reverse(), + [SM.Ascending]: (points: TooltipData[]) => sortBy(points, point => point.item[3]), // Compare other ponts width the trigger point, caculate the nearest sort. - nearest: (points: TooltipData[], data: number[]) => sortBy(points, point => point.item[3] - data[2]) + [SM.Nearest]: (points: TooltipData[], data: number[]) => sortBy(points, point => point.item[3] - data[2]) } as const; export * from './types'; diff --git a/frontend/packages/core/resource/scalars/types.ts b/frontend/packages/core/resource/scalars/types.ts index aec2ca86f10c5a8c0a771f064c94e42681989a14..f400375574ef9f14205826231678f547b1f2e061 100644 --- a/frontend/packages/core/resource/scalars/types.ts +++ b/frontend/packages/core/resource/scalars/types.ts @@ -1,6 +1,4 @@ -import {sortingMethodMap, xAxisMap} from './index'; - -import {Run} from '~/types'; +import {Run, TimeMode} from '~/types'; type Value = number; type WallTime = number; @@ -11,8 +9,13 @@ type Relative = number; export type Dataset = [WallTime, Step, Value, Smoothed, Relative][]; export type ScalarDataset = [WallTime, Step, Value][]; -export type XAxis = keyof typeof xAxisMap; -export type SortingMethod = keyof typeof sortingMethodMap; +export {TimeMode as XAxis}; +export enum SortingMethod { + Default = 'default', + Descending = 'descending', + Ascending = 'ascending', + Nearest = 'nearest' +} export type Range = { min: number; @@ -21,5 +24,5 @@ export type Range = { export type TooltipData = { run: Run; - item: number[]; + item: Dataset[number]; }; diff --git a/frontend/packages/core/types/index.d.ts b/frontend/packages/core/types/index.ts similarity index 54% rename from frontend/packages/core/types/index.d.ts rename to frontend/packages/core/types/index.ts index dfd0c695d7b5f4c38a9bea7fcc97007dddeca8d8..58a038bef4901028124b8cdb050042e16c422f5c 100644 --- a/frontend/packages/core/types/index.d.ts +++ b/frontend/packages/core/types/index.ts @@ -3,8 +3,8 @@ export interface Run { colors: [string, string]; } -export interface Tag { - runs: Run[]; +export interface Tag { + runs: R[]; label: string; } @@ -12,3 +12,9 @@ export interface TagWithSingleRun { label: string; run: Run; } + +export enum TimeMode { + Step = 'step', + Relative = 'relative', + WallTime = 'wall' +} diff --git a/frontend/packages/i18n/package.json b/frontend/packages/i18n/package.json index ec1de537963e41375c055ddbc2e73348c7b8e4d4..bc901740b733d3e72dd3c86a7a2352bf4dabac36 100644 --- a/frontend/packages/i18n/package.json +++ b/frontend/packages/i18n/package.json @@ -50,8 +50,8 @@ "devDependencies": { "@types/express": "4.17.6", "@types/hoist-non-react-statics": "3.3.1", - "@types/node": "14.0.13", - "@types/react": "16.9.38", + "@types/node": "14.0.14", + "@types/react": "16.9.41", "@types/react-dom": "16.9.8", "typescript": "3.9.5" }, diff --git a/frontend/packages/mock/data/components.ts b/frontend/packages/mock/data/components.ts index 70412029ea3138ab96b43907e3b9bc2b4d313f6f..5808613310aa51d6f16e89fa803aa904ffd43794 100644 --- a/frontend/packages/mock/data/components.ts +++ b/frontend/packages/mock/data/components.ts @@ -1 +1 @@ -export default ['embeddings', 'scalar', 'image', 'graph', 'histogram']; +export default ['embeddings', 'scalar', 'image', 'graph', 'histogram', 'pr-curve']; diff --git a/frontend/packages/mock/data/pr-curve/list.ts b/frontend/packages/mock/data/pr-curve/list.ts new file mode 100644 index 0000000000000000000000000000000000000000..b7fb09af6fae32d8430ad28701f1d2e874cfe3a5 --- /dev/null +++ b/frontend/packages/mock/data/pr-curve/list.ts @@ -0,0 +1,6383 @@ +import {Request} from 'express'; + +export default (request: Request) => { + if (request.query.run === 'train') { + return [ + [ + 1593069993.786464, + 0, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3348623812198639, + 0.35121950507164, + 0.3604061007499695, + 0.3729729652404785, + 0.3720930218696594, + 0.3899371027946472, + 0.3986486494541168, + 0.40740740299224854, + 0.4065040647983551, + 0.43396225571632385, + 0.47252747416496277, + 0.47058823704719543, + 0.5066666603088379, + 0.48571428656578064, + 0.5, + 0.5319148898124695, + 0.5121951103210449, + 0.5555555820465088, + 0.692307710647583, + 0.739130437374115, + 0.761904776096344, + 0.8125, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0.9866666793823242, + 0.9733333587646484, + 0.9599999785423279, + 0.9466666579246521, + 0.9200000166893005, + 0.8533333539962769, + 0.8266666531562805, + 0.7866666913032532, + 0.7333333492279053, + 0.6666666865348816, + 0.6133333444595337, + 0.5733333230018616, + 0.5333333611488342, + 0.5066666603088379, + 0.4533333480358124, + 0.41333332657814026, + 0.3333333432674408, + 0.2800000011920929, + 0.2666666805744171, + 0.23999999463558197, + 0.2266666740179062, + 0.2133333384990692, + 0.1733333319425583, + 0.1599999964237213, + 0.13333334028720856, + 0.1066666692495346, + 0.09333333373069763, + 0.07999999821186066, + 0.07999999821186066, + 0.07999999821186066, + 0.06666667014360428, + 0.0533333346247673, + 0.02666666731238365, + 0.013333333656191826 + ], + [ + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 74, + 73, + 72, + 71, + 69, + 64, + 62, + 59, + 55, + 50, + 46, + 43, + 40, + 38, + 34, + 31, + 25, + 21, + 20, + 18, + 17, + 16, + 13, + 12, + 10, + 8, + 7, + 6, + 6, + 6, + 5, + 4, + 2, + 1 + ], + [ + 150, + 150, + 150, + 150, + 150, + 150, + 150, + 148, + 145, + 133, + 126, + 116, + 108, + 97, + 89, + 80, + 73, + 60, + 48, + 45, + 37, + 36, + 31, + 22, + 20, + 16, + 8, + 6, + 5, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 5, + 17, + 24, + 34, + 42, + 53, + 61, + 70, + 77, + 90, + 102, + 105, + 113, + 114, + 119, + 128, + 130, + 134, + 142, + 144, + 145, + 147, + 150, + 150, + 150, + 150, + 150, + 150, + 150, + 150, + 150, + 150, + 150 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 3, + 4, + 6, + 11, + 13, + 16, + 20, + 25, + 29, + 32, + 35, + 37, + 41, + 44, + 50, + 54, + 55, + 57, + 58, + 59, + 62, + 63, + 65, + 67, + 68, + 69, + 69, + 69, + 70, + 71, + 73, + 74 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.82 + ] + ], + [ + 1593069993.787353, + 1, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3348214328289032, + 0.3333333432674408, + 0.3509615361690521, + 0.36000001430511475, + 0.3776595890522003, + 0.395480215549469, + 0.386904776096344, + 0.40816327929496765, + 0.42335766553878784, + 0.4193548262119293, + 0.4285714328289032, + 0.43119266629219055, + 0.4536082446575165, + 0.46666666865348816, + 0.4749999940395355, + 0.4864864945411682, + 0.46875, + 0.4912280738353729, + 0.52173912525177, + 0.4871794879436493, + 0.5, + 0.4482758641242981, + 0.4399999976158142, + 0.40909090638160706, + 0.4117647111415863, + 0.4375, + 0.4166666567325592, + 0.5555555820465088, + 0.5, + 0.5, + 0.25, + 0.5, + 0.5, + 0.5, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0.9733333587646484, + 0.9733333587646484, + 0.9599999785423279, + 0.9466666579246521, + 0.9333333373069763, + 0.8666666746139526, + 0.800000011920929, + 0.7733333110809326, + 0.6933333277702332, + 0.6399999856948853, + 0.6266666650772095, + 0.5866666436195374, + 0.5600000023841858, + 0.5066666603088379, + 0.47999998927116394, + 0.4000000059604645, + 0.3733333349227905, + 0.3199999928474426, + 0.25333333015441895, + 0.23999999463558197, + 0.1733333319425583, + 0.14666666090488434, + 0.11999999731779099, + 0.09333333373069763, + 0.09333333373069763, + 0.06666667014360428, + 0.06666667014360428, + 0.0533333346247673, + 0.03999999910593033, + 0.013333333656191826, + 0.013333333656191826, + 0.013333333656191826, + 0.013333333656191826, + 0, + 0, + 0 + ], + [ + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 73, + 73, + 72, + 71, + 70, + 65, + 60, + 58, + 52, + 48, + 47, + 44, + 42, + 38, + 36, + 30, + 28, + 24, + 19, + 18, + 13, + 11, + 9, + 7, + 7, + 5, + 5, + 4, + 3, + 1, + 1, + 1, + 1, + 0, + 0, + 0 + ], + [ + 150, + 150, + 150, + 150, + 150, + 150, + 149, + 146, + 135, + 128, + 117, + 107, + 103, + 87, + 79, + 72, + 64, + 62, + 53, + 48, + 42, + 38, + 34, + 29, + 22, + 20, + 18, + 16, + 14, + 13, + 10, + 9, + 7, + 4, + 4, + 3, + 3, + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 4, + 15, + 22, + 33, + 43, + 47, + 63, + 71, + 78, + 86, + 88, + 97, + 102, + 108, + 112, + 116, + 121, + 128, + 130, + 132, + 134, + 136, + 137, + 140, + 141, + 143, + 146, + 146, + 147, + 147, + 149, + 149, + 149, + 149, + 149, + 149 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 2, + 3, + 4, + 5, + 10, + 15, + 17, + 23, + 27, + 28, + 31, + 33, + 37, + 39, + 45, + 47, + 51, + 56, + 57, + 62, + 64, + 66, + 68, + 68, + 70, + 70, + 71, + 72, + 74, + 74, + 74, + 74, + 75, + 75, + 75 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.82, + 0.84, + 0.86 + ] + ], + [ + 1593069993.7881448, + 2, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3348214328289032, + 0.33181819319725037, + 0.33796295523643494, + 0.34272301197052, + 0.3497537076473236, + 0.3526315689086914, + 0.36781609058380127, + 0.3836477994918823, + 0.3959731459617615, + 0.3893129825592041, + 0.3613445460796356, + 0.37383177876472473, + 0.3814432919025421, + 0.42352941632270813, + 0.43661972880363464, + 0.4029850661754608, + 0.4166666567325592, + 0.4038461446762085, + 0.41304346919059753, + 0.4749999940395355, + 0.4571428596973419, + 0.4137931168079376, + 0.3913043439388275, + 0.44999998807907104, + 0.47058823704719543, + 0.5, + 0.5384615659713745, + 0.7777777910232544, + 0.8571428656578064, + 0.800000011920929, + 0.75, + 0.75, + 0.6666666865348816, + 0.5, + 0, + 0 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1, + 0.9733333587646484, + 0.9733333587646484, + 0.9733333587646484, + 0.9466666579246521, + 0.8933333158493042, + 0.8533333539962769, + 0.8133333325386047, + 0.7866666913032532, + 0.6800000071525574, + 0.5733333230018616, + 0.5333333611488342, + 0.4933333396911621, + 0.47999998927116394, + 0.41333332657814026, + 0.36000001430511475, + 0.3333333432674408, + 0.2800000011920929, + 0.25333333015441895, + 0.25333333015441895, + 0.2133333384990692, + 0.1599999964237213, + 0.11999999731779099, + 0.11999999731779099, + 0.1066666692495346, + 0.09333333373069763, + 0.09333333373069763, + 0.09333333373069763, + 0.07999999821186066, + 0.0533333346247673, + 0.03999999910593033, + 0.03999999910593033, + 0.02666666731238365, + 0.013333333656191826, + 0, + 0 + ], + [ + 75, + 75, + 75, + 75, + 75, + 75, + 73, + 73, + 73, + 71, + 67, + 64, + 61, + 59, + 51, + 43, + 40, + 37, + 36, + 31, + 27, + 25, + 21, + 19, + 19, + 16, + 12, + 9, + 9, + 8, + 7, + 7, + 7, + 6, + 4, + 3, + 3, + 2, + 1, + 0, + 0 + ], + [ + 150, + 150, + 150, + 150, + 150, + 149, + 147, + 143, + 140, + 132, + 123, + 110, + 98, + 90, + 80, + 76, + 67, + 60, + 49, + 40, + 40, + 35, + 31, + 27, + 21, + 19, + 17, + 14, + 11, + 9, + 7, + 6, + 2, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 3, + 7, + 10, + 18, + 27, + 40, + 52, + 60, + 70, + 74, + 83, + 90, + 101, + 110, + 110, + 115, + 119, + 123, + 129, + 131, + 133, + 136, + 139, + 141, + 143, + 144, + 148, + 149, + 149, + 149, + 149, + 149, + 149, + 149, + 149 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 2, + 2, + 4, + 8, + 11, + 14, + 16, + 24, + 32, + 35, + 38, + 39, + 44, + 48, + 50, + 54, + 56, + 56, + 59, + 63, + 66, + 66, + 67, + 68, + 68, + 68, + 69, + 71, + 72, + 72, + 73, + 74, + 75, + 75 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.82 + ] + ], + [ + 1593069993.788836, + 3, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3303571343421936, + 0.32407405972480774, + 0.32380953431129456, + 0.3350253701210022, + 0.34224599599838257, + 0.36627906560897827, + 0.3459119498729706, + 0.36986300349235535, + 0.375, + 0.3739837408065796, + 0.38532111048698425, + 0.4040403962135315, + 0.42696627974510193, + 0.45121949911117554, + 0.47826087474823, + 0.49152541160583496, + 0.49056604504585266, + 0.4897959232330322, + 0.4651162922382355, + 0.4749999940395355, + 0.5, + 0.48275861144065857, + 0.5, + 0.4761904776096344, + 0.5, + 0.47058823704719543, + 0.5714285969734192, + 0.5454545617103577, + 0.5555555820465088, + 0.5, + 0.5714285969734192, + 0.5714285969734192, + 0.25, + 0.3333333432674408, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1, + 0.9866666793823242, + 0.9333333373069763, + 0.9066666960716248, + 0.8799999952316284, + 0.8533333539962769, + 0.8399999737739563, + 0.7333333492279053, + 0.7200000286102295, + 0.6800000071525574, + 0.6133333444595337, + 0.5600000023841858, + 0.5333333611488342, + 0.5066666603088379, + 0.4933333396911621, + 0.4399999976158142, + 0.3866666555404663, + 0.3466666638851166, + 0.3199999928474426, + 0.2666666805744171, + 0.25333333015441895, + 0.23999999463558197, + 0.18666666746139526, + 0.14666666090488434, + 0.13333334028720856, + 0.13333334028720856, + 0.1066666692495346, + 0.1066666692495346, + 0.07999999821186066, + 0.06666667014360428, + 0.0533333346247673, + 0.0533333346247673, + 0.0533333346247673, + 0.013333333656191826, + 0.013333333656191826, + 0, + 0, + 0, + 0, + 0 + ], + [ + 75, + 75, + 75, + 75, + 75, + 75, + 74, + 70, + 68, + 66, + 64, + 63, + 55, + 54, + 51, + 46, + 42, + 40, + 38, + 37, + 33, + 29, + 26, + 24, + 20, + 19, + 18, + 14, + 11, + 10, + 10, + 8, + 8, + 6, + 5, + 4, + 4, + 4, + 1, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 150, + 150, + 150, + 150, + 150, + 150, + 150, + 146, + 142, + 131, + 123, + 109, + 104, + 92, + 85, + 77, + 67, + 59, + 51, + 45, + 36, + 30, + 27, + 25, + 23, + 21, + 18, + 15, + 11, + 11, + 10, + 9, + 6, + 5, + 4, + 4, + 3, + 3, + 3, + 2, + 2, + 1, + 1, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 8, + 19, + 27, + 41, + 46, + 58, + 65, + 73, + 83, + 91, + 99, + 105, + 114, + 120, + 123, + 125, + 127, + 129, + 132, + 135, + 139, + 139, + 140, + 141, + 144, + 145, + 146, + 146, + 147, + 147, + 147, + 148, + 148, + 149, + 149, + 149, + 149 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 5, + 7, + 9, + 11, + 12, + 20, + 21, + 24, + 29, + 33, + 35, + 37, + 38, + 42, + 46, + 49, + 51, + 55, + 56, + 57, + 61, + 64, + 65, + 65, + 67, + 67, + 69, + 70, + 71, + 71, + 71, + 74, + 74, + 75, + 75, + 75, + 75, + 75 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.82, + 0.84, + 0.86, + 0.88, + 0.9 + ] + ], + [ + 1593069993.7894, + 4, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3348214328289032, + 0.3363228738307953, + 0.3317972421646118, + 0.33816424012184143, + 0.3484848439693451, + 0.3492063581943512, + 0.3636363744735718, + 0.363095223903656, + 0.3717948794364929, + 0.37142857909202576, + 0.3840000033378601, + 0.3839285671710968, + 0.3979591727256775, + 0.4166666567325592, + 0.4722222089767456, + 0.460317462682724, + 0.4912280738353729, + 0.4901960790157318, + 0.5333333611488342, + 0.5641025900840759, + 0.5882353186607361, + 0.6666666865348816, + 0.625, + 0.5555555820465088, + 0.5625, + 0.6363636255264282, + 0.6666666865348816, + 0.6666666865348816, + 0.5, + 0.5, + 0.5, + 0.6666666865348816, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0.9599999785423279, + 0.9333333373069763, + 0.9200000166893005, + 0.8799999952316284, + 0.8533333539962769, + 0.8133333325386047, + 0.7733333110809326, + 0.6933333277702332, + 0.6399999856948853, + 0.5733333230018616, + 0.5199999809265137, + 0.46666666865348816, + 0.4533333480358124, + 0.3866666555404663, + 0.3733333349227905, + 0.3333333432674408, + 0.3199999928474426, + 0.2933333218097687, + 0.2666666805744171, + 0.23999999463558197, + 0.20000000298023224, + 0.13333334028720856, + 0.11999999731779099, + 0.09333333373069763, + 0.07999999821186066, + 0.0533333346247673, + 0.02666666731238365, + 0.02666666731238365, + 0.02666666731238365, + 0.02666666731238365, + 0.02666666731238365, + 0.013333333656191826 + ], + [ + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 72, + 70, + 69, + 66, + 64, + 61, + 58, + 52, + 48, + 43, + 39, + 35, + 34, + 29, + 28, + 25, + 24, + 22, + 20, + 18, + 15, + 10, + 9, + 7, + 6, + 4, + 2, + 2, + 2, + 2, + 2, + 1 + ], + [ + 150, + 150, + 150, + 150, + 150, + 149, + 148, + 145, + 137, + 129, + 123, + 112, + 107, + 98, + 88, + 77, + 69, + 59, + 49, + 38, + 34, + 29, + 26, + 21, + 17, + 14, + 9, + 9, + 8, + 7, + 4, + 3, + 2, + 2, + 2, + 2, + 1, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 5, + 13, + 21, + 27, + 38, + 43, + 52, + 62, + 73, + 81, + 91, + 101, + 112, + 116, + 121, + 124, + 129, + 133, + 136, + 141, + 141, + 142, + 143, + 146, + 147, + 148, + 148, + 148, + 148, + 149, + 150, + 150 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 5, + 6, + 9, + 11, + 14, + 17, + 23, + 27, + 32, + 36, + 40, + 41, + 46, + 47, + 50, + 51, + 53, + 55, + 57, + 60, + 65, + 66, + 68, + 69, + 71, + 73, + 73, + 73, + 73, + 73, + 74 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78 + ] + ], + [ + 1593069993.790076, + 5, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3348214328289032, + 0.3378378450870514, + 0.3410138189792633, + 0.3507108986377716, + 0.3631840944290161, + 0.3617021143436432, + 0.3604651093482971, + 0.36250001192092896, + 0.3758389353752136, + 0.3834586441516876, + 0.4000000059604645, + 0.3980582654476166, + 0.44186046719551086, + 0.4430379867553711, + 0.48571428656578064, + 0.515625, + 0.5892857313156128, + 0.5490196347236633, + 0.5714285969734192, + 0.5641025900840759, + 0.5588235259056091, + 0.5862069129943848, + 0.5652173757553101, + 0.6000000238418579, + 0.6666666865348816, + 0.6470588445663452, + 0.6875, + 0.6666666865348816, + 0.6666666865348816, + 0.6666666865348816, + 0.75, + 0.7142857313156128, + 0.5, + 0.5, + 0.5, + 1 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0.9866666793823242, + 0.9866666793823242, + 0.9733333587646484, + 0.9066666960716248, + 0.8266666531562805, + 0.7733333110809326, + 0.746666669845581, + 0.6800000071525574, + 0.6133333444595337, + 0.54666668176651, + 0.5066666603088379, + 0.46666666865348816, + 0.4533333480358124, + 0.4399999976158142, + 0.4399999976158142, + 0.3733333349227905, + 0.3199999928474426, + 0.2933333218097687, + 0.25333333015441895, + 0.2266666740179062, + 0.1733333319425583, + 0.1599999964237213, + 0.1599999964237213, + 0.14666666090488434, + 0.14666666090488434, + 0.13333334028720856, + 0.1066666692495346, + 0.1066666692495346, + 0.07999999821186066, + 0.06666667014360428, + 0.02666666731238365, + 0.02666666731238365, + 0.013333333656191826, + 0.013333333656191826 + ], + [ + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 74, + 74, + 73, + 68, + 62, + 58, + 56, + 51, + 46, + 41, + 38, + 35, + 34, + 33, + 33, + 28, + 24, + 22, + 19, + 17, + 13, + 12, + 12, + 11, + 11, + 10, + 8, + 8, + 6, + 5, + 2, + 2, + 1, + 1 + ], + [ + 150, + 150, + 150, + 150, + 150, + 149, + 147, + 143, + 137, + 128, + 120, + 110, + 102, + 93, + 82, + 69, + 62, + 48, + 44, + 36, + 31, + 23, + 23, + 18, + 17, + 15, + 12, + 10, + 8, + 6, + 6, + 5, + 5, + 4, + 4, + 2, + 2, + 2, + 2, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 3, + 7, + 13, + 22, + 30, + 40, + 48, + 57, + 68, + 81, + 88, + 102, + 106, + 114, + 119, + 127, + 127, + 132, + 133, + 135, + 138, + 140, + 142, + 144, + 144, + 145, + 145, + 146, + 146, + 148, + 148, + 148, + 148, + 149, + 150 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 7, + 13, + 17, + 19, + 24, + 29, + 34, + 37, + 40, + 41, + 42, + 42, + 47, + 51, + 53, + 56, + 58, + 62, + 63, + 63, + 64, + 64, + 65, + 67, + 67, + 69, + 70, + 73, + 73, + 74, + 74 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.82 + ] + ], + [ + 1593069993.790763, + 6, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.33636364340782166, + 0.3396226465702057, + 0.34299516677856445, + 0.34825870394706726, + 0.35638296604156494, + 0.3641618490219116, + 0.3836477994918823, + 0.4041095972061157, + 0.4148148000240326, + 0.4406779706478119, + 0.4615384638309479, + 0.4285714328289032, + 0.44871795177459717, + 0.47826087474823, + 0.4769230782985687, + 0.4655172526836395, + 0.4901960790157318, + 0.54347825050354, + 0.523809552192688, + 0.5249999761581421, + 0.6000000238418579, + 0.5555555820465088, + 0.5416666865348816, + 0.5263158082962036, + 0.47058823704719543, + 0.3571428656578064, + 0.4545454680919647, + 0.6666666865348816, + 0.6000000238418579, + 0.5, + 0.5, + 0.6666666865348816, + 0.6666666865348816, + 0.6666666865348816, + 1, + 1, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1, + 0.9866666793823242, + 0.9599999785423279, + 0.9466666579246521, + 0.9333333373069763, + 0.8933333158493042, + 0.8399999737739563, + 0.8133333325386047, + 0.7866666913032532, + 0.746666669845581, + 0.6933333277702332, + 0.6399999856948853, + 0.5199999809265137, + 0.46666666865348816, + 0.4399999976158142, + 0.41333332657814026, + 0.36000001430511475, + 0.3333333432674408, + 0.3333333432674408, + 0.2933333218097687, + 0.2800000011920929, + 0.2800000011920929, + 0.20000000298023224, + 0.1733333319425583, + 0.13333334028720856, + 0.1066666692495346, + 0.06666667014360428, + 0.06666667014360428, + 0.0533333346247673, + 0.03999999910593033, + 0.02666666731238365, + 0.02666666731238365, + 0.02666666731238365, + 0.02666666731238365, + 0.02666666731238365, + 0.02666666731238365, + 0.02666666731238365, + 0.02666666731238365, + 0.013333333656191826, + 0.013333333656191826 + ], + [ + 75, + 75, + 75, + 75, + 75, + 75, + 74, + 72, + 71, + 70, + 67, + 63, + 61, + 59, + 56, + 52, + 48, + 39, + 35, + 33, + 31, + 27, + 25, + 25, + 22, + 21, + 21, + 15, + 13, + 10, + 8, + 5, + 5, + 4, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 1, + 1 + ], + [ + 150, + 150, + 150, + 150, + 150, + 150, + 146, + 140, + 136, + 131, + 121, + 110, + 98, + 87, + 79, + 66, + 56, + 52, + 43, + 36, + 34, + 31, + 26, + 21, + 20, + 19, + 14, + 12, + 11, + 9, + 9, + 9, + 6, + 2, + 2, + 2, + 2, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 10, + 14, + 19, + 29, + 40, + 52, + 63, + 71, + 84, + 94, + 98, + 107, + 114, + 116, + 119, + 124, + 129, + 130, + 131, + 136, + 138, + 139, + 141, + 141, + 141, + 144, + 148, + 148, + 148, + 148, + 149, + 149, + 149, + 150, + 150, + 150, + 150, + 150 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 3, + 4, + 5, + 8, + 12, + 14, + 16, + 19, + 23, + 27, + 36, + 40, + 42, + 44, + 48, + 50, + 50, + 53, + 54, + 54, + 60, + 62, + 65, + 67, + 70, + 70, + 71, + 72, + 73, + 73, + 73, + 73, + 73, + 73, + 73, + 73, + 74, + 74 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.82, + 0.84, + 0.86, + 0.88, + 0.9 + ] + ], + [ + 1593069993.791473, + 7, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3348214328289032, + 0.34246575832366943, + 0.3461538553237915, + 0.35567009449005127, + 0.36021506786346436, + 0.3735632300376892, + 0.3827160596847534, + 0.4054054021835327, + 0.3955223858356476, + 0.39830508828163147, + 0.4134615361690521, + 0.4204545319080353, + 0.44871795177459717, + 0.47887325286865234, + 0.5, + 0.5, + 0.5, + 0.5106382966041565, + 0.5365853905677795, + 0.5428571701049805, + 0.5625, + 0.5714285969734192, + 0.5769230723381042, + 0.5600000023841858, + 0.5454545617103577, + 0.5, + 0.5, + 0.5, + 0.4285714328289032, + 0.4545454680919647, + 0.4000000059604645, + 0.5, + 0.4000000059604645, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0.9599999785423279, + 0.9200000166893005, + 0.8933333158493042, + 0.8666666746139526, + 0.8266666531562805, + 0.800000011920929, + 0.7066666483879089, + 0.6266666650772095, + 0.5733333230018616, + 0.4933333396911621, + 0.46666666865348816, + 0.4533333480358124, + 0.4266666769981384, + 0.3733333349227905, + 0.3466666638851166, + 0.3199999928474426, + 0.2933333218097687, + 0.25333333015441895, + 0.23999999463558197, + 0.2133333384990692, + 0.20000000298023224, + 0.18666666746139526, + 0.1599999964237213, + 0.13333334028720856, + 0.11999999731779099, + 0.1066666692495346, + 0.07999999821186066, + 0.06666667014360428, + 0.0533333346247673, + 0.0533333346247673, + 0.02666666731238365, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 75, + 75, + 75, + 75, + 75, + 75, + 75, + 72, + 69, + 67, + 65, + 62, + 60, + 53, + 47, + 43, + 37, + 35, + 34, + 32, + 28, + 26, + 24, + 22, + 19, + 18, + 16, + 15, + 14, + 12, + 10, + 9, + 8, + 6, + 5, + 4, + 4, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 150, + 150, + 150, + 150, + 150, + 149, + 144, + 136, + 125, + 119, + 109, + 100, + 88, + 81, + 71, + 61, + 51, + 43, + 37, + 32, + 28, + 26, + 23, + 19, + 16, + 14, + 12, + 11, + 11, + 10, + 10, + 9, + 8, + 8, + 6, + 6, + 4, + 3, + 2, + 2, + 1, + 1, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 6, + 14, + 25, + 31, + 41, + 50, + 62, + 69, + 79, + 89, + 99, + 107, + 113, + 118, + 122, + 124, + 127, + 131, + 134, + 136, + 138, + 139, + 139, + 140, + 140, + 141, + 142, + 142, + 144, + 144, + 146, + 147, + 148, + 148, + 149, + 149, + 149, + 149 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 6, + 8, + 10, + 13, + 15, + 22, + 28, + 32, + 38, + 40, + 41, + 43, + 47, + 49, + 51, + 53, + 56, + 57, + 59, + 60, + 61, + 63, + 65, + 66, + 67, + 69, + 70, + 71, + 71, + 73, + 75, + 75, + 75, + 75, + 75, + 75 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.82, + 0.84, + 0.86, + 0.88 + ] + ], + [ + 1593069993.792149, + 8, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3348214328289032, + 0.3363228738307953, + 0.3333333432674408, + 0.3396226465702057, + 0.3383084535598755, + 0.33673468232154846, + 0.3368983864784241, + 0.3314606845378876, + 0.33136093616485596, + 0.3561643958091736, + 0.3643410801887512, + 0.39316239953041077, + 0.43689319491386414, + 0.450549453496933, + 0.4938271641731262, + 0.4861111044883728, + 0.484375, + 0.5370370149612427, + 0.5333333611488342, + 0.5, + 0.5135135054588318, + 0.529411792755127, + 0.5806451439857483, + 0.6296296119689941, + 0.6499999761581421, + 0.6111111044883728, + 0.6666666865348816, + 0.7692307829856873, + 0.75, + 0.800000011920929, + 0.8333333134651184, + 0.800000011920929, + 0.800000011920929, + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1, + 0.9733333587646484, + 0.9599999785423279, + 0.9066666960716248, + 0.8799999952316284, + 0.8399999737739563, + 0.7866666913032532, + 0.746666669845581, + 0.6933333277702332, + 0.6266666650772095, + 0.6133333444595337, + 0.6000000238418579, + 0.54666668176651, + 0.5333333611488342, + 0.46666666865348816, + 0.41333332657814026, + 0.3866666555404663, + 0.3199999928474426, + 0.25333333015441895, + 0.25333333015441895, + 0.23999999463558197, + 0.23999999463558197, + 0.2266666740179062, + 0.1733333319425583, + 0.14666666090488434, + 0.13333334028720856, + 0.13333334028720856, + 0.11999999731779099, + 0.1066666692495346, + 0.06666667014360428, + 0.0533333346247673, + 0.0533333346247673, + 0.0533333346247673, + 0.03999999910593033, + 0.03999999910593033, + 0.03999999910593033, + 0.013333333656191826, + 0.013333333656191826 + ], + [ + 75, + 75, + 75, + 75, + 75, + 75, + 73, + 72, + 68, + 66, + 63, + 59, + 56, + 52, + 47, + 46, + 45, + 41, + 40, + 35, + 31, + 29, + 24, + 19, + 19, + 18, + 18, + 17, + 13, + 11, + 10, + 10, + 9, + 8, + 5, + 4, + 4, + 4, + 3, + 3, + 3, + 1, + 1 + ], + [ + 150, + 150, + 150, + 150, + 149, + 148, + 146, + 140, + 133, + 130, + 124, + 119, + 113, + 94, + 82, + 71, + 58, + 50, + 41, + 37, + 33, + 25, + 21, + 19, + 18, + 16, + 13, + 10, + 7, + 7, + 5, + 3, + 3, + 2, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 2, + 4, + 10, + 17, + 20, + 26, + 31, + 37, + 56, + 68, + 79, + 92, + 100, + 109, + 113, + 117, + 125, + 129, + 131, + 132, + 134, + 137, + 140, + 143, + 143, + 145, + 147, + 147, + 148, + 149, + 149, + 149, + 150, + 150, + 150, + 150, + 150, + 150 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 3, + 7, + 9, + 12, + 16, + 19, + 23, + 28, + 29, + 30, + 34, + 35, + 40, + 44, + 46, + 51, + 56, + 56, + 57, + 57, + 58, + 62, + 64, + 65, + 65, + 66, + 67, + 70, + 71, + 71, + 71, + 72, + 72, + 72, + 74, + 74 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.82, + 0.84, + 0.86 + ] + ], + [ + 1593069993.792763, + 9, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3363228738307953, + 0.3395348787307739, + 0.3349282443523407, + 0.3283582031726837, + 0.32474225759506226, + 0.34682080149650574, + 0.3522012531757355, + 0.3611111044883728, + 0.36567163467407227, + 0.3781512677669525, + 0.37962964177131653, + 0.3958333432674408, + 0.42352941632270813, + 0.4399999976158142, + 0.4637681245803833, + 0.4754098355770111, + 0.46296295523643494, + 0.47058823704719543, + 0.4791666567325592, + 0.5128205418586731, + 0.5142857432365417, + 0.5161290168762207, + 0.5199999809265137, + 0.6000000238418579, + 0.5555555820465088, + 0.6666666865348816, + 0.7777777910232544, + 0.8571428656578064, + 0.8571428656578064, + 0.8571428656578064, + 0.8571428656578064, + 0.8333333134651184, + 0.8333333134651184, + 0.6666666865348816, + 0.6666666865348816, + 0 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1, + 0.9733333587646484, + 0.9333333373069763, + 0.8799999952316284, + 0.8399999737739563, + 0.800000011920929, + 0.746666669845581, + 0.6933333277702332, + 0.653333306312561, + 0.6000000238418579, + 0.54666668176651, + 0.5066666603088379, + 0.47999998927116394, + 0.4399999976158142, + 0.4266666769981384, + 0.3866666555404663, + 0.3333333432674408, + 0.3199999928474426, + 0.30666667222976685, + 0.2666666805744171, + 0.23999999463558197, + 0.2133333384990692, + 0.1733333319425583, + 0.1599999964237213, + 0.13333334028720856, + 0.13333334028720856, + 0.09333333373069763, + 0.07999999821186066, + 0.07999999821186066, + 0.07999999821186066, + 0.07999999821186066, + 0.06666667014360428, + 0.06666667014360428, + 0.02666666731238365, + 0.02666666731238365, + 0 + ], + [ + 75, + 75, + 75, + 75, + 75, + 75, + 73, + 70, + 66, + 63, + 60, + 56, + 52, + 49, + 45, + 41, + 38, + 36, + 33, + 32, + 29, + 25, + 24, + 23, + 20, + 18, + 16, + 13, + 12, + 10, + 10, + 7, + 6, + 6, + 6, + 6, + 5, + 5, + 2, + 2, + 0 + ], + [ + 150, + 150, + 150, + 150, + 150, + 148, + 142, + 139, + 135, + 131, + 113, + 103, + 92, + 85, + 74, + 67, + 58, + 49, + 42, + 37, + 32, + 29, + 27, + 25, + 19, + 17, + 15, + 12, + 8, + 8, + 5, + 2, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 8, + 11, + 15, + 19, + 37, + 47, + 58, + 65, + 76, + 83, + 92, + 101, + 108, + 113, + 118, + 121, + 123, + 125, + 131, + 133, + 135, + 138, + 142, + 142, + 145, + 148, + 149, + 149, + 149, + 149, + 149, + 149, + 149, + 149, + 149 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 5, + 9, + 12, + 15, + 19, + 23, + 26, + 30, + 34, + 37, + 39, + 42, + 43, + 46, + 50, + 51, + 52, + 55, + 57, + 59, + 62, + 63, + 65, + 65, + 68, + 69, + 69, + 69, + 69, + 70, + 70, + 73, + 73, + 75 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.82 + ] + ] + ]; + } + return [ + [ + 1593069993.5386739, + 0, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3340757191181183, + 0.3340807259082794, + 0.3371298313140869, + 0.3372093141078949, + 0.35207822918891907, + 0.36269429326057434, + 0.3777777850627899, + 0.3857566714286804, + 0.39087948203086853, + 0.4021352231502533, + 0.4166666567325592, + 0.42489269375801086, + 0.44607841968536377, + 0.4748603403568268, + 0.4909090995788574, + 0.5104895234107971, + 0.48120301961898804, + 0.5041322112083435, + 0.5154638886451721, + 0.517241358757019, + 0.5263158082962036, + 0.6140350699424744, + 0.6595744490623474, + 0.675000011920929, + 0.6666666865348816, + 0.7727272510528564, + 0.7368420958518982, + 0.7058823704719543, + 0.7692307829856873, + 0.800000011920929, + 0.800000011920929, + 0.7777777910232544, + 0.75, + 0.7142857313156128, + 0.6000000238418579, + 0.5, + 0.5, + 0.5, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1, + 0.9933333396911621, + 0.9866666793823242, + 0.9666666388511658, + 0.9599999785423279, + 0.9333333373069763, + 0.9066666960716248, + 0.8666666746139526, + 0.800000011920929, + 0.753333330154419, + 0.699999988079071, + 0.6600000262260437, + 0.6066666841506958, + 0.5666666626930237, + 0.5400000214576721, + 0.4866666793823242, + 0.4266666769981384, + 0.40666666626930237, + 0.3333333432674408, + 0.30000001192092896, + 0.2666666805744171, + 0.23333333432674408, + 0.20666666328907013, + 0.18000000715255737, + 0.13333334028720856, + 0.1133333370089531, + 0.09333333373069763, + 0.07999999821186066, + 0.06666667014360428, + 0.0533333346247673, + 0.0533333346247673, + 0.046666666865348816, + 0.03999999910593033, + 0.03333333507180214, + 0.019999999552965164, + 0.013333333656191826, + 0.006666666828095913, + 0.006666666828095913, + 0, + 0, + 0 + ], + [ + 150, + 150, + 150, + 150, + 150, + 150, + 149, + 148, + 145, + 144, + 140, + 136, + 130, + 120, + 113, + 105, + 99, + 91, + 85, + 81, + 73, + 64, + 61, + 50, + 45, + 40, + 35, + 31, + 27, + 20, + 17, + 14, + 12, + 10, + 8, + 8, + 7, + 6, + 5, + 3, + 2, + 1, + 1, + 0, + 0, + 0 + ], + [ + 300, + 300, + 300, + 300, + 300, + 299, + 297, + 291, + 285, + 265, + 246, + 224, + 207, + 187, + 168, + 147, + 134, + 113, + 94, + 84, + 70, + 69, + 60, + 47, + 42, + 36, + 22, + 16, + 13, + 10, + 5, + 5, + 5, + 3, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 1, + 1, + 1, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 3, + 9, + 15, + 35, + 54, + 76, + 93, + 113, + 132, + 153, + 166, + 187, + 206, + 216, + 230, + 231, + 240, + 253, + 258, + 264, + 278, + 284, + 287, + 290, + 295, + 295, + 295, + 297, + 298, + 298, + 298, + 298, + 298, + 298, + 298, + 299, + 299, + 299, + 299, + 299 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 5, + 6, + 10, + 14, + 20, + 30, + 37, + 45, + 51, + 59, + 65, + 69, + 77, + 86, + 89, + 100, + 105, + 110, + 115, + 119, + 123, + 130, + 133, + 136, + 138, + 140, + 142, + 142, + 143, + 144, + 145, + 147, + 148, + 149, + 149, + 150, + 150, + 150 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.82, + 0.84, + 0.86, + 0.88, + 0.9, + 0.92 + ] + ], + [ + 1593069993.539396, + 1, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.33557048439979553, + 0.33560091257095337, + 0.3498817980289459, + 0.35853657126426697, + 0.37402597069740295, + 0.3835616409778595, + 0.3797101378440857, + 0.3967213034629822, + 0.40072202682495117, + 0.40816327929496765, + 0.4139534831047058, + 0.4334975481033325, + 0.45652174949645996, + 0.4848484992980957, + 0.4829931855201721, + 0.5, + 0.49180328845977783, + 0.49074074625968933, + 0.52173912525177, + 0.5443037748336792, + 0.5352112650871277, + 0.5245901346206665, + 0.4901960790157318, + 0.4545454680919647, + 0.4324324429035187, + 0.4375, + 0.4399999976158142, + 0.5, + 0.5625, + 0.5, + 0.4000000059604645, + 0.5, + 0.4000000059604645, + 0.5, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0.9866666793823242, + 0.9866666793823242, + 0.9800000190734863, + 0.9599999785423279, + 0.9333333373069763, + 0.8733333349227905, + 0.8066666722297668, + 0.7400000095367432, + 0.6666666865348816, + 0.5933333039283752, + 0.5866666436195374, + 0.5600000023841858, + 0.5333333611488342, + 0.47333332896232605, + 0.46000000834465027, + 0.4000000059604645, + 0.35333332419395447, + 0.3199999928474426, + 0.2866666615009308, + 0.25333333015441895, + 0.2133333384990692, + 0.1666666716337204, + 0.13333334028720856, + 0.1066666692495346, + 0.09333333373069763, + 0.07333333045244217, + 0.06666667014360428, + 0.05999999865889549, + 0.03999999910593033, + 0.02666666731238365, + 0.02666666731238365, + 0.013333333656191826, + 0.006666666828095913, + 0, + 0, + 0 + ], + [ + 150, + 150, + 150, + 150, + 150, + 150, + 150, + 148, + 148, + 147, + 144, + 140, + 131, + 121, + 111, + 100, + 89, + 88, + 84, + 80, + 71, + 69, + 60, + 53, + 48, + 43, + 38, + 32, + 25, + 20, + 16, + 14, + 11, + 10, + 9, + 6, + 4, + 4, + 2, + 1, + 0, + 0, + 0 + ], + [ + 300, + 300, + 300, + 300, + 300, + 300, + 297, + 293, + 275, + 263, + 241, + 225, + 214, + 184, + 166, + 145, + 126, + 115, + 100, + 85, + 76, + 69, + 62, + 55, + 44, + 36, + 33, + 29, + 26, + 24, + 21, + 18, + 14, + 10, + 7, + 6, + 6, + 4, + 3, + 1, + 1, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 7, + 25, + 37, + 59, + 75, + 86, + 116, + 134, + 155, + 174, + 185, + 200, + 215, + 224, + 231, + 238, + 245, + 256, + 264, + 267, + 271, + 274, + 276, + 279, + 282, + 286, + 290, + 293, + 294, + 294, + 296, + 297, + 299, + 299, + 299, + 299 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 2, + 3, + 6, + 10, + 19, + 29, + 39, + 50, + 61, + 62, + 66, + 70, + 79, + 81, + 90, + 97, + 102, + 107, + 112, + 118, + 125, + 130, + 134, + 136, + 139, + 140, + 141, + 144, + 146, + 146, + 148, + 149, + 150, + 150, + 150 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.82, + 0.84, + 0.86 + ] + ], + [ + 1593069993.540066, + 2, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3348214328289032, + 0.33484163880348206, + 0.33870968222618103, + 0.34433960914611816, + 0.35749998688697815, + 0.3658536672592163, + 0.3742690086364746, + 0.3853503167629242, + 0.4027777910232544, + 0.40784314274787903, + 0.4025973975658417, + 0.4166666567325592, + 0.42328041791915894, + 0.45783132314682007, + 0.4751773178577423, + 0.4296875, + 0.4568965435028076, + 0.4476190507411957, + 0.4838709533214569, + 0.5121951103210449, + 0.4931506812572479, + 0.508474588394165, + 0.4901960790157318, + 0.4888888895511627, + 0.5555555820465088, + 0.6333333253860474, + 0.6296296119689941, + 0.75, + 0.75, + 0.6666666865348816, + 0.75, + 0.7142857313156128, + 0.6666666865348816, + 0.3333333432674408, + 0, + 0 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1, + 0.9866666793823242, + 0.9800000190734863, + 0.9733333587646484, + 0.95333331823349, + 0.8999999761581421, + 0.8533333539962769, + 0.8066666722297668, + 0.7733333110809326, + 0.6933333277702332, + 0.6200000047683716, + 0.5666666626930237, + 0.5333333611488342, + 0.5066666603088379, + 0.4466666579246521, + 0.36666667461395264, + 0.35333332419395447, + 0.31333333253860474, + 0.30000001192092896, + 0.2800000011920929, + 0.23999999463558197, + 0.20000000298023224, + 0.1666666716337204, + 0.14666666090488434, + 0.13333334028720856, + 0.12666666507720947, + 0.1133333370089531, + 0.10000000149011612, + 0.07999999821186066, + 0.0533333346247673, + 0.03999999910593033, + 0.03333333507180214, + 0.02666666731238365, + 0.006666666828095913, + 0, + 0 + ], + [ + 150, + 150, + 150, + 150, + 150, + 150, + 148, + 147, + 146, + 143, + 135, + 128, + 121, + 116, + 104, + 93, + 85, + 80, + 76, + 67, + 55, + 53, + 47, + 45, + 42, + 36, + 30, + 25, + 22, + 20, + 19, + 17, + 15, + 12, + 8, + 6, + 5, + 4, + 1, + 0, + 0 + ], + [ + 300, + 300, + 300, + 300, + 300, + 298, + 294, + 287, + 278, + 257, + 234, + 214, + 193, + 172, + 151, + 138, + 119, + 109, + 90, + 74, + 73, + 63, + 58, + 48, + 40, + 37, + 29, + 26, + 23, + 16, + 11, + 10, + 5, + 4, + 4, + 2, + 2, + 2, + 2, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 6, + 13, + 22, + 43, + 66, + 86, + 107, + 128, + 149, + 162, + 181, + 191, + 210, + 226, + 227, + 237, + 242, + 252, + 260, + 263, + 271, + 274, + 277, + 284, + 289, + 290, + 295, + 296, + 296, + 298, + 298, + 298, + 298, + 299, + 299 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 3, + 4, + 7, + 15, + 22, + 29, + 34, + 46, + 57, + 65, + 70, + 74, + 83, + 95, + 97, + 103, + 105, + 108, + 114, + 120, + 125, + 128, + 130, + 131, + 133, + 135, + 138, + 142, + 144, + 145, + 146, + 149, + 150, + 150 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.82 + ] + ], + [ + 1593069993.540662, + 3, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.33178654313087463, + 0.33571428060531616, + 0.3350125849246979, + 0.3448275923728943, + 0.36467236280441284, + 0.3639143705368042, + 0.3877550959587097, + 0.38661709427833557, + 0.38211381435394287, + 0.3963963985443115, + 0.4108910858631134, + 0.43406593799591064, + 0.4491018056869507, + 0.4652777910232544, + 0.4880000054836273, + 0.4955752193927765, + 0.5145630836486816, + 0.5, + 0.5057471394538879, + 0.5194805264472961, + 0.5373134613037109, + 0.5789473652839661, + 0.6000000238418579, + 0.5952380895614624, + 0.5714285969734192, + 0.6785714030265808, + 0.6521739363670349, + 0.6666666865348816, + 0.7142857313156128, + 0.7272727489471436, + 0.6666666865348816, + 0.5, + 0.6000000238418579, + 0.5, + 0.6666666865348816, + 0.6666666865348816, + 0.6666666865348816, + 0.5, + 1 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1, + 0.9866666793823242, + 0.95333331823349, + 0.9399999976158142, + 0.8866666555404663, + 0.8666666746139526, + 0.8533333539962769, + 0.7933333516120911, + 0.7599999904632568, + 0.6933333277702332, + 0.6266666650772095, + 0.5866666436195374, + 0.5533333420753479, + 0.5266666412353516, + 0.5, + 0.4466666579246521, + 0.40666666626930237, + 0.3733333349227905, + 0.35333332419395447, + 0.31333333253860474, + 0.2933333218097687, + 0.2666666805744171, + 0.23999999463558197, + 0.2199999988079071, + 0.20000000298023224, + 0.1666666716337204, + 0.13333334028720856, + 0.12666666507720947, + 0.10000000149011612, + 0.07999999821186066, + 0.06666667014360428, + 0.0533333346247673, + 0.03999999910593033, + 0.019999999552965164, + 0.019999999552965164, + 0.013333333656191826, + 0.013333333656191826, + 0.013333333656191826, + 0.013333333656191826, + 0.006666666828095913, + 0.006666666828095913 + ], + [ + 150, + 150, + 150, + 150, + 150, + 150, + 148, + 143, + 141, + 133, + 130, + 128, + 119, + 114, + 104, + 94, + 88, + 83, + 79, + 75, + 67, + 61, + 56, + 53, + 47, + 44, + 40, + 36, + 33, + 30, + 25, + 20, + 19, + 15, + 12, + 10, + 8, + 6, + 3, + 3, + 2, + 2, + 2, + 2, + 1, + 1 + ], + [ + 300, + 300, + 300, + 300, + 300, + 300, + 296, + 288, + 279, + 264, + 247, + 223, + 208, + 180, + 165, + 152, + 134, + 119, + 103, + 92, + 77, + 64, + 57, + 50, + 47, + 43, + 37, + 31, + 24, + 20, + 17, + 15, + 9, + 8, + 6, + 4, + 3, + 3, + 3, + 2, + 2, + 1, + 1, + 1, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 12, + 21, + 36, + 53, + 77, + 92, + 120, + 135, + 148, + 166, + 181, + 197, + 208, + 223, + 236, + 243, + 250, + 253, + 257, + 263, + 269, + 276, + 280, + 283, + 285, + 291, + 292, + 294, + 296, + 297, + 297, + 297, + 298, + 298, + 299, + 299, + 299, + 299, + 300 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 7, + 9, + 17, + 20, + 22, + 31, + 36, + 46, + 56, + 62, + 67, + 71, + 75, + 83, + 89, + 94, + 97, + 103, + 106, + 110, + 114, + 117, + 120, + 125, + 130, + 131, + 135, + 138, + 140, + 142, + 144, + 147, + 147, + 148, + 148, + 148, + 148, + 149, + 149 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.82, + 0.84, + 0.86, + 0.88, + 0.9, + 0.92 + ] + ], + [ + 1593069993.541333, + 4, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3340757191181183, + 0.3363228738307953, + 0.33563217520713806, + 0.3445783257484436, + 0.3544303774833679, + 0.36164382100105286, + 0.366568922996521, + 0.369905948638916, + 0.37931033968925476, + 0.3807692229747772, + 0.40611353516578674, + 0.41747573018074036, + 0.44324323534965515, + 0.4522292912006378, + 0.48905110359191895, + 0.4880000054836273, + 0.5185185074806213, + 0.5257731676101685, + 0.5454545617103577, + 0.5512820482254028, + 0.5735294222831726, + 0.5964912176132202, + 0.5961538553237915, + 0.5609756112098694, + 0.5675675868988037, + 0.6428571343421936, + 0.6363636255264282, + 0.6470588445663452, + 0.5, + 0.5454545617103577, + 0.5555555820465088, + 0.625, + 0.6666666865348816, + 0.3333333432674408, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0.9733333587646484, + 0.95333331823349, + 0.9333333373069763, + 0.8799999952316284, + 0.8333333134651184, + 0.7866666913032532, + 0.7333333492279053, + 0.6600000262260437, + 0.6200000047683716, + 0.5733333230018616, + 0.54666668176651, + 0.47333332896232605, + 0.4466666579246521, + 0.40666666626930237, + 0.3733333349227905, + 0.3400000035762787, + 0.3199999928474426, + 0.2866666615009308, + 0.25999999046325684, + 0.2266666740179062, + 0.20666666328907013, + 0.15333333611488342, + 0.14000000059604645, + 0.11999999731779099, + 0.09333333373069763, + 0.07333333045244217, + 0.03999999910593033, + 0.03999999910593033, + 0.03333333507180214, + 0.03333333507180214, + 0.02666666731238365, + 0.006666666828095913, + 0, + 0, + 0, + 0 + ], + [ + 150, + 150, + 150, + 150, + 150, + 150, + 150, + 146, + 143, + 140, + 132, + 125, + 118, + 110, + 99, + 93, + 86, + 82, + 71, + 67, + 61, + 56, + 51, + 48, + 43, + 39, + 34, + 31, + 23, + 21, + 18, + 14, + 11, + 6, + 6, + 5, + 5, + 4, + 1, + 0, + 0, + 0, + 0 + ], + [ + 300, + 300, + 300, + 300, + 300, + 299, + 296, + 289, + 272, + 255, + 233, + 216, + 201, + 180, + 161, + 136, + 120, + 103, + 86, + 70, + 64, + 52, + 46, + 40, + 35, + 29, + 23, + 21, + 18, + 16, + 10, + 8, + 6, + 6, + 5, + 4, + 3, + 2, + 2, + 2, + 2, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 4, + 11, + 28, + 45, + 67, + 84, + 99, + 120, + 139, + 164, + 180, + 197, + 214, + 230, + 236, + 248, + 254, + 260, + 265, + 271, + 277, + 279, + 282, + 284, + 290, + 292, + 294, + 294, + 295, + 296, + 297, + 298, + 298, + 298, + 298, + 299, + 299 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 7, + 10, + 18, + 25, + 32, + 40, + 51, + 57, + 64, + 68, + 79, + 83, + 89, + 94, + 99, + 102, + 107, + 111, + 116, + 119, + 127, + 129, + 132, + 136, + 139, + 144, + 144, + 145, + 145, + 146, + 149, + 150, + 150, + 150, + 150 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.82, + 0.84, + 0.86 + ] + ], + [ + 1593069993.542078, + 5, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.33557048439979553, + 0.3355855941772461, + 0.33944955468177795, + 0.3501199185848236, + 0.35249999165534973, + 0.35978835821151733, + 0.35919541120529175, + 0.35403725504875183, + 0.37288135290145874, + 0.3730769157409668, + 0.3822222352027893, + 0.39086294174194336, + 0.42941176891326904, + 0.4394904375076294, + 0.47183099389076233, + 0.5079365372657776, + 0.5398229956626892, + 0.5148515105247498, + 0.5348837375640869, + 0.5432098507881165, + 0.5882353186607361, + 0.5932203531265259, + 0.5714285969734192, + 0.5909090638160706, + 0.6341463327407837, + 0.6285714507102966, + 0.6333333253860474, + 0.6000000238418579, + 0.5714285969734192, + 0.5263158082962036, + 0.5, + 0.4166666567325592, + 0.2222222238779068, + 0.2857142984867096, + 0.25, + 0.3333333432674408, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1, + 0.9933333396911621, + 0.9866666793823242, + 0.9733333587646484, + 0.9399999976158142, + 0.9066666960716248, + 0.8333333134651184, + 0.7599999904632568, + 0.7333333492279053, + 0.6466666460037231, + 0.5733333230018616, + 0.5133333206176758, + 0.4866666793823242, + 0.46000000834465027, + 0.4466666579246521, + 0.4266666769981384, + 0.40666666626930237, + 0.3466666638851166, + 0.30666667222976685, + 0.2933333218097687, + 0.2666666805744171, + 0.23333333432674408, + 0.18666666746139526, + 0.1733333319425583, + 0.1733333319425583, + 0.14666666090488434, + 0.12666666507720947, + 0.10000000149011612, + 0.07999999821186066, + 0.06666667014360428, + 0.046666666865348816, + 0.03333333507180214, + 0.013333333656191826, + 0.013333333656191826, + 0.006666666828095913, + 0.006666666828095913, + 0, + 0, + 0 + ], + [ + 150, + 150, + 150, + 150, + 150, + 150, + 149, + 148, + 146, + 141, + 136, + 125, + 114, + 110, + 97, + 86, + 77, + 73, + 69, + 67, + 64, + 61, + 52, + 46, + 44, + 40, + 35, + 28, + 26, + 26, + 22, + 19, + 15, + 12, + 10, + 7, + 5, + 2, + 2, + 1, + 1, + 0, + 0, + 0 + ], + [ + 300, + 300, + 300, + 300, + 300, + 297, + 295, + 288, + 271, + 259, + 242, + 223, + 208, + 185, + 163, + 139, + 120, + 97, + 88, + 75, + 62, + 52, + 49, + 40, + 37, + 28, + 24, + 21, + 18, + 15, + 13, + 11, + 10, + 9, + 9, + 7, + 7, + 7, + 5, + 3, + 2, + 2, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 3, + 5, + 12, + 29, + 41, + 58, + 77, + 92, + 115, + 137, + 161, + 180, + 203, + 212, + 225, + 238, + 248, + 251, + 260, + 263, + 272, + 276, + 279, + 282, + 285, + 287, + 289, + 290, + 291, + 291, + 293, + 293, + 293, + 295, + 297, + 298, + 298, + 299, + 299 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 4, + 9, + 14, + 25, + 36, + 40, + 53, + 64, + 73, + 77, + 81, + 83, + 86, + 89, + 98, + 104, + 106, + 110, + 115, + 122, + 124, + 124, + 128, + 131, + 135, + 138, + 140, + 143, + 145, + 148, + 148, + 149, + 149, + 150, + 150, + 150 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.82, + 0.84, + 0.86, + 0.88 + ] + ], + [ + 1593069993.5431821, + 6, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3303571343421936, + 0.33257919549942017, + 0.33642691373825073, + 0.34285715222358704, + 0.35087719559669495, + 0.36239781975746155, + 0.37134504318237305, + 0.38485804200172424, + 0.4000000059604645, + 0.4089219272136688, + 0.43096235394477844, + 0.43518519401550293, + 0.4202127754688263, + 0.42603549361228943, + 0.43918919563293457, + 0.44525548815727234, + 0.45967742800712585, + 0.4821428656578064, + 0.5102040767669678, + 0.529411792755127, + 0.5128205418586731, + 0.5797101259231567, + 0.550000011920929, + 0.5094339847564697, + 0.4888888895511627, + 0.46341463923454285, + 0.375, + 0.3461538553237915, + 0.4000000059604645, + 0.4000000059604645, + 0.3333333432674408, + 0.27272728085517883, + 0.3333333432674408, + 0.3333333432674408, + 0.2857142984867096, + 0.3333333432674408, + 0.3333333432674408, + 0.6666666865348816, + 0.5, + 1 + ], + [ + 1, + 1, + 1, + 1, + 1, + 0.9866666793823242, + 0.9800000190734863, + 0.9666666388511658, + 0.9599999785423279, + 0.9333333373069763, + 0.8866666555404663, + 0.846666693687439, + 0.8133333325386047, + 0.7599999904632568, + 0.7333333492279053, + 0.6866666674613953, + 0.6266666650772095, + 0.5266666412353516, + 0.47999998927116394, + 0.4333333373069763, + 0.40666666626930237, + 0.3799999952316284, + 0.36000001430511475, + 0.3333333432674408, + 0.30000001192092896, + 0.2666666805744171, + 0.2666666805744171, + 0.2199999988079071, + 0.18000000715255737, + 0.14666666090488434, + 0.12666666507720947, + 0.07999999821186066, + 0.05999999865889549, + 0.0533333346247673, + 0.03999999910593033, + 0.02666666731238365, + 0.019999999552965164, + 0.019999999552965164, + 0.019999999552965164, + 0.013333333656191826, + 0.013333333656191826, + 0.013333333656191826, + 0.013333333656191826, + 0.006666666828095913, + 0.006666666828095913 + ], + [ + 150, + 150, + 150, + 150, + 150, + 148, + 147, + 145, + 144, + 140, + 133, + 127, + 122, + 114, + 110, + 103, + 94, + 79, + 72, + 65, + 61, + 57, + 54, + 50, + 45, + 40, + 40, + 33, + 27, + 22, + 19, + 12, + 9, + 8, + 6, + 4, + 3, + 3, + 3, + 2, + 2, + 2, + 2, + 1, + 1 + ], + [ + 300, + 300, + 300, + 300, + 300, + 300, + 295, + 286, + 276, + 259, + 234, + 215, + 195, + 171, + 159, + 136, + 122, + 109, + 97, + 83, + 76, + 67, + 58, + 48, + 40, + 38, + 29, + 27, + 26, + 23, + 22, + 20, + 17, + 12, + 9, + 8, + 8, + 6, + 6, + 5, + 4, + 4, + 1, + 1, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 5, + 14, + 24, + 41, + 66, + 85, + 105, + 129, + 141, + 164, + 178, + 191, + 203, + 217, + 224, + 233, + 242, + 252, + 260, + 262, + 271, + 273, + 274, + 277, + 278, + 280, + 283, + 288, + 291, + 292, + 292, + 294, + 294, + 295, + 296, + 296, + 299, + 299, + 300 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 3, + 5, + 6, + 10, + 17, + 23, + 28, + 36, + 40, + 47, + 56, + 71, + 78, + 85, + 89, + 93, + 96, + 100, + 105, + 110, + 110, + 117, + 123, + 128, + 131, + 138, + 141, + 142, + 144, + 146, + 147, + 147, + 147, + 148, + 148, + 148, + 148, + 149, + 149 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.82, + 0.84, + 0.86, + 0.88, + 0.9 + ] + ], + [ + 1593069993.543998, + 7, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3340757191181183, + 0.3348214328289032, + 0.33636364340782166, + 0.3380281627178192, + 0.3483709394931793, + 0.35449734330177307, + 0.3672316372394562, + 0.381538450717926, + 0.39464882016181946, + 0.3970588147640228, + 0.40416666865348816, + 0.4084506928920746, + 0.42328041791915894, + 0.4497041404247284, + 0.4868420958518982, + 0.5072463750839233, + 0.529411792755127, + 0.5267857313156128, + 0.5050504803657532, + 0.5056179761886597, + 0.5131579041481018, + 0.5072463750839233, + 0.515625, + 0.5636363625526428, + 0.5686274766921997, + 0.5744680762290955, + 0.5581395626068115, + 0.5277777910232544, + 0.5, + 0.43478259444236755, + 0.4444444477558136, + 0.4375, + 0.5833333134651184, + 0.5, + 0.25, + 0, + 0, + 0, + 0, + 0 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1, + 0.9866666793823242, + 0.9599999785423279, + 0.9266666769981384, + 0.8933333158493042, + 0.8666666746139526, + 0.8266666531562805, + 0.7866666913032532, + 0.7200000286102295, + 0.6466666460037231, + 0.5799999833106995, + 0.5333333611488342, + 0.5066666603088379, + 0.4933333396911621, + 0.46666666865348816, + 0.41999998688697815, + 0.3933333456516266, + 0.3333333432674408, + 0.30000001192092896, + 0.25999999046325684, + 0.23333333432674408, + 0.2199999988079071, + 0.20666666328907013, + 0.19333332777023315, + 0.18000000715255737, + 0.1599999964237213, + 0.12666666507720947, + 0.10000000149011612, + 0.06666667014360428, + 0.0533333346247673, + 0.046666666865348816, + 0.046666666865348816, + 0.02666666731238365, + 0.006666666828095913, + 0, + 0, + 0, + 0, + 0 + ], + [ + 150, + 150, + 150, + 150, + 150, + 150, + 148, + 144, + 139, + 134, + 130, + 124, + 118, + 108, + 97, + 87, + 80, + 76, + 74, + 70, + 63, + 59, + 50, + 45, + 39, + 35, + 33, + 31, + 29, + 27, + 24, + 19, + 15, + 10, + 8, + 7, + 7, + 4, + 1, + 0, + 0, + 0, + 0, + 0 + ], + [ + 300, + 300, + 300, + 300, + 299, + 298, + 292, + 282, + 260, + 244, + 224, + 201, + 181, + 164, + 143, + 126, + 109, + 93, + 78, + 68, + 56, + 53, + 49, + 44, + 37, + 34, + 31, + 24, + 22, + 20, + 19, + 17, + 15, + 13, + 10, + 9, + 5, + 4, + 3, + 2, + 1, + 1, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 1, + 2, + 8, + 18, + 40, + 56, + 76, + 99, + 119, + 136, + 157, + 174, + 191, + 207, + 222, + 232, + 244, + 247, + 251, + 256, + 263, + 266, + 269, + 276, + 278, + 280, + 281, + 283, + 285, + 287, + 290, + 291, + 295, + 296, + 297, + 298, + 299, + 299, + 299, + 299 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 6, + 11, + 16, + 20, + 26, + 32, + 42, + 53, + 63, + 70, + 74, + 76, + 80, + 87, + 91, + 100, + 105, + 111, + 115, + 117, + 119, + 121, + 123, + 126, + 131, + 135, + 140, + 142, + 143, + 143, + 146, + 149, + 150, + 150, + 150, + 150, + 150 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.82, + 0.84, + 0.86, + 0.88 + ] + ], + [ + 1593069993.5449128, + 8, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3340757191181183, + 0.33483144640922546, + 0.33638444542884827, + 0.3452380895614624, + 0.34405940771102905, + 0.3489583432674408, + 0.35164836049079895, + 0.34593021869659424, + 0.35825544595718384, + 0.38327527046203613, + 0.3897637724876404, + 0.4196428656578064, + 0.44607841968536377, + 0.45945945382118225, + 0.4819277226924896, + 0.4791666567325592, + 0.484375, + 0.5044247508049011, + 0.5102040767669678, + 0.5176470875740051, + 0.5375000238418579, + 0.5540540814399719, + 0.5671641826629639, + 0.5833333134651184, + 0.6170212626457214, + 0.625, + 0.7096773982048035, + 0.7307692170143127, + 0.7727272510528564, + 0.8333333134651184, + 0.8571428656578064, + 0.8181818127632141, + 0.8999999761581421, + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1, + 1, + 0.9933333396911621, + 0.9800000190734863, + 0.9666666388511658, + 0.9266666769981384, + 0.8933333158493042, + 0.8533333539962769, + 0.7933333516120911, + 0.7666666507720947, + 0.7333333492279053, + 0.6600000262260437, + 0.6266666650772095, + 0.6066666841506958, + 0.5666666626930237, + 0.5333333611488342, + 0.46000000834465027, + 0.41333332657814026, + 0.3799999952316284, + 0.3333333432674408, + 0.2933333218097687, + 0.2866666615009308, + 0.273333340883255, + 0.25333333015441895, + 0.23333333432674408, + 0.19333332777023315, + 0.1666666716337204, + 0.14666666090488434, + 0.12666666507720947, + 0.1133333370089531, + 0.10000000149011612, + 0.07999999821186066, + 0.05999999865889549, + 0.05999999865889549, + 0.046666666865348816, + 0.03999999910593033, + 0.03999999910593033, + 0.03333333507180214, + 0.013333333656191826, + 0.013333333656191826 + ], + [ + 150, + 150, + 150, + 150, + 150, + 149, + 147, + 145, + 139, + 134, + 128, + 119, + 115, + 110, + 99, + 94, + 91, + 85, + 80, + 69, + 62, + 57, + 50, + 44, + 43, + 41, + 38, + 35, + 29, + 25, + 22, + 19, + 17, + 15, + 12, + 9, + 9, + 7, + 6, + 6, + 5, + 2, + 2 + ], + [ + 300, + 300, + 300, + 300, + 299, + 296, + 290, + 275, + 265, + 250, + 236, + 225, + 206, + 177, + 155, + 130, + 113, + 100, + 86, + 75, + 66, + 56, + 48, + 41, + 37, + 33, + 29, + 25, + 18, + 15, + 9, + 7, + 5, + 3, + 2, + 2, + 1, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 1, + 4, + 10, + 25, + 35, + 50, + 64, + 75, + 94, + 123, + 145, + 170, + 187, + 200, + 214, + 225, + 234, + 244, + 252, + 259, + 263, + 267, + 271, + 275, + 282, + 285, + 291, + 293, + 295, + 297, + 298, + 298, + 299, + 300, + 300, + 300, + 300, + 300, + 300 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 3, + 5, + 11, + 16, + 22, + 31, + 35, + 40, + 51, + 56, + 59, + 65, + 70, + 81, + 88, + 93, + 100, + 106, + 107, + 109, + 112, + 115, + 121, + 125, + 128, + 131, + 133, + 135, + 138, + 141, + 141, + 143, + 144, + 144, + 145, + 148, + 148 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.82, + 0.84, + 0.86 + ] + ], + [ + 1593069993.54562, + 9, + [ + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3333333432674408, + 0.3340807259082794, + 0.33870968222618103, + 0.3388625681400299, + 0.3432098627090454, + 0.35078534483909607, + 0.37321937084198, + 0.3792048990726471, + 0.3872053921222687, + 0.3955223858356476, + 0.42016807198524475, + 0.43317973613739014, + 0.43617022037506104, + 0.4588235318660736, + 0.4736842215061188, + 0.4848484992980957, + 0.5, + 0.49038460850715637, + 0.5106382966041565, + 0.5411764979362488, + 0.5857142806053162, + 0.5645161271095276, + 0.5714285969734192, + 0.6041666865348816, + 0.6666666865348816, + 0.6571428775787354, + 0.7333333492279053, + 0.8260869383811951, + 0.8333333134651184, + 0.875, + 0.8181818127632141, + 0.8181818127632141, + 0.8888888955116272, + 0.8888888955116272, + 0.800000011920929, + 0.800000011920929, + 0 + ], + [ + 1, + 1, + 1, + 1, + 1, + 0.9933333396911621, + 0.9800000190734863, + 0.95333331823349, + 0.9266666769981384, + 0.8933333158493042, + 0.8733333349227905, + 0.8266666531562805, + 0.7666666507720947, + 0.7066666483879089, + 0.6666666865348816, + 0.6266666650772095, + 0.54666668176651, + 0.5199999809265137, + 0.47999998927116394, + 0.4266666769981384, + 0.3933333456516266, + 0.3400000035762787, + 0.3199999928474426, + 0.30666667222976685, + 0.273333340883255, + 0.23333333432674408, + 0.2133333384990692, + 0.19333332777023315, + 0.1733333319425583, + 0.15333333611488342, + 0.14666666090488434, + 0.12666666507720947, + 0.10000000149011612, + 0.09333333373069763, + 0.05999999865889549, + 0.05999999865889549, + 0.0533333346247673, + 0.0533333346247673, + 0.02666666731238365, + 0.02666666731238365, + 0 + ], + [ + 150, + 150, + 150, + 150, + 150, + 149, + 147, + 143, + 139, + 134, + 131, + 124, + 115, + 106, + 100, + 94, + 82, + 78, + 72, + 64, + 59, + 51, + 48, + 46, + 41, + 35, + 32, + 29, + 26, + 23, + 22, + 19, + 15, + 14, + 9, + 9, + 8, + 8, + 4, + 4, + 0 + ], + [ + 300, + 300, + 300, + 300, + 300, + 297, + 287, + 279, + 266, + 248, + 220, + 203, + 182, + 162, + 138, + 123, + 106, + 92, + 80, + 68, + 59, + 53, + 46, + 39, + 29, + 27, + 24, + 19, + 13, + 12, + 8, + 4, + 3, + 2, + 2, + 2, + 1, + 1, + 1, + 1, + 1 + ], + [ + 0, + 0, + 0, + 0, + 0, + 3, + 13, + 21, + 34, + 52, + 80, + 97, + 118, + 138, + 162, + 177, + 194, + 208, + 220, + 232, + 241, + 247, + 254, + 261, + 271, + 273, + 276, + 281, + 287, + 288, + 292, + 296, + 297, + 298, + 298, + 298, + 299, + 299, + 299, + 299, + 299 + ], + [ + 0, + 0, + 0, + 0, + 0, + 1, + 3, + 7, + 11, + 16, + 19, + 26, + 35, + 44, + 50, + 56, + 68, + 72, + 78, + 86, + 91, + 99, + 102, + 104, + 109, + 115, + 118, + 121, + 124, + 127, + 128, + 131, + 135, + 136, + 141, + 141, + 142, + 142, + 146, + 146, + 150 + ], + [ + 0.02, + 0.04, + 0.06, + 0.08, + 0.1, + 0.12, + 0.14, + 0.16, + 0.18, + 0.2, + 0.22, + 0.24, + 0.26, + 0.28, + 0.3, + 0.32, + 0.34, + 0.36, + 0.38, + 0.4, + 0.42, + 0.44, + 0.46, + 0.48, + 0.5, + 0.52, + 0.54, + 0.56, + 0.58, + 0.6, + 0.62, + 0.64, + 0.66, + 0.68, + 0.7, + 0.72, + 0.74, + 0.76, + 0.78, + 0.8, + 0.82 + ] + ] + ]; +}; diff --git a/frontend/packages/mock/data/pr-curve/steps.ts b/frontend/packages/mock/data/pr-curve/steps.ts new file mode 100644 index 0000000000000000000000000000000000000000..ef4c4d328f042546b5dd1b8b5ce45bbb471ae8a9 --- /dev/null +++ b/frontend/packages/mock/data/pr-curve/steps.ts @@ -0,0 +1,30 @@ +import {Request} from 'express'; + +export default (request: Request) => { + if (request.query.run === 'train') { + return [ + [1593069993.786464, 0], + [1593069993.787353, 1], + [1593069993.7881448, 2], + [1593069993.788836, 3], + [1593069993.7894, 4], + [1593069993.790076, 5], + [1593069993.790763, 6], + [1593069993.791473, 7], + [1593069993.792149, 8], + [1593069993.792763, 9] + ]; + } + return [ + [1593069993.5386739, 0], + [1593069993.539396, 1], + [1593069993.540066, 2], + [1593069993.540662, 3], + [1593069993.541333, 4], + [1593069993.542078, 5], + [1593069993.5431821, 6], + [1593069993.543998, 7], + [1593069993.5449128, 8], + [1593069993.54562, 9] + ]; +}; diff --git a/frontend/packages/mock/data/pr-curve/tags.ts b/frontend/packages/mock/data/pr-curve/tags.ts new file mode 100644 index 0000000000000000000000000000000000000000..3e67b010b4e63b9c4568cd114306d15f292985e3 --- /dev/null +++ b/frontend/packages/mock/data/pr-curve/tags.ts @@ -0,0 +1,10 @@ +export default { + test: ['layer2/biases/summaries/mean', 'test/1234', 'another'], + train: [ + 'layer2/biases/summaries/mean', + 'layer2/biases/summaries/accuracy', + 'layer2/biases/summaries/cost', + 'test/431', + 'others' + ] +}; diff --git a/frontend/packages/mock/package.json b/frontend/packages/mock/package.json index 5858c4fab3187d49a28d94e3ed851c11969ff76d..c449a06ccd0a860282032cc84c5b320ad9086602 100644 --- a/frontend/packages/mock/package.json +++ b/frontend/packages/mock/package.json @@ -38,7 +38,7 @@ "devDependencies": { "@types/express": "4.17.6", "@types/faker": "4.1.12", - "@types/node": "14.0.13", + "@types/node": "14.0.14", "typescript": "3.9.5" }, "peerDependencies": { diff --git a/frontend/packages/netron/package.json b/frontend/packages/netron/package.json index e670b32bd2c538c821e198c1b5bd277399dad77d..d5f8bedc326a63a180ea370c78d6a9386c6de8ba 100644 --- a/frontend/packages/netron/package.json +++ b/frontend/packages/netron/package.json @@ -35,12 +35,12 @@ "dagre": "0.8.5", "long": "4.0.0", "marked": "1.1.0", - "netron": "lutzroeder/netron#9f9be2e1d0cdeb538fcddbc359f1b4138223a953", + "netron": "PeterPanZH/netron", "pako": "1.0.11", "protobufjs": "lutzroeder/protobuf.js#b9a9d027589356226f4704f9d77f2639f52172f3" }, "devDependencies": { - "autoprefixer": "9.8.2", + "autoprefixer": "9.8.4", "copy-webpack-plugin": "6.0.2", "css-loader": "3.6.0", "html-webpack-plugin": "4.3.0", diff --git a/frontend/packages/netron/src/view.js b/frontend/packages/netron/src/view.js index 60f4f02a206b674e1b9426b6b6604e6d65855a3b..22fa16e5e0990f708f248a2315bcefeabc866116 100644 --- a/frontend/packages/netron/src/view.js +++ b/frontend/packages/netron/src/view.js @@ -1026,19 +1026,21 @@ view.ModelFactoryService = class { this.register('./tflite', ['.tflite', '.lite', '.tfl', '.bin', '.pb', '.tmfile', '.h5', '.model', '.json']); this.register('./tf', ['.pb', '.meta', '.pbtxt', '.prototxt', '.json', '.index', '.ckpt']); this.register('./mediapipe', ['.pbtxt']); - this.register('./sklearn', ['.pkl', '.joblib', '.model', '.meta', '.pb']); + this.register('./uff', ['.uff', '.pb', '.trt', '.pbtxt', '.uff.txt']); + this.register('./sklearn', ['.pkl', '.pickle', '.joblib', '.model', '.meta', '.pb', '.pt', '.h5']); this.register('./cntk', ['.model', '.cntk', '.cmf', '.dnn']); - this.register('./paddle', ['.paddle', '__model__']); + this.register('./paddle', ['.paddle', '.pdmodel', '__model__']); this.register('./armnn', ['.armnn']); this.register('./bigdl', ['.model', '.bigdl']); this.register('./darknet', ['.cfg', '.model']); this.register('./mnn', ['.mnn']); this.register('./ncnn', ['.param', '.bin', '.cfg.ncnn', '.weights.ncnn']); + this.register('./tnn', ['.tnnproto', '.tnnmodel']); this.register('./tengine', ['.tmfile']); this.register('./barracuda', ['.nn']); this.register('./openvino', ['.xml', '.bin']); this.register('./flux', ['.bson']); - this.register('./chainer', ['.npz', '.h5', '.hd5', '.hdf5']); + this.register('./npz', ['.npz', '.h5', '.hd5', '.hdf5']); this.register('./dl4j', ['.zip']); this.register('./mlnet', ['.zip']); } @@ -1300,27 +1302,21 @@ view.ModelFactoryService = class { return Promise.reject(new ModelError('File has no content.', true)); } const list = [ - {name: 'ELF executable', value: '\x7FELF'}, - {name: 'Git LFS header', value: 'version https://git-lfs.github.com/spec/v1\n'}, - {name: 'Git LFS header', value: 'oid sha256:'}, - {name: 'HTML markup', value: ''}, - {name: 'HTML markup', value: ''}, - {name: 'HTML markup', value: ''}, - {name: 'HTML markup', value: '\n\n\n\n\n'}, - {name: 'HTML markup', value: '\n\n\n\n\n\n'}, - {name: 'Unity metadata', value: 'fileFormatVersion:'}, - {name: 'Vulkan SwiftShader ICD manifest', value: '{"file_format_version": "1.0.0", "ICD":'}, - {name: 'StringIntLabelMapProto data', value: 'item {\r\n id:'}, - {name: 'StringIntLabelMapProto data', value: 'item {\r\n name:'}, - {name: 'StringIntLabelMapProto data', value: 'item {\n id:'}, - {name: 'StringIntLabelMapProto data', value: 'item {\n name:'}, - {name: 'Python source code', value: 'import sys, types, os;'} + {name: 'ELF executable', value: /^\x7FELF/}, + {name: 'Git LFS header', value: /^version https:\/\/git-lfs.github.com\/spec\/v1\n/}, + {name: 'Git LFS header', value: /^oid sha256:/}, + {name: 'HTML markup', value: /^\s*/}, + {name: 'HTML markup', value: /^\s*/}, + {name: 'HTML markup', value: /^\s*/}, + {name: 'Unity metadata', value: /^fileFormatVersion:/}, + {name: 'Vulkan SwiftShader ICD manifest', value: /^{\s*"file_format_version":\s*"1.0.0"\s*,\s*"ICD":/}, + {name: 'StringIntLabelMapProto data', value: /^item\s*{\r?\n\s*id:/}, + {name: 'StringIntLabelMapProto data', value: /^item\s*{\r?\n\s*name:/}, + {name: 'Python source code', value: /^\s*import sys, types, os;/} ]; + const text = new TextDecoder().decode(buffer.subarray(0, Math.min(1024, buffer.length))); for (const item of list) { - if ( - buffer.length >= item.value.length && - buffer.subarray(0, item.value.length).every((v, i) => v === item.value.charCodeAt(i)) - ) { + if (text.match(item.value)) { return Promise.reject(new ModelError('Invalid file content. File contains ' + item.name + '.', true)); } } diff --git a/frontend/packages/server/package.json b/frontend/packages/server/package.json index f3c65c252eab3a77ef48f641649fe05aff6fd452..2616a018cf1b411fdc7d12e7db51137182c09986 100644 --- a/frontend/packages/server/package.json +++ b/frontend/packages/server/package.json @@ -46,9 +46,9 @@ }, "devDependencies": { "@types/express": "4.17.6", - "@types/node": "14.0.13", + "@types/node": "14.0.14", "@types/shelljs": "0.8.8", - "@types/webpack": "4.41.17", + "@types/webpack": "4.41.18", "@types/webpack-dev-middleware": "3.7.1", "@visualdl/mock": "2.0.0-beta.43", "cross-env": "7.0.2", diff --git a/frontend/packages/serverless/package.json b/frontend/packages/serverless/package.json index e98ff81a6aba8e9359f5c52bea82aabaae671f7a..7c725f22f73c66d0279222942eb2c4f22ac8d7d0 100644 --- a/frontend/packages/serverless/package.json +++ b/frontend/packages/serverless/package.json @@ -31,7 +31,7 @@ "test": "echo \"Error: no test specified\" && exit 0" }, "devDependencies": { - "@types/node": "14.0.13", + "@types/node": "14.0.14", "@types/rimraf": "3.0.0", "@visualdl/core": "2.0.0-beta.43", "cross-env": "7.0.2", diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 3456995b2eab92aaea1ce77465adb5ca4b881f73..064b94bf3a5cef807086b9dcf0d983428e2ae110 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -2393,10 +2393,10 @@ dependencies: defer-to-connect "^1.0.1" -"@tippyjs/react@4.0.4": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@tippyjs/react/-/react-4.0.4.tgz#7ba87ff8ad27eb4d5fae6daa4217f7d4de72088d" - integrity sha512-XifxYQU9Wx52gWRkF5WNDAurKh+s0O6B+j3nLLSCnhz8HigQlHuvsr+5ISiqFpeoA5/NAgFxLi6FPLNq8DfD8g== +"@tippyjs/react@4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@tippyjs/react/-/react-4.0.5.tgz#804399370d929b29bb6387b7dad9452635ee4221" + integrity sha512-Q7hv4Kkz5XlL71KP/SY8mdrfOkNkOmyQbMl2gh5fNPSzsqlPvAFbMyOP8iI0MS/sHASYGfth4+D9SzyTkrheTw== dependencies: tippy.js "^6.2.0" @@ -2430,10 +2430,10 @@ resolved "https://registry.yarnpkg.com/@types/d3-format/-/d3-format-1.3.1.tgz#35bf88264bd6bcda39251165bb827f67879c4384" integrity sha512-KAWvReOKMDreaAwOjdfQMm0HjcUMlQG47GwqdVKgmm20vTd2pucj0a70c3gUSHrnsmo6H2AMrkBsZU2UhJLq8A== -"@types/echarts@4.6.2": - version "4.6.2" - resolved "https://registry.yarnpkg.com/@types/echarts/-/echarts-4.6.2.tgz#f66b8736e2a554f432d58ec0361bf9c9d908ccfc" - integrity sha512-ovishXXoibnoPTgevsmZuuoVaHGzFlvBEsGzcdldlRwxiUsL+ChOfRat5JRWv5W2zUHxkposYQw+m0aDJM+S3Q== +"@types/echarts@4.6.3": + version "4.6.3" + resolved "https://registry.yarnpkg.com/@types/echarts/-/echarts-4.6.3.tgz#227b33b106203ceb2ca4fa51760f406618caa89a" + integrity sha512-XsDsLtPDxSGPqcHvVEbH+z5r9lPiduNOf4aL3NjGprQ/4SliDiTS7DErimHpVdiEOoVFzwjn2usvgLOb1JqOJA== dependencies: "@types/zrender" "*" @@ -2510,10 +2510,10 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== -"@types/lodash@4.14.156": - version "4.14.156" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.156.tgz#cbe30909c89a1feeb7c60803e785344ea0ec82d1" - integrity sha512-l2AgHXcKUwx2DsvP19wtRPqZ4NkONjmorOdq4sMcxIjqdIuuV/ULo2ftuv4NUpevwfW7Ju/UKLqo0ZXuEt/8lQ== +"@types/lodash@4.14.157": + version "4.14.157" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.157.tgz#fdac1c52448861dfde1a2e1515dbc46e54926dc8" + integrity sha512-Ft5BNFmv2pHDgxV5JDsndOWTRJ+56zte0ZpYLowp03tW+K+t8u8YMOzAnpuqPgzX6WO1XpDIUm7u04M8vdDiVQ== "@types/long@^4.0.0": version "4.0.1" @@ -2552,10 +2552,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.5.tgz#3d03acd3b3414cf67faf999aed11682ed121f22b" integrity sha512-90hiq6/VqtQgX8Sp0EzeIsv3r+ellbGj4URKj5j30tLlZvRUpnAe9YbYnjl3pJM93GyXU0tghHhvXHq+5rnCKA== -"@types/node@14.0.13": - version "14.0.13" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.13.tgz#ee1128e881b874c371374c1f72201893616417c9" - integrity sha512-rouEWBImiRaSJsVA+ITTFM6ZxibuAlTuNOCyxVbwreu6k6+ujs7DfnU9o+PShFhET78pMBl3eH+AGSI5eOTkPA== +"@types/node@14.0.14": + version "14.0.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.14.tgz#24a0b5959f16ac141aeb0c5b3cd7a15b7c64cbce" + integrity sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ== "@types/node@^10.1.0": version "10.17.24" @@ -2619,10 +2619,10 @@ "@types/prop-types" "*" csstype "^2.2.0" -"@types/react@16.9.38": - version "16.9.38" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.38.tgz#868405dace93a4095d3e054f4c4a1de7a1ac0680" - integrity sha512-pHAeZbjjNRa/hxyNuLrvbxhhnKyKNiLC6I5fRF2Zr/t/S6zS41MiyzH4+c+1I9vVfvuRt1VS2Lodjr4ZWnxrdA== +"@types/react@16.9.41": + version "16.9.41" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.41.tgz#925137ee4d2ff406a0ecf29e8e9237390844002e" + integrity sha512-6cFei7F7L4wwuM+IND/Q2cV1koQUvJ8iSV+Gwn0c3kvABZ691g7sp3hfEQHOUBJtccl1gPi+EyNjMIl9nGA0ug== dependencies: "@types/prop-types" "*" csstype "^2.2.0" @@ -2716,7 +2716,19 @@ "@types/webpack-sources" "*" source-map "^0.6.0" -"@types/webpack@4.41.17", "@types/webpack@^4.41.8": +"@types/webpack@4.41.18": + version "4.41.18" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.18.tgz#2945202617866ecdffa582087f1b6de04a7eed55" + integrity sha512-mQm2R8vV2BZE/qIDVYqmBVLfX73a8muwjs74SpjEyJWJxeXBbsI9L65Pcia9XfYLYWzD1c1V8m+L0p30y2N7MA== + dependencies: + "@types/anymatch" "*" + "@types/node" "*" + "@types/tapable" "*" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + source-map "^0.6.0" + +"@types/webpack@^4.41.8": version "4.41.17" resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.17.tgz#0a69005e644d657c85b7d6ec1c826a71bebd1c93" integrity sha512-6FfeCidTSHozwKI67gIVQQ5Mp0g4X96c2IXxX75hYEQJwST/i6NyZexP//zzMOBb+wG9jJ7oO8fk9yObP2HWAw== @@ -3402,14 +3414,14 @@ autobind-decorator@^1.3.4: resolved "https://registry.yarnpkg.com/autobind-decorator/-/autobind-decorator-1.4.3.tgz#4c96ffa77b10622ede24f110f5dbbf56691417d1" integrity sha1-TJb/p3sQYi7eJPEQ9du/VmkUF9E= -autoprefixer@9.8.2: - version "9.8.2" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.2.tgz#7347396ee576b18687041bfbacd76d78e27baa56" - integrity sha512-9UwMMU8Rg7Fj0c55mbOpXrr/2WrRqoOwOlLNTyyYt+nhiyQdIBWipp5XWzt+Lge8r3DK5y+EHMc1OBf8VpZA6Q== +autoprefixer@9.8.4: + version "9.8.4" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.4.tgz#736f1012673a70fa3464671d78d41abd54512863" + integrity sha512-84aYfXlpUe45lvmS+HoAWKCkirI/sw4JK0/bTeeqgHYco3dcsOn0NqdejISjptsYwNji/21dnkDri9PsYKk89A== dependencies: browserslist "^4.12.0" - caniuse-lite "^1.0.30001084" - kleur "^4.0.1" + caniuse-lite "^1.0.30001087" + colorette "^1.2.0" normalize-range "^0.1.2" num2fraction "^1.2.2" postcss "^7.0.32" @@ -4012,10 +4024,10 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001043: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001064.tgz#a0f49689119ba08943b09968e118faf3f645add0" integrity sha512-hdBcQMFvJIrOhkpAZiRXz04Cmetwc9NekeuNl0qZfHOugxOhJKxsjF1RmISMPFjIF4PPx1reliIzbfN42EiQ5A== -caniuse-lite@^1.0.30001084: - version "1.0.30001087" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001087.tgz#4a0bdc5998a114fcf8b7954e7ba6c2c29831c54a" - integrity sha512-KAQRGtt+eGCQBSp2iZTQibdCf9oe6cNTi5lmpsW38NnxP4WMYzfU6HCRmh4kJyh6LrTM9/uyElK4xcO93kafpg== +caniuse-lite@^1.0.30001087: + version "1.0.30001088" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001088.tgz#23a6b9e192106107458528858f2c0e0dba0d9073" + integrity sha512-6eYUrlShRYveyqKG58HcyOfPgh3zb2xqs7NvT2VVtP3hEUeeWvc3lqhpeMTxYWBBeeaT9A4bKsrtjATm66BTHg== caseless@~0.12.0: version "0.12.0" @@ -4330,6 +4342,11 @@ color@^3.0.0: color-convert "^1.9.1" color-string "^1.5.2" +colorette@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.0.tgz#45306add826d196e8c87236ac05d797f25982e63" + integrity sha512-soRSroY+OF/8OdA3PTQXwaDJeMc7TfknKKrxeSCencL2a4+Tx5zhxmmv7hdpCjhKBjehzp8+bwe/T68K0hpIjw== + columnify@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" @@ -8098,11 +8115,6 @@ kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -kleur@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.0.1.tgz#3d4948534b666e2578f93b6fafb62108e64f05ef" - integrity sha512-Qs6SqCLm63rd0kNVh+wO4XsWLU6kgfwwaPYsLiClWf0Tewkzsa6MvB21bespb8cz+ANS+2t3So1ge3gintzhlw== - latest-version@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" @@ -9051,9 +9063,9 @@ netmask@^1.0.6: resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" integrity sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU= -netron@lutzroeder/netron#9f9be2e1d0cdeb538fcddbc359f1b4138223a953: - version "4.1.9" - resolved "https://codeload.github.com/lutzroeder/netron/tar.gz/9f9be2e1d0cdeb538fcddbc359f1b4138223a953" +netron@PeterPanZH/netron: + version "4.3.5" + resolved "https://codeload.github.com/PeterPanZH/netron/tar.gz/2c04a5d19b18ec09ddb9087f99177e7d27f156bd" dependencies: d3 "5.16.0" dagre "0.8.5"